diff --git a/deps/oblib/src/lib/ob_define.h b/deps/oblib/src/lib/ob_define.h index b833746736..9110eca3b9 100644 --- a/deps/oblib/src/lib/ob_define.h +++ b/deps/oblib/src/lib/ob_define.h @@ -1611,6 +1611,10 @@ const int64_t OB_MAX_LONGTEXT_LENGTH = 512 * 1024 * 1024L - 1; // 2^29-1,for dat const int64_t OB_MAX_MEDIUMTEXT_LENGTH_OLD = 256 * 1024L; // for compatibility const int64_t OB_MAX_LONGTEXT_LENGTH_OLD = 512 * 1024L; // for compatibility +const int64_t OB_MAX_CAST_CHAR_VARCHAR_LENGTH = 512; +const int64_t OB_MAX_CAST_CHAR_TEXT_LENGTH = 16383; +const int64_t OB_MAX_CAST_CHAR_MEDIUMTEXT_LENGTH = 4194303; + const char *const SYS_DATE = "$SYS_DATE"; const char *const OB_DEFAULT_COMPRESS_FUNC_NAME = "none"; const char *const OB_DEFAULT_FULLTEXT_PARSER_NAME = "TAOBAO_CHN"; diff --git a/deps/oblib/src/lib/ob_name_def.h b/deps/oblib/src/lib/ob_name_def.h index 59d41d1b0e..94f2513dd9 100644 --- a/deps/oblib/src/lib/ob_name_def.h +++ b/deps/oblib/src/lib/ob_name_def.h @@ -740,6 +740,7 @@ #define N_EFFECTIVE_TENANT "effective_tenant" #define N_EFFECTIVE_TENANT_ID "effective_tenant_id" #define N_CURRENT_USER "current_user" +#define N_CURRENT_USER_PRIV "current_user_priv" #define N_USER "user" #define N_HOST_IP "host_ip" #define N_RPC_PORT "rpc_port" @@ -1020,4 +1021,6 @@ #define N_ST_DISTANCE_SPHERE "st_distance_sphere" #define N_ST_CONTAINS "st_contains" #define N_ST_WITHIN "st_within" +#define N_SQL_MODE_CONVERT "sql_mode_convert" + #endif //OCEANBASE_LIB_OB_NAME_DEF_H_ diff --git a/src/objit/include/objit/common/ob_item_type.h b/src/objit/include/objit/common/ob_item_type.h index 72eb4fe9d5..02eda58d69 100755 --- a/src/objit/include/objit/common/ob_item_type.h +++ b/src/objit/include/objit/common/ob_item_type.h @@ -417,6 +417,7 @@ typedef enum ObItemType T_FUN_SYS_PART_KEY_V3 = 696, //following T_FUN_SYS_PART_HASH_V2 has been removed, it's useless now. T_FUN_SYS_PART_HASH_V2 = 697, + T_FUN_SYS_SQL_MODE_CONVERT = 698, ///< @note add new mysql/oracle function type before this line T_COMMON_FUN_SYS_END = 700, @@ -490,6 +491,7 @@ typedef enum ObItemType T_FUN_SYS_ENCRYPT = 764, T_FUN_SYS_ICU_VERSION = 765, + T_FUN_SYS_CURRENT_USER_PRIV = 766, ///< @note add new mysql only function type before this line T_MYSQL_ONLY_SYS_MAX_OP = 800, diff --git a/src/observer/ob_srv_xlator_rootserver.cpp b/src/observer/ob_srv_xlator_rootserver.cpp index ae08d581b6..12fd3eb1ff 100644 --- a/src/observer/ob_srv_xlator_rootserver.cpp +++ b/src/observer/ob_srv_xlator_rootserver.cpp @@ -141,7 +141,8 @@ void oceanbase::observer::init_srv_xlator_for_rootserver(ObSrvRpcXlator *xlator) RPC_PROCESSOR(rootserver::ObRpcExecuteDDLTaskP, *gctx_.root_service_); RPC_PROCESSOR(rootserver::ObRpcMaintainObjDependencyInfoP, *gctx_.root_service_); RPC_PROCESSOR(rootserver::ObRpcDoContextDDLP, *gctx_.root_service_); - + RPC_PROCESSOR(rootserver::ObRpcRecompileAllViewsBatchP, *gctx_.root_service_); + RPC_PROCESSOR(rootserver::ObRpcTryAddDepInfosForSynonymBatchP, *gctx_.root_service_); //ob_admin RPC_PROCESSOR(rootserver::ObForceCreateSysTableP, *gctx_.root_service_); RPC_PROCESSOR(rootserver::ObForceSetLocalityP, *gctx_.root_service_); diff --git a/src/observer/virtual_table/ob_information_columns_table.cpp b/src/observer/virtual_table/ob_information_columns_table.cpp index 4b5eaf1f86..b8661a3fb9 100644 --- a/src/observer/virtual_table/ob_information_columns_table.cpp +++ b/src/observer/virtual_table/ob_information_columns_table.cpp @@ -212,7 +212,7 @@ int ObInfoSchemaColumnsTable::iterate_table_schema_array(const bool is_filter_ta // 不显示索引表 if (table_schema->is_aux_table() || table_schema->is_in_recyclebin() - || is_ora_sys_view_table(table_schema->get_table_id())) { // Oracle system view + || is_ora_sys_view_table(table_schema->get_table_id())) { continue; } else if (is_filter_table_schema && OB_FAIL(schema_guard_->get_database_schema(tenant_id_, table_schema->get_database_id(), database_schema))) { @@ -221,8 +221,11 @@ int ObInfoSchemaColumnsTable::iterate_table_schema_array(const bool is_filter_ta ret = OB_ERR_UNEXPECTED; SERVER_LOG(WARN, "database schema is null", K(ret)); } + // for system view, its column info depend on hard code, so its valid by default, but do not have column meta + // status default value is valid, old version also work whether what status it read because its column count = 0 + bool view_is_invalid = (0 == table_schema->get_object_status() || 0 == table_schema->get_column_count()); if (OB_FAIL(ret)) { - } else if (is_normal_view) { + } else if (is_normal_view && view_is_invalid) { view_resolve_alloc_.reset_remain_one_page(); ObString view_definition; sql::ObSelectStmt *select_stmt = NULL; diff --git a/src/observer/virtual_table/ob_table_columns.cpp b/src/observer/virtual_table/ob_table_columns.cpp index d1b7c661d8..62f027cf6d 100644 --- a/src/observer/virtual_table/ob_table_columns.cpp +++ b/src/observer/virtual_table/ob_table_columns.cpp @@ -951,6 +951,19 @@ int ObTableColumns::resolve_view_definition( } else { /*do-nothing*/ } } } + int tmp_ret = OB_SUCCESS; + bool reset_column_infos = (OB_SUCCESS == ret) ? false : (lib::is_oracle_mode() ? true : false); + if (OB_UNLIKELY(OB_SUCCESS != ret && OB_ERR_VIEW_INVALID != ret)) { + LOG_WARN("failed to resolve view", K(ret)); + } else if (OB_SUCCESS != (tmp_ret = ObSQLUtils::async_recompile_view(table_schema, select_stmt, reset_column_infos))) { + LOG_WARN("failed to add recompile view task", K(tmp_ret)); + if (OB_ERR_TOO_LONG_COLUMN_LENGTH == tmp_ret) { + tmp_ret = OB_SUCCESS; //ignore + } + } + if (OB_SUCCESS == ret) { + ret = tmp_ret; + } } } } diff --git a/src/observer/virtual_table/ob_virtual_table_iterator_factory.cpp b/src/observer/virtual_table/ob_virtual_table_iterator_factory.cpp index 465890c58c..aaa1c1a2a5 100644 --- a/src/observer/virtual_table/ob_virtual_table_iterator_factory.cpp +++ b/src/observer/virtual_table/ob_virtual_table_iterator_factory.cpp @@ -446,7 +446,7 @@ int ObVTIterCreator::create_vt_iter(ObVTableScanParam ¶ms, bool processed = false; BEGIN_CREATE_VT_ITER_SWITCH_LAMBDA - case OB_SCHEMA_PRIVILEGES_TID: { + case OB_SCHEMA_PRIVILEGES_OLD_TID: { ObInfoSchemaSchemaPrivilegesTable *schema_privileges = NULL; if (OB_FAIL(NEW_VIRTUAL_TABLE(ObInfoSchemaSchemaPrivilegesTable, schema_privileges))) { SERVER_LOG(ERROR, "fail to new", K(ret), K(pure_tid)); @@ -458,7 +458,7 @@ int ObVTIterCreator::create_vt_iter(ObVTableScanParam ¶ms, } break; } - case OB_USER_PRIVILEGES_TID: { + case OB_USER_PRIVILEGES_OLD_TID: { ObInfoSchemaUserPrivilegesTable *user_privileges = NULL; if (OB_FAIL(NEW_VIRTUAL_TABLE(ObInfoSchemaUserPrivilegesTable, user_privileges))) { SERVER_LOG(ERROR, "fail to new", K(ret), K(pure_tid)); @@ -479,7 +479,7 @@ int ObVTIterCreator::create_vt_iter(ObVTableScanParam ¶ms, } break; } - case OB_TABLE_PRIVILEGES_TID: { + case OB_TABLE_PRIVILEGES_OLD_TID: { ObInfoSchemaTablePrivilegesTable *table_privileges = NULL; if (OB_FAIL(NEW_VIRTUAL_TABLE(ObInfoSchemaTablePrivilegesTable, table_privileges))) { SERVER_LOG(ERROR, "fail to new", K(ret), K(pure_tid)); @@ -1132,7 +1132,7 @@ int ObVTIterCreator::create_vt_iter(ObVTableScanParam ¶ms, } break; } - case OB_REFERENTIAL_CONSTRAINTS_TID: { + case OB_ALL_VIRTUAL_REFERENTIAL_CONSTRAINTS_OLD_TID: { ObInfoSchemaReferentialConstraintsTable *referential_constraint = NULL; if (OB_SUCC(NEW_VIRTUAL_TABLE(ObInfoSchemaReferentialConstraintsTable, referential_constraint))) { @@ -1141,7 +1141,7 @@ int ObVTIterCreator::create_vt_iter(ObVTableScanParam ¶ms, } break; } - case OB_TABLE_CONSTRAINTS_TID: { + case OB_ALL_VIRTUAL_TABLE_CONSTRAINTS_OLD_TID: { ObInfoSchemaTableConstraintsTable *table_constraint = NULL; if (OB_SUCC(NEW_VIRTUAL_TABLE(ObInfoSchemaTableConstraintsTable, table_constraint))) { @@ -1150,7 +1150,7 @@ int ObVTIterCreator::create_vt_iter(ObVTableScanParam ¶ms, } break; } - case OB_CHECK_CONSTRAINTS_TID: { + case OB_ALL_VIRTUAL_CHECK_CONSTRAINTS_OLD_TID: { ObInfoSchemaCheckConstraintsTable* check_constraint = NULL; if (OB_SUCC(NEW_VIRTUAL_TABLE(ObInfoSchemaCheckConstraintsTable, check_constraint))) { check_constraint->set_tenant_id(real_tenant_id); @@ -1227,7 +1227,7 @@ int ObVTIterCreator::create_vt_iter(ObVTableScanParam ¶ms, } break; } - case OB_TRIGGERS_TID: { + case OB_ALL_VIRTUAL_TRIGGERS_OLD_TID: { ObInfoSchemaTriggersTable *tg_table = NULL; if (OB_SUCC(NEW_VIRTUAL_TABLE(ObInfoSchemaTriggersTable, tg_table))) { tg_table->set_tenant_id(real_tenant_id); @@ -1235,7 +1235,7 @@ int ObVTIterCreator::create_vt_iter(ObVTableScanParam ¶ms, } break; } - case OB_PARAMETERS_TID: { + case OB_ALL_VIRTUAL_PARAMETERS_OLD_TID: { ObInformationParametersTable *information_parameters_table = NULL; if (OB_SUCC(NEW_VIRTUAL_TABLE(ObInformationParametersTable, information_parameters_table))) { information_parameters_table->set_tenant_id(real_tenant_id); @@ -1243,7 +1243,7 @@ int ObVTIterCreator::create_vt_iter(ObVTableScanParam ¶ms, } break; } - case OB_PARTITIONS_TID: { + case OB_PARTITIONS_OLD_TID: { ObInfoSchemaPartitionsTable *partitions_table = NULL; if (OB_SUCC(NEW_VIRTUAL_TABLE(ObInfoSchemaPartitionsTable, partitions_table))) { partitions_table->set_tenant_id(real_tenant_id); diff --git a/src/rootserver/ob_ddl_operator.cpp b/src/rootserver/ob_ddl_operator.cpp index daa0b1d1fe..ad3b24ec01 100644 --- a/src/rootserver/ob_ddl_operator.cpp +++ b/src/rootserver/ob_ddl_operator.cpp @@ -3813,6 +3813,7 @@ int ObDDLOperator::update_table_attribute(ObTableSchema &new_table_schema, const uint64_t tenant_id = new_table_schema.get_tenant_id(); int64_t new_schema_version = OB_INVALID_VERSION; ObSchemaService *schema_service_impl = schema_service_.get_schema_service(); + const bool update_object_status_ignore_version = false; if (OB_ISNULL(schema_service_impl)) { ret = OB_ERR_SYS; RS_LOG(WARN, "schema_service_impl must not null", K(ret)); @@ -3824,6 +3825,7 @@ int ObDDLOperator::update_table_attribute(ObTableSchema &new_table_schema, trans, new_table_schema, operation_type, + update_object_status_ignore_version, ddl_stmt_str))) { RS_LOG(WARN, "failed to update table attribute!" ,K(ret)); } @@ -3869,6 +3871,7 @@ int ObDDLOperator::batch_update_system_table_columns( const uint64_t table_id = new_table_schema.get_table_id(); int64_t new_schema_version = OB_INVALID_VERSION; ObSchemaService *schema_service_impl = schema_service_.get_schema_service(); + const bool update_object_status_ignore_version = false; if (OB_ISNULL(schema_service_impl)) { ret = OB_ERR_SYS; LOG_WARN("schema_service_impl must not null", KR(ret)); @@ -3902,7 +3905,7 @@ int ObDDLOperator::batch_update_system_table_columns( } // end for if (FAILEDx(schema_service_impl->get_table_sql_service().update_table_attribute( - trans, new_table_schema, OB_DDL_ALTER_TABLE, ddl_stmt_str))) { + trans, new_table_schema, OB_DDL_ALTER_TABLE, update_object_status_ignore_version, ddl_stmt_str))) { LOG_WARN("failed to update table attribute", KR(ret), K(tenant_id), K(table_id)); } } @@ -4069,7 +4072,10 @@ int ObDDLOperator::drop_table( int ret = OB_SUCCESS; bool tmp = false; const uint64_t tenant_id = table_schema.get_tenant_id(); - if (OB_FAIL(drop_table_for_not_dropped_schema( + if (OB_FAIL(ObDependencyInfo::modify_dep_obj_status(trans, tenant_id, table_schema.get_table_id(), + *this, schema_service_))) { + LOG_WARN("failed to modify obj status", K(ret)); + } else if (OB_FAIL(drop_table_for_not_dropped_schema( table_schema, trans, ddl_stmt_str, is_truncate_table, drop_table_set, is_drop_db))) { LOG_WARN("drop table for not dropped shema failed", K(ret)); @@ -4300,6 +4306,9 @@ int ObDDLOperator::drop_table_to_recyclebin(const ObTableSchema &table_schema, LOG_WARN("fail to gen new schema_version", K(ret), K(tenant_id)); } else if (OB_FAIL(cleanup_autoinc_cache(table_schema))) { LOG_WARN("fail cleanup auto inc global cache", K(ret)); + } else if (OB_FAIL(ObDependencyInfo::modify_dep_obj_status(trans, tenant_id, table_schema.get_table_id(), + *this, schema_service_))) { + LOG_WARN("failed to modify dep obj status", K(ret)); } else if (table_schema.is_view_table() && OB_FAIL(ObDependencyInfo::delete_schema_object_dependency( trans, @@ -9506,6 +9515,7 @@ int ObDDLOperator::revise_not_null_constraint_info( ObSchemaService *schema_service = schema_service_.get_schema_service(); const ObTableSchema *ori_table_schema = NULL; ObSEArray not_null_cols; + const bool update_object_status_ignore_version = false; if (OB_ISNULL(schema_service)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("schema_service is NULL", K(ret)); @@ -9613,7 +9623,7 @@ int ObDDLOperator::revise_not_null_constraint_info( } else { new_table_schema.set_schema_version(new_schema_version); if (OB_FAIL(schema_service->get_table_sql_service().update_table_attribute( - trans, new_table_schema, OB_DDL_ADD_CONSTRAINT))) { + trans, new_table_schema, OB_DDL_ADD_CONSTRAINT, update_object_status_ignore_version))) { LOG_WARN("update table attribute faield", K(ret)); } } @@ -10750,5 +10760,137 @@ int ObDDLOperator::insert_dependency_infos(common::ObMySQLTransaction &trans, return ret; } +int ObDDLOperator::update_table_status(const ObTableSchema &orig_table_schema, + const int64_t schema_version, + const ObObjectStatus new_status, + const bool update_object_status_ignore_version, + ObMySQLTransaction &trans) +{ + int ret = OB_SUCCESS; + ObSchemaService *schema_service = schema_service_.get_schema_service(); + uint64_t data_version = 0; + ObTableSchema new_schema; + const ObSchemaOperationType op = OB_DDL_ALTER_TABLE; + if (OB_ISNULL(schema_service)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("schema_service is NULL", K(ret)); + } else if (schema_version <= 0) { + ret = OB_INVALID_ARGUMENT; + LOG_WARN("schema_version is invalid", K(ret), K(schema_version)); + } else if (!update_object_status_ignore_version && OB_FAIL(GET_MIN_DATA_VERSION(orig_table_schema.get_tenant_id(), data_version))) { + LOG_WARN("failed to get data version", K(ret)); + } else if (!update_object_status_ignore_version && data_version < DATA_VERSION_4_1_0_0) { + ret = OB_NOT_SUPPORTED; + LOG_WARN("version and feature mismatch", K(ret)); + } else if (OB_FAIL(new_schema.assign(orig_table_schema))) { + LOG_WARN("failed to assign table schema", K(ret)); + } else if (FALSE_IT(new_schema.set_object_status(new_status))) { + } else if (FALSE_IT(new_schema.set_schema_version(schema_version))) { + } else if (new_schema.get_column_count() > 0 + && FALSE_IT(new_schema.set_view_column_filled_flag(ObViewColumnFilledFlag::FILLED))) { + /* + *Except for drop view, there is no way to reduce the column count, + *and there is no need to consider the table mode of this view before + */ + } else if (OB_FAIL(schema_service->get_table_sql_service().update_table_attribute(trans, new_schema, op, update_object_status_ignore_version) )) { + LOG_WARN("update table status failed", K(ret)); + } + return ret; +} + +int ObDDLOperator::update_view_columns(const ObTableSchema &view_schema, + common::ObMySQLTransaction &trans) +{ + int ret = OB_SUCCESS; + ObSchemaService *schema_service = schema_service_.get_schema_service(); + uint64_t data_version = 0; + if (OB_ISNULL(schema_service)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("schema_service is NULL", K(ret)); + } else if (OB_FAIL(GET_MIN_DATA_VERSION(view_schema.get_tenant_id(), data_version))) { + LOG_WARN("failed to get data version", K(ret)); + } else if (data_version < DATA_VERSION_4_1_0_0) { + ret = OB_NOT_SUPPORTED; + LOG_WARN("version and feature mismatch", K(ret)); + } else if (OB_FAIL(schema_service->get_table_sql_service().update_view_columns(trans, view_schema))) { + LOG_WARN("failed to add columns", K(ret)); + } + return ret; +} + +// only used in upgrading +int ObDDLOperator::reset_view_status(common::ObMySQLTransaction &trans, + const uint64_t tenant_id, + const ObTableSchema *table) +{ + int ret = OB_SUCCESS; + ObObjectStatus new_status = ObObjectStatus::INVALID; + ObSchemaService *schema_service = schema_service_.get_schema_service(); + int64_t schema_version = OB_INVALID_VERSION; + const bool update_object_status_ignore_version = true; + if (OB_ISNULL(schema_service)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("schema_service is NULL", K(ret)); + } else { + if (OB_ISNULL(table) || !table->is_view_table()) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("get wrong schema", K(ret), KP(table)); + } else if (OB_FAIL(schema_service->gen_new_schema_version(tenant_id, schema_version, schema_version))) { + LOG_WARN("failed to gen new schema version", K(ret)); + } else if (OB_FAIL(update_table_status(*table, + schema_version, + new_status, + update_object_status_ignore_version, + trans))) { + LOG_WARN("failed to update table status", K(ret)); + } + } + return ret; +} + + +// only used in upgrading +int ObDDLOperator::try_add_dep_info_for_synonym(const ObSimpleSynonymSchema *synonym_info, + common::ObMySQLTransaction &trans) +{ + int ret = OB_SUCCESS; + //add def obj info if exists + bool ref_exists = false; + ObObjectType ref_type = ObObjectType::INVALID; + uint64_t ref_obj_id = OB_INVALID_ID; + uint64_t ref_schema_version = share::OB_INVALID_SCHEMA_VERSION; + if (OB_ISNULL(synonym_info)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("get unecpected synonym info", K(ret)); + } else if (OB_FAIL(ObSQLUtils::find_synonym_ref_obj(synonym_info->get_object_database_id(), + synonym_info->get_object_name_str(), + synonym_info->get_tenant_id(), + ref_exists, + ref_obj_id, + ref_type, + ref_schema_version))) { + LOG_WARN("failed to find synonym ref obj", K(ret)); + } else { + if (ref_exists) { + ObDependencyInfo dep; + dep.set_dep_obj_id(synonym_info->get_synonym_id()); + dep.set_dep_obj_type(ObObjectType::SYNONYM); + dep.set_ref_obj_id(ref_obj_id); + dep.set_ref_obj_type(ref_type); + dep.set_dep_timestamp(-1); + dep.set_ref_timestamp(ref_schema_version); + dep.set_tenant_id(synonym_info->get_tenant_id()); + if (OB_FAIL(dep.insert_schema_object_dependency(trans))) { + if (OB_ERR_PRIMARY_KEY_DUPLICATE == ret) { + ret = OB_SUCCESS; + LOG_TRACE("synonym have dep info before", K(*synonym_info)); + } + } + } + } + return ret; +} + + }//end namespace rootserver }//end namespace oceanbase diff --git a/src/rootserver/ob_ddl_operator.h b/src/rootserver/ob_ddl_operator.h index a2d74cb994..c18e0708de 100644 --- a/src/rootserver/ob_ddl_operator.h +++ b/src/rootserver/ob_ddl_operator.h @@ -931,6 +931,18 @@ public: int insert_tenant_merge_info(const share::schema::ObSchemaOperationType op, const share::schema::ObTenantSchema &tenant_schema, common::ObMySQLTransaction &trans); + int update_table_status(const share::schema::ObTableSchema &orig_table_schema, + const int64_t schema_version, + const ObObjectStatus new_status, + const bool update_object_status_ignore_version, + common::ObMySQLTransaction &trans); + int update_view_columns(const ObTableSchema &view_schema, + common::ObMySQLTransaction &trans); + int reset_view_status(common::ObMySQLTransaction &trans, + const uint64_t tenant_id, + const share::schema::ObTableSchema *table); + int try_add_dep_info_for_synonym(const ObSimpleSynonymSchema *synonym_info, + common::ObMySQLTransaction &trans); private: virtual int set_need_flush_ora( share::schema::ObSchemaGetterGuard &schema_guard, diff --git a/src/rootserver/ob_ddl_service.cpp b/src/rootserver/ob_ddl_service.cpp index 0061715bbf..40fb03d068 100644 --- a/src/rootserver/ob_ddl_service.cpp +++ b/src/rootserver/ob_ddl_service.cpp @@ -6186,6 +6186,7 @@ int ObDDLService::update_generated_column_schema( ObTableSchema::const_column_iterator col_iter = new_table_schema.column_begin(); ObTableSchema::const_column_iterator col_end = new_table_schema.column_end(); ObColumnSchemaV2 *column = nullptr; + bool for_view = false; if (OB_ISNULL(tz_info_wrap.get_time_zone_info())) { ret = OB_ERR_UNEXPECTED; LOG_WARN("invalid tz info", K(ret)); @@ -6205,7 +6206,8 @@ int ObDDLService::update_generated_column_schema( *tz_info_wrap.get_time_zone_info()))) { LOG_WARN("modify generated column value failed", K(ret)); } else if (OB_FAIL(new_table_schema.alter_column(new_generated_column_schema, - ObTableSchema::CHECK_MODE_ONLINE))) { + ObTableSchema::CHECK_MODE_ONLINE, + for_view))) { // alter_column must not change column_array_ because we are still looping the column_array_ LOG_WARN("failed to change column", K(ret)); } else if (OB_NOT_NULL(ddl_operator) && OB_NOT_NULL(trans)) { @@ -7013,7 +7015,7 @@ int ObDDLService::check_new_column_for_index( int idx_cnt = idx_schemas.count(); ObTableSchema *index_table_schema = NULL; ObColumnSchemaV2 copy_index_column_schema; - + bool for_view = false; for (int64_t i = 0; OB_SUCC(ret) && i < idx_cnt; ++i) { index_table_schema = &idx_schemas.at(i); if (OB_ISNULL(index_table_schema)) { @@ -7038,7 +7040,8 @@ int ObDDLService::check_new_column_for_index( copy_index_column_schema.set_index_position(origin_idx_column_schema->get_index_position()); copy_index_column_schema.set_tbl_part_key_pos(origin_idx_column_schema->get_tbl_part_key_pos()); if (OB_FAIL(index_table_schema->alter_column(copy_index_column_schema, - ObTableSchema::CHECK_MODE_ONLINE))) { + ObTableSchema::CHECK_MODE_ONLINE, + for_view))) { RS_LOG(WARN, "failed to alter index column schema", K(copy_index_column_schema), K(ret)); } else if (!index_table_schema->is_valid()) { ret = OB_SCHEMA_ERROR; @@ -7655,6 +7658,7 @@ int ObDDLService::gen_alter_column_new_table_schema_offline( ObColumnSchemaV2 new_column_schema; bool is_change_column_order = false; ObSEArray new_pk_column; + bool for_view = false; if (OB_FAIL(new_column_schema.assign(*orig_column_schema))) { LOG_WARN("fail to assign column schema", KR(ret)); } else if (alter_column_schema->is_primary_key_) { @@ -7679,7 +7683,8 @@ int ObDDLService::gen_alter_column_new_table_schema_offline( allocator))) { RS_LOG(WARN, "fail to resolve timestamp column", K(ret)); } else if (OB_FAIL(new_table_schema.alter_column(new_column_schema, - ObTableSchema::CHECK_MODE_OFFLINE))) { + ObTableSchema::CHECK_MODE_OFFLINE, + for_view))) { RS_LOG(WARN, "failed to change column", K(ret)); } else if (!new_pk_column.empty() && OB_FAIL(add_primary_key(new_pk_column, new_table_schema))) { LOG_WARN("failed to add pk to table", K(ret), K(new_pk_column), K(new_table_schema)); @@ -7844,6 +7849,7 @@ int ObDDLService::alter_table_column(const ObTableSchema &origin_table_schema, const common::ObString *nls_formats = alter_table_arg.nls_formats_; common::ObIAllocator &allocator = alter_table_arg.allocator_; bool is_oracle_mode = false; + bool for_view = false; LOG_INFO("check before alter table column", K(origin_table_schema), K(alter_table_schema), K(new_table_schema)); ObSchemaChecker schema_checker; @@ -8036,7 +8042,8 @@ int ObDDLService::alter_table_column(const ObTableSchema &origin_table_schema, allocator))) { RS_LOG(WARN, "fail to resolve timestamp column", K(ret)); } else if (OB_FAIL(new_table_schema.alter_column(new_column_schema, - ObTableSchema::CHECK_MODE_ONLINE))) { + ObTableSchema::CHECK_MODE_ONLINE, + for_view))) { RS_LOG(WARN, "failed to change column", K(ret)); } else if (OB_FAIL(check_new_column_for_index( idx_schema_array, @@ -8155,7 +8162,8 @@ int ObDDLService::alter_table_column(const ObTableSchema &origin_table_schema, allocator))) { RS_LOG(WARN, "fail to resolve timestamp column", K(ret)); } else if (OB_FAIL(new_table_schema.alter_column(new_column_schema, - ObTableSchema::CHECK_MODE_ONLINE))) { + ObTableSchema::CHECK_MODE_ONLINE, + for_view))) { RS_LOG(WARN, "failed to change column", K(ret)); } else if (OB_FAIL(check_new_column_for_index( idx_schema_array, @@ -8256,7 +8264,8 @@ int ObDDLService::alter_table_column(const ObTableSchema &origin_table_schema, } if (OB_SUCC(ret)) { if (OB_FAIL(new_table_schema.alter_column(new_column_schema, - ObTableSchema::CHECK_MODE_ONLINE))) { + ObTableSchema::CHECK_MODE_ONLINE, + for_view))) { RS_LOG(WARN, "failed to change column", K(ret)); } else if (OB_FAIL(new_table_schema.check_primary_key_cover_partition_column())) { RS_LOG(WARN, "failed to check primary key cover partition column", K(ret)); @@ -9852,6 +9861,10 @@ int ObDDLService::alter_table_in_trans(obrpc::ObAlterTableArg &alter_table_arg, LOG_WARN("failed to get tenant schema version", KR(ret), K(tenant_id)); } else if (OB_FAIL(trans.start(sql_proxy_, tenant_id, refreshed_schema_version))) { LOG_WARN("start transaction failed", KR(ret), K(tenant_id), K(refreshed_schema_version)); + // All alter table behaviors will cause the status to change, which is not as fine as oracle + } else if (OB_FAIL(ObDependencyInfo::modify_dep_obj_status(trans, tenant_id, orig_table_schema->get_table_id(), + ddl_operator, *schema_service_))) { + LOG_WARN("failed to modify obj status", K(ret)); } else { ObArray global_idx_schema_array; //table columns @@ -10660,6 +10673,9 @@ int ObDDLService::do_offline_ddl_in_trans(obrpc::ObAlterTableArg &alter_table_ar } // TODO yiren, refactor it, create user hidden table after alter index/column/part/cst... if (OB_FAIL(ret)) { + } else if (OB_FAIL(ObDependencyInfo::modify_dep_obj_status(trans, tenant_id, orig_table_schema->get_table_id(), + ddl_operator, *schema_service_))) { + LOG_WARN("failed to modify obj status", K(ret)); } else if (OB_FAIL(check_ddl_with_primary_key_operation(alter_table_arg, with_primary_key_operation))) { LOG_WARN("check ddl with primary key operation failed", K(ret)); @@ -12233,6 +12249,12 @@ int ObDDLService::rename_table(const obrpc::ObRenameTableArg &rename_table_arg) LOG_WARN("failed to append sql", K(ret)); } } + if (OB_SUCC(ret) && OB_NOT_NULL(from_table_schema)) { + if (OB_FAIL(ObDependencyInfo::modify_dep_obj_status(trans, tenant_id, from_table_schema->get_table_id(), + ddl_operator, *schema_service_))) { + LOG_WARN("failed to modify obj status", K(ret)); + } + } if (OB_SUCC(ret) && !is_oracle_mode) { ObString rename_sql = sql.string(); if (database_schema->is_in_recyclebin()) { @@ -12991,6 +13013,8 @@ int ObDDLService::maintain_obj_dependency_info(const obrpc::ObDependencyObjDDLAr && OB_FAIL(process_schema_object_dependency(tenant_id, is_standby, arg.delete_dep_objs_, schema_guard, trans, ddl_operator, ObReferenceObjTable::DELETE_OP))) { LOG_WARN("failed to process delete object dependency", K(ret)); + } else if (arg.schema_.is_valid() && OB_FAIL(recompile_view(arg.schema_, arg.reset_view_column_infos_, trans))) { + LOG_WARN("failed to recompile view", K(ret)); } if (trans.is_started()) { int temp_ret = OB_SUCCESS; @@ -15394,7 +15418,8 @@ int ObDDLService::modify_hidden_table_fk_state(obrpc::ObAlterTableArg &alter_tab new_col_schema.drop_not_null_cst(); new_hidden_table_schema.set_in_offline_ddl_white_list(true); ObSchemaOperationType operation_type = OB_DDL_ALTER_TABLE; - if (OB_FAIL(new_hidden_table_schema.alter_column(new_col_schema, ObTableSchema::CHECK_MODE_ONLINE))) { + bool for_view = false; + if (OB_FAIL(new_hidden_table_schema.alter_column(new_col_schema, ObTableSchema::CHECK_MODE_ONLINE, for_view))) { LOG_WARN("failed to alter column", K(ret)); } else if (OB_FAIL(ddl_operator.update_single_column(trans, *hidden_table_schema, @@ -18741,6 +18766,7 @@ int ObDDLService::alter_system_table_column_( } // end for ObColumnSchemaV2 new_column; + bool for_view = false; for (int64_t i = 0; OB_SUCC(ret) && i < alter_column_ids.count(); i++) { const uint64_t column_id = alter_column_ids.at(i); if (OB_ISNULL(hard_code_column = hard_code_schema.get_column_schema(column_id))) { @@ -18748,7 +18774,7 @@ int ObDDLService::alter_system_table_column_( LOG_WARN("fail to get column schema", KR(ret), K(tenant_id), K(table_id), K(column_id)); } else if (OB_FAIL(new_column.assign(*hard_code_column))) { LOG_WARN("fail to assign column", KR(ret), KPC(hard_code_column)); - } else if (OB_FAIL(new_table_schema.alter_column(new_column, share::schema::ObTableSchema::CHECK_MODE_ONLINE))) { + } else if (OB_FAIL(new_table_schema.alter_column(new_column, share::schema::ObTableSchema::CHECK_MODE_ONLINE, for_view))) { LOG_WARN("fail to alter column", KR(ret), K(new_column)); } } // end for @@ -26322,6 +26348,9 @@ int ObDDLService::alter_routine(const ObRoutineInfo &routine_info, LOG_WARN("failed to get tenant schema version", KR(ret), K(tenant_id)); } else if (OB_FAIL(trans.start(sql_proxy_, tenant_id, refreshed_schema_version))) { LOG_WARN("start transaction failed!", KR(ret), K(tenant_id), K(refreshed_schema_version)); + } else if (OB_FAIL(ObDependencyInfo::modify_dep_obj_status(trans, tenant_id, routine_info.get_routine_id(), + ddl_operator, *schema_service_))) { + LOG_WARN("failed to modify obj status", K(ret)); } else if (OB_FAIL(ddl_operator.alter_routine( routine_info, trans, error_info, ddl_stmt_str))) { LOG_WARN("alter routine failed!", K(ret)); @@ -26358,6 +26387,9 @@ int ObDDLService::drop_routine(const ObRoutineInfo &routine_info, LOG_WARN("failed to get tenant schema version", KR(ret), K(tenant_id)); } else if (OB_FAIL(trans.start(sql_proxy_, tenant_id, refreshed_schema_version))) { LOG_WARN("start transaction failed", KR(ret), K(tenant_id), K(refreshed_schema_version)); + } else if (OB_FAIL(ObDependencyInfo::modify_dep_obj_status(trans, tenant_id, routine_info.get_routine_id(), + ddl_operator, *schema_service_))) { + LOG_WARN("failed to modify obj status", K(ret)); } else if (OB_FAIL(ddl_operator.drop_routine(routine_info, trans, error_info, ddl_stmt_str))) { LOG_WARN("drop procedure failed", K(ret), K(routine_info)); } @@ -26456,6 +26488,9 @@ int ObDDLService::drop_udt(const ObUDTTypeInfo &udt_info, LOG_WARN("failed to get tenant schema version", KR(ret), K(tenant_id)); } else if (OB_FAIL(trans.start(sql_proxy_, tenant_id, refreshed_schema_version))) { LOG_WARN("start transaction failed", KR(ret), K(tenant_id), K(refreshed_schema_version)); + } else if (OB_FAIL(ObDependencyInfo::modify_dep_obj_status(trans, tenant_id, udt_info.get_type_id(), + ddl_operator, *schema_service_))) { + LOG_WARN("failed to modify obj status", K(ret)); } else if (OB_FAIL(ddl_operator.drop_udt(udt_info, trans, schema_guard, ddl_stmt_str))) { LOG_WARN("drop procedure failed", K(ret), K(udt_info)); } @@ -26614,6 +26649,7 @@ int ObDDLService::check_synonym_exist(share::schema::ObSynonymInfo &synonym_info } int ObDDLService::create_synonym(share::schema::ObSynonymInfo &synonym_info, + const ObDependencyInfo &dep_info, const common::ObString *ddl_stmt_str, bool is_update, share::schema::ObSchemaGetterGuard &schema_guard) @@ -26638,6 +26674,17 @@ int ObDDLService::create_synonym(share::schema::ObSynonymInfo &synonym_info, } if (OB_FAIL(ret)) { LOG_WARN("failed to create synonym", K(synonym_info), K(is_update), K(ret)); + } else if (OB_INVALID_ID != dep_info.get_ref_obj_id()) { + ObDependencyInfo dep; + if (OB_FAIL(dep.assign(dep_info))) { + LOG_WARN("failed to assign dependency info", K(ret)); + } else { + dep.set_tenant_id(tenant_id); + dep.set_dep_obj_id(synonym_info.get_synonym_id()); + dep.set_dep_obj_owner_id(synonym_info.get_synonym_id()); + dep.set_schema_version(synonym_info.get_schema_version()); + OZ (dep.insert_schema_object_dependency(trans, is_update)); + } } } if (trans.is_started()) { @@ -26708,9 +26755,18 @@ int ObDDLService::drop_synonym(const obrpc::ObDropSynonymArg &arg) LOG_WARN("start transaction failed", KR(ret), K(tenant_id), K(refreshed_schema_version)); } else { ObDDLOperator ddl_operator(*schema_service_, *sql_proxy_); - if (OB_FAIL(ddl_operator.drop_synonym(tenant_id, database_id, synonym_id, trans, &arg.ddl_stmt_str_))) { + if (OB_FAIL(ObDependencyInfo::modify_dep_obj_status(trans, tenant_id, synonym_id, + ddl_operator, *schema_service_))) { + LOG_WARN("failed to modify obj status", K(ret)); + } else if (OB_FAIL(ddl_operator.drop_synonym(tenant_id, database_id, synonym_id, trans, &arg.ddl_stmt_str_))) { LOG_WARN("ddl_operator drop_synonym failed", K(tenant_id), KT(synonym_id), K(ret)); - } else {/*do nothing*/} + } else if (OB_FAIL(ObDependencyInfo::delete_schema_object_dependency(trans, + tenant_id, + synonym_id, + OB_INVALID_SCHEMA_VERSION, + ObObjectType::SYNONYM))) { + LOG_WARN("failed to delete_schema_object_dependency", K(ret), K(tenant_id), K(synonym_id)); + } } } @@ -27421,6 +27477,55 @@ int ObDDLService::clean_global_context(const ObContextSchema &context_schema) return ret; } +int ObDDLService::recompile_view(const ObTableSchema &view_schema, const bool reset_view_column_infos, ObDDLSQLTransaction &trans) +{ + int ret = OB_SUCCESS; + const uint64_t tenant_id = view_schema.get_tenant_id(); + int64_t refreshed_schema_version = 0; + ObSchemaService *schema_service = nullptr; + uint64_t data_version = 0; + CK (OB_NOT_NULL(schema_service_) && OB_NOT_NULL(schema_service = schema_service_->get_schema_service())); + LOG_WARN("recompile view", K(view_schema.get_table_id()), K(view_schema.get_table_name()), K(ret), K(reset_view_column_infos)); + ObSchemaGetterGuard schema_guard; + const ObSimpleTableSchemaV2 *view_schema_in_guard = nullptr; + if (OB_FAIL(ret)) { + } else if (OB_FAIL(GET_MIN_DATA_VERSION(tenant_id, data_version))) { + LOG_WARN("failed to get data version", K(ret)); + } else if (data_version < DATA_VERSION_4_1_0_0) { + // do nothing + } else if (!view_schema.is_view_table()) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("wrong schema get", K(ret), K(view_schema)); + } else if (OB_FAIL(get_tenant_schema_guard_with_version_in_inner_table(tenant_id, schema_guard))) { + LOG_WARN("fail to get schema guard", K(ret), K(tenant_id)); + } else if (OB_FAIL(schema_guard.get_simple_table_schema(tenant_id, view_schema.get_table_id(), view_schema_in_guard))) { + LOG_WARN("failed to get simpile table schema", K(ret)); + } else if (nullptr == view_schema_in_guard + || view_schema_in_guard->get_schema_version() > view_schema.get_schema_version()) { + // view is deleted or modified before, ignore this recompile task + LOG_TRACE("task is ignore", K(view_schema_in_guard->get_schema_version()), K(view_schema.get_schema_version())); + } else { + ObDDLOperator ddl_operator(*schema_service_, *sql_proxy_); + ObTableSchema new_view_schema; + ObObjectStatus new_status = reset_view_column_infos ? ObObjectStatus::INVALID : ObObjectStatus::VALID; + const bool update_object_status_ignore_version = false; + if (OB_FAIL(schema_service_->gen_new_schema_version(tenant_id, refreshed_schema_version))) { + LOG_WARN("fail to gen new schema_version", K(ret), K(tenant_id)); + } else if (OB_FAIL(new_view_schema.assign(view_schema))) { + LOG_WARN("failed to copy schema", K(ret)); + } else if (FALSE_IT(new_view_schema.set_schema_version(refreshed_schema_version))) { + } else if (view_schema.get_column_count() > 0 + && OB_FAIL(ddl_operator.update_view_columns(new_view_schema, trans))) { + LOG_WARN("failed to add view column info", K(ret)); + } else if (OB_FAIL(ddl_operator.update_table_status(new_view_schema, refreshed_schema_version, + new_status, update_object_status_ignore_version, + trans))) { + LOG_WARN("failed to update table status", K(ret)); + } + } + return ret; +} + int ObDDLService::handle_label_se_policy_ddl(const ObLabelSePolicyDDLArg &arg) { int ret = OB_SUCCESS; @@ -28907,9 +29012,10 @@ int ObDDLService::drop_user_defined_function(const obrpc::ObDropUserDefinedFunct //check udf exist & drop udf if (OB_SUCC(ret)) { bool is_exist = false; + uint64_t udf_id = OB_INVALID_ID; int64_t refreshed_schema_version = 0; if (OB_FAIL(schema_service_->check_udf_exist(tenant_id, name, - is_exist))) { + is_exist, udf_id))) { LOG_WARN("check_udf_exist failed", K(tenant_id), K(name), K(ret)); } else if (!is_exist) { if (if_exist) { @@ -28925,7 +29031,10 @@ int ObDDLService::drop_user_defined_function(const obrpc::ObDropUserDefinedFunct LOG_WARN("start transaction failed", KR(ret), K(tenant_id)); } else { ObDDLOperator ddl_operator(*schema_service_, *sql_proxy_); - if (OB_FAIL(ddl_operator.drop_user_defined_function(tenant_id, name, trans, &drop_func_arg.ddl_stmt_str_))) { + if (OB_FAIL(ObDependencyInfo::modify_dep_obj_status(trans, tenant_id, udf_id, + ddl_operator, *schema_service_))) { + LOG_WARN("failed to modify obj status", K(ret)); + } else if (OB_FAIL(ddl_operator.drop_user_defined_function(tenant_id, name, trans, &drop_func_arg.ddl_stmt_str_))) { LOG_WARN("ddl_operator drop_user_defined_function failed", K(tenant_id), K(ret)); } else {/*do nothing*/} } @@ -28950,10 +29059,10 @@ int ObDDLService::drop_user_defined_function(const obrpc::ObDropUserDefinedFunct return ret; } -int ObDDLService::check_udf_exist(uint64 tenant_id, const common::ObString &name, bool &is_exist) +int ObDDLService::check_udf_exist(uint64 tenant_id, const common::ObString &name, bool &is_exist, uint64_t &udf_id) { int ret = OB_SUCCESS; - if (OB_FAIL(schema_service_->check_udf_exist(tenant_id, name, is_exist))) { + if (OB_FAIL(schema_service_->check_udf_exist(tenant_id, name, is_exist, udf_id))) { LOG_WARN("failed to check if udf_name exists", K(name), K(ret)); } return ret; @@ -30251,5 +30360,115 @@ bool ObDDLService::need_check_constraint_validity(const obrpc::ObAlterTableArg & return need_check_validity; } +int ObDDLService::recompile_all_views_batch(const uint64_t tenant_id, const ObIArray &view_ids) +{ + int ret = OB_SUCCESS; + ObSchemaService *schema_service = schema_service_->get_schema_service(); + ObDDLOperator ddl_operator(*schema_service_, *sql_proxy_); + if (OB_FAIL(check_inner_stat())) { + LOG_WARN("variable is not init"); + } else if (OB_INVALID_TENANT_ID == tenant_id) { + ret = OB_INVALID_ARGUMENT; + LOG_WARN("invalid tenant_id", K(ret), K(tenant_id)); + } else if (OB_ISNULL(schema_service)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("schema_service must not null", K(ret)); + } else { + ObSchemaGetterGuard schema_guard; + int64_t refreshed_schema_version = 0; + if (OB_FAIL(get_tenant_schema_guard_with_version_in_inner_table(tenant_id, schema_guard))) { + LOG_WARN("fail to get schema guard with version in inner table", K(ret), K(tenant_id)); + } else { + ObDDLSQLTransaction trans(schema_service_); + if (OB_FAIL(schema_guard.get_schema_version(tenant_id, refreshed_schema_version))) { + LOG_WARN("failed to get tenant schema version", KR(ret), K(tenant_id)); + } else if (OB_FAIL(trans.start(sql_proxy_, tenant_id, refreshed_schema_version))) { + LOG_WARN("failed to start trans, ", KR(ret), K(tenant_id), K(refreshed_schema_version)); + } else { + for (int64_t i = 0; OB_SUCC(ret) && i < view_ids.count(); ++i) { + const ObTableSchema *table = nullptr; + if (OB_FAIL(schema_guard.get_table_schema(tenant_id, view_ids.at(i), table))) { + LOG_WARN("failed to get table schema", K(ret)); + } else if (OB_ISNULL(table)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("failed to get table schema", K(ret)); + } else if (OB_FAIL(ddl_operator.reset_view_status(trans, tenant_id, table))) { + LOG_WARN("failed to reset view status", K(ret)); + } + } + } + if (trans.is_started()) { + int temp_ret = OB_SUCCESS; + if (OB_SUCCESS != (temp_ret = trans.end(OB_SUCC(ret)))) { + LOG_WARN("trans end failed", "is_commit", OB_SUCC(ret), K(temp_ret)); + ret = (OB_SUCC(ret)) ? temp_ret : ret; + } + } + if (OB_FAIL(ret)) { + } else if (OB_FAIL(publish_schema(tenant_id))) { + LOG_WARN("publish_schema failed", K(ret)); + } + } + } + return ret; +} + +int ObDDLService::try_add_dep_info_for_all_synonyms_batch(const uint64_t tenant_id, const common::ObIArray &synonym_ids) +{ + // 2.sync add dependency infos for synonym in this tenant + int ret = OB_SUCCESS; + ObSchemaService *schema_service = schema_service_->get_schema_service(); + ObDDLOperator ddl_operator(*schema_service_, *sql_proxy_); + if (OB_FAIL(check_inner_stat())) { + LOG_WARN("variable is not init"); + } else if (OB_INVALID_TENANT_ID == tenant_id) { + ret = OB_INVALID_ARGUMENT; + LOG_WARN("invalid tenant_id", K(ret), K(tenant_id)); + } else if (OB_ISNULL(schema_service)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("schema_service must not null", K(ret)); + } else { + ObSchemaGetterGuard schema_guard; + int64_t refreshed_schema_version = 0; + if (OB_FAIL(get_tenant_schema_guard_with_version_in_inner_table(tenant_id, schema_guard))) { + LOG_WARN("fail to get schema guard with version in inner table", K(ret), K(tenant_id)); + } else { + ObDDLSQLTransaction trans(schema_service_); + if (OB_FAIL(schema_guard.get_schema_version(tenant_id, refreshed_schema_version))) { + LOG_WARN("failed to get tenant schema version", KR(ret), K(tenant_id)); + } else if (OB_FAIL(trans.start(sql_proxy_, tenant_id, refreshed_schema_version))) { + LOG_WARN("failed to start trans, ", KR(ret), K(tenant_id), K(refreshed_schema_version)); + } else { + for (int64_t i = 0; OB_SUCC(ret) && i < synonym_ids.count(); ++i) { + const ObSimpleSynonymSchema *synonym_info = nullptr; + if (OB_FAIL(schema_guard.get_simple_synonym_info(tenant_id, synonym_ids.at(i), synonym_info))) { + LOG_WARN("failed to get synonym schema", K(ret)); + } else if (OB_ISNULL(synonym_info)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("failed to get synonym schema", K(ret)); + } else if (OB_FAIL(ddl_operator.try_add_dep_info_for_synonym(synonym_info, trans))) { + LOG_WARN("failed to add dep for synonym", K(ret)); + } + } + } + + if (trans.is_started()) { + int temp_ret = OB_SUCCESS; + if (OB_SUCCESS != (temp_ret = trans.end(OB_SUCC(ret)))) { + LOG_WARN("trans end failed", "is_commit", OB_SUCC(ret), K(temp_ret)); + ret = (OB_SUCC(ret)) ? temp_ret : ret; + } + } + if (OB_FAIL(ret)) { + } else if (OB_FAIL(publish_schema(tenant_id))) { + LOG_WARN("publish_schema failed", K(ret)); + } + } + } + return ret; +} + + + } // end namespace rootserver } // end namespace oceanbase diff --git a/src/rootserver/ob_ddl_service.h b/src/rootserver/ob_ddl_service.h index 5a37218c18..c8ace9e837 100644 --- a/src/rootserver/ob_ddl_service.h +++ b/src/rootserver/ob_ddl_service.h @@ -742,6 +742,7 @@ public: //----Functions for managing synonym---- virtual int check_synonym_exist(share::schema::ObSynonymInfo &Synonym_info, const bool create_or_replace, bool &is_update); virtual int create_synonym(share::schema::ObSynonymInfo &synonym_info, + const ObDependencyInfo &dep_info, const common::ObString *ddl_stmt_str, bool is_replace, share::schema::ObSchemaGetterGuard &schema_guard); @@ -752,7 +753,7 @@ public: virtual int create_user_defined_function(share::schema::ObUDF &udf_info, const common::ObString &ddl_stmt_str); virtual int drop_user_defined_function(const obrpc::ObDropUserDefinedFunctionArg &drop_func_arg); - virtual int check_udf_exist(uint64 tenant_id, const common::ObString &name, bool &is_exsit); + virtual int check_udf_exist(uint64 tenant_id, const common::ObString &name, bool &is_exsit, uint64_t &udf_id); //----End of functions for managing udf---- //----Functions for managing routine---- @@ -951,6 +952,9 @@ public: // lock table, unlock when ddl trans end int lock_table(ObMySQLTransaction &trans, const share::schema::ObTableSchema &table_schema); + int recompile_view(const ObTableSchema &view_schema, const bool reset_view_column_infos, ObDDLSQLTransaction &trans); + int recompile_all_views_batch(const uint64_t tenant_id, const common::ObIArray &view_ids); + int try_add_dep_info_for_all_synonyms_batch(const uint64_t tenant_id, const common::ObIArray &synonym_ids); private: enum PartitionBornMethod : int64_t { diff --git a/src/rootserver/ob_root_inspection.cpp b/src/rootserver/ob_root_inspection.cpp index 45c72cdccd..4180f94a65 100644 --- a/src/rootserver/ob_root_inspection.cpp +++ b/src/rootserver/ob_root_inspection.cpp @@ -1387,7 +1387,7 @@ int ObRootInspection::check_table_schema(const ObTableSchema &hard_code_table, LOG_WARN("invalid table_schema", K(hard_code_table), K(inner_table), K(ret)); } else if (OB_FAIL(check_table_options_(inner_table, hard_code_table))) { LOG_WARN("check_table_options failed", "table_id", hard_code_table.get_table_id(), K(ret)); - } else { + } else if (!inner_table.is_view_table()) { //view table do not check column info if (hard_code_table.get_column_count() != inner_table.get_column_count()) { ret = OB_SCHEMA_ERROR; LOG_WARN("column count mismatch", "table_id", inner_table.get_table_id(), @@ -1645,43 +1645,6 @@ int ObRootInspection::check_table_options_(const ObTableSchema &table, ret = OB_SCHEMA_ERROR; LOG_WARN("tablegroup_id mismatch", K(table_name), "in_memory", table.get_tablegroup_id(), "hard_code", hard_code_table.get_tablegroup_id(), K(ret)); - } else if (table.get_max_used_column_id() < hard_code_table.get_max_used_column_id()) { - ret = OB_SCHEMA_ERROR; - LOG_WARN("max_used_column_id mismatch", K(table_name), "in_memory", - table.get_max_used_column_id(), "hard_code", - hard_code_table.get_max_used_column_id(), K(ret)); - } else if (table.get_rowkey_column_num() != hard_code_table.get_rowkey_column_num()) { - ret = OB_SCHEMA_ERROR; - LOG_WARN("rowkey_column_num mismatch", K(table_name), "in_memory", - table.get_rowkey_column_num(), "hard_code", - hard_code_table.get_rowkey_column_num(), K(ret)); - } else if (table.get_index_column_num() != hard_code_table.get_index_column_num()) { - ret = OB_SCHEMA_ERROR; - LOG_WARN("index_column_num mismatch", K(table_name), "in_memory", - table.get_index_column_num(), "hard_code", - hard_code_table.get_index_column_num(), K(ret)); - } else if (table.get_rowkey_split_pos() != hard_code_table.get_rowkey_split_pos()) { - ret = OB_SCHEMA_ERROR; - LOG_WARN("rowkey_split_pos mismatch", K(table_name), "in_memory", - table.get_rowkey_split_pos(), "hard_code", - hard_code_table.get_rowkey_split_pos(), K(ret)); - } else if (table.get_partition_key_column_num() - != hard_code_table.get_partition_key_column_num()) { - ret = OB_SCHEMA_ERROR; - LOG_WARN("partition_key_column_num mismatch", K(table_name), "in_memory", - table.get_partition_key_column_num(), "hard_code", - hard_code_table.get_partition_key_column_num(), K(ret)); - } else if (table.get_subpartition_key_column_num() - != hard_code_table.get_subpartition_key_column_num()) { - ret = OB_SCHEMA_ERROR; - LOG_WARN("partition_key_column_num mismatch", K(table_name), "in_memory", - table.get_subpartition_key_column_num(), "hard_code", - hard_code_table.get_subpartition_key_column_num(), K(ret)); - } else if (table.get_autoinc_column_id() != hard_code_table.get_autoinc_column_id()) { - ret = OB_SCHEMA_ERROR; - LOG_WARN("autoinc_column_id mismatch", K(table_name), "in_memory", - table.get_autoinc_column_id(), "hard_code", - hard_code_table.get_autoinc_column_id(), K(ret)); } else if (table.get_auto_increment() != hard_code_table.get_auto_increment()) { ret = OB_SCHEMA_ERROR; LOG_WARN("auto_increment mismatch", K(table_name), "in_memory", table.get_auto_increment(), @@ -1740,6 +1703,45 @@ int ObRootInspection::check_table_options_(const ObTableSchema &table, ret = OB_SCHEMA_ERROR; LOG_WARN("sub_part_expr mismatch", K(table_name), "in_memory", table.get_sub_part_option(), "hard_code", hard_code_table.get_sub_part_option(), K(ret)); + } else if (table.is_view_table()) { + // view table do not check column info + } else if (table.get_max_used_column_id() < hard_code_table.get_max_used_column_id()) { + ret = OB_SCHEMA_ERROR; + LOG_WARN("max_used_column_id mismatch", K(table_name), "in_memory", + table.get_max_used_column_id(), "hard_code", + hard_code_table.get_max_used_column_id(), K(ret)); + } else if (table.get_rowkey_column_num() != hard_code_table.get_rowkey_column_num()) { + ret = OB_SCHEMA_ERROR; + LOG_WARN("rowkey_column_num mismatch", K(table_name), "in_memory", + table.get_rowkey_column_num(), "hard_code", + hard_code_table.get_rowkey_column_num(), K(ret)); + } else if (table.get_index_column_num() != hard_code_table.get_index_column_num()) { + ret = OB_SCHEMA_ERROR; + LOG_WARN("index_column_num mismatch", K(table_name), "in_memory", + table.get_index_column_num(), "hard_code", + hard_code_table.get_index_column_num(), K(ret)); + } else if (table.get_rowkey_split_pos() != hard_code_table.get_rowkey_split_pos()) { + ret = OB_SCHEMA_ERROR; + LOG_WARN("rowkey_split_pos mismatch", K(table_name), "in_memory", + table.get_rowkey_split_pos(), "hard_code", + hard_code_table.get_rowkey_split_pos(), K(ret)); + } else if (table.get_partition_key_column_num() + != hard_code_table.get_partition_key_column_num()) { + ret = OB_SCHEMA_ERROR; + LOG_WARN("partition_key_column_num mismatch", K(table_name), "in_memory", + table.get_partition_key_column_num(), "hard_code", + hard_code_table.get_partition_key_column_num(), K(ret)); + } else if (table.get_subpartition_key_column_num() + != hard_code_table.get_subpartition_key_column_num()) { + ret = OB_SCHEMA_ERROR; + LOG_WARN("partition_key_column_num mismatch", K(table_name), "in_memory", + table.get_subpartition_key_column_num(), "hard_code", + hard_code_table.get_subpartition_key_column_num(), K(ret)); + } else if (table.get_autoinc_column_id() != hard_code_table.get_autoinc_column_id()) { + ret = OB_SCHEMA_ERROR; + LOG_WARN("autoinc_column_id mismatch", K(table_name), "in_memory", + table.get_autoinc_column_id(), "hard_code", + hard_code_table.get_autoinc_column_id(), K(ret)); } // options may be different between different ob instance, don't check diff --git a/src/rootserver/ob_root_service.cpp b/src/rootserver/ob_root_service.cpp index 9a7c4cbf6a..cb39d605ea 100644 --- a/src/rootserver/ob_root_service.cpp +++ b/src/rootserver/ob_root_service.cpp @@ -3154,7 +3154,7 @@ int ObRootService::create_table(const ObCreateTableArg &arg, ObCreateTableRes &r } } RS_TRACE(generate_schema_lob); - if (OB_FAIL(ret)) { + if (OB_FAIL(ret) || table_schema.is_view_table()) { // do nothing } else if (OB_FAIL(ddl_service_.build_aux_lob_table_schema_if_need(table_schema, table_schemas))) { LOG_WARN("fail to build_aux_lob_table_schema_if_need", K(ret), K(table_schema)); @@ -5554,6 +5554,7 @@ int ObRootService::create_user_defined_function(const obrpc::ObCreateUserDefined { int ret = OB_SUCCESS; bool exist = false; + uint64_t udf_id = OB_INVALID_ID; ObUDF udf_info_ = arg.udf_; if (!inited_) { ret = OB_NOT_INIT; @@ -5561,7 +5562,7 @@ int ObRootService::create_user_defined_function(const obrpc::ObCreateUserDefined } else if (!arg.is_valid()) { ret = OB_INVALID_ARGUMENT; LOG_WARN("invalid arg", K(arg), K(ret)); - } else if (OB_FAIL(ddl_service_.check_udf_exist(arg.udf_.get_tenant_id(), arg.udf_.get_name_str(), exist))) { + } else if (OB_FAIL(ddl_service_.check_udf_exist(arg.udf_.get_tenant_id(), arg.udf_.get_name_str(), exist, udf_id))) { LOG_WARN("failed to check_udf_exist", K(arg.udf_.get_tenant_id()), K(arg.udf_.get_name_str()), K(exist), K(ret)); } else if (exist) { ret = OB_UDF_EXISTS; @@ -6209,7 +6210,7 @@ int ObRootService::create_synonym(const ObCreateSynonymArg &arg) } } if (OB_SUCC(ret)) { - if (OB_FAIL(ddl_service_.create_synonym(synonym_info, &arg.ddl_stmt_str_, is_update, schema_guard))) { + if (OB_FAIL(ddl_service_.create_synonym(synonym_info, arg.dependency_info_, &arg.ddl_stmt_str_, is_update, schema_guard))) { LOG_WARN("create_synonym failed", K(synonym_info), K(ret)); } } @@ -9836,5 +9837,41 @@ int ObRootService::set_cpu_quota_concurrency_config_() return ret; } +int ObRootService::recompile_all_views_batch(const obrpc::ObRecompileAllViewsBatchArg &arg) +{ + int ret = OB_SUCCESS; + int64_t start_time = ObTimeUtility::current_time(); + if (!inited_) { + ret = OB_NOT_INIT; + LOG_WARN("not init", K(ret)); + } else if (!arg.is_valid()) { + ret = OB_INVALID_ARGUMENT; + LOG_WARN("invalid arg", K(arg), K(ret)); + } else if (OB_FAIL(ddl_service_.recompile_all_views_batch(arg.tenant_id_, arg.view_ids_))) { + LOG_WARN("failed to recompile all views", K(ret), K(arg.tenant_id_)); + } + LOG_INFO("recompile all views batch finish", KR(ret), K(start_time), + "cost_time", ObTimeUtility::current_time() - start_time); + return ret; +} + +int ObRootService::try_add_dep_infos_for_synonym_batch(const obrpc::ObTryAddDepInofsForSynonymBatchArg &arg) +{ + int ret = OB_SUCCESS; + int64_t start_time = ObTimeUtility::current_time(); + if (!inited_) { + ret = OB_NOT_INIT; + LOG_WARN("not init", K(ret)); + } else if (!arg.is_valid()) { + ret = OB_INVALID_ARGUMENT; + LOG_WARN("invalid arg", K(arg), K(ret)); + } else if (OB_FAIL(ddl_service_.try_add_dep_info_for_all_synonyms_batch(arg.tenant_id_, arg.synonym_ids_))) { + LOG_WARN("failed to add synonym dep info", K(ret), K(arg.tenant_id_)); + } + LOG_INFO("add dep infos for synonym batch finish", KR(ret), K(start_time), + "cost_time", ObTimeUtility::current_time() - start_time); + return ret; +} + } // end namespace rootserver } // end namespace oceanbase diff --git a/src/rootserver/ob_root_service.h b/src/rootserver/ob_root_service.h index 50238c4a84..5a1ab91f2e 100644 --- a/src/rootserver/ob_root_service.h +++ b/src/rootserver/ob_root_service.h @@ -766,6 +766,8 @@ public: int purge_recyclebin_objects(int64_t purge_each_time); int flush_opt_stat_monitoring_info(const obrpc::ObFlushOptStatArg &arg); int update_rslist(); + int recompile_all_views_batch(const obrpc::ObRecompileAllViewsBatchArg &arg); + int try_add_dep_infos_for_synonym_batch(const obrpc::ObTryAddDepInofsForSynonymBatchArg &arg); private: int check_parallel_ddl_conflict( share::schema::ObSchemaGetterGuard &schema_guard, diff --git a/src/rootserver/ob_rs_rpc_processor.h b/src/rootserver/ob_rs_rpc_processor.h index 2d8d2dce0e..7e7a2e35a1 100644 --- a/src/rootserver/ob_rs_rpc_processor.h +++ b/src/rootserver/ob_rs_rpc_processor.h @@ -486,6 +486,8 @@ DEFINE_DDL_RS_RPC_PROCESSOR(obrpc::OB_DROP_DIRECTORY, ObRpcDropDirectoryP, drop_ // context object DEFINE_DDL_RS_RPC_PROCESSOR(obrpc::OB_DO_CONTEXT_DDL, ObRpcDoContextDDLP, do_context_ddl(arg_)); +DEFINE_DDL_RS_RPC_PROCESSOR(obrpc::OB_RECOMPILE_ALL_VIEWS_BATCH, ObRpcRecompileAllViewsBatchP, recompile_all_views_batch(arg_)); +DEFINE_DDL_RS_RPC_PROCESSOR(obrpc::OB_TRY_ADD_DEP_INFOS_FOR_SYNONYM_BATCH, ObRpcTryAddDepInfosForSynonymBatchP,try_add_dep_infos_for_synonym_batch(arg_)); DEFINE_RS_RPC_PROCESSOR(obrpc::OB_ADMIN_SYNC_REWRITE_RULES, ObRpcAdminSyncRewriteRulesP, admin_sync_rewrite_rules(arg_)); diff --git a/src/share/inner_table/ob_inner_table_schema.101_150.cpp b/src/share/inner_table/ob_inner_table_schema.101_150.cpp index 2524496fed..fdddebc786 100644 --- a/src/share/inner_table/ob_inner_table_schema.101_150.cpp +++ b/src/share/inner_table/ob_inner_table_schema.101_150.cpp @@ -6271,6 +6271,25 @@ int ObInnerTableSchema::all_table_history_schema(ObTableSchema &table_schema) true, //is_nullable false); //is_autoincrement } + + if (OB_SUCC(ret)) { + ObObj object_status_default; + object_status_default.set_int(1); + ADD_COLUMN_SCHEMA_T("object_status", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObIntType, //column_type + CS_TYPE_INVALID, //column_collation_type + sizeof(int64_t), //column_length + -1, //column_precision + -1, //column_scale + true, //is_nullable + false, //is_autoincrement + object_status_default, + object_status_default); //default_value + } table_schema.set_index_using_type(USING_BTREE); table_schema.set_row_store_type(ENCODING_ROW_STORE); table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); diff --git a/src/share/inner_table/ob_inner_table_schema.11001_11050.cpp b/src/share/inner_table/ob_inner_table_schema.11001_11050.cpp index b6e5c17e82..14ed648e0d 100644 --- a/src/share/inner_table/ob_inner_table_schema.11001_11050.cpp +++ b/src/share/inner_table/ob_inner_table_schema.11001_11050.cpp @@ -13077,6 +13077,25 @@ int ObInnerTableSchema::all_virtual_core_all_table_schema(ObTableSchema &table_s true, //is_nullable false); //is_autoincrement } + + if (OB_SUCC(ret)) { + ObObj object_status_default; + object_status_default.set_int(1); + ADD_COLUMN_SCHEMA_T("object_status", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObIntType, //column_type + CS_TYPE_INVALID, //column_collation_type + sizeof(int64_t), //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false, //is_autoincrement + object_status_default, + object_status_default); //default_value + } table_schema.set_index_using_type(USING_HASH); table_schema.set_row_store_type(ENCODING_ROW_STORE); table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); diff --git a/src/share/inner_table/ob_inner_table_schema.12001_12050.cpp b/src/share/inner_table/ob_inner_table_schema.12001_12050.cpp index 73905910f3..7f2ca784ba 100644 --- a/src/share/inner_table/ob_inner_table_schema.12001_12050.cpp +++ b/src/share/inner_table/ob_inner_table_schema.12001_12050.cpp @@ -106,600 +106,6 @@ int ObInnerTableSchema::session_variables_schema(ObTableSchema &table_schema) return ret; } -int ObInnerTableSchema::table_privileges_schema(ObTableSchema &table_schema) -{ - int ret = OB_SUCCESS; - uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; - - //generated fields: - table_schema.set_tenant_id(OB_SYS_TENANT_ID); - table_schema.set_tablegroup_id(OB_INVALID_ID); - table_schema.set_database_id(OB_INFORMATION_SCHEMA_ID); - table_schema.set_table_id(OB_TABLE_PRIVILEGES_TID); - table_schema.set_rowkey_split_pos(0); - table_schema.set_is_use_bloomfilter(false); - table_schema.set_progressive_merge_num(0); - table_schema.set_rowkey_column_num(0); - table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); - table_schema.set_table_type(VIRTUAL_TABLE); - table_schema.set_index_type(INDEX_TYPE_IS_NOT); - table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); - - if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_table_name(OB_TABLE_PRIVILEGES_TNAME))) { - LOG_ERROR("fail to set table_name", K(ret)); - } - } - - if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { - LOG_ERROR("fail to set compress_func_name", K(ret)); - } - } - table_schema.set_part_level(PARTITION_LEVEL_ZERO); - table_schema.set_charset_type(ObCharset::get_default_charset()); - table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); - - if (OB_SUCC(ret)) { - ObObj grantee_default; - grantee_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("GRANTEE", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_INFOSCHEMA_GRANTEE_LEN, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - grantee_default, - grantee_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj table_catalog_default; - table_catalog_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("TABLE_CATALOG", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - MAX_TABLE_CATALOG_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - table_catalog_default, - table_catalog_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj table_schema_default; - table_schema_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("TABLE_SCHEMA", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_DATABASE_NAME_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - table_schema_default, - table_schema_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj table_name_default; - table_name_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("TABLE_NAME", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_INFOSCHEMA_TABLE_NAME_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - table_name_default, - table_name_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj privilege_type_default; - privilege_type_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("PRIVILEGE_TYPE", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - MAX_INFOSCHEMA_COLUMN_PRIVILEGE_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - privilege_type_default, - privilege_type_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj is_grantable_default; - is_grantable_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("IS_GRANTABLE", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - MAX_COLUMN_YES_NO_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - is_grantable_default, - is_grantable_default); //default_value - } - table_schema.set_index_using_type(USING_HASH); - table_schema.set_row_store_type(ENCODING_ROW_STORE); - table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); - table_schema.set_progressive_merge_round(1); - table_schema.set_storage_format_version(3); - table_schema.set_tablet_id(0); - - table_schema.set_max_used_column_id(column_id); - return ret; -} - -int ObInnerTableSchema::user_privileges_schema(ObTableSchema &table_schema) -{ - int ret = OB_SUCCESS; - uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; - - //generated fields: - table_schema.set_tenant_id(OB_SYS_TENANT_ID); - table_schema.set_tablegroup_id(OB_INVALID_ID); - table_schema.set_database_id(OB_INFORMATION_SCHEMA_ID); - table_schema.set_table_id(OB_USER_PRIVILEGES_TID); - table_schema.set_rowkey_split_pos(0); - table_schema.set_is_use_bloomfilter(false); - table_schema.set_progressive_merge_num(0); - table_schema.set_rowkey_column_num(0); - table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); - table_schema.set_table_type(VIRTUAL_TABLE); - table_schema.set_index_type(INDEX_TYPE_IS_NOT); - table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); - - if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_table_name(OB_USER_PRIVILEGES_TNAME))) { - LOG_ERROR("fail to set table_name", K(ret)); - } - } - - if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { - LOG_ERROR("fail to set compress_func_name", K(ret)); - } - } - table_schema.set_part_level(PARTITION_LEVEL_ZERO); - table_schema.set_charset_type(ObCharset::get_default_charset()); - table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); - - if (OB_SUCC(ret)) { - ObObj grantee_default; - grantee_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("GRANTEE", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_INFOSCHEMA_GRANTEE_LEN, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - grantee_default, - grantee_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj table_catalog_default; - table_catalog_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("TABLE_CATALOG", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - MAX_TABLE_CATALOG_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - table_catalog_default, - table_catalog_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj privilege_type_default; - privilege_type_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("PRIVILEGE_TYPE", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - MAX_INFOSCHEMA_COLUMN_PRIVILEGE_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - privilege_type_default, - privilege_type_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj is_grantable_default; - is_grantable_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("IS_GRANTABLE", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - MAX_COLUMN_YES_NO_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - is_grantable_default, - is_grantable_default); //default_value - } - table_schema.set_index_using_type(USING_HASH); - table_schema.set_row_store_type(ENCODING_ROW_STORE); - table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); - table_schema.set_progressive_merge_round(1); - table_schema.set_storage_format_version(3); - table_schema.set_tablet_id(0); - - table_schema.set_max_used_column_id(column_id); - return ret; -} - -int ObInnerTableSchema::schema_privileges_schema(ObTableSchema &table_schema) -{ - int ret = OB_SUCCESS; - uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; - - //generated fields: - table_schema.set_tenant_id(OB_SYS_TENANT_ID); - table_schema.set_tablegroup_id(OB_INVALID_ID); - table_schema.set_database_id(OB_INFORMATION_SCHEMA_ID); - table_schema.set_table_id(OB_SCHEMA_PRIVILEGES_TID); - table_schema.set_rowkey_split_pos(0); - table_schema.set_is_use_bloomfilter(false); - table_schema.set_progressive_merge_num(0); - table_schema.set_rowkey_column_num(0); - table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); - table_schema.set_table_type(VIRTUAL_TABLE); - table_schema.set_index_type(INDEX_TYPE_IS_NOT); - table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); - - if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_table_name(OB_SCHEMA_PRIVILEGES_TNAME))) { - LOG_ERROR("fail to set table_name", K(ret)); - } - } - - if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { - LOG_ERROR("fail to set compress_func_name", K(ret)); - } - } - table_schema.set_part_level(PARTITION_LEVEL_ZERO); - table_schema.set_charset_type(ObCharset::get_default_charset()); - table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); - - if (OB_SUCC(ret)) { - ObObj grantee_default; - grantee_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("GRANTEE", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_INFOSCHEMA_GRANTEE_LEN, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - grantee_default, - grantee_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj table_catalog_default; - table_catalog_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("TABLE_CATALOG", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - MAX_TABLE_CATALOG_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - table_catalog_default, - table_catalog_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj table_schema_default; - table_schema_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("TABLE_SCHEMA", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_DATABASE_NAME_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - table_schema_default, - table_schema_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj privilege_type_default; - privilege_type_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("PRIVILEGE_TYPE", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - MAX_INFOSCHEMA_COLUMN_PRIVILEGE_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - privilege_type_default, - privilege_type_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj is_grantable_default; - is_grantable_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("IS_GRANTABLE", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - MAX_COLUMN_YES_NO_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - is_grantable_default, - is_grantable_default); //default_value - } - table_schema.set_index_using_type(USING_HASH); - table_schema.set_row_store_type(ENCODING_ROW_STORE); - table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); - table_schema.set_progressive_merge_round(1); - table_schema.set_storage_format_version(3); - table_schema.set_tablet_id(0); - - table_schema.set_max_used_column_id(column_id); - return ret; -} - -int ObInnerTableSchema::table_constraints_schema(ObTableSchema &table_schema) -{ - int ret = OB_SUCCESS; - uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; - - //generated fields: - table_schema.set_tenant_id(OB_SYS_TENANT_ID); - table_schema.set_tablegroup_id(OB_INVALID_ID); - table_schema.set_database_id(OB_INFORMATION_SCHEMA_ID); - table_schema.set_table_id(OB_TABLE_CONSTRAINTS_TID); - table_schema.set_rowkey_split_pos(0); - table_schema.set_is_use_bloomfilter(false); - table_schema.set_progressive_merge_num(0); - table_schema.set_rowkey_column_num(0); - table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); - table_schema.set_table_type(VIRTUAL_TABLE); - table_schema.set_index_type(INDEX_TYPE_IS_NOT); - table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); - - if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_table_name(OB_TABLE_CONSTRAINTS_TNAME))) { - LOG_ERROR("fail to set table_name", K(ret)); - } - } - - if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { - LOG_ERROR("fail to set compress_func_name", K(ret)); - } - } - table_schema.set_part_level(PARTITION_LEVEL_ZERO); - table_schema.set_charset_type(ObCharset::get_default_charset()); - table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); - - if (OB_SUCC(ret)) { - ObObj constraint_catalog_default; - constraint_catalog_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("CONSTRAINT_CATALOG", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - MAX_TABLE_CATALOG_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - constraint_catalog_default, - constraint_catalog_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj constraint_schema_default; - constraint_schema_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("CONSTRAINT_SCHEMA", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_DATABASE_NAME_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - constraint_schema_default, - constraint_schema_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj constraint_name_default; - constraint_name_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("CONSTRAINT_NAME", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_COLUMN_NAME_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - constraint_name_default, - constraint_name_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj table_schema_default; - table_schema_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("TABLE_SCHEMA", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_DATABASE_NAME_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - table_schema_default, - table_schema_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj table_name_default; - table_name_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("TABLE_NAME", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_TABLE_NAME_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - table_name_default, - table_name_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj constraint_type_default; - constraint_type_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("CONSTRAINT_TYPE", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - INDEX_NULL_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - constraint_type_default, - constraint_type_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj enforced_default; - enforced_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("ENFORCED", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - MAX_BOOL_STR_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - enforced_default, - enforced_default); //default_value - } - table_schema.set_index_using_type(USING_HASH); - table_schema.set_row_store_type(ENCODING_ROW_STORE); - table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); - table_schema.set_progressive_merge_round(1); - table_schema.set_storage_format_version(3); - table_schema.set_tablet_id(0); - - table_schema.set_max_used_column_id(column_id); - return ret; -} - int ObInnerTableSchema::global_status_schema(ObTableSchema &table_schema) { int ret = OB_SUCCESS; @@ -782,468 +188,6 @@ int ObInnerTableSchema::global_status_schema(ObTableSchema &table_schema) return ret; } -int ObInnerTableSchema::partitions_schema(ObTableSchema &table_schema) -{ - int ret = OB_SUCCESS; - uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; - - //generated fields: - table_schema.set_tenant_id(OB_SYS_TENANT_ID); - table_schema.set_tablegroup_id(OB_INVALID_ID); - table_schema.set_database_id(OB_INFORMATION_SCHEMA_ID); - table_schema.set_table_id(OB_PARTITIONS_TID); - table_schema.set_rowkey_split_pos(0); - table_schema.set_is_use_bloomfilter(false); - table_schema.set_progressive_merge_num(0); - table_schema.set_rowkey_column_num(0); - table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); - table_schema.set_table_type(VIRTUAL_TABLE); - table_schema.set_index_type(INDEX_TYPE_IS_NOT); - table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); - - if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_table_name(OB_PARTITIONS_TNAME))) { - LOG_ERROR("fail to set table_name", K(ret)); - } - } - - if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { - LOG_ERROR("fail to set compress_func_name", K(ret)); - } - } - table_schema.set_part_level(PARTITION_LEVEL_ZERO); - table_schema.set_charset_type(ObCharset::get_default_charset()); - table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); - - if (OB_SUCC(ret)) { - ObObj table_catalog_default; - table_catalog_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("TABLE_CATALOG", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - MAX_TABLE_CATALOG_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - table_catalog_default, - table_catalog_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj table_schema_default; - table_schema_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("TABLE_SCHEMA", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_DATABASE_NAME_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - table_schema_default, - table_schema_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj table_name_default; - table_name_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("TABLE_NAME", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_TABLE_NAME_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - table_name_default, - table_name_default); //default_value - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("PARTITION_NAME", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_PARTITION_NAME_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false); //is_autoincrement - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("SUBPARTITION_NAME", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_PARTITION_NAME_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false); //is_autoincrement - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("PARTITION_ORDINAL_POSITION", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObUInt64Type, //column_type - CS_TYPE_INVALID, //column_collation_type - sizeof(uint64_t), //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false); //is_autoincrement - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("SUBPARTITION_ORDINAL_POSITION", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObUInt64Type, //column_type - CS_TYPE_INVALID, //column_collation_type - sizeof(uint64_t), //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false); //is_autoincrement - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("PARTITION_METHOD", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_PARTITION_METHOD_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false); //is_autoincrement - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("SUBPARTITION_METHOD", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_PARTITION_METHOD_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false); //is_autoincrement - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("PARTITION_EXPRESSION", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_PART_FUNC_EXPR_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false); //is_autoincrement - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("SUBPARTITION_EXPRESSION", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_PART_FUNC_EXPR_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false); //is_autoincrement - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("PARTITION_DESCRIPTION", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_PARTITION_DESCRIPTION_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false); //is_autoincrement - } - - if (OB_SUCC(ret)) { - ObObj table_rows_default; - table_rows_default.set_uint64(0); - ADD_COLUMN_SCHEMA_T("TABLE_ROWS", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObUInt64Type, //column_type - CS_TYPE_INVALID, //column_collation_type - sizeof(uint64_t), //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - table_rows_default, - table_rows_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj avg_row_length_default; - avg_row_length_default.set_uint64(0); - ADD_COLUMN_SCHEMA_T("AVG_ROW_LENGTH", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObUInt64Type, //column_type - CS_TYPE_INVALID, //column_collation_type - sizeof(uint64_t), //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - avg_row_length_default, - avg_row_length_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj data_length_default; - data_length_default.set_uint64(0); - ADD_COLUMN_SCHEMA_T("DATA_LENGTH", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObUInt64Type, //column_type - CS_TYPE_INVALID, //column_collation_type - sizeof(uint64_t), //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - data_length_default, - data_length_default); //default_value - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("MAX_DATA_LENGTH", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObUInt64Type, //column_type - CS_TYPE_INVALID, //column_collation_type - sizeof(uint64_t), //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false); //is_autoincrement - } - - if (OB_SUCC(ret)) { - ObObj index_length_default; - index_length_default.set_uint64(0); - ADD_COLUMN_SCHEMA_T("INDEX_LENGTH", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObUInt64Type, //column_type - CS_TYPE_INVALID, //column_collation_type - sizeof(uint64_t), //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - index_length_default, - index_length_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj data_free_default; - data_free_default.set_uint64(0); - ADD_COLUMN_SCHEMA_T("DATA_FREE", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObUInt64Type, //column_type - CS_TYPE_INVALID, //column_collation_type - sizeof(uint64_t), //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - data_free_default, - data_free_default); //default_value - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA_TS("CREATE_TIME", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObTimestampType, //column_type - CS_TYPE_INVALID, //column_collation_type - sizeof(ObPreciseDateTime), //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false, //is_autoincrement - false); //is_on_update_for_timestamp - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA_TS("UPDATE_TIME", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObTimestampType, //column_type - CS_TYPE_INVALID, //column_collation_type - sizeof(ObPreciseDateTime), //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false, //is_autoincrement - false); //is_on_update_for_timestamp - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA_TS("CHECK_TIME", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObTimestampType, //column_type - CS_TYPE_INVALID, //column_collation_type - sizeof(ObPreciseDateTime), //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false, //is_autoincrement - false); //is_on_update_for_timestamp - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("CHECKSUM", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObIntType, //column_type - CS_TYPE_INVALID, //column_collation_type - sizeof(int64_t), //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false); //is_autoincrement - } - - if (OB_SUCC(ret)) { - ObObj partition_comment_default; - partition_comment_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("PARTITION_COMMENT", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_PARTITION_COMMENT_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - partition_comment_default, - partition_comment_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj nodegroup_default; - nodegroup_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("NODEGROUP", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_NODEGROUP_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - nodegroup_default, - nodegroup_default); //default_value - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("TABLESPACE_NAME", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_TABLEGROUP_NAME_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false); //is_autoincrement - } - table_schema.set_index_using_type(USING_HASH); - table_schema.set_row_store_type(ENCODING_ROW_STORE); - table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); - table_schema.set_progressive_merge_round(1); - table_schema.set_storage_format_version(3); - table_schema.set_tablet_id(0); - - table_schema.set_max_used_column_id(column_id); - return ret; -} - int ObInnerTableSchema::session_status_schema(ObTableSchema &table_schema) { int ret = OB_SUCCESS; @@ -4077,314 +3021,6 @@ int ObInnerTableSchema::all_virtual_freeze_info_schema(ObTableSchema &table_sche return ret; } -int ObInnerTableSchema::parameters_schema(ObTableSchema &table_schema) -{ - int ret = OB_SUCCESS; - uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; - - //generated fields: - table_schema.set_tenant_id(OB_SYS_TENANT_ID); - table_schema.set_tablegroup_id(OB_INVALID_ID); - table_schema.set_database_id(OB_INFORMATION_SCHEMA_ID); - table_schema.set_table_id(OB_PARAMETERS_TID); - table_schema.set_rowkey_split_pos(0); - table_schema.set_is_use_bloomfilter(false); - table_schema.set_progressive_merge_num(0); - table_schema.set_rowkey_column_num(0); - table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); - table_schema.set_table_type(VIRTUAL_TABLE); - table_schema.set_index_type(INDEX_TYPE_IS_NOT); - table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); - - if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_table_name(OB_PARAMETERS_TNAME))) { - LOG_ERROR("fail to set table_name", K(ret)); - } - } - - if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { - LOG_ERROR("fail to set compress_func_name", K(ret)); - } - } - table_schema.set_part_level(PARTITION_LEVEL_ZERO); - table_schema.set_charset_type(ObCharset::get_default_charset()); - table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); - - if (OB_SUCC(ret)) { - ObObj specific_catalog_default; - specific_catalog_default.set_varchar(ObString::make_string("def")); - ADD_COLUMN_SCHEMA_T("SPECIFIC_CATALOG", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - MAX_TABLE_CATALOG_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - specific_catalog_default, - specific_catalog_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj specific_schema_default; - specific_schema_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("SPECIFIC_SCHEMA", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_DATABASE_NAME_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - specific_schema_default, - specific_schema_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj specific_name_default; - specific_name_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("SPECIFIC_NAME", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_PARAMETERS_NAME_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - specific_name_default, - specific_name_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj ordinal_position_default; - ordinal_position_default.set_int(0); - ADD_COLUMN_SCHEMA_T("ORDINAL_POSITION", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObIntType, //column_type - CS_TYPE_INVALID, //column_collation_type - sizeof(int64_t), //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - ordinal_position_default, - ordinal_position_default); //default_value - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("PARAMETER_MODE", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_PARAMETERS_NAME_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false); //is_autoincrement - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("PARAMETER_NAME", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_DEFAULT_VALUE_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false); //is_autoincrement - } - - if (OB_SUCC(ret)) { - ObObj data_type_default; - data_type_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("DATA_TYPE", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_PARAMETERS_NAME_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - data_type_default, - data_type_default); //default_value - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("CHARACTER_MAXIMUM_LENGTH", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObUInt64Type, //column_type - CS_TYPE_INVALID, //column_collation_type - sizeof(uint64_t), //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false); //is_autoincrement - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("CHARACTER_OCTET_LENGTH", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObUInt64Type, //column_type - CS_TYPE_INVALID, //column_collation_type - sizeof(uint64_t), //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false); //is_autoincrement - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("NUMERIC_PRECISION", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObUInt64Type, //column_type - CS_TYPE_INVALID, //column_collation_type - sizeof(uint64_t), //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false); //is_autoincrement - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("NUMERIC_SCALE", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObUInt64Type, //column_type - CS_TYPE_INVALID, //column_collation_type - sizeof(uint64_t), //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false); //is_autoincrement - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("DATETIME_PRECISION", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObUInt64Type, //column_type - CS_TYPE_INVALID, //column_collation_type - sizeof(uint64_t), //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false); //is_autoincrement - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("CHARACTER_SET_NAME", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - MAX_CHARSET_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false); //is_autoincrement - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("COLLATION_NAME", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - MAX_COLLATION_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false); //is_autoincrement - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("DTD_IDENTIFIER", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_SYS_PARAM_NAME_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false); //is_autoincrement - } - - if (OB_SUCC(ret)) { - ObObj routine_type_default; - routine_type_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("ROUTINE_TYPE", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - 9, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - routine_type_default, - routine_type_default); //default_value - } - table_schema.set_index_using_type(USING_HASH); - table_schema.set_row_store_type(ENCODING_ROW_STORE); - table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); - table_schema.set_progressive_merge_round(1); - table_schema.set_storage_format_version(3); - table_schema.set_tablet_id(0); - - table_schema.set_max_used_column_id(column_id); - return ret; -} - int ObInnerTableSchema::all_virtual_bad_block_table_schema(ObTableSchema &table_schema) { int ret = OB_SUCCESS; diff --git a/src/share/inner_table/ob_inner_table_schema.12051_12100.cpp b/src/share/inner_table/ob_inner_table_schema.12051_12100.cpp index 9ea1a99a84..44ec94ff87 100644 --- a/src/share/inner_table/ob_inner_table_schema.12051_12100.cpp +++ b/src/share/inner_table/ob_inner_table_schema.12051_12100.cpp @@ -2235,6 +2235,25 @@ int ObInnerTableSchema::all_virtual_synonym_schema(ObTableSchema &table_schema) false, //is_nullable false); //is_autoincrement } + + if (OB_SUCC(ret)) { + ObObj status_default; + status_default.set_int(1); + ADD_COLUMN_SCHEMA_T("status", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObIntType, //column_type + CS_TYPE_INVALID, //column_collation_type + sizeof(int64_t), //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false, //is_autoincrement + status_default, + status_default); //default_value + } table_schema.set_index_using_type(USING_BTREE); table_schema.set_row_store_type(ENCODING_ROW_STORE); table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); @@ -2439,6 +2458,25 @@ int ObInnerTableSchema::all_virtual_synonym_history_schema(ObTableSchema &table_ true, //is_nullable false); //is_autoincrement } + + if (OB_SUCC(ret)) { + ObObj status_default; + status_default.set_int(1); + ADD_COLUMN_SCHEMA_T("status", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObIntType, //column_type + CS_TYPE_INVALID, //column_collation_type + sizeof(int64_t), //column_length + -1, //column_precision + -1, //column_scale + true, //is_nullable + false, //is_autoincrement + status_default, + status_default); //default_value + } table_schema.set_index_using_type(USING_BTREE); table_schema.set_row_store_type(ENCODING_ROW_STORE); table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); @@ -6208,6 +6246,25 @@ int ObInnerTableSchema::all_virtual_table_schema(ObTableSchema &table_schema) true, //is_nullable false); //is_autoincrement } + + if (OB_SUCC(ret)) { + ObObj object_status_default; + object_status_default.set_int(1); + ADD_COLUMN_SCHEMA_T("object_status", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObIntType, //column_type + CS_TYPE_INVALID, //column_collation_type + sizeof(int64_t), //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false, //is_autoincrement + object_status_default, + object_status_default); //default_value + } table_schema.set_index_using_type(USING_BTREE); table_schema.set_row_store_type(ENCODING_ROW_STORE); table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); @@ -7439,6 +7496,25 @@ int ObInnerTableSchema::all_virtual_table_history_schema(ObTableSchema &table_sc true, //is_nullable false); //is_autoincrement } + + if (OB_SUCC(ret)) { + ObObj object_status_default; + object_status_default.set_int(1); + ADD_COLUMN_SCHEMA_T("object_status", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObIntType, //column_type + CS_TYPE_INVALID, //column_collation_type + sizeof(int64_t), //column_length + -1, //column_precision + -1, //column_scale + true, //is_nullable + false, //is_autoincrement + object_status_default, + object_status_default); //default_value + } table_schema.set_index_using_type(USING_BTREE); table_schema.set_row_store_type(ENCODING_ROW_STORE); table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); diff --git a/src/share/inner_table/ob_inner_table_schema.12151_12200.cpp b/src/share/inner_table/ob_inner_table_schema.12151_12200.cpp index 8fb1734417..4493349e5b 100644 --- a/src/share/inner_table/ob_inner_table_schema.12151_12200.cpp +++ b/src/share/inner_table/ob_inner_table_schema.12151_12200.cpp @@ -4659,259 +4659,6 @@ int ObInnerTableSchema::all_virtual_id_service_schema(ObTableSchema &table_schem return ret; } -int ObInnerTableSchema::referential_constraints_schema(ObTableSchema &table_schema) -{ - int ret = OB_SUCCESS; - uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; - - //generated fields: - table_schema.set_tenant_id(OB_SYS_TENANT_ID); - table_schema.set_tablegroup_id(OB_INVALID_ID); - table_schema.set_database_id(OB_INFORMATION_SCHEMA_ID); - table_schema.set_table_id(OB_REFERENTIAL_CONSTRAINTS_TID); - table_schema.set_rowkey_split_pos(0); - table_schema.set_is_use_bloomfilter(false); - table_schema.set_progressive_merge_num(0); - table_schema.set_rowkey_column_num(0); - table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); - table_schema.set_table_type(VIRTUAL_TABLE); - table_schema.set_index_type(INDEX_TYPE_IS_NOT); - table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); - - if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_table_name(OB_REFERENTIAL_CONSTRAINTS_TNAME))) { - LOG_ERROR("fail to set table_name", K(ret)); - } - } - - if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { - LOG_ERROR("fail to set compress_func_name", K(ret)); - } - } - table_schema.set_part_level(PARTITION_LEVEL_ZERO); - table_schema.set_charset_type(ObCharset::get_default_charset()); - table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); - - if (OB_SUCC(ret)) { - ObObj constraint_catalog_default; - constraint_catalog_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("CONSTRAINT_CATALOG", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - MAX_TABLE_CATALOG_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - constraint_catalog_default, - constraint_catalog_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj constraint_schema_default; - constraint_schema_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("CONSTRAINT_SCHEMA", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_DATABASE_NAME_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - constraint_schema_default, - constraint_schema_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj constraint_name_default; - constraint_name_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("CONSTRAINT_NAME", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_CONSTRAINT_NAME_LENGTH_ORACLE, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - constraint_name_default, - constraint_name_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj unique_constraint_catalog_default; - unique_constraint_catalog_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("UNIQUE_CONSTRAINT_CATALOG", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - MAX_TABLE_CATALOG_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - unique_constraint_catalog_default, - unique_constraint_catalog_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj unique_constraint_schema_default; - unique_constraint_schema_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("UNIQUE_CONSTRAINT_SCHEMA", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_DATABASE_NAME_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - unique_constraint_schema_default, - unique_constraint_schema_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj unique_constraint_name_default; - unique_constraint_name_default.set_null(); - ADD_COLUMN_SCHEMA_T("UNIQUE_CONSTRAINT_NAME", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_CONSTRAINT_NAME_LENGTH_ORACLE, //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false, //is_autoincrement - unique_constraint_name_default, - unique_constraint_name_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj match_option_default; - match_option_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("MATCH_OPTION", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - 64, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - match_option_default, - match_option_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj update_rule_default; - update_rule_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("UPDATE_RULE", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - 64, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - update_rule_default, - update_rule_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj delete_rule_default; - delete_rule_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("DELETE_RULE", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - 64, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - delete_rule_default, - delete_rule_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj table_name_default; - table_name_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("TABLE_NAME", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_TABLE_NAME_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - table_name_default, - table_name_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj referenced_table_name_default; - referenced_table_name_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("REFERENCED_TABLE_NAME", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_TABLE_NAME_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - referenced_table_name_default, - referenced_table_name_default); //default_value - } - table_schema.set_index_using_type(USING_HASH); - table_schema.set_row_store_type(ENCODING_ROW_STORE); - table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); - table_schema.set_progressive_merge_round(1); - table_schema.set_storage_format_version(3); - table_schema.set_tablet_id(0); - - table_schema.set_max_used_column_id(column_id); - return ret; -} - int ObInnerTableSchema::all_virtual_object_type_schema(ObTableSchema &table_schema) { int ret = OB_SUCCESS; diff --git a/src/share/inner_table/ob_inner_table_schema.12201_12250.cpp b/src/share/inner_table/ob_inner_table_schema.12201_12250.cpp index 895534f5a2..45d7b63325 100644 --- a/src/share/inner_table/ob_inner_table_schema.12201_12250.cpp +++ b/src/share/inner_table/ob_inner_table_schema.12201_12250.cpp @@ -3654,448 +3654,6 @@ int ObInnerTableSchema::all_virtual_tenant_memory_info_schema(ObTableSchema &tab return ret; } -int ObInnerTableSchema::triggers_schema(ObTableSchema &table_schema) -{ - int ret = OB_SUCCESS; - uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; - - //generated fields: - table_schema.set_tenant_id(OB_SYS_TENANT_ID); - table_schema.set_tablegroup_id(OB_INVALID_ID); - table_schema.set_database_id(OB_INFORMATION_SCHEMA_ID); - table_schema.set_table_id(OB_TRIGGERS_TID); - table_schema.set_rowkey_split_pos(0); - table_schema.set_is_use_bloomfilter(false); - table_schema.set_progressive_merge_num(0); - table_schema.set_rowkey_column_num(0); - table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); - table_schema.set_table_type(VIRTUAL_TABLE); - table_schema.set_index_type(INDEX_TYPE_IS_NOT); - table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); - - if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_table_name(OB_TRIGGERS_TNAME))) { - LOG_ERROR("fail to set table_name", K(ret)); - } - } - - if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { - LOG_ERROR("fail to set compress_func_name", K(ret)); - } - } - table_schema.set_part_level(PARTITION_LEVEL_ZERO); - table_schema.set_charset_type(ObCharset::get_default_charset()); - table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); - - if (OB_SUCC(ret)) { - ObObj trigger_catalog_default; - trigger_catalog_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("TRIGGER_CATALOG", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - 512, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - trigger_catalog_default, - trigger_catalog_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj trigger_schema_default; - trigger_schema_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("TRIGGER_SCHEMA", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - 64, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - trigger_schema_default, - trigger_schema_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj trigger_name_default; - trigger_name_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("TRIGGER_NAME", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - 64, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - trigger_name_default, - trigger_name_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj event_manipulation_default; - event_manipulation_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("EVENT_MANIPULATION", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - 6, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - event_manipulation_default, - event_manipulation_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj event_object_catalog_default; - event_object_catalog_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("EVENT_OBJECT_CATALOG", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - 512, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - event_object_catalog_default, - event_object_catalog_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj event_object_schema_default; - event_object_schema_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("EVENT_OBJECT_SCHEMA", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - 64, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - event_object_schema_default, - event_object_schema_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj event_object_table_default; - event_object_table_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("EVENT_OBJECT_TABLE", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - 64, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - event_object_table_default, - event_object_table_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj action_order_default; - action_order_default.set_int(0); - ADD_COLUMN_SCHEMA_T("ACTION_ORDER", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObIntType, //column_type - CS_TYPE_INVALID, //column_collation_type - sizeof(int64_t), //column_length - 4, //column_precision - 0, //column_scale - false, //is_nullable - false, //is_autoincrement - action_order_default, - action_order_default); //default_value - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("ACTION_CONDITION", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObLongTextType, //column_type - CS_TYPE_INVALID, //column_collation_type - 0, //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false); //is_autoincrement - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("ACTION_STATEMENT", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObLongTextType, //column_type - CS_TYPE_INVALID, //column_collation_type - 0, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false); //is_autoincrement - } - - if (OB_SUCC(ret)) { - ObObj action_orientation_default; - action_orientation_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("ACTION_ORIENTATION", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - 9, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - action_orientation_default, - action_orientation_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj action_timing_default; - action_timing_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("ACTION_TIMING", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - 6, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - action_timing_default, - action_timing_default); //default_value - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("ACTION_REFERENCE_OLD_TABLE", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - 64, //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false); //is_autoincrement - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("ACTION_REFERENCE_NEW_TABLE", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - 64, //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false); //is_autoincrement - } - - if (OB_SUCC(ret)) { - ObObj action_reference_old_row_default; - action_reference_old_row_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("ACTION_REFERENCE_OLD_ROW", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - 3, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - action_reference_old_row_default, - action_reference_old_row_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj action_reference_new_row_default; - action_reference_new_row_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("ACTION_REFERENCE_NEW_ROW", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - 3, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - action_reference_new_row_default, - action_reference_new_row_default); //default_value - } - - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("CREATED", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObDateTimeType, //column_type - CS_TYPE_INVALID, //column_collation_type - 0, //column_length - -1, //column_precision - -1, //column_scale - true, //is_nullable - false); //is_autoincrement - } - - if (OB_SUCC(ret)) { - ObObj sql_mode_default; - sql_mode_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("SQL_MODE", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - 8192, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - sql_mode_default, - sql_mode_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj definer_default; - definer_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("DEFINER", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - 189, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - definer_default, - definer_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj character_set_client_default; - character_set_client_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("CHARACTER_SET_CLIENT", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - 32, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - character_set_client_default, - character_set_client_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj collation_connection_default; - collation_connection_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("COLLATION_CONNECTION", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - 32, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - collation_connection_default, - collation_connection_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj database_collation_default; - database_collation_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("DATABASE_COLLATION", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - 32, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - database_collation_default, - database_collation_default); //default_value - } - table_schema.set_index_using_type(USING_HASH); - table_schema.set_row_store_type(ENCODING_ROW_STORE); - table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); - table_schema.set_progressive_merge_round(1); - table_schema.set_storage_format_version(3); - table_schema.set_tablet_id(0); - - table_schema.set_max_used_column_id(column_id); - return ret; -} - int ObInnerTableSchema::tenant_virtual_show_create_trigger_schema(ObTableSchema &table_schema) { int ret = OB_SUCCESS; @@ -8503,126 +8061,6 @@ int ObInnerTableSchema::all_virtual_ls_log_archive_progress_schema(ObTableSchema return ret; } -int ObInnerTableSchema::check_constraints_schema(ObTableSchema &table_schema) -{ - int ret = OB_SUCCESS; - uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; - - //generated fields: - table_schema.set_tenant_id(OB_SYS_TENANT_ID); - table_schema.set_tablegroup_id(OB_INVALID_ID); - table_schema.set_database_id(OB_INFORMATION_SCHEMA_ID); - table_schema.set_table_id(OB_CHECK_CONSTRAINTS_TID); - table_schema.set_rowkey_split_pos(0); - table_schema.set_is_use_bloomfilter(false); - table_schema.set_progressive_merge_num(0); - table_schema.set_rowkey_column_num(0); - table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); - table_schema.set_table_type(VIRTUAL_TABLE); - table_schema.set_index_type(INDEX_TYPE_IS_NOT); - table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); - - if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_table_name(OB_CHECK_CONSTRAINTS_TNAME))) { - LOG_ERROR("fail to set table_name", K(ret)); - } - } - - if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { - LOG_ERROR("fail to set compress_func_name", K(ret)); - } - } - table_schema.set_part_level(PARTITION_LEVEL_ZERO); - table_schema.set_charset_type(ObCharset::get_default_charset()); - table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); - - if (OB_SUCC(ret)) { - ObObj constraint_catalog_default; - constraint_catalog_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("CONSTRAINT_CATALOG", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - MAX_TABLE_CATALOG_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - constraint_catalog_default, - constraint_catalog_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj constraint_schema_default; - constraint_schema_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("CONSTRAINT_SCHEMA", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_DATABASE_NAME_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - constraint_schema_default, - constraint_schema_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj constraint_name_default; - constraint_name_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("CONSTRAINT_NAME", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_COLUMN_NAME_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - constraint_name_default, - constraint_name_default); //default_value - } - - if (OB_SUCC(ret)) { - ObObj check_clause_default; - check_clause_default.set_varchar(ObString::make_string("")); - ADD_COLUMN_SCHEMA_T("CHECK_CLAUSE", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - OB_MAX_CONSTRAINT_EXPR_LENGTH, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false, //is_autoincrement - check_clause_default, - check_clause_default); //default_value - } - table_schema.set_index_using_type(USING_HASH); - table_schema.set_row_store_type(ENCODING_ROW_STORE); - table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); - table_schema.set_progressive_merge_round(1); - table_schema.set_storage_format_version(3); - table_schema.set_tablet_id(0); - - table_schema.set_max_used_column_id(column_id); - return ret; -} - int ObInnerTableSchema::all_virtual_backup_storage_info_schema(ObTableSchema &table_schema) { int ret = OB_SUCCESS; diff --git a/src/share/inner_table/ob_inner_table_schema.15101_15150.cpp b/src/share/inner_table/ob_inner_table_schema.15101_15150.cpp index 302b298a1f..2abcd44f8d 100644 --- a/src/share/inner_table/ob_inner_table_schema.15101_15150.cpp +++ b/src/share/inner_table/ob_inner_table_schema.15101_15150.cpp @@ -6097,6 +6097,21 @@ int ObInnerTableSchema::all_virtual_table_real_agent_ora_schema(ObTableSchema &t false); //is_autoincrement } + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("OBJECT_STATUS", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObNumberType, //column_type + CS_TYPE_INVALID, //column_collation_type + 38, //column_length + 38, //column_precision + 0, //column_scale + false, //is_nullable + false); //is_autoincrement + } + if (OB_SUCC(ret)) { ADD_COLUMN_SCHEMA("GMT_CREATE", //column_name ++column_id, //column_id @@ -9327,6 +9342,21 @@ int ObInnerTableSchema::all_virtual_synonym_real_agent_ora_schema(ObTableSchema false); //is_autoincrement } + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("STATUS", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObNumberType, //column_type + CS_TYPE_INVALID, //column_collation_type + 38, //column_length + 38, //column_precision + 0, //column_scale + false, //is_nullable + false); //is_autoincrement + } + if (OB_SUCC(ret)) { ADD_COLUMN_SCHEMA("GMT_CREATE", //column_name ++column_id, //column_id diff --git a/src/share/inner_table/ob_inner_table_schema.151_200.cpp b/src/share/inner_table/ob_inner_table_schema.151_200.cpp index 9102e04269..e536cbd169 100644 --- a/src/share/inner_table/ob_inner_table_schema.151_200.cpp +++ b/src/share/inner_table/ob_inner_table_schema.151_200.cpp @@ -4877,6 +4877,25 @@ int ObInnerTableSchema::all_synonym_schema(ObTableSchema &table_schema) false, //is_nullable false); //is_autoincrement } + + if (OB_SUCC(ret)) { + ObObj status_default; + status_default.set_int(1); + ADD_COLUMN_SCHEMA_T("status", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObIntType, //column_type + CS_TYPE_INVALID, //column_collation_type + sizeof(int64_t), //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false, //is_autoincrement + status_default, + status_default); //default_value + } table_schema.set_index_using_type(USING_BTREE); table_schema.set_row_store_type(ENCODING_ROW_STORE); table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); @@ -5097,6 +5116,25 @@ int ObInnerTableSchema::all_synonym_history_schema(ObTableSchema &table_schema) true, //is_nullable false); //is_autoincrement } + + if (OB_SUCC(ret)) { + ObObj status_default; + status_default.set_int(1); + ADD_COLUMN_SCHEMA_T("status", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObIntType, //column_type + CS_TYPE_INVALID, //column_collation_type + sizeof(int64_t), //column_length + -1, //column_precision + -1, //column_scale + true, //is_nullable + false, //is_autoincrement + status_default, + status_default); //default_value + } table_schema.set_index_using_type(USING_BTREE); table_schema.set_row_store_type(ENCODING_ROW_STORE); table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); diff --git a/src/share/inner_table/ob_inner_table_schema.15201_15250.cpp b/src/share/inner_table/ob_inner_table_schema.15201_15250.cpp index 31850244de..482e5fdc5c 100644 --- a/src/share/inner_table/ob_inner_table_schema.15201_15250.cpp +++ b/src/share/inner_table/ob_inner_table_schema.15201_15250.cpp @@ -5835,6 +5835,21 @@ int ObInnerTableSchema::all_virtual_core_all_table_ora_schema(ObTableSchema &tab true, //is_nullable false); //is_autoincrement } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("OBJECT_STATUS", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObNumberType, //column_type + CS_TYPE_INVALID, //column_collation_type + 38, //column_length + 38, //column_precision + 0, //column_scale + false, //is_nullable + false); //is_autoincrement + } table_schema.set_index_using_type(USING_HASH); table_schema.set_row_store_type(ENCODING_ROW_STORE); table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); diff --git a/src/share/inner_table/ob_inner_table_schema.1_50.cpp b/src/share/inner_table/ob_inner_table_schema.1_50.cpp index d33c2b4cb7..066227c33d 100644 --- a/src/share/inner_table/ob_inner_table_schema.1_50.cpp +++ b/src/share/inner_table/ob_inner_table_schema.1_50.cpp @@ -1393,6 +1393,25 @@ int ObInnerTableSchema::all_table_schema(ObTableSchema &table_schema) true, //is_nullable false); //is_autoincrement } + + if (OB_SUCC(ret)) { + ObObj object_status_default; + object_status_default.set_int(1); + ADD_COLUMN_SCHEMA_T("object_status", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObIntType, //column_type + CS_TYPE_INVALID, //column_collation_type + sizeof(int64_t), //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false, //is_autoincrement + object_status_default, + object_status_default); //default_value + } table_schema.set_index_using_type(USING_BTREE); table_schema.set_row_store_type(ENCODING_ROW_STORE); table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); diff --git a/src/share/inner_table/ob_inner_table_schema.20001_20050.cpp b/src/share/inner_table/ob_inner_table_schema.20001_20050.cpp index c5e600b2a8..67a2ff80d8 100644 --- a/src/share/inner_table/ob_inner_table_schema.20001_20050.cpp +++ b/src/share/inner_table/ob_inner_table_schema.20001_20050.cpp @@ -309,7 +309,7 @@ int ObInnerTableSchema::statistics_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT 'def' as TABLE_CATALOG, table_schema AS TABLE_SCHEMA, `table` as TABLE_NAME, non_unique AS NON_UNIQUE, index_schema as INDEX_SCHEMA, key_name as INDEX_NAME, seq_in_index as SEQ_IN_INDEX, column_name as COLUMN_NAME, collation as COLLATION, cardinality as CARDINALITY, sub_part as SUB_PART, packed as PACKED, `null` as NULLABLE, index_type as INDEX_TYPE, COMMENT, index_comment as INDEX_COMMENT, is_visible as IS_VISIBLE FROM oceanbase.__tenant_virtual_table_index )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST('def' AS CHAR(512)) AS TABLE_CATALOG, V.TABLE_SCHEMA AS TABLE_SCHEMA, V.TABLE_NAME AS TABLE_NAME, CAST(V.NON_UNIQUE AS SIGNED) AS NON_UNIQUE, V.INDEX_SCHEMA AS INDEX_SCHEMA, V.INDEX_NAME AS INDEX_NAME, CAST(V.SEQ_IN_INDEX AS UNSIGNED) AS SEQ_IN_INDEX, V.COLUMN_NAME AS COLUMN_NAME, CAST('A' AS CHAR(1)) AS COLLATION, CAST(NULL AS SIGNED) AS CARDINALITY, CAST(V.SUB_PART AS SIGNED) AS SUB_PART, CAST(NULL AS CHAR(10)) AS PACKED, CAST(V.NULLABLE AS CHAR(3)) AS NULLABLE, CAST(V.INDEX_TYPE AS CHAR(16)) AS INDEX_TYPE, CAST(V.COMMENT AS CHAR(16)) AS COMMENT, CAST(V.INDEX_COMMENT AS CHAR(1024)) AS INDEX_COMMENT, CAST('YES' AS CHAR(3)) AS IS_VISIBLE FROM (SELECT db.database_name AS TABLE_SCHEMA, t.table_name AS TABLE_NAME, CASE WHEN i.index_type IN (2,4,8) THEN 0 ELSE 1 END AS NON_UNIQUE, db.database_name AS INDEX_SCHEMA, substr(i.table_name, 7 + instr(substr(i.table_name, 7), '_')) AS INDEX_NAME, c.index_position AS SEQ_IN_INDEX, CASE WHEN d_col.column_name IS NOT NULL THEN d_col.column_name ELSE c.column_name END AS COLUMN_NAME, CASE WHEN d_col.column_name IS NOT NULL THEN c.data_length ELSE NULL END AS SUB_PART, CASE WHEN c.nullable = 1 THEN 'YES' ELSE NULL END AS NULLABLE, CASE WHEN i.index_using_type = 0 THEN 'BTREE' ELSE (CASE WHEN i.index_using_type = 1 THEN 'HASH' ELSE 'UNKOWN' END)END AS INDEX_TYPE, t.comment AS COMMENT, i.comment AS INDEX_COMMENT FROM oceanbase.__all_table i JOIN oceanbase.__all_table t ON i.data_table_id=t.table_id AND i.tenant_id = t.tenant_id AND i.database_id = t.database_id AND i.table_type = 5 AND t.table_type in (0,3) JOIN oceanbase.__all_column c ON i.table_id=c.table_id AND i.tenant_id = c.tenant_id AND c.index_position > 0 JOIN oceanbase.__all_database db ON i.tenant_id = db.tenant_id AND i.database_id = db.database_id AND db.in_recyclebin = 0 AND db.database_name != '__recyclebin' LEFT JOIN oceanbase.__all_column d_col ON c.is_hidden = 1 AND substr(c.column_name, 1, 8) = '__substr' AND i.data_table_id = d_col.table_id AND i.tenant_id = d_col.tenant_id AND substr(c.column_name, 8 + instr(substr(c.column_name, 8), '_')) = d_col.column_id UNION ALL SELECT db.database_name AS TABLE_SCHEMA, t.table_name AS TABLE_NAME, 0 AS NON_UNIQUE, db.database_name AS INDEX_SCHEMA, 'PRIMARY' AS INDEX_NAME, c.rowkey_position AS SEQ_IN_INDEX, c.column_name AS COLUMN_NAME, NULL AS SUB_PART, NULL AS NULLABLE, CASE WHEN t.index_using_type = 0 THEN 'BTREE' ELSE ( CASE WHEN t.index_using_type = 1 THEN 'HASH' ELSE 'UNKOWN' END) END AS INDEX_TYPE, t.comment AS COMMENT, t.comment AS INDEX_COMMENT FROM oceanbase.__all_table t JOIN oceanbase.__all_column c ON t.table_id=c.table_id AND t.tenant_id = c.tenant_id AND c.rowkey_position > 0 AND c.is_hidden = 0 AND t.table_type in (0,3) JOIN oceanbase.__all_database db ON t.tenant_id = db.tenant_id AND t.database_id = db.database_id AND db.in_recyclebin = 0 AND db.database_name != '__recyclebin' UNION ALL SELECT db.database_name AS TABLE_SCHEMA, t.table_name AS TABLE_NAME, CASE WHEN i.index_type IN (2,4,8) THEN 0 ELSE 1 END AS NON_UNIQUE, db.database_name AS INDEX_SCHEMA, substr(i.table_name, 7 + instr(substr(i.table_name, 7), '_')) AS INDEX_NAME, c.index_position AS SEQ_IN_INDEX, CASE WHEN d_col.column_name IS NOT NULL THEN d_col.column_name ELSE c.column_name END AS COLUMN_NAME, CASE WHEN d_col.column_name IS NOT NULL THEN c.data_length ELSE NULL END AS SUB_PART, CASE WHEN c.nullable = 1 THEN 'YES' ELSE NULL END AS NULLABLE, CASE WHEN i.index_using_type = 0 THEN 'BTREE' ELSE (CASE WHEN i.index_using_type = 1 THEN 'HASH' ELSE 'UNKOWN' END)END AS INDEX_TYPE, t.comment AS COMMENT, i.comment AS INDEX_COMMENT FROM oceanbase.__ALL_VIRTUAL_CORE_ALL_TABLE i JOIN oceanbase.__ALL_VIRTUAL_CORE_ALL_TABLE t ON i.data_table_id=t.table_id AND i.tenant_id = t.tenant_id AND i.database_id = t.database_id AND i.table_type = 5 AND t.table_type in (0,3) AND t.tenant_id = EFFECTIVE_TENANT_ID() JOIN oceanbase.__ALL_VIRTUAL_CORE_COLUMN_TABLE c ON i.table_id=c.table_id AND i.tenant_id = c.tenant_id AND c.index_position > 0 JOIN oceanbase.__all_database db ON i.database_id = db.database_id LEFT JOIN oceanbase.__ALL_VIRTUAL_CORE_COLUMN_TABLE d_col ON c.is_hidden = 1 AND substr(c.column_name, 1, 8) = '__substr' AND i.data_table_id = d_col.table_id AND i.tenant_id = d_col.tenant_id AND substr(c.column_name, 8 + instr(substr(c.column_name, 8), '_')) = d_col.column_id UNION ALL SELECT db.database_name AS TABLE_SCHEMA, t.table_name AS TABLE_NAME, 0 AS NON_UNIQUE, db.database_name AS INDEX_SCHEMA, 'PRIMARY' AS INDEX_NAME, c.rowkey_position AS SEQ_IN_INDEX, c.column_name AS COLUMN_NAME, NULL AS SUB_PART, NULL AS NULLABLE, CASE WHEN t.index_using_type = 0 THEN 'BTREE' ELSE ( CASE WHEN t.index_using_type = 1 THEN 'HASH' ELSE 'UNKOWN' END) END AS INDEX_TYPE, t.comment AS COMMENT, t.comment AS INDEX_COMMENT FROM oceanbase.__ALL_VIRTUAL_CORE_ALL_TABLE t JOIN oceanbase.__ALL_VIRTUAL_CORE_COLUMN_TABLE c ON t.table_id=c.table_id AND t.tenant_id = c.tenant_id AND t.tenant_id = EFFECTIVE_TENANT_ID() AND c.rowkey_position > 0 AND c.is_hidden = 0 AND t.table_type in (0,3) JOIN oceanbase.__all_database db ON t.database_id = db.database_id)V )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -359,7 +359,7 @@ int ObInnerTableSchema::views_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__(select 'def' AS TABLE_CATALOG, d.database_name as TABLE_SCHEMA, t.table_name as TABLE_NAME, t.view_definition as VIEW_DEFINITION, case t.view_check_option when 1 then 'LOCAL' when 2 then 'CASCADED' else 'NONE' end as CHECK_OPTION, case t.view_is_updatable when 1 then 'YES' else 'NO' end as IS_UPDATABLE, case t.define_user_id when -1 then 'NONE' else concat(u.user_name, '@', u.host) end as DEFINER, 'NONE' AS SECURITY_TYPE, case t.collation_type when 45 then 'utf8mb4' else 'NONE' end AS CHARACTER_SET_CLIENT, case t.collation_type when 45 then 'utf8mb4_general_ci' else 'NONE' end AS COLLATION_CONNECTION from oceanbase.__all_table as t join oceanbase.__all_database as d on t.tenant_id = d.tenant_id and t.database_id = d.database_id left join oceanbase.__all_user as u on t.tenant_id = u.tenant_id and t.define_user_id = u.user_id and t.define_user_id != -1 where t.tenant_id = 0 and t.table_type in (1, 4) and d.in_recyclebin = 0 and d.database_name != '__recyclebin' and d.database_name != 'information_schema' and d.database_name != 'oceanbase' and 0 = sys_privilege_check('table_acc', effective_tenant_id(), d.database_name, t.table_name) )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__(select cast('def' as CHAR(64)) AS TABLE_CATALOG, d.database_name as TABLE_SCHEMA, t.table_name as TABLE_NAME, t.view_definition as VIEW_DEFINITION, case t.view_check_option when 1 then 'LOCAL' when 2 then 'CASCADED' else 'NONE' end as CHECK_OPTION, case t.view_is_updatable when 1 then 'YES' else 'NO' end as IS_UPDATABLE, cast((case t.define_user_id when -1 then 'NONE' else concat(u.user_name, '@', u.host) end) as CHAR(288)) as DEFINER, cast('NONE' as CHAR(7)) AS SECURITY_TYPE, cast((case t.collation_type when 45 then 'utf8mb4' else 'NONE' end) as CHAR(64)) AS CHARACTER_SET_CLIENT, cast((case t.collation_type when 45 then 'utf8mb4_general_ci' else 'NONE' end) as CHAR(64)) AS COLLATION_CONNECTION from oceanbase.__all_table as t join oceanbase.__all_database as d on t.tenant_id = d.tenant_id and t.database_id = d.database_id left join oceanbase.__all_user as u on t.tenant_id = u.tenant_id and t.define_user_id = u.user_id and t.define_user_id != -1 where t.tenant_id = 0 and t.table_type in (1, 4) and d.in_recyclebin = 0 and d.database_name != '__recyclebin' and d.database_name != 'information_schema' and d.database_name != 'oceanbase' and 0 = sys_privilege_check('table_acc', effective_tenant_id(), d.database_name, t.table_name) )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -409,7 +409,7 @@ int ObInnerTableSchema::tables_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( select /*+ leading(a) no_use_nl(ts)*/ 'def' as TABLE_CATALOG, b.database_name as TABLE_SCHEMA, a.table_name as TABLE_NAME, case when (a.database_id = 201002 or a.table_type = 1) then 'SYSTEM VIEW' when a.table_type in (0, 2) then 'SYSTEM TABLE' when a.table_type = 4 then 'VIEW' else 'BASE TABLE' end as TABLE_TYPE, NULL as ENGINE, NULL as VERSION, NULL as ROW_FORMAT, cast(ts.row_cnt as unsigned) as TABLE_ROWS, cast(ts.avg_row_len as unsigned) as AVG_ROW_LENGTH, cast(ts.data_size as unsigned) as DATA_LENGTH, NULL as MAX_DATA_LENGTH, NULL as INDEX_LENGTH, NULL as DATA_FREE, NULL as AUTO_INCREMENT, a.gmt_create as CREATE_TIME, a.gmt_modified as UPDATE_TIME, NULL as CHECK_TIME, d.collation as TABLE_COLLATION, cast(NULL as unsigned) as CHECKSUM, NULL as CREATE_OPTIONS, a.comment as TABLE_COMMENT from ( select cast(0 as signed) as tenant_id, c.database_id, c.table_id, c.table_name, c.collation_type, c.table_type, usec_to_time(d.schema_version) as gmt_create, usec_to_time(c.schema_version) as gmt_modified, c.comment from oceanbase.__all_virtual_core_all_table c join oceanbase.__all_virtual_core_all_table d on c.tenant_id = d.tenant_id and d.table_name = '__all_core_table' where c.tenant_id = effective_tenant_id() union all select tenant_id, database_id, table_id, table_name, collation_type, table_type, gmt_create, gmt_modified, comment from oceanbase.__all_table) a join oceanbase.__all_database b on a.database_id = b.database_id and a.tenant_id = b.tenant_id join oceanbase.__tenant_virtual_collation d on a.collation_type = d.collation_type left join ( select tenant_id, table_id, sum(row_cnt) as row_cnt, sum(row_cnt * avg_row_len) / sum(row_cnt) as avg_row_len, sum(row_cnt * avg_row_len) as data_size from oceanbase.__all_table_stat group by tenant_id, table_id) ts on a.table_id = ts.table_id and a.tenant_id = ts.tenant_id where a.tenant_id = 0 and a.table_type in (0, 1, 2, 3, 4) and b.database_name != '__recyclebin' and b.in_recyclebin = 0 and 0 = sys_privilege_check('table_acc', effective_tenant_id(), b.database_name, a.table_name) )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( select /*+ leading(a) no_use_nl(ts)*/ cast('def' as char(512)) as TABLE_CATALOG, cast(b.database_name as char(64)) as TABLE_SCHEMA, cast(a.table_name as char(64)) as TABLE_NAME, cast(case when (a.database_id = 201002 or a.table_type = 1) then 'SYSTEM VIEW' when a.table_type in (0, 2) then 'SYSTEM TABLE' when a.table_type = 4 then 'VIEW' else 'BASE TABLE' end as char(64)) as TABLE_TYPE, cast(NULL as char(64)) as ENGINE, cast(NULL as unsigned) as VERSION, cast(NULL as char(10)) as ROW_FORMAT, cast( coalesce(ts.row_cnt,0) as unsigned) as TABLE_ROWS, cast( coalesce(ts.avg_row_len,0) as unsigned) as AVG_ROW_LENGTH, cast( coalesce(ts.data_size,0) as unsigned) as DATA_LENGTH, cast(NULL as unsigned) as MAX_DATA_LENGTH, cast(NULL as unsigned) as INDEX_LENGTH, cast(NULL as unsigned) as DATA_FREE, cast(NULL as unsigned) as AUTO_INCREMENT, cast(a.gmt_create as datetime) as CREATE_TIME, cast(a.gmt_modified as datetime) as UPDATE_TIME, cast(NULL as datetime) as CHECK_TIME, cast(d.collation as char(32)) as TABLE_COLLATION, cast(NULL as unsigned) as CHECKSUM, cast(NULL as char(255)) as CREATE_OPTIONS, cast(case when a.table_type = 4 then 'VIEW' else a.comment end as char(2048)) as TABLE_COMMENT from ( select cast(0 as signed) as tenant_id, c.database_id, c.table_id, c.table_name, c.collation_type, c.table_type, usec_to_time(d.schema_version) as gmt_create, usec_to_time(c.schema_version) as gmt_modified, c.comment from oceanbase.__all_virtual_core_all_table c join oceanbase.__all_virtual_core_all_table d on c.tenant_id = d.tenant_id and d.table_name = '__all_core_table' where c.tenant_id = effective_tenant_id() union all select tenant_id, database_id, table_id, table_name, collation_type, table_type, gmt_create, gmt_modified, comment from oceanbase.__all_table) a join oceanbase.__all_database b on a.database_id = b.database_id and a.tenant_id = b.tenant_id join oceanbase.__tenant_virtual_collation d on a.collation_type = d.collation_type left join ( select tenant_id, table_id, sum(row_cnt) as row_cnt, sum(row_cnt * avg_row_len) / sum(row_cnt) as avg_row_len, sum(row_cnt * avg_row_len) as data_size from oceanbase.__all_table_stat group by tenant_id, table_id) ts on a.table_id = ts.table_id and a.tenant_id = ts.tenant_id where a.tenant_id = 0 and a.table_type in (0, 1, 2, 3, 4) and b.database_name != '__recyclebin' and b.in_recyclebin = 0 and 0 = sys_privilege_check('table_acc', effective_tenant_id(), b.database_name, a.table_name) )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -659,7 +659,7 @@ int ObInnerTableSchema::engines_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT ENGINE, SUPPORT, COMMENT, TRANSACTIONS, XA, SAVEPOINTS FROM oceanbase.__all_virtual_engine )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST('OceanBase' as CHAR(64)) as ENGINE, CAST('YES' AS CHAR(8)) as SUPPORT, CAST('Supports transactions' as CHAR(80)) as COMMENT, CAST('YES' as CHAR(3)) as TRANSACTIONS, CAST('NO' as CHAR(3)) as XA, CAST('YES' as CHAR(3)) as SAVEPOINTS FROM DUAL; )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -709,7 +709,7 @@ int ObInnerTableSchema::routines_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( select SPECIFIC_NAME, 'def' as ROUTINE_CATALOG, db as ROUTINE_SCHEMA, name as ROUTINE_NAME, type as ROUTINE_TYPE, '' as DATA_TYPE, NULL as CHARACTER_MAXIMUM_LENGTH, NULL as CHARACTER_OCTET_LENGTH, NULL as NUMERIC_PRECISION, NULL as NUMERIC_SCALE, NULL as DATETIME_PRECISION, NULL as CHARACTER_SET_NAME, NULL as COLLATION_NAME, NULL as DTD_IDENTIFIER, 'SQL' as ROUTINE_BODY, body as ROUTINE_DEFINITION, NULL as EXTERNAL_NAME, NULL as EXTERNAL_LANGUAGE, 'SQL' as PARAMETER_STYLE, IS_DETERMINISTIC, SQL_DATA_ACCESS, NULL as SQL_PATH, SECURITY_TYPE, CREATED, modified as LAST_ALTERED, SQL_MODE, comment as ROUTINE_COMMENT, DEFINER, CHARACTER_SET_CLIENT, COLLATION_CONNECTION, collation_database as DATABASE_COLLATION from mysql.proc )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__(select CAST(mp.specific_name AS CHAR(64)) AS SPECIFIC_NAME, CAST('def' AS CHAR(512)) as ROUTINE_CATALOG, CAST(mp.db AS CHAR(64)) as ROUTINE_SCHEMA, CAST(mp.name AS CHAR(64)) as ROUTINE_NAME, CAST(mp.type AS CHAR(9)) as ROUTINE_TYPE, CAST(lower(v.data_type_str) AS CHAR(64)) AS DATA_TYPE, CAST( CASE WHEN mp.type = 'FUNCTION' THEN CASE WHEN rp.param_type IN (22, 23, 27, 28, 29, 30) THEN rp.param_length ELSE NULL END ELSE NULL END AS SIGNED ) as CHARACTER_MAXIMUM_LENGTH, CASE WHEN rp.param_type IN (22, 23, 27, 28, 29, 30, 43, 44, 46) THEN CAST( rp.param_length * CASE rp.param_coll_type WHEN 63 THEN 1 WHEN 249 THEN 4 WHEN 248 THEN 4 WHEN 87 THEN 2 WHEN 28 THEN 2 WHEN 55 THEN 4 WHEN 54 THEN 4 WHEN 101 THEN 2 WHEN 46 THEN 4 WHEN 45 THEN 4 WHEN 224 THEN 4 ELSE 1 END AS SIGNED ) ELSE CAST(NULL AS SIGNED) END AS CHARACTER_OCTET_LENGTH, CASE WHEN rp.param_type IN (1, 2, 3, 4, 5, 15, 16) THEN CAST(rp.param_precision AS UNSIGNED) ELSE CAST(NULL AS UNSIGNED) END AS NUMERIC_PRECISION, CASE WHEN rp.param_type IN (15, 16) THEN CAST(rp.param_scale AS SIGNED) WHEN rp.param_type IN (1, 2, 3, 4, 5, 11, 12, 13, 14) THEN CAST(0 AS SIGNED) ELSE CAST(NULL AS SIGNED) END AS NUMERIC_SCALE, CASE WHEN rp.param_type IN (17, 18, 20) THEN CAST(rp.param_scale AS UNSIGNED) ELSE CAST(NULL AS UNSIGNED) END AS DATETIME_PRECISION, CAST( CASE rp.param_charset WHEN 1 THEN "binary" WHEN 2 THEN "utf8mb4" WHEN 3 THEN "gbk" WHEN 4 THEN "utf16" WHEN 5 THEN "gb18030" ELSE NULL END AS CHAR(64) ) AS CHARACTER_SET_NAME, CAST( CASE rp.param_coll_type WHEN 45 THEN 'utf8mb4_general_ci' WHEN 46 THEN 'utf8mb4_bin' WHEN 63 THEN 'binary' ELSE NULL END AS CHAR(64) ) AS COLLATION_NAME, CAST( CASE WHEN rp.param_type IN (1, 2, 3, 4, 5) THEN CONCAT( lower(v.data_type_str), '(', rp.param_precision, ')' ) WHEN rp.param_type IN (15, 16) THEN CONCAT( lower(v.data_type_str), '(', rp.param_precision, ',', rp.param_scale, ')' ) WHEN rp.param_type IN (18, 20) THEN CONCAT(lower(v.data_type_str), '(', rp.param_scale, ')') ELSE lower(v.data_type_str) END AS CHAR(4194304) ) AS DTD_IDENTIFIER, CAST('SQL' AS CHAR(8)) as ROUTINE_BODY, CAST(mp.body AS CHAR(4194304)) as ROUTINE_DEFINITION, CAST(NULL AS CHAR(64)) as EXTERNAL_NAME, CAST(NULL AS CHAR(64)) as EXTERNAL_LANGUAGE, CAST('SQL' AS CHAR(8)) as PARAMETER_STYLE, CAST(mp.IS_DETERMINISTIC AS CHAR(3)) AS IS_DETERMINISTIC, CAST(mp.SQL_DATA_ACCESS AS CHAR(64)) AS SQL_DATA_ACCESS, CAST(NULL AS CHAR(64)) as SQL_PATH, CAST(mp.SECURITY_TYPE AS CHAR(7)) as SECURITY_TYPE, CAST(r.gmt_create AS datetime) as CREATED, CAST(r.gmt_modified AS datetime) as LAST_ALTERED, CAST(mp.SQL_MODE AS CHAR(8192)) as SQL_MODE, CAST(mp.comment AS CHAR(4194304)) as ROUTINE_COMMENT, CAST(mp.DEFINER AS CHAR(93)) as DEFINER, CAST(mp.CHARACTER_SET_CLIENT AS CHAR(32)) as CHARACTER_SET_CLIENT, CAST(mp.COLLATION_CONNECTION AS CHAR(32)) as COLLATION_CONNECTION, CAST(mp.collation_database AS CHAR(32)) as DATABASE_COLLATION from mysql.proc as mp join oceanbase.__all_routine as r on mp.specific_name = r.routine_name left join oceanbase.__all_routine_param as rp on rp.subprogram_id = r.subprogram_id and rp.tenant_id = r.tenant_id and rp.routine_id = r.routine_id and rp.param_position = 0 left join oceanbase.__all_virtual_data_type v on rp.param_type = v.data_type )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema.21151_21200.cpp b/src/share/inner_table/ob_inner_table_schema.21151_21200.cpp index f005591642..b008fd0eb5 100644 --- a/src/share/inner_table/ob_inner_table_schema.21151_21200.cpp +++ b/src/share/inner_table/ob_inner_table_schema.21151_21200.cpp @@ -109,7 +109,7 @@ int ObInnerTableSchema::view_table_usage_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( select 'def' AS VIEW_CATALOG, v.VIEW_SCHEMA as VIEW_SCHEMA, v.VIEW_NAME as VIEW_NAME, t.TABLE_SCHEMA as TABLE_SCHEMA, t.TABLE_NAME as TABLE_NAME, 'def' AS TABLE_CATALOG from (select o.tenant_id, o.database_name as VIEW_SCHEMA, o.table_name as VIEW_NAME, d.dep_obj_id as DEP_OBJ_ID, d.ref_obj_id as REF_OBJ_ID from (select t.tenant_id, d.database_name as database_name, t.table_name as table_name, t.table_id as table_id from oceanbase.__all_table as t join oceanbase.__all_database as d on t.tenant_id = d.tenant_id and t.database_id = d.database_id) o join oceanbase.__all_tenant_dependency d on o.tenant_id = d.tenant_id and d.dep_obj_id = o.table_id) v join (select o.tenant_id, o.database_name as TABLE_SCHEMA, o.table_name as TABLE_NAME, d.dep_obj_id as DEP_OBJ_ID, d.ref_obj_id as REF_OBJ_ID from (select t.tenant_id, d.database_name as database_name, t.table_name as table_name, t.table_id as table_id from oceanbase.__all_table as t join oceanbase.__all_database as d on t.tenant_id = d.tenant_id and t.database_id = d.database_id) o join oceanbase.__all_tenant_dependency d on o.tenant_id = d.tenant_id and d.ref_obj_id = o.table_id) t on t.tenant_id = v.tenant_id and v.dep_obj_id = t.dep_obj_id and v.ref_obj_id = t.ref_obj_id where v.tenant_id = 0 )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( select cast('def' as CHAR(64)) AS VIEW_CATALOG, v.VIEW_SCHEMA as VIEW_SCHEMA, v.VIEW_NAME as VIEW_NAME, t.TABLE_SCHEMA as TABLE_SCHEMA, t.TABLE_NAME as TABLE_NAME, cast('def' as CHAR(64)) AS TABLE_CATALOG from (select o.tenant_id, o.database_name as VIEW_SCHEMA, o.table_name as VIEW_NAME, d.dep_obj_id as DEP_OBJ_ID, d.ref_obj_id as REF_OBJ_ID from (select t.tenant_id, d.database_name as database_name, t.table_name as table_name, t.table_id as table_id from oceanbase.__all_table as t join oceanbase.__all_database as d on t.tenant_id = d.tenant_id and t.database_id = d.database_id) o join oceanbase.__all_tenant_dependency d on o.tenant_id = d.tenant_id and d.dep_obj_id = o.table_id) v join (select o.tenant_id, o.database_name as TABLE_SCHEMA, o.table_name as TABLE_NAME, d.dep_obj_id as DEP_OBJ_ID, d.ref_obj_id as REF_OBJ_ID from (select t.tenant_id, d.database_name as database_name, t.table_name as table_name, t.table_id as table_id from oceanbase.__all_table as t join oceanbase.__all_database as d on t.tenant_id = d.tenant_id and t.database_id = d.database_id) o join oceanbase.__all_tenant_dependency d on o.tenant_id = d.tenant_id and d.ref_obj_id = o.table_id) t on t.tenant_id = v.tenant_id and v.dep_obj_id = t.dep_obj_id and v.ref_obj_id = t.ref_obj_id where v.tenant_id = 0 )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -1909,7 +1909,7 @@ int ObInnerTableSchema::cdb_objects_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(A.TENANT_ID AS SIGNED) AS CON_ID, CAST(B.DATABASE_NAME AS CHAR(128)) AS OWNER, CAST(A.OBJECT_NAME AS CHAR(128)) AS OBJECT_NAME, CAST(A.SUBOBJECT_NAME AS CHAR(128)) AS SUBOBJECT_NAME, CAST(A.OBJECT_ID AS SIGNED) AS OBJECT_ID, CAST(A.DATA_OBJECT_ID AS SIGNED) AS DATA_OBJECT_ID, CAST(A.OBJECT_TYPE AS CHAR(23)) AS OBJECT_TYPE, CAST(A.GMT_CREATE AS DATETIME) AS CREATED, CAST(A.GMT_MODIFIED AS DATETIME) AS LAST_DDL_TIME, CAST(A.GMT_CREATE AS DATETIME) AS TIMESTAMP, CAST(A.STATUS AS CHAR(7)) AS STATUS, CAST(A.TEMPORARY AS CHAR(1)) AS TEMPORARY, CAST(A.`GENERATED` AS CHAR(1)) AS "GENERATED", CAST(A.SECONDARY AS CHAR(1)) AS SECONDARY, CAST(A.NAMESPACE AS SIGNED) AS NAMESPACE, CAST(A.EDITION_NAME AS CHAR(128)) AS EDITION_NAME, CAST(NULL AS CHAR(18)) AS SHARING, CAST(NULL AS CHAR(1)) AS EDITIONABLE, CAST(NULL AS CHAR(1)) AS ORACLE_MAINTAINED, CAST(NULL AS CHAR(1)) AS APPLICATION, CAST(NULL AS CHAR(1)) AS DEFAULT_COLLATION, CAST(NULL AS CHAR(1)) AS DUPLICATED, CAST(NULL AS CHAR(1)) AS SHARDED, CAST(NULL AS CHAR(1)) AS IMPORTED_OBJECT, CAST(NULL AS SIGNED) AS CREATED_APPID, CAST(NULL AS SIGNED) AS CREATED_VSNID, CAST(NULL AS SIGNED) AS MODIFIED_APPID, CAST(NULL AS SIGNED) AS MODIFIED_VSNID FROM ( SELECT A.TENANT_ID, USEC_TO_TIME(B.SCHEMA_VERSION) AS GMT_CREATE, USEC_TO_TIME(A.SCHEMA_VERSION) AS GMT_MODIFIED, A.DATABASE_ID, A.TABLE_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, CAST(A.TABLE_ID AS SIGNED) AS OBJECT_ID, A.TABLET_ID AS DATA_OBJECT_ID, 'TABLE' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_CORE_ALL_TABLE A JOIN OCEANBASE.__ALL_VIRTUAL_CORE_ALL_TABLE B ON A.TENANT_ID = B.TENANT_ID AND B.TABLE_NAME = '__all_core_table' UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,CAST((CASE WHEN DATABASE_ID = 201004 THEN TABLE_NAME WHEN TABLE_TYPE = 5 THEN SUBSTR(TABLE_NAME, 7 + POSITION('_' IN SUBSTR(TABLE_NAME, 7))) ELSE TABLE_NAME END) AS CHAR(128)) AS OBJECT_NAME ,NULL SUBOBJECT_NAME ,TABLE_ID OBJECT_ID ,(CASE WHEN TABLET_ID != 0 THEN TABLET_ID ELSE NULL END) DATA_OBJECT_ID ,CASE WHEN TABLE_TYPE IN (0,3,6,8,9) THEN 'TABLE' WHEN TABLE_TYPE IN (2) THEN 'VIRTUAL TABLE' WHEN TABLE_TYPE IN (1,4) THEN 'VIEW' WHEN TABLE_TYPE IN (5) THEN 'INDEX' WHEN TABLE_TYPE IN (7) THEN 'MATERIALIZED VIEW' ELSE NULL END AS OBJECT_TYPE ,CAST(CASE WHEN TABLE_TYPE IN (5) THEN CASE WHEN INDEX_STATUS = 2 THEN 'VALID' WHEN INDEX_STATUS = 3 THEN 'CHECKING' WHEN INDEX_STATUS = 4 THEN 'INELEGIBLE' WHEN INDEX_STATUS = 5 THEN 'ERROR' ELSE 'UNUSABLE' END ELSE 'VALID' END AS CHAR(10)) AS STATUS ,CASE WHEN TABLE_TYPE IN (6,8,9) THEN 'Y' ELSE 'N' END AS TEMPORARY ,CASE WHEN TABLE_TYPE IN (0,1) THEN 'Y' ELSE 'N' END AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_TABLE WHERE TABLE_TYPE != 12 AND TABLE_TYPE != 13 UNION ALL SELECT CST.TENANT_ID ,CST.GMT_CREATE ,CST.GMT_MODIFIED ,DB.DATABASE_ID ,CST.constraint_name AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,TBL.TABLE_ID AS OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'INDEX' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_CONSTRAINT CST, OCEANBASE.__ALL_VIRTUAL_TABLE TBL, OCEANBASE.__ALL_VIRTUAL_DATABASE DB WHERE CST.TENANT_ID = TBL.TENANT_ID AND TBL.TENANT_ID = DB.TENANT_ID AND DB.DATABASE_ID = TBL.DATABASE_ID AND TBL.TABLE_ID = CST.TABLE_ID and CST.CONSTRAINT_TYPE = 1 UNION ALL SELECT P.TENANT_ID ,P.GMT_CREATE ,P.GMT_MODIFIED ,T.DATABASE_ID ,CAST((CASE WHEN T.DATABASE_ID = 201004 THEN T.TABLE_NAME WHEN T.TABLE_TYPE = 5 THEN SUBSTR(T.TABLE_NAME, 7 + POSITION('_' IN SUBSTR(T.TABLE_NAME, 7))) ELSE T.TABLE_NAME END) AS CHAR(128)) AS OBJECT_NAME ,P.PART_NAME SUBOBJECT_NAME ,P.PART_ID OBJECT_ID ,CASE WHEN P.TABLET_ID != 0 THEN P.TABLET_ID ELSE NULL END AS DATA_OBJECT_ID ,(CASE WHEN T.TABLE_TYPE = 5 THEN 'INDEX PARTITION' ELSE 'TABLE PARTITION' END) AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY , NULL AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_TABLE T JOIN OCEANBASE.__ALL_VIRTUAL_PART P ON T.TABLE_ID = P.TABLE_ID WHERE T.TENANT_ID = P.TENANT_ID UNION ALL SELECT SUBP.TENANT_ID ,SUBP.GMT_CREATE ,SUBP.GMT_MODIFIED ,T.DATABASE_ID ,CAST((CASE WHEN T.DATABASE_ID = 201004 THEN T.TABLE_NAME WHEN T.TABLE_TYPE = 5 THEN SUBSTR(T.TABLE_NAME, 7 + POSITION('_' IN SUBSTR(T.TABLE_NAME, 7))) ELSE T.TABLE_NAME END) AS CHAR(128)) AS OBJECT_NAME ,SUBP.SUB_PART_NAME SUBOBJECT_NAME ,SUBP.SUB_PART_ID OBJECT_ID ,SUBP.TABLET_ID AS DATA_OBJECT_ID ,(CASE WHEN T.TABLE_TYPE = 5 THEN 'INDEX SUBPARTITION' ELSE 'TABLE SUBPARTITION' END) AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'Y' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_TABLE T, OCEANBASE.__ALL_VIRTUAL_PART P,OCEANBASE.__ALL_VIRTUAL_SUB_PART SUBP WHERE T.TABLE_ID =P.TABLE_ID AND P.TABLE_ID=SUBP.TABLE_ID AND P.PART_ID =SUBP.PART_ID AND T.TENANT_ID = P.TENANT_ID AND P.TENANT_ID = SUBP.TENANT_ID UNION ALL SELECT P.TENANT_ID ,P.GMT_CREATE ,P.GMT_MODIFIED ,P.DATABASE_ID ,P.PACKAGE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,P.PACKAGE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,CASE WHEN TYPE = 1 THEN 'PACKAGE' WHEN TYPE = 2 THEN 'PACKAGE BODY' ELSE NULL END AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM OCEANBASE.__ALL_VIRTUAL_ERROR E WHERE P.TENANT_ID = E.TENANT_ID AND P.PACKAGE_ID = E.OBJ_ID AND (E.OBJ_TYPE = 3 OR E.OBJ_TYPE = 5)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_PACKAGE P UNION ALL SELECT R.TENANT_ID ,R.GMT_CREATE ,R.GMT_MODIFIED ,R.DATABASE_ID ,R.ROUTINE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,R.ROUTINE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,CASE WHEN ROUTINE_TYPE = 1 THEN 'PROCEDURE' WHEN ROUTINE_TYPE = 2 THEN 'FUNCTION' ELSE NULL END AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM OCEANBASE.__ALL_VIRTUAL_ERROR E WHERE R.TENANT_ID = E.TENANT_ID AND R.ROUTINE_ID = E.OBJ_ID AND (E.OBJ_TYPE = 9 OR E.OBJ_TYPE = 12)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_ROUTINE R WHERE (ROUTINE_TYPE = 1 OR ROUTINE_TYPE = 2) UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,TYPE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,TYPE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_TYPE UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,OBJECT_TYPE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE BODY' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_OBJECT_TYPE WHERE TYPE = 2 UNION ALL SELECT T.TENANT_ID ,T.GMT_CREATE ,T.GMT_MODIFIED ,T.DATABASE_ID ,T.TRIGGER_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,T.TRIGGER_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TRIGGER' OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM OCEANBASE.__ALL_VIRTUAL_ERROR E WHERE T.TENANT_ID = E.TENANT_ID AND T.TRIGGER_ID = E.OBJ_ID AND (E.OBJ_TYPE = 7)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_TRIGGER T UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,SEQUENCE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,SEQUENCE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'SEQUENCE' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_SEQUENCE_OBJECT UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,SYNONYM_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,SYNONYM_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'SYNONYM' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_SYNONYM UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,CAST(201006 AS SIGNED) AS DATABASE_ID ,NAMESPACE AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,CONTEXT_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'CONTEXT' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,21 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_TENANT_CONTEXT UNION ALL SELECT TENANT_ID, GMT_CREATE, GMT_MODIFIED, DATABASE_ID, DATABASE_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, DATABASE_ID AS OBJECT_ID, NULL AS DATA_OBJECT_ID, 'DATABASE' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_DATABASE UNION ALL SELECT TENANT_ID, GMT_CREATE, GMT_MODIFIED, CAST(201001 AS SIGNED) AS DATABASE_ID, TABLEGROUP_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, TABLEGROUP_ID AS OBJECT_ID, NULL AS DATA_OBJECT_ID, 'TABLEGROUP' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_TABLEGROUP UNION ALL SELECT P.TENANT_ID, P.GMT_CREATE, P.GMT_MODIFIED, CAST(201001 AS SIGNED) AS DATABASE_ID, TG.TABLEGROUP_NAME AS OBJECT_NAME, P.PART_NAME SUBOBJECT_NAME, P.PART_ID OBJECT_ID, NULL AS DATA_OBJECT_ID, 'TABLEGROUP PARTITION' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, NULL AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_TABLEGROUP TG JOIN OCEANBASE.__ALL_VIRTUAL_PART P ON TG.TABLEGROUP_ID = P.TABLE_ID WHERE TG.TENANT_ID = P.TENANT_ID UNION ALL SELECT SUBP.TENANT_ID, SUBP.GMT_CREATE, SUBP.GMT_MODIFIED, CAST(201001 AS SIGNED) AS DATABASE_ID, TG.TABLEGROUP_NAME AS OBJECT_NAME, SUBP.SUB_PART_NAME SUBOBJECT_NAME, SUBP.SUB_PART_ID OBJECT_ID, NULL DATA_OBJECT_ID, 'TABLEGROUP SUBPARTITION' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'Y' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_TABLEGROUP TG, OCEANBASE.__ALL_VIRTUAL_PART P,OCEANBASE.__ALL_VIRTUAL_SUB_PART SUBP WHERE TG.TABLEGROUP_ID = P.TABLE_ID AND P.TABLE_ID = SUBP.TABLE_ID AND P.PART_ID = SUBP.PART_ID AND TG.TENANT_ID = P.TENANT_ID AND P.TENANT_ID = SUBP.TENANT_ID ) A JOIN OCEANBASE.__ALL_VIRTUAL_DATABASE B ON A.TENANT_ID = B.TENANT_ID AND A.DATABASE_ID = B.DATABASE_ID )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(A.TENANT_ID AS SIGNED) AS CON_ID, CAST(B.DATABASE_NAME AS CHAR(128)) AS OWNER, CAST(A.OBJECT_NAME AS CHAR(128)) AS OBJECT_NAME, CAST(A.SUBOBJECT_NAME AS CHAR(128)) AS SUBOBJECT_NAME, CAST(A.OBJECT_ID AS SIGNED) AS OBJECT_ID, CAST(A.DATA_OBJECT_ID AS SIGNED) AS DATA_OBJECT_ID, CAST(A.OBJECT_TYPE AS CHAR(23)) AS OBJECT_TYPE, CAST(A.GMT_CREATE AS DATETIME) AS CREATED, CAST(A.GMT_MODIFIED AS DATETIME) AS LAST_DDL_TIME, CAST(A.GMT_CREATE AS DATETIME) AS TIMESTAMP, CAST(A.STATUS AS CHAR(7)) AS STATUS, CAST(A.TEMPORARY AS CHAR(1)) AS TEMPORARY, CAST(A.`GENERATED` AS CHAR(1)) AS "GENERATED", CAST(A.SECONDARY AS CHAR(1)) AS SECONDARY, CAST(A.NAMESPACE AS SIGNED) AS NAMESPACE, CAST(A.EDITION_NAME AS CHAR(128)) AS EDITION_NAME, CAST(NULL AS CHAR(18)) AS SHARING, CAST(NULL AS CHAR(1)) AS EDITIONABLE, CAST(NULL AS CHAR(1)) AS ORACLE_MAINTAINED, CAST(NULL AS CHAR(1)) AS APPLICATION, CAST(NULL AS CHAR(1)) AS DEFAULT_COLLATION, CAST(NULL AS CHAR(1)) AS DUPLICATED, CAST(NULL AS CHAR(1)) AS SHARDED, CAST(NULL AS CHAR(1)) AS IMPORTED_OBJECT, CAST(NULL AS SIGNED) AS CREATED_APPID, CAST(NULL AS SIGNED) AS CREATED_VSNID, CAST(NULL AS SIGNED) AS MODIFIED_APPID, CAST(NULL AS SIGNED) AS MODIFIED_VSNID FROM ( SELECT A.TENANT_ID, USEC_TO_TIME(B.SCHEMA_VERSION) AS GMT_CREATE, USEC_TO_TIME(A.SCHEMA_VERSION) AS GMT_MODIFIED, A.DATABASE_ID, A.TABLE_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, CAST(A.TABLE_ID AS SIGNED) AS OBJECT_ID, A.TABLET_ID AS DATA_OBJECT_ID, 'TABLE' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_CORE_ALL_TABLE A JOIN OCEANBASE.__ALL_VIRTUAL_CORE_ALL_TABLE B ON A.TENANT_ID = B.TENANT_ID AND B.TABLE_NAME = '__all_core_table' UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,CAST((CASE WHEN DATABASE_ID = 201004 THEN TABLE_NAME WHEN TABLE_TYPE = 5 THEN SUBSTR(TABLE_NAME, 7 + POSITION('_' IN SUBSTR(TABLE_NAME, 7))) ELSE TABLE_NAME END) AS CHAR(128)) AS OBJECT_NAME ,NULL SUBOBJECT_NAME ,TABLE_ID OBJECT_ID ,(CASE WHEN TABLET_ID != 0 THEN TABLET_ID ELSE NULL END) DATA_OBJECT_ID ,CASE WHEN TABLE_TYPE IN (0,3,6,8,9) THEN 'TABLE' WHEN TABLE_TYPE IN (2) THEN 'VIRTUAL TABLE' WHEN TABLE_TYPE IN (1,4) THEN 'VIEW' WHEN TABLE_TYPE IN (5) THEN 'INDEX' WHEN TABLE_TYPE IN (7) THEN 'MATERIALIZED VIEW' ELSE NULL END AS OBJECT_TYPE ,CAST(CASE WHEN TABLE_TYPE IN (5) THEN CASE WHEN INDEX_STATUS = 2 THEN 'VALID' WHEN INDEX_STATUS = 3 THEN 'CHECKING' WHEN INDEX_STATUS = 4 THEN 'INELEGIBLE' WHEN INDEX_STATUS = 5 THEN 'ERROR' ELSE 'UNUSABLE' END ELSE CASE WHEN OBJECT_STATUS = 1 THEN 'VALID' ELSE 'INVALID' END END AS CHAR(10)) AS STATUS ,CASE WHEN TABLE_TYPE IN (6,8,9) THEN 'Y' ELSE 'N' END AS TEMPORARY ,CASE WHEN TABLE_TYPE IN (0,1) THEN 'Y' ELSE 'N' END AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_TABLE WHERE TABLE_TYPE != 12 AND TABLE_TYPE != 13 UNION ALL SELECT CST.TENANT_ID ,CST.GMT_CREATE ,CST.GMT_MODIFIED ,DB.DATABASE_ID ,CST.constraint_name AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,TBL.TABLE_ID AS OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'INDEX' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_CONSTRAINT CST, OCEANBASE.__ALL_VIRTUAL_TABLE TBL, OCEANBASE.__ALL_VIRTUAL_DATABASE DB WHERE CST.TENANT_ID = TBL.TENANT_ID AND TBL.TENANT_ID = DB.TENANT_ID AND DB.DATABASE_ID = TBL.DATABASE_ID AND TBL.TABLE_ID = CST.TABLE_ID and CST.CONSTRAINT_TYPE = 1 UNION ALL SELECT P.TENANT_ID ,P.GMT_CREATE ,P.GMT_MODIFIED ,T.DATABASE_ID ,CAST((CASE WHEN T.DATABASE_ID = 201004 THEN T.TABLE_NAME WHEN T.TABLE_TYPE = 5 THEN SUBSTR(T.TABLE_NAME, 7 + POSITION('_' IN SUBSTR(T.TABLE_NAME, 7))) ELSE T.TABLE_NAME END) AS CHAR(128)) AS OBJECT_NAME ,P.PART_NAME SUBOBJECT_NAME ,P.PART_ID OBJECT_ID ,CASE WHEN P.TABLET_ID != 0 THEN P.TABLET_ID ELSE NULL END AS DATA_OBJECT_ID ,(CASE WHEN T.TABLE_TYPE = 5 THEN 'INDEX PARTITION' ELSE 'TABLE PARTITION' END) AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY , NULL AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_TABLE T JOIN OCEANBASE.__ALL_VIRTUAL_PART P ON T.TABLE_ID = P.TABLE_ID WHERE T.TENANT_ID = P.TENANT_ID UNION ALL SELECT SUBP.TENANT_ID ,SUBP.GMT_CREATE ,SUBP.GMT_MODIFIED ,T.DATABASE_ID ,CAST((CASE WHEN T.DATABASE_ID = 201004 THEN T.TABLE_NAME WHEN T.TABLE_TYPE = 5 THEN SUBSTR(T.TABLE_NAME, 7 + POSITION('_' IN SUBSTR(T.TABLE_NAME, 7))) ELSE T.TABLE_NAME END) AS CHAR(128)) AS OBJECT_NAME ,SUBP.SUB_PART_NAME SUBOBJECT_NAME ,SUBP.SUB_PART_ID OBJECT_ID ,SUBP.TABLET_ID AS DATA_OBJECT_ID ,(CASE WHEN T.TABLE_TYPE = 5 THEN 'INDEX SUBPARTITION' ELSE 'TABLE SUBPARTITION' END) AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'Y' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_TABLE T, OCEANBASE.__ALL_VIRTUAL_PART P,OCEANBASE.__ALL_VIRTUAL_SUB_PART SUBP WHERE T.TABLE_ID =P.TABLE_ID AND P.TABLE_ID=SUBP.TABLE_ID AND P.PART_ID =SUBP.PART_ID AND T.TENANT_ID = P.TENANT_ID AND P.TENANT_ID = SUBP.TENANT_ID UNION ALL SELECT P.TENANT_ID ,P.GMT_CREATE ,P.GMT_MODIFIED ,P.DATABASE_ID ,P.PACKAGE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,P.PACKAGE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,CASE WHEN TYPE = 1 THEN 'PACKAGE' WHEN TYPE = 2 THEN 'PACKAGE BODY' ELSE NULL END AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM OCEANBASE.__ALL_VIRTUAL_ERROR E WHERE P.TENANT_ID = E.TENANT_ID AND P.PACKAGE_ID = E.OBJ_ID AND (E.OBJ_TYPE = 3 OR E.OBJ_TYPE = 5)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_PACKAGE P UNION ALL SELECT R.TENANT_ID ,R.GMT_CREATE ,R.GMT_MODIFIED ,R.DATABASE_ID ,R.ROUTINE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,R.ROUTINE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,CASE WHEN ROUTINE_TYPE = 1 THEN 'PROCEDURE' WHEN ROUTINE_TYPE = 2 THEN 'FUNCTION' ELSE NULL END AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM OCEANBASE.__ALL_VIRTUAL_ERROR E WHERE R.TENANT_ID = E.TENANT_ID AND R.ROUTINE_ID = E.OBJ_ID AND (E.OBJ_TYPE = 9 OR E.OBJ_TYPE = 12)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_ROUTINE R WHERE (ROUTINE_TYPE = 1 OR ROUTINE_TYPE = 2) UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,TYPE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,TYPE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_TYPE UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,OBJECT_TYPE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE BODY' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_OBJECT_TYPE WHERE TYPE = 2 UNION ALL SELECT T.TENANT_ID ,T.GMT_CREATE ,T.GMT_MODIFIED ,T.DATABASE_ID ,T.TRIGGER_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,T.TRIGGER_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TRIGGER' OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM OCEANBASE.__ALL_VIRTUAL_ERROR E WHERE T.TENANT_ID = E.TENANT_ID AND T.TRIGGER_ID = E.OBJ_ID AND (E.OBJ_TYPE = 7)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_TRIGGER T UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,SEQUENCE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,SEQUENCE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'SEQUENCE' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_SEQUENCE_OBJECT UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,SYNONYM_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,SYNONYM_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'SYNONYM' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_SYNONYM UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,CAST(201006 AS SIGNED) AS DATABASE_ID ,NAMESPACE AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,CONTEXT_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'CONTEXT' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,21 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_TENANT_CONTEXT UNION ALL SELECT TENANT_ID, GMT_CREATE, GMT_MODIFIED, DATABASE_ID, DATABASE_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, DATABASE_ID AS OBJECT_ID, NULL AS DATA_OBJECT_ID, 'DATABASE' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_DATABASE UNION ALL SELECT TENANT_ID, GMT_CREATE, GMT_MODIFIED, CAST(201001 AS SIGNED) AS DATABASE_ID, TABLEGROUP_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, TABLEGROUP_ID AS OBJECT_ID, NULL AS DATA_OBJECT_ID, 'TABLEGROUP' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_TABLEGROUP UNION ALL SELECT P.TENANT_ID, P.GMT_CREATE, P.GMT_MODIFIED, CAST(201001 AS SIGNED) AS DATABASE_ID, TG.TABLEGROUP_NAME AS OBJECT_NAME, P.PART_NAME SUBOBJECT_NAME, P.PART_ID OBJECT_ID, NULL AS DATA_OBJECT_ID, 'TABLEGROUP PARTITION' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, NULL AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_TABLEGROUP TG JOIN OCEANBASE.__ALL_VIRTUAL_PART P ON TG.TABLEGROUP_ID = P.TABLE_ID WHERE TG.TENANT_ID = P.TENANT_ID UNION ALL SELECT SUBP.TENANT_ID, SUBP.GMT_CREATE, SUBP.GMT_MODIFIED, CAST(201001 AS SIGNED) AS DATABASE_ID, TG.TABLEGROUP_NAME AS OBJECT_NAME, SUBP.SUB_PART_NAME SUBOBJECT_NAME, SUBP.SUB_PART_ID OBJECT_ID, NULL DATA_OBJECT_ID, 'TABLEGROUP SUBPARTITION' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'Y' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_TABLEGROUP TG, OCEANBASE.__ALL_VIRTUAL_PART P,OCEANBASE.__ALL_VIRTUAL_SUB_PART SUBP WHERE TG.TABLEGROUP_ID = P.TABLE_ID AND P.TABLE_ID = SUBP.TABLE_ID AND P.PART_ID = SUBP.PART_ID AND TG.TENANT_ID = P.TENANT_ID AND P.TENANT_ID = SUBP.TENANT_ID ) A JOIN OCEANBASE.__ALL_VIRTUAL_DATABASE B ON A.TENANT_ID = B.TENANT_ID AND A.DATABASE_ID = B.DATABASE_ID )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -2009,7 +2009,7 @@ int ObInnerTableSchema::cdb_tab_cols_v_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT/*+leading(DB,T,C,STAT)*/ CAST(DB.TENANT_ID AS SIGNED) AS CON_ID, CAST(DB.DATABASE_NAME AS CHAR(128)) AS OWNER, CAST(T.TABLE_NAME AS CHAR(128)) AS TABLE_NAME, CAST(C.COLUMN_NAME AS CHAR(128)) AS COLUMN_NAME, CAST(CASE C.DATA_TYPE WHEN 0 THEN 'VARCHAR2' WHEN 1 THEN 'NUMBER' WHEN 2 THEN 'NUMBER' WHEN 3 THEN 'NUMBER' WHEN 4 THEN 'NUMBER' WHEN 5 THEN 'NUMBER' WHEN 6 THEN 'NUMBER' WHEN 7 THEN 'NUMBER' WHEN 8 THEN 'NUMBER' WHEN 9 THEN 'NUMBER' WHEN 10 THEN 'NUMBER' WHEN 11 THEN 'BINARY_FLOAT' WHEN 12 THEN 'BINARY_DOUBLE' WHEN 13 THEN 'NUMBER' WHEN 14 THEN 'NUMBER' WHEN 15 THEN 'NUMBER' WHEN 16 THEN 'NUMBER' WHEN 17 THEN 'DATE' WHEN 18 THEN 'TIMESTAMP' WHEN 19 THEN 'DATE' WHEN 20 THEN 'TIME' WHEN 21 THEN 'YEAR' WHEN 22 THEN 'VARCHAR2' WHEN 23 THEN 'CHAR' WHEN 24 THEN 'HEX_STRING' WHEN 25 THEN 'EXT' WHEN 26 THEN 'UNKNOWN' WHEN 27 THEN 'TINYTEXT' WHEN 28 THEN 'TEXT' WHEN 29 THEN 'MEDIUMTEXT' WHEN 30 THEN (CASE C.COLLATION_TYPE WHEN 63 THEN 'BLOB' ELSE 'CLOB' END) WHEN 31 THEN 'BIT' WHEN 32 THEN 'ENUM' WHEN 33 THEN 'SET' WHEN 34 THEN 'ENUM_INNER' WHEN 35 THEN 'SET_INNER' WHEN 36 THEN CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH TIME ZONE')) WHEN 37 THEN CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH LOCAL TIME ZONE')) WHEN 38 THEN CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ')')) WHEN 39 THEN 'RAW' WHEN 40 THEN CONCAT('INTERVAL YEAR(', CONCAT(C.DATA_SCALE, ') TO MONTH')) WHEN 41 THEN CONCAT('INTERVAL DAY(', CONCAT(FLOOR(C.DATA_SCALE/10), CONCAT(') TO SECOND(', CONCAT(MOD(C.DATA_SCALE, 10), ')')))) WHEN 42 THEN 'FLOAT' WHEN 43 THEN 'NVARCHAR2' WHEN 44 THEN 'NCHAR' WHEN 45 THEN 'UROWID' WHEN 46 THEN '' ELSE 'UNDEFINED' END AS CHAR(128)) AS DATA_TYPE, CAST(NULL AS CHAR(3)) AS DATA_TYPE_MOD, CAST(NULL AS CHAR(128)) AS DATA_TYPE_OWNER, CAST(C.DATA_LENGTH * CASE WHEN C.DATA_TYPE IN (22,23,30,43,44,46) AND C.DATA_PRECISION = 1 THEN (CASE C.COLLATION_TYPE WHEN 63 THEN 1 WHEN 249 THEN 4 WHEN 248 THEN 4 WHEN 87 THEN 2 WHEN 28 THEN 2 WHEN 55 THEN 4 WHEN 54 THEN 4 WHEN 101 THEN 2 WHEN 46 THEN 4 WHEN 45 THEN 4 WHEN 224 THEN 4 ELSE 1 END) ELSE 1 END AS SIGNED) AS DATA_LENGTH, CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,18,19,22,23,27,28,29,30,36,37,38,43,44) THEN NULL ELSE CASE WHEN C.DATA_PRECISION < 0 THEN NULL ELSE C.DATA_PRECISION END END AS SIGNED) AS DATA_PRECISION, CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,19,22,23,27,28,29,30,42,43,44) THEN NULL ELSE CASE WHEN C.DATA_SCALE < -84 THEN NULL ELSE C.DATA_SCALE END END AS SIGNED) AS DATA_SCALE, CAST((CASE WHEN C.NULLABLE = 0 THEN 'N' WHEN (C.COLUMN_FLAGS & (5 * POWER(2, 13))) = 5 * POWER(2, 13) THEN 'N' ELSE 'Y' END) AS CHAR(1)) AS NULLABLE, CAST(CASE WHEN (C.COLUMN_FLAGS & 64) = 0 THEN C.COLUMN_ID ELSE NULL END AS SIGNED) AS COLUMN_ID, CAST(LENGTH(C.CUR_DEFAULT_VALUE_V2) AS SIGNED) AS DEFAULT_LENGTH, CAST(C.CUR_DEFAULT_VALUE_V2 AS /* TODO: LONG() */ CHAR(262144)) AS DATA_DEFAULT, CAST(STAT.DISTINCT_CNT AS SIGNED) AS NUM_DISTINCT, CAST(STAT.MIN_VALUE AS /* TODO: RAW */ CHAR(128)) AS LOW_VALUE, CAST(STAT.MAX_VALUE AS /* TODO: RAW */ CHAR(128)) AS HIGH_VALUE, CAST(STAT.DENSITY AS SIGNED) AS DENSITY, CAST(STAT.NULL_CNT AS SIGNED) AS NUM_NULLS, CAST(STAT.BUCKET_CNT AS SIGNED) AS NUM_BUCKETS, CAST(STAT.LAST_ANALYZED AS DATE) AS LAST_ANALYZED, CAST(STAT.SAMPLE_SIZE AS SIGNED) AS SAMPLE_SIZE, CAST(CASE C.DATA_TYPE WHEN 22 THEN 'CHAR_CS' WHEN 23 THEN 'CHAR_CS' WHEN 30 THEN (CASE WHEN C.COLLATION_TYPE = 63 THEN 'NULL' ELSE 'CHAR_CS' END) WHEN 43 THEN 'NCHAR_CS' WHEN 44 THEN 'NCHAR_CS' ELSE '' END AS CHAR(44)) AS CHARACTER_SET_NAME, CAST(NULL AS SIGNED) AS CHAR_COL_DECL_LENGTH, CAST(CASE STAT.GLOBAL_STATS WHEN 0 THEN 'NO' WHEN 1 THEN 'YES' ELSE NULL END AS CHAR(3)) AS GLOBAL_STATS, CAST(CASE STAT.USER_STATS WHEN 0 THEN 'NO' WHEN 1 THEN 'YES' ELSE NULL END AS CHAR(3)) AS USER_STATS, CAST(NULL AS CHAR(80)) AS NOTES, CAST(STAT.AVG_LEN AS SIGNED) AS AVG_COL_LEN, CAST(CASE WHEN C.DATA_TYPE IN (22,23,43,44) THEN C.DATA_LENGTH ELSE 0 END AS SIGNED) AS CHAR_LENGTH, CAST(CASE C.DATA_TYPE WHEN 22 THEN (CASE WHEN C.DATA_PRECISION = 1 THEN 'C' ELSE 'B' END) WHEN 23 THEN (CASE WHEN C.DATA_PRECISION = 1 THEN 'C' ELSE 'B' END) WHEN 43 THEN (CASE WHEN C.DATA_PRECISION = 1 THEN 'C' ELSE 'B' END) WHEN 44 THEN (CASE WHEN C.DATA_PRECISION = 1 THEN 'C' ELSE 'B' END) ELSE NULL END AS CHAR(1)) AS CHAR_USED, CAST(NULL AS CHAR(3)) AS V80_FMT_IMAGE, CAST(NULL AS CHAR(3)) AS DATA_UPGRADED, CAST(CASE WHEN (C.COLUMN_FLAGS & 64) = 0 THEN 'NO' ELSE 'YES' END AS CHAR(3)) AS HIDDEN_COLUMN, CAST(CASE WHEN (C.COLUMN_FLAGS & 1) = 1 THEN 'YES' ELSE 'NO' END AS CHAR(3)) AS VIRTUAL_COLUMN, CAST(NULL AS SIGNED) AS SEGMENT_COLUMN_ID, CAST(NULL AS SIGNED) AS INTERNAL_COLUMN_ID, CAST((CASE WHEN STAT.HISTOGRAM_TYPE = 1 THEN 'FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 3 THEN 'TOP-FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 4 THEN 'HYBRID' ELSE NULL END) AS CHAR(15)) AS HISTOGRAM, CAST(C.COLUMN_NAME AS CHAR(4000)) AS QUALIFIED_COL_NAME, CAST('YES' AS CHAR(3)) AS USER_GENERATED, CAST(NULL AS CHAR(3)) AS DEFAULT_ON_NULL, CAST(NULL AS CHAR(3)) AS IDENTITY_COLUMN, CAST(NULL AS CHAR(128)) AS EVALUATION_EDITION, CAST(NULL AS CHAR(128)) AS UNUSABLE_BEFORE, CAST(NULL AS CHAR(128)) AS UNUSABLE_BEGINNING, CAST(NULL AS CHAR(100)) AS COLLATION, CAST(NULL AS SIGNED) AS COLLATED_COLUMN_ID FROM (SELECT TENANT_ID, TABLE_ID, DATABASE_ID, TABLE_NAME, TABLE_TYPE FROM OCEANBASE.__ALL_VIRTUAL_CORE_ALL_TABLE UNION ALL SELECT TENANT_ID, TABLE_ID, DATABASE_ID, TABLE_NAME, TABLE_TYPE FROM OCEANBASE.__ALL_VIRTUAL_TABLE) T JOIN OCEANBASE.__ALL_VIRTUAL_DATABASE DB ON DB.TENANT_ID = T.TENANT_ID AND DB.DATABASE_ID = T.DATABASE_ID JOIN (SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, DATA_TYPE, COLLATION_TYPE, DATA_SCALE, DATA_LENGTH, DATA_PRECISION, NULLABLE, COLUMN_FLAGS, CUR_DEFAULT_VALUE_V2, IS_HIDDEN FROM OCEANBASE.__ALL_VIRTUAL_CORE_COLUMN_TABLE UNION ALL SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, DATA_TYPE, COLLATION_TYPE, DATA_SCALE, DATA_LENGTH, DATA_PRECISION, NULLABLE, COLUMN_FLAGS, CUR_DEFAULT_VALUE_V2, IS_HIDDEN FROM OCEANBASE.__ALL_VIRTUAL_COLUMN) C ON C.TENANT_ID = T.TENANT_ID AND C.TABLE_ID = T.TABLE_ID AND C.IS_HIDDEN = 0 LEFT JOIN OCEANBASE.__ALL_VIRTUAL_COLUMN_STAT STAT ON C.TENANT_ID = STAT.TENANT_ID AND C.TABLE_ID = STAT.TABLE_ID AND C.COLUMN_ID = STAT.COLUMN_ID AND STAT.OBJECT_TYPE = 1 WHERE T.TABLE_TYPE IN (0,3,5,6,8,9) )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT/*+leading(DB,T,C,STAT)*/ CAST(DB.TENANT_ID AS SIGNED) AS CON_ID, CAST(DB.DATABASE_NAME AS CHAR(128)) AS OWNER, CAST(T.TABLE_NAME AS CHAR(128)) AS TABLE_NAME, CAST(C.COLUMN_NAME AS CHAR(128)) AS COLUMN_NAME, CAST(CASE C.DATA_TYPE WHEN 0 THEN 'VARCHAR2' WHEN 1 THEN 'NUMBER' WHEN 2 THEN 'NUMBER' WHEN 3 THEN 'NUMBER' WHEN 4 THEN 'NUMBER' WHEN 5 THEN 'NUMBER' WHEN 6 THEN 'NUMBER' WHEN 7 THEN 'NUMBER' WHEN 8 THEN 'NUMBER' WHEN 9 THEN 'NUMBER' WHEN 10 THEN 'NUMBER' WHEN 11 THEN 'BINARY_FLOAT' WHEN 12 THEN 'BINARY_DOUBLE' WHEN 13 THEN 'NUMBER' WHEN 14 THEN 'NUMBER' WHEN 15 THEN 'NUMBER' WHEN 16 THEN 'NUMBER' WHEN 17 THEN 'DATE' WHEN 18 THEN 'TIMESTAMP' WHEN 19 THEN 'DATE' WHEN 20 THEN 'TIME' WHEN 21 THEN 'YEAR' WHEN 22 THEN 'VARCHAR2' WHEN 23 THEN 'CHAR' WHEN 24 THEN 'HEX_STRING' WHEN 25 THEN 'UNDEFINED' WHEN 26 THEN 'UNKNOWN' WHEN 27 THEN 'TINYTEXT' WHEN 28 THEN 'TEXT' WHEN 29 THEN 'MEDIUMTEXT' WHEN 30 THEN (CASE C.COLLATION_TYPE WHEN 63 THEN 'BLOB' ELSE 'CLOB' END) WHEN 31 THEN 'BIT' WHEN 32 THEN 'ENUM' WHEN 33 THEN 'SET' WHEN 34 THEN 'ENUM_INNER' WHEN 35 THEN 'SET_INNER' WHEN 36 THEN CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH TIME ZONE')) WHEN 37 THEN CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH LOCAL TIME ZONE')) WHEN 38 THEN CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ')')) WHEN 39 THEN 'RAW' WHEN 40 THEN CONCAT('INTERVAL YEAR(', CONCAT(C.DATA_SCALE, ') TO MONTH')) WHEN 41 THEN CONCAT('INTERVAL DAY(', CONCAT(FLOOR(C.DATA_SCALE/10), CONCAT(') TO SECOND(', CONCAT(MOD(C.DATA_SCALE, 10), ')')))) WHEN 42 THEN 'FLOAT' WHEN 43 THEN 'NVARCHAR2' WHEN 44 THEN 'NCHAR' WHEN 45 THEN 'UROWID' WHEN 46 THEN '' ELSE 'UNDEFINED' END AS CHAR(128)) AS DATA_TYPE, CAST(NULL AS CHAR(3)) AS DATA_TYPE_MOD, CAST(NULL AS CHAR(128)) AS DATA_TYPE_OWNER, CAST(C.DATA_LENGTH * CASE WHEN C.DATA_TYPE IN (22,23,30,43,44,46) AND C.DATA_PRECISION = 1 THEN (CASE C.COLLATION_TYPE WHEN 63 THEN 1 WHEN 249 THEN 4 WHEN 248 THEN 4 WHEN 87 THEN 2 WHEN 28 THEN 2 WHEN 55 THEN 4 WHEN 54 THEN 4 WHEN 101 THEN 2 WHEN 46 THEN 4 WHEN 45 THEN 4 WHEN 224 THEN 4 ELSE 1 END) ELSE 1 END AS SIGNED) AS DATA_LENGTH, CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,18,19,22,23,27,28,29,30,36,37,38,43,44) THEN NULL ELSE CASE WHEN C.DATA_PRECISION < 0 THEN NULL ELSE C.DATA_PRECISION END END AS SIGNED) AS DATA_PRECISION, CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,19,22,23,27,28,29,30,42,43,44) THEN NULL ELSE CASE WHEN C.DATA_SCALE < -84 THEN NULL ELSE C.DATA_SCALE END END AS SIGNED) AS DATA_SCALE, CAST((CASE WHEN C.NULLABLE = 0 THEN 'N' WHEN (C.COLUMN_FLAGS & (5 * POWER(2, 13))) = 5 * POWER(2, 13) THEN 'N' ELSE 'Y' END) AS CHAR(1)) AS NULLABLE, CAST(CASE WHEN (C.COLUMN_FLAGS & 64) = 0 THEN C.COLUMN_ID ELSE NULL END AS SIGNED) AS COLUMN_ID, CAST(LENGTH(C.CUR_DEFAULT_VALUE_V2) AS SIGNED) AS DEFAULT_LENGTH, CAST(C.CUR_DEFAULT_VALUE_V2 AS /* TODO: LONG() */ CHAR(262144)) AS DATA_DEFAULT, CAST(STAT.DISTINCT_CNT AS SIGNED) AS NUM_DISTINCT, CAST(STAT.MIN_VALUE AS /* TODO: RAW */ CHAR(128)) AS LOW_VALUE, CAST(STAT.MAX_VALUE AS /* TODO: RAW */ CHAR(128)) AS HIGH_VALUE, CAST(STAT.DENSITY AS SIGNED) AS DENSITY, CAST(STAT.NULL_CNT AS SIGNED) AS NUM_NULLS, CAST(STAT.BUCKET_CNT AS SIGNED) AS NUM_BUCKETS, CAST(STAT.LAST_ANALYZED AS DATE) AS LAST_ANALYZED, CAST(STAT.SAMPLE_SIZE AS SIGNED) AS SAMPLE_SIZE, CAST(CASE C.DATA_TYPE WHEN 22 THEN 'CHAR_CS' WHEN 23 THEN 'CHAR_CS' WHEN 30 THEN (CASE WHEN C.COLLATION_TYPE = 63 THEN 'NULL' ELSE 'CHAR_CS' END) WHEN 43 THEN 'NCHAR_CS' WHEN 44 THEN 'NCHAR_CS' ELSE '' END AS CHAR(44)) AS CHARACTER_SET_NAME, CAST(NULL AS SIGNED) AS CHAR_COL_DECL_LENGTH, CAST(CASE STAT.GLOBAL_STATS WHEN 0 THEN 'NO' WHEN 1 THEN 'YES' ELSE NULL END AS CHAR(3)) AS GLOBAL_STATS, CAST(CASE STAT.USER_STATS WHEN 0 THEN 'NO' WHEN 1 THEN 'YES' ELSE NULL END AS CHAR(3)) AS USER_STATS, CAST(NULL AS CHAR(80)) AS NOTES, CAST(STAT.AVG_LEN AS SIGNED) AS AVG_COL_LEN, CAST(CASE WHEN C.DATA_TYPE IN (22,23,43,44) THEN C.DATA_LENGTH ELSE 0 END AS SIGNED) AS CHAR_LENGTH, CAST(CASE C.DATA_TYPE WHEN 22 THEN (CASE WHEN C.DATA_PRECISION = 1 THEN 'C' ELSE 'B' END) WHEN 23 THEN (CASE WHEN C.DATA_PRECISION = 1 THEN 'C' ELSE 'B' END) WHEN 43 THEN (CASE WHEN C.DATA_PRECISION = 1 THEN 'C' ELSE 'B' END) WHEN 44 THEN (CASE WHEN C.DATA_PRECISION = 1 THEN 'C' ELSE 'B' END) ELSE NULL END AS CHAR(1)) AS CHAR_USED, CAST(NULL AS CHAR(3)) AS V80_FMT_IMAGE, CAST(NULL AS CHAR(3)) AS DATA_UPGRADED, CAST(CASE WHEN (C.COLUMN_FLAGS & 64) = 0 THEN 'NO' ELSE 'YES' END AS CHAR(3)) AS HIDDEN_COLUMN, CAST(CASE WHEN (C.COLUMN_FLAGS & 1) = 1 THEN 'YES' ELSE 'NO' END AS CHAR(3)) AS VIRTUAL_COLUMN, CAST(NULL AS SIGNED) AS SEGMENT_COLUMN_ID, CAST(NULL AS SIGNED) AS INTERNAL_COLUMN_ID, CAST((CASE WHEN STAT.HISTOGRAM_TYPE = 1 THEN 'FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 3 THEN 'TOP-FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 4 THEN 'HYBRID' ELSE NULL END) AS CHAR(15)) AS HISTOGRAM, CAST(C.COLUMN_NAME AS CHAR(4000)) AS QUALIFIED_COL_NAME, CAST('YES' AS CHAR(3)) AS USER_GENERATED, CAST(NULL AS CHAR(3)) AS DEFAULT_ON_NULL, CAST(NULL AS CHAR(3)) AS IDENTITY_COLUMN, CAST(NULL AS CHAR(128)) AS EVALUATION_EDITION, CAST(NULL AS CHAR(128)) AS UNUSABLE_BEFORE, CAST(NULL AS CHAR(128)) AS UNUSABLE_BEGINNING, CAST(NULL AS CHAR(100)) AS COLLATION, CAST(NULL AS SIGNED) AS COLLATED_COLUMN_ID FROM (SELECT TENANT_ID, TABLE_ID, DATABASE_ID, TABLE_NAME, TABLE_TYPE FROM OCEANBASE.__ALL_VIRTUAL_CORE_ALL_TABLE UNION ALL SELECT TENANT_ID, TABLE_ID, DATABASE_ID, TABLE_NAME, TABLE_TYPE FROM OCEANBASE.__ALL_VIRTUAL_TABLE) T JOIN OCEANBASE.__ALL_VIRTUAL_DATABASE DB ON DB.TENANT_ID = T.TENANT_ID AND DB.DATABASE_ID = T.DATABASE_ID JOIN (SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, DATA_TYPE, COLLATION_TYPE, DATA_SCALE, DATA_LENGTH, DATA_PRECISION, NULLABLE, COLUMN_FLAGS, CUR_DEFAULT_VALUE_V2, IS_HIDDEN FROM OCEANBASE.__ALL_VIRTUAL_CORE_COLUMN_TABLE UNION ALL SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, DATA_TYPE, COLLATION_TYPE, DATA_SCALE, DATA_LENGTH, DATA_PRECISION, NULLABLE, COLUMN_FLAGS, CUR_DEFAULT_VALUE_V2, IS_HIDDEN FROM OCEANBASE.__ALL_VIRTUAL_COLUMN) C ON C.TENANT_ID = T.TENANT_ID AND C.TABLE_ID = T.TABLE_ID AND C.IS_HIDDEN = 0 LEFT JOIN OCEANBASE.__ALL_VIRTUAL_COLUMN_STAT STAT ON C.TENANT_ID = STAT.TENANT_ID AND C.TABLE_ID = STAT.TABLE_ID AND C.COLUMN_ID = STAT.COLUMN_ID AND STAT.OBJECT_TYPE = 1 WHERE T.TABLE_TYPE IN (0,1,3,4,5,6,7,8,9) )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema.21201_21250.cpp b/src/share/inner_table/ob_inner_table_schema.21201_21250.cpp index 8bf2c8599b..0a2ebe9a1d 100644 --- a/src/share/inner_table/ob_inner_table_schema.21201_21250.cpp +++ b/src/share/inner_table/ob_inner_table_schema.21201_21250.cpp @@ -259,7 +259,7 @@ int ObInnerTableSchema::dba_objects_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(B.DATABASE_NAME AS CHAR(128)) AS OWNER, CAST(A.OBJECT_NAME AS CHAR(128)) AS OBJECT_NAME, CAST(A.SUBOBJECT_NAME AS CHAR(128)) AS SUBOBJECT_NAME, CAST(A.OBJECT_ID AS SIGNED) AS OBJECT_ID, CAST(A.DATA_OBJECT_ID AS SIGNED) AS DATA_OBJECT_ID, CAST(A.OBJECT_TYPE AS CHAR(23)) AS OBJECT_TYPE, CAST(A.GMT_CREATE AS DATETIME) AS CREATED, CAST(A.GMT_MODIFIED AS DATETIME) AS LAST_DDL_TIME, CAST(A.GMT_CREATE AS DATETIME) AS TIMESTAMP, CAST(A.STATUS AS CHAR(7)) AS STATUS, CAST(A.TEMPORARY AS CHAR(1)) AS TEMPORARY, CAST(A.`GENERATED` AS CHAR(1)) AS "GENERATED", CAST(A.SECONDARY AS CHAR(1)) AS SECONDARY, CAST(A.NAMESPACE AS SIGNED) AS NAMESPACE, CAST(A.EDITION_NAME AS CHAR(128)) AS EDITION_NAME, CAST(NULL AS CHAR(18)) AS SHARING, CAST(NULL AS CHAR(1)) AS EDITIONABLE, CAST(NULL AS CHAR(1)) AS ORACLE_MAINTAINED, CAST(NULL AS CHAR(1)) AS APPLICATION, CAST(NULL AS CHAR(1)) AS DEFAULT_COLLATION, CAST(NULL AS CHAR(1)) AS DUPLICATED, CAST(NULL AS CHAR(1)) AS SHARDED, CAST(NULL AS CHAR(1)) AS IMPORTED_OBJECT, CAST(NULL AS SIGNED) AS CREATED_APPID, CAST(NULL AS SIGNED) AS CREATED_VSNID, CAST(NULL AS SIGNED) AS MODIFIED_APPID, CAST(NULL AS SIGNED) AS MODIFIED_VSNID FROM ( SELECT CAST(0 AS SIGNED) AS TENANT_ID, USEC_TO_TIME(B.SCHEMA_VERSION) AS GMT_CREATE, USEC_TO_TIME(A.SCHEMA_VERSION) AS GMT_MODIFIED, A.DATABASE_ID, A.TABLE_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, CAST(A.TABLE_ID AS SIGNED) AS OBJECT_ID, A.TABLET_ID AS DATA_OBJECT_ID, 'TABLE' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_CORE_ALL_TABLE A JOIN OCEANBASE.__ALL_VIRTUAL_CORE_ALL_TABLE B ON A.TENANT_ID = B.TENANT_ID AND B.TABLE_NAME = '__all_core_table' WHERE A.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,CAST((CASE WHEN DATABASE_ID = 201004 THEN TABLE_NAME WHEN TABLE_TYPE = 5 THEN SUBSTR(TABLE_NAME, 7 + POSITION('_' IN SUBSTR(TABLE_NAME, 7))) ELSE TABLE_NAME END) AS CHAR(128)) AS OBJECT_NAME ,NULL SUBOBJECT_NAME ,CAST(TABLE_ID AS SIGNED) AS OBJECT_ID ,(CASE WHEN TABLET_ID != 0 THEN TABLET_ID ELSE NULL END) DATA_OBJECT_ID ,CASE WHEN TABLE_TYPE IN (0,3,6,8,9) THEN 'TABLE' WHEN TABLE_TYPE IN (2) THEN 'VIRTUAL TABLE' WHEN TABLE_TYPE IN (1,4) THEN 'VIEW' WHEN TABLE_TYPE IN (5) THEN 'INDEX' WHEN TABLE_TYPE IN (7) THEN 'MATERIALIZED VIEW' ELSE NULL END AS OBJECT_TYPE ,CAST(CASE WHEN TABLE_TYPE IN (5) THEN CASE WHEN INDEX_STATUS = 2 THEN 'VALID' WHEN INDEX_STATUS = 3 THEN 'CHECKING' WHEN INDEX_STATUS = 4 THEN 'INELEGIBLE' WHEN INDEX_STATUS = 5 THEN 'ERROR' ELSE 'UNUSABLE' END ELSE 'VALID' END AS CHAR(10)) AS STATUS ,CASE WHEN TABLE_TYPE IN (6,8,9) THEN 'Y' ELSE 'N' END AS TEMPORARY ,CASE WHEN TABLE_TYPE IN (0,1) THEN 'Y' ELSE 'N' END AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_TABLE WHERE TENANT_ID = 0 AND TABLE_TYPE != 12 AND TABLE_TYPE != 13 UNION ALL SELECT CST.TENANT_ID ,CST.GMT_CREATE ,CST.GMT_MODIFIED ,DB.DATABASE_ID ,CST.constraint_name AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,CAST(TBL.TABLE_ID AS SIGNED) AS OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'INDEX' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_CONSTRAINT CST, OCEANBASE.__ALL_TABLE TBL, OCEANBASE.__ALL_DATABASE DB WHERE CST.TENANT_ID = 0 AND DB.DATABASE_ID = TBL.DATABASE_ID AND TBL.TABLE_ID = CST.TABLE_ID and CST.CONSTRAINT_TYPE = 1 UNION ALL SELECT P.TENANT_ID ,P.GMT_CREATE ,P.GMT_MODIFIED ,T.DATABASE_ID ,CAST((CASE WHEN T.DATABASE_ID = 201004 THEN T.TABLE_NAME WHEN T.TABLE_TYPE = 5 THEN SUBSTR(T.TABLE_NAME, 7 + POSITION('_' IN SUBSTR(T.TABLE_NAME, 7))) ELSE T.TABLE_NAME END) AS CHAR(128)) AS OBJECT_NAME ,P.PART_NAME SUBOBJECT_NAME ,P.PART_ID OBJECT_ID ,CASE WHEN P.TABLET_ID != 0 THEN P.TABLET_ID ELSE NULL END AS DATA_OBJECT_ID ,(CASE WHEN T.TABLE_TYPE = 5 THEN 'INDEX PARTITION' ELSE 'TABLE PARTITION' END) AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY , NULL AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_TABLE T JOIN OCEANBASE.__ALL_PART P ON T.TABLE_ID = P.TABLE_ID WHERE T.TENANT_ID = 0 AND T.TENANT_ID = P.TENANT_ID UNION ALL SELECT SUBP.TENANT_ID ,SUBP.GMT_CREATE ,SUBP.GMT_MODIFIED ,T.DATABASE_ID ,CAST((CASE WHEN T.DATABASE_ID = 201004 THEN T.TABLE_NAME WHEN T.TABLE_TYPE = 5 THEN SUBSTR(T.TABLE_NAME, 7 + POSITION('_' IN SUBSTR(T.TABLE_NAME, 7))) ELSE T.TABLE_NAME END) AS CHAR(128)) AS OBJECT_NAME ,SUBP.SUB_PART_NAME SUBOBJECT_NAME ,SUBP.SUB_PART_ID OBJECT_ID ,SUBP.TABLET_ID AS DATA_OBJECT_ID ,(CASE WHEN T.TABLE_TYPE = 5 THEN 'INDEX SUBPARTITION' ELSE 'TABLE SUBPARTITION' END) AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_TABLE T, OCEANBASE.__ALL_PART P,OCEANBASE.__ALL_SUB_PART SUBP WHERE T.TABLE_ID =P.TABLE_ID AND P.TABLE_ID=SUBP.TABLE_ID AND P.PART_ID =SUBP.PART_ID AND T.TENANT_ID = 0 AND T.TENANT_ID = P.TENANT_ID AND P.TENANT_ID = SUBP.TENANT_ID UNION ALL SELECT P.TENANT_ID ,P.GMT_CREATE ,P.GMT_MODIFIED ,P.DATABASE_ID ,P.PACKAGE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,CAST(P.PACKAGE_ID AS SIGNED) AS OBJECT_ID ,NULL AS DATA_OBJECT_ID ,CASE WHEN TYPE = 1 THEN 'PACKAGE' WHEN TYPE = 2 THEN 'PACKAGE BODY' ELSE NULL END AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM OCEANBASE.__ALL_TENANT_ERROR E WHERE P.TENANT_ID = E.TENANT_ID AND P.PACKAGE_ID = E.OBJ_ID AND (E.OBJ_TYPE = 3 OR E.OBJ_TYPE = 5)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_PACKAGE P WHERE P.TENANT_ID = 0 UNION ALL SELECT R.TENANT_ID ,R.GMT_CREATE ,R.GMT_MODIFIED ,R.DATABASE_ID ,R.ROUTINE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,CAST(R.ROUTINE_ID AS SIGNED) AS OBJECT_ID ,NULL AS DATA_OBJECT_ID ,CASE WHEN ROUTINE_TYPE = 1 THEN 'PROCEDURE' WHEN ROUTINE_TYPE = 2 THEN 'FUNCTION' ELSE NULL END AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM OCEANBASE.__ALL_TENANT_ERROR E WHERE R.TENANT_ID = E.TENANT_ID AND R.ROUTINE_ID = E.OBJ_ID AND (E.OBJ_TYPE = 9 OR E.OBJ_TYPE = 12)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_ROUTINE R WHERE (ROUTINE_TYPE = 1 OR ROUTINE_TYPE = 2) AND R.TENANT_ID = 0 UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,TYPE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,CAST(TYPE_ID AS SIGNED) AS OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_TYPE WHERE TENANT_ID = 0 UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,CAST(OBJECT_TYPE_ID AS SIGNED) AS OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE BODY' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_TENANT_OBJECT_TYPE WHERE TENANT_ID = 0 AND TYPE = 2 UNION ALL SELECT TENANT_ID ,T.GMT_CREATE ,T.GMT_MODIFIED ,T.DATABASE_ID ,T.TRIGGER_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,CAST(T.TRIGGER_ID AS SIGNED) AS OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TRIGGER' OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM OCEANBASE.__ALL_TENANT_ERROR E WHERE T.TENANT_ID = E.TENANT_ID AND T.TRIGGER_ID = E.OBJ_ID AND (E.OBJ_TYPE = 7)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_TENANT_TRIGGER T WHERE T.TENANT_ID = 0 UNION ALL SELECT TENANT_ID, GMT_CREATE, GMT_MODIFIED, DATABASE_ID, DATABASE_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, CAST(DATABASE_ID AS SIGNED) AS OBJECT_ID, NULL AS DATA_OBJECT_ID, 'DATABASE' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM OCEANBASE.__ALL_DATABASE WHERE TENANT_ID = 0 UNION ALL SELECT TENANT_ID, GMT_CREATE, GMT_MODIFIED, CAST(201001 AS SIGNED) AS DATABASE_ID, TABLEGROUP_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, CAST(TABLEGROUP_ID AS SIGNED) AS OBJECT_ID, NULL AS DATA_OBJECT_ID, 'TABLEGROUP' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM OCEANBASE.__ALL_TABLEGROUP WHERE TENANT_ID = 0 UNION ALL SELECT P.TENANT_ID, P.GMT_CREATE, P.GMT_MODIFIED, CAST(201001 AS SIGNED) AS DATABASE_ID, TG.TABLEGROUP_NAME AS OBJECT_NAME, P.PART_NAME SUBOBJECT_NAME, P.PART_ID OBJECT_ID, NULL AS DATA_OBJECT_ID, 'TABLEGROUP PARTITION' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, NULL AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM OCEANBASE.__ALL_TABLEGROUP TG JOIN OCEANBASE.__ALL_PART P ON TG.TABLEGROUP_ID = P.TABLE_ID WHERE TG.TENANT_ID = 0 AND TG.TENANT_ID = P.TENANT_ID UNION ALL SELECT SUBP.TENANT_ID, SUBP.GMT_CREATE, SUBP.GMT_MODIFIED, CAST(201001 AS SIGNED) AS DATABASE_ID, TG.TABLEGROUP_NAME AS OBJECT_NAME, SUBP.SUB_PART_NAME SUBOBJECT_NAME, SUBP.SUB_PART_ID OBJECT_ID, NULL DATA_OBJECT_ID, 'TABLEGROUP SUBPARTITION' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM OCEANBASE.__ALL_TABLEGROUP TG, OCEANBASE.__ALL_PART P,OCEANBASE.__ALL_SUB_PART SUBP WHERE TG.TABLEGROUP_ID = P.TABLE_ID AND P.TABLE_ID = SUBP.TABLE_ID AND P.PART_ID = SUBP.PART_ID AND TG.TENANT_ID = 0 AND TG.TENANT_ID = P.TENANT_ID AND P.TENANT_ID = SUBP.TENANT_ID ) A JOIN OCEANBASE.__ALL_DATABASE B ON A.TENANT_ID = B.TENANT_ID AND A.DATABASE_ID = B.DATABASE_ID AND B.TENANT_ID = 0 )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(B.DATABASE_NAME AS CHAR(128)) AS OWNER, CAST(A.OBJECT_NAME AS CHAR(128)) AS OBJECT_NAME, CAST(A.SUBOBJECT_NAME AS CHAR(128)) AS SUBOBJECT_NAME, CAST(A.OBJECT_ID AS SIGNED) AS OBJECT_ID, CAST(A.DATA_OBJECT_ID AS SIGNED) AS DATA_OBJECT_ID, CAST(A.OBJECT_TYPE AS CHAR(23)) AS OBJECT_TYPE, CAST(A.GMT_CREATE AS DATETIME) AS CREATED, CAST(A.GMT_MODIFIED AS DATETIME) AS LAST_DDL_TIME, CAST(A.GMT_CREATE AS DATETIME) AS TIMESTAMP, CAST(A.STATUS AS CHAR(7)) AS STATUS, CAST(A.TEMPORARY AS CHAR(1)) AS TEMPORARY, CAST(A.`GENERATED` AS CHAR(1)) AS "GENERATED", CAST(A.SECONDARY AS CHAR(1)) AS SECONDARY, CAST(A.NAMESPACE AS SIGNED) AS NAMESPACE, CAST(A.EDITION_NAME AS CHAR(128)) AS EDITION_NAME, CAST(NULL AS CHAR(18)) AS SHARING, CAST(NULL AS CHAR(1)) AS EDITIONABLE, CAST(NULL AS CHAR(1)) AS ORACLE_MAINTAINED, CAST(NULL AS CHAR(1)) AS APPLICATION, CAST(NULL AS CHAR(1)) AS DEFAULT_COLLATION, CAST(NULL AS CHAR(1)) AS DUPLICATED, CAST(NULL AS CHAR(1)) AS SHARDED, CAST(NULL AS CHAR(1)) AS IMPORTED_OBJECT, CAST(NULL AS SIGNED) AS CREATED_APPID, CAST(NULL AS SIGNED) AS CREATED_VSNID, CAST(NULL AS SIGNED) AS MODIFIED_APPID, CAST(NULL AS SIGNED) AS MODIFIED_VSNID FROM ( SELECT CAST(0 AS SIGNED) AS TENANT_ID, USEC_TO_TIME(B.SCHEMA_VERSION) AS GMT_CREATE, USEC_TO_TIME(A.SCHEMA_VERSION) AS GMT_MODIFIED, A.DATABASE_ID, A.TABLE_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, CAST(A.TABLE_ID AS SIGNED) AS OBJECT_ID, A.TABLET_ID AS DATA_OBJECT_ID, 'TABLE' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM OCEANBASE.__ALL_VIRTUAL_CORE_ALL_TABLE A JOIN OCEANBASE.__ALL_VIRTUAL_CORE_ALL_TABLE B ON A.TENANT_ID = B.TENANT_ID AND B.TABLE_NAME = '__all_core_table' WHERE A.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,CAST((CASE WHEN DATABASE_ID = 201004 THEN TABLE_NAME WHEN TABLE_TYPE = 5 THEN SUBSTR(TABLE_NAME, 7 + POSITION('_' IN SUBSTR(TABLE_NAME, 7))) ELSE TABLE_NAME END) AS CHAR(128)) AS OBJECT_NAME ,NULL SUBOBJECT_NAME ,CAST(TABLE_ID AS SIGNED) AS OBJECT_ID ,(CASE WHEN TABLET_ID != 0 THEN TABLET_ID ELSE NULL END) DATA_OBJECT_ID ,CASE WHEN TABLE_TYPE IN (0,3,6,8,9) THEN 'TABLE' WHEN TABLE_TYPE IN (2) THEN 'VIRTUAL TABLE' WHEN TABLE_TYPE IN (1,4) THEN 'VIEW' WHEN TABLE_TYPE IN (5) THEN 'INDEX' WHEN TABLE_TYPE IN (7) THEN 'MATERIALIZED VIEW' ELSE NULL END AS OBJECT_TYPE ,CAST(CASE WHEN TABLE_TYPE IN (5) THEN CASE WHEN INDEX_STATUS = 2 THEN 'VALID' WHEN INDEX_STATUS = 3 THEN 'CHECKING' WHEN INDEX_STATUS = 4 THEN 'INELEGIBLE' WHEN INDEX_STATUS = 5 THEN 'ERROR' ELSE 'UNUSABLE' END ELSE CASE WHEN OBJECT_STATUS = 1 THEN 'VALID' ELSE 'INVALID' END END AS CHAR(10)) AS STATUS ,CASE WHEN TABLE_TYPE IN (6,8,9) THEN 'Y' ELSE 'N' END AS TEMPORARY ,CASE WHEN TABLE_TYPE IN (0,1) THEN 'Y' ELSE 'N' END AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_TABLE WHERE TENANT_ID = 0 AND TABLE_TYPE != 12 AND TABLE_TYPE != 13 UNION ALL SELECT CST.TENANT_ID ,CST.GMT_CREATE ,CST.GMT_MODIFIED ,DB.DATABASE_ID ,CST.constraint_name AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,CAST(TBL.TABLE_ID AS SIGNED) AS OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'INDEX' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_CONSTRAINT CST, OCEANBASE.__ALL_TABLE TBL, OCEANBASE.__ALL_DATABASE DB WHERE CST.TENANT_ID = 0 AND DB.DATABASE_ID = TBL.DATABASE_ID AND TBL.TABLE_ID = CST.TABLE_ID and CST.CONSTRAINT_TYPE = 1 UNION ALL SELECT P.TENANT_ID ,P.GMT_CREATE ,P.GMT_MODIFIED ,T.DATABASE_ID ,CAST((CASE WHEN T.DATABASE_ID = 201004 THEN T.TABLE_NAME WHEN T.TABLE_TYPE = 5 THEN SUBSTR(T.TABLE_NAME, 7 + POSITION('_' IN SUBSTR(T.TABLE_NAME, 7))) ELSE T.TABLE_NAME END) AS CHAR(128)) AS OBJECT_NAME ,P.PART_NAME SUBOBJECT_NAME ,P.PART_ID OBJECT_ID ,CASE WHEN P.TABLET_ID != 0 THEN P.TABLET_ID ELSE NULL END AS DATA_OBJECT_ID ,(CASE WHEN T.TABLE_TYPE = 5 THEN 'INDEX PARTITION' ELSE 'TABLE PARTITION' END) AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY , NULL AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_TABLE T JOIN OCEANBASE.__ALL_PART P ON T.TABLE_ID = P.TABLE_ID WHERE T.TENANT_ID = 0 AND T.TENANT_ID = P.TENANT_ID UNION ALL SELECT SUBP.TENANT_ID ,SUBP.GMT_CREATE ,SUBP.GMT_MODIFIED ,T.DATABASE_ID ,CAST((CASE WHEN T.DATABASE_ID = 201004 THEN T.TABLE_NAME WHEN T.TABLE_TYPE = 5 THEN SUBSTR(T.TABLE_NAME, 7 + POSITION('_' IN SUBSTR(T.TABLE_NAME, 7))) ELSE T.TABLE_NAME END) AS CHAR(128)) AS OBJECT_NAME ,SUBP.SUB_PART_NAME SUBOBJECT_NAME ,SUBP.SUB_PART_ID OBJECT_ID ,SUBP.TABLET_ID AS DATA_OBJECT_ID ,(CASE WHEN T.TABLE_TYPE = 5 THEN 'INDEX SUBPARTITION' ELSE 'TABLE SUBPARTITION' END) AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_TABLE T, OCEANBASE.__ALL_PART P,OCEANBASE.__ALL_SUB_PART SUBP WHERE T.TABLE_ID =P.TABLE_ID AND P.TABLE_ID=SUBP.TABLE_ID AND P.PART_ID =SUBP.PART_ID AND T.TENANT_ID = 0 AND T.TENANT_ID = P.TENANT_ID AND P.TENANT_ID = SUBP.TENANT_ID UNION ALL SELECT P.TENANT_ID ,P.GMT_CREATE ,P.GMT_MODIFIED ,P.DATABASE_ID ,P.PACKAGE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,CAST(P.PACKAGE_ID AS SIGNED) AS OBJECT_ID ,NULL AS DATA_OBJECT_ID ,CASE WHEN TYPE = 1 THEN 'PACKAGE' WHEN TYPE = 2 THEN 'PACKAGE BODY' ELSE NULL END AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM OCEANBASE.__ALL_TENANT_ERROR E WHERE P.TENANT_ID = E.TENANT_ID AND P.PACKAGE_ID = E.OBJ_ID AND (E.OBJ_TYPE = 3 OR E.OBJ_TYPE = 5)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_PACKAGE P WHERE P.TENANT_ID = 0 UNION ALL SELECT R.TENANT_ID ,R.GMT_CREATE ,R.GMT_MODIFIED ,R.DATABASE_ID ,R.ROUTINE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,CAST(R.ROUTINE_ID AS SIGNED) AS OBJECT_ID ,NULL AS DATA_OBJECT_ID ,CASE WHEN ROUTINE_TYPE = 1 THEN 'PROCEDURE' WHEN ROUTINE_TYPE = 2 THEN 'FUNCTION' ELSE NULL END AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM OCEANBASE.__ALL_TENANT_ERROR E WHERE R.TENANT_ID = E.TENANT_ID AND R.ROUTINE_ID = E.OBJ_ID AND (E.OBJ_TYPE = 9 OR E.OBJ_TYPE = 12)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_ROUTINE R WHERE (ROUTINE_TYPE = 1 OR ROUTINE_TYPE = 2) AND R.TENANT_ID = 0 UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,TYPE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,CAST(TYPE_ID AS SIGNED) AS OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_TYPE WHERE TENANT_ID = 0 UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,CAST(OBJECT_TYPE_ID AS SIGNED) AS OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE BODY' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_TENANT_OBJECT_TYPE WHERE TENANT_ID = 0 AND TYPE = 2 UNION ALL SELECT TENANT_ID ,T.GMT_CREATE ,T.GMT_MODIFIED ,T.DATABASE_ID ,T.TRIGGER_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,CAST(T.TRIGGER_ID AS SIGNED) AS OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TRIGGER' OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM OCEANBASE.__ALL_TENANT_ERROR E WHERE T.TENANT_ID = E.TENANT_ID AND T.TRIGGER_ID = E.OBJ_ID AND (E.OBJ_TYPE = 7)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM OCEANBASE.__ALL_TENANT_TRIGGER T WHERE T.TENANT_ID = 0 UNION ALL SELECT TENANT_ID, GMT_CREATE, GMT_MODIFIED, DATABASE_ID, DATABASE_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, CAST(DATABASE_ID AS SIGNED) AS OBJECT_ID, NULL AS DATA_OBJECT_ID, 'DATABASE' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM OCEANBASE.__ALL_DATABASE WHERE TENANT_ID = 0 UNION ALL SELECT TENANT_ID, GMT_CREATE, GMT_MODIFIED, CAST(201001 AS SIGNED) AS DATABASE_ID, TABLEGROUP_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, CAST(TABLEGROUP_ID AS SIGNED) AS OBJECT_ID, NULL AS DATA_OBJECT_ID, 'TABLEGROUP' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM OCEANBASE.__ALL_TABLEGROUP WHERE TENANT_ID = 0 UNION ALL SELECT P.TENANT_ID, P.GMT_CREATE, P.GMT_MODIFIED, CAST(201001 AS SIGNED) AS DATABASE_ID, TG.TABLEGROUP_NAME AS OBJECT_NAME, P.PART_NAME SUBOBJECT_NAME, P.PART_ID OBJECT_ID, NULL AS DATA_OBJECT_ID, 'TABLEGROUP PARTITION' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, NULL AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM OCEANBASE.__ALL_TABLEGROUP TG JOIN OCEANBASE.__ALL_PART P ON TG.TABLEGROUP_ID = P.TABLE_ID WHERE TG.TENANT_ID = 0 AND TG.TENANT_ID = P.TENANT_ID UNION ALL SELECT SUBP.TENANT_ID, SUBP.GMT_CREATE, SUBP.GMT_MODIFIED, CAST(201001 AS SIGNED) AS DATABASE_ID, TG.TABLEGROUP_NAME AS OBJECT_NAME, SUBP.SUB_PART_NAME SUBOBJECT_NAME, SUBP.SUB_PART_ID OBJECT_ID, NULL DATA_OBJECT_ID, 'TABLEGROUP SUBPARTITION' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM OCEANBASE.__ALL_TABLEGROUP TG, OCEANBASE.__ALL_PART P,OCEANBASE.__ALL_SUB_PART SUBP WHERE TG.TABLEGROUP_ID = P.TABLE_ID AND P.TABLE_ID = SUBP.TABLE_ID AND P.PART_ID = SUBP.PART_ID AND TG.TENANT_ID = 0 AND TG.TENANT_ID = P.TENANT_ID AND P.TENANT_ID = SUBP.TENANT_ID ) A JOIN OCEANBASE.__ALL_DATABASE B ON A.TENANT_ID = B.TENANT_ID AND A.DATABASE_ID = B.DATABASE_ID AND B.TENANT_ID = 0 )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema.21301_21350.cpp b/src/share/inner_table/ob_inner_table_schema.21301_21350.cpp index 7fc5074d61..414a2e2462 100644 --- a/src/share/inner_table/ob_inner_table_schema.21301_21350.cpp +++ b/src/share/inner_table/ob_inner_table_schema.21301_21350.cpp @@ -1631,6 +1631,206 @@ int ObInnerTableSchema::dba_ob_cluster_event_history_schema(ObTableSchema &table return ret; } +int ObInnerTableSchema::parameters_schema(ObTableSchema &table_schema) +{ + int ret = OB_SUCCESS; + uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; + + //generated fields: + table_schema.set_tenant_id(OB_SYS_TENANT_ID); + table_schema.set_tablegroup_id(OB_INVALID_ID); + table_schema.set_database_id(OB_INFORMATION_SCHEMA_ID); + table_schema.set_table_id(OB_PARAMETERS_TID); + table_schema.set_rowkey_split_pos(0); + table_schema.set_is_use_bloomfilter(false); + table_schema.set_progressive_merge_num(0); + table_schema.set_rowkey_column_num(0); + table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); + table_schema.set_table_type(SYSTEM_VIEW); + table_schema.set_index_type(INDEX_TYPE_IS_NOT); + table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_table_name(OB_PARAMETERS_TNAME))) { + LOG_ERROR("fail to set table_name", K(ret)); + } + } + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { + LOG_ERROR("fail to set compress_func_name", K(ret)); + } + } + table_schema.set_part_level(PARTITION_LEVEL_ZERO); + table_schema.set_charset_type(ObCharset::get_default_charset()); + table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_view_definition(R"__(select CAST('def' AS CHAR(512)) AS SPECIFIC_CATALOG, CAST(d.database_name AS CHAR(128)) AS SPECIFIC_SCHEMA, CAST(r.routine_name AS CHAR(64)) AS SPECIFIC_NAME, CAST(rp.param_position AS signed) AS ORDINAL_POSITION, CAST(CASE rp.param_position WHEN 0 THEN NULL ELSE CASE rp.flag & 0x03 WHEN 1 THEN "IN" WHEN 2 THEN "OUT" WHEN 3 THEN "INOUT" ELSE NULL END END AS CHAR(5)) AS PARAMETER_MODE, CAST(rp.param_name AS CHAR(64)) AS PARAMETER_NAME, CAST(lower(v.data_type_str) AS CHAR(64)) AS DATA_TYPE, CASE WHEN rp.param_type IN (22, 23, 27, 28, 29, 30) THEN CAST(rp.param_length AS SIGNED) ELSE CAST(NULL AS SIGNED) END AS CHARACTER_MAXIMUM_LENGTH, CASE WHEN rp.param_type IN (22, 23, 27, 28, 29, 30, 43, 44, 46) THEN CAST( rp.param_length * CASE rp.param_coll_type WHEN 63 THEN 1 WHEN 249 THEN 4 WHEN 248 THEN 4 WHEN 87 THEN 2 WHEN 28 THEN 2 WHEN 55 THEN 4 WHEN 54 THEN 4 WHEN 101 THEN 2 WHEN 46 THEN 4 WHEN 45 THEN 4 WHEN 224 THEN 4 ELSE 1 END AS SIGNED ) ELSE CAST(NULL AS SIGNED) END AS CHARACTER_OCTET_LENGTH, CASE WHEN rp.param_type IN (1, 2, 3, 4, 5, 15, 16) THEN CAST(rp.param_precision AS UNSIGNED) ELSE CAST(NULL AS UNSIGNED) END AS NUMERIC_PRECISION, CASE WHEN rp.param_type IN (15, 16) THEN CAST(rp.param_scale AS SIGNED) WHEN rp.param_type IN (1, 2, 3, 4, 5, 11, 12, 13, 14) THEN CAST(0 AS SIGNED) ELSE CAST(NULL AS SIGNED) END AS NUMERIC_SCALE, CASE WHEN rp.param_type IN (17, 18, 20) THEN CAST(rp.param_scale AS UNSIGNED) ELSE CAST(NULL AS UNSIGNED) END AS DATETIME_PRECISION, CAST(CASE rp.param_charset WHEN 1 THEN "binary" WHEN 2 THEN "utf8mb4" WHEN 3 THEN "gbk" WHEN 4 THEN "utf16" WHEN 5 THEN "gb18030" ELSE NULL END AS CHAR(64)) AS CHARACTER_SET_NAME, CAST(CASE rp.param_coll_type WHEN 45 THEN 'utf8mb4_general_ci' WHEN 46 THEN 'utf8mb4_bin' WHEN 63 THEN 'binary' ELSE NULL END AS CHAR(64)) AS COLLATION_NAME, CAST(CASE WHEN rp.param_type IN (1, 2, 3, 4, 5) THEN CONCAT(lower(v.data_type_str),'(',rp.param_precision,')') WHEN rp.param_type IN (15,16) THEN CONCAT(lower(v.data_type_str),'(',rp.param_precision, ',', rp.param_scale,')') WHEN rp.param_type IN (18, 20) THEN CONCAT(lower(v.data_type_str),'(', rp.param_scale, ')') ELSE lower(v.data_type_str) END AS char(4194304)) AS DTD_IDENTIFIER, CAST(CASE WHEN r.routine_type = 1 THEN 'PROCEDURE' WHEN ROUTINE_TYPE = 2 THEN 'FUNCTION' ELSE NULL END AS CHAR(9)) AS ROUTINE_TYPE from oceanbase.__all_routine_param as rp join oceanbase.__all_routine as r on rp.subprogram_id = r.subprogram_id and rp.tenant_id = r.tenant_id and rp.routine_id = r.routine_id join oceanbase.__all_database as d on r.database_id = d.database_id left join oceanbase.__all_virtual_data_type v on rp.param_type = v.data_type WHERE rp.tenant_id = 0 and in_recyclebin = 0 and database_name != '__recyclebin' order by SPECIFIC_SCHEMA, SPECIFIC_NAME, ORDINAL_POSITION )__"))) { + LOG_ERROR("fail to set view_definition", K(ret)); + } + } + table_schema.set_index_using_type(USING_BTREE); + table_schema.set_row_store_type(ENCODING_ROW_STORE); + table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); + table_schema.set_progressive_merge_round(1); + table_schema.set_storage_format_version(3); + table_schema.set_tablet_id(0); + + table_schema.set_max_used_column_id(column_id); + return ret; +} + +int ObInnerTableSchema::table_privileges_schema(ObTableSchema &table_schema) +{ + int ret = OB_SUCCESS; + uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; + + //generated fields: + table_schema.set_tenant_id(OB_SYS_TENANT_ID); + table_schema.set_tablegroup_id(OB_INVALID_ID); + table_schema.set_database_id(OB_INFORMATION_SCHEMA_ID); + table_schema.set_table_id(OB_TABLE_PRIVILEGES_TID); + table_schema.set_rowkey_split_pos(0); + table_schema.set_is_use_bloomfilter(false); + table_schema.set_progressive_merge_num(0); + table_schema.set_rowkey_column_num(0); + table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); + table_schema.set_table_type(SYSTEM_VIEW); + table_schema.set_index_type(INDEX_TYPE_IS_NOT); + table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_table_name(OB_TABLE_PRIVILEGES_TNAME))) { + LOG_ERROR("fail to set table_name", K(ret)); + } + } + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { + LOG_ERROR("fail to set compress_func_name", K(ret)); + } + } + table_schema.set_part_level(PARTITION_LEVEL_ZERO); + table_schema.set_charset_type(ObCharset::get_default_charset()); + table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(CONCAT('''', V.USER_NAME, '''', '@', '''', V.HOST, '''') AS CHAR(81)) AS GRANTEE , CAST('def' AS CHAR(512)) AS TABLE_CATALOG , CAST(V.DATABASE_NAME AS CHAR(128)) AS TABLE_SCHEMA , CAST(V.TABLE_NAME AS CHAR(64)) AS TABLE_NAME, CAST(V.PRIVILEGE_TYPE AS CHAR(64)) AS PRIVILEGE_TYPE , CAST(V.IS_GRANTABLE AS CHAR(3)) AS IS_GRANTABLE FROM (SELECT TP.DATABASE_NAME AS DATABASE_NAME, TP.TABLE_NAME AS TABLE_NAME, U.USER_NAME AS USER_NAME, U.HOST AS HOST, CASE WHEN V1.C1 = 1 AND TP.PRIV_ALTER = 1 THEN 'ALTER' WHEN V1.C1 = 2 AND TP.PRIV_CREATE = 1 THEN 'CREATE' WHEN V1.C1 = 4 AND TP.PRIV_DELETE = 1 THEN 'DELETE' WHEN V1.C1 = 5 AND TP.PRIV_DROP = 1 THEN 'DROP' WHEN V1.C1 = 7 AND TP.PRIV_INSERT = 1 THEN 'INSERT' WHEN V1.C1 = 8 AND TP.PRIV_UPDATE = 1 THEN 'UPDATE' WHEN V1.C1 = 9 AND TP.PRIV_SELECT = 1 THEN 'SELECT' WHEN V1.C1 = 10 AND TP.PRIV_INDEX = 1 THEN 'INDEX' WHEN V1.C1 = 11 AND TP.PRIV_CREATE_VIEW = 1 THEN 'CREATE VIEW' WHEN V1.C1 = 12 AND TP.PRIV_SHOW_VIEW = 1 THEN 'SHOW VIEW' ELSE NULL END PRIVILEGE_TYPE , CASE WHEN TP.PRIV_GRANT_OPTION = 1 THEN 'YES' WHEN TP.PRIV_GRANT_OPTION = 0 THEN 'NO' END IS_GRANTABLE FROM oceanbase.__all_table_privilege TP, oceanbase.__all_user U, (SELECT 1 AS C1 UNION ALL SELECT 2 AS C1 UNION ALL SELECT 4 AS C1 UNION ALL SELECT 5 AS C1 UNION ALL SELECT 7 AS C1 UNION ALL SELECT 8 AS C1 UNION ALL SELECT 9 AS C1 UNION ALL SELECT 10 AS C1 UNION ALL SELECT 11 AS C1 UNION ALL SELECT 12 AS C1) V1, (SELECT USER_ID FROM oceanbase.__all_user WHERE TENANT_ID = 0 AND CONCAT(USER_NAME, '@', HOST) = CURRENT_USER()) CURR LEFT JOIN (SELECT USER_ID FROM oceanbase.__all_database_privilege WHERE TENANT_ID = 0 AND DATABASE_NAME = 'mysql' AND PRIV_SELECT = 1) DB ON CURR.USER_ID = DB.USER_ID WHERE TP.TENANT_ID = 0 AND TP.TENANT_ID = U.TENANT_ID AND TP.USER_ID = U.USER_ID AND (DB.USER_ID IS NOT NULL OR 512 & CURRENT_USER_PRIV() = 512 OR TP.USER_ID = CURR.USER_ID)) V WHERE V.PRIVILEGE_TYPE IS NOT NULL )__"))) { + LOG_ERROR("fail to set view_definition", K(ret)); + } + } + table_schema.set_index_using_type(USING_BTREE); + table_schema.set_row_store_type(ENCODING_ROW_STORE); + table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); + table_schema.set_progressive_merge_round(1); + table_schema.set_storage_format_version(3); + table_schema.set_tablet_id(0); + + table_schema.set_max_used_column_id(column_id); + return ret; +} + +int ObInnerTableSchema::user_privileges_schema(ObTableSchema &table_schema) +{ + int ret = OB_SUCCESS; + uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; + + //generated fields: + table_schema.set_tenant_id(OB_SYS_TENANT_ID); + table_schema.set_tablegroup_id(OB_INVALID_ID); + table_schema.set_database_id(OB_INFORMATION_SCHEMA_ID); + table_schema.set_table_id(OB_USER_PRIVILEGES_TID); + table_schema.set_rowkey_split_pos(0); + table_schema.set_is_use_bloomfilter(false); + table_schema.set_progressive_merge_num(0); + table_schema.set_rowkey_column_num(0); + table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); + table_schema.set_table_type(SYSTEM_VIEW); + table_schema.set_index_type(INDEX_TYPE_IS_NOT); + table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_table_name(OB_USER_PRIVILEGES_TNAME))) { + LOG_ERROR("fail to set table_name", K(ret)); + } + } + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { + LOG_ERROR("fail to set compress_func_name", K(ret)); + } + } + table_schema.set_part_level(PARTITION_LEVEL_ZERO); + table_schema.set_charset_type(ObCharset::get_default_charset()); + table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(CONCAT('''', V.USER_NAME, '''', '@', '''', V.HOST, '''') AS CHAR(81)) AS GRANTEE , CAST('def' AS CHAR(512)) AS TABLE_CATALOG , CAST(V.PRIVILEGE_TYPE AS CHAR(64)) AS PRIVILEGE_TYPE , CAST(V.IS_GRANTABLE AS CHAR(3)) AS IS_GRANTABLE FROM (SELECT U.USER_NAME AS USER_NAME, U.HOST AS HOST, CASE WHEN V1.C1 = 1 AND U.PRIV_ALTER = 1 THEN 'ALTER' WHEN V1.C1 = 2 AND U.PRIV_CREATE = 1 THEN 'CREATE' WHEN V1.C1 = 3 AND U.PRIV_CREATE_USER = 1 THEN 'CREATE USER' WHEN V1.C1 = 4 AND U.PRIV_DELETE = 1 THEN 'DELETE' WHEN V1.C1 = 5 AND U.PRIV_DROP = 1 THEN 'DROP' WHEN V1.C1 = 7 AND U.PRIV_INSERT = 1 THEN 'INSERT' WHEN V1.C1 = 8 AND U.PRIV_UPDATE = 1 THEN 'UPDATE' WHEN V1.C1 = 9 AND U.PRIV_SELECT = 1 THEN 'SELECT' WHEN V1.C1 = 10 AND U.PRIV_INDEX = 1 THEN 'INDEX' WHEN V1.C1 = 11 AND U.PRIV_CREATE_VIEW = 1 THEN 'CREATE VIEW' WHEN V1.C1 = 12 AND U.PRIV_SHOW_VIEW = 1 THEN 'SHOW VIEW' WHEN V1.C1 = 13 AND U.PRIV_SHOW_DB = 1 THEN 'SHOW DB' WHEN V1.C1 = 14 AND U.PRIV_SUPER = 1 THEN 'SUPER' WHEN V1.C1 = 15 AND U.PRIV_PROCESS = 1 THEN 'PROCESS' WHEN V1.C1 = 17 AND U.PRIV_CREATE_SYNONYM = 1 THEN 'CREATE SYNONYM' WHEN V1.C1 = 27 AND U.PRIV_FILE = 1 THEN 'FILE' WHEN V1.C1 = 28 AND U.PRIV_ALTER_TENANT = 1 THEN 'ALTER TENANT' WHEN V1.C1 = 29 AND U.PRIV_ALTER_SYSTEM = 1 THEN 'ALTER SYSTEM' WHEN V1.C1 = 30 AND U.PRIV_CREATE_RESOURCE_POOL = 1 THEN 'CREATE RESOURCE POOL' WHEN V1.C1 = 31 AND U.PRIV_CREATE_RESOURCE_UNIT = 1 THEN 'CREATE RESOURCE UNIT' WHEN V1.C1 = 33 AND U.PRIV_REPL_SLAVE = 1 THEN 'REPLICATION SLAVE' WHEN V1.C1 = 34 AND U.PRIV_REPL_CLIENT = 1 THEN 'REPLICATION CLIENT' WHEN V1.C1 = 0 AND U.PRIV_ALTER = 0 AND U.PRIV_CREATE = 0 AND U.PRIV_CREATE_USER = 0 AND U.PRIV_DELETE = 0 AND U.PRIV_DROP = 0 AND U.PRIV_INSERT = 0 AND U.PRIV_UPDATE = 0 AND U.PRIV_SELECT = 0 AND U.PRIV_INDEX = 0 AND U.PRIV_CREATE_VIEW = 0 AND U.PRIV_SHOW_VIEW = 0 AND U.PRIV_SHOW_DB = 0 AND U.PRIV_SUPER = 0 AND U.PRIV_PROCESS = 0 AND U.PRIV_CREATE_SYNONYM = 0 AND U.PRIV_FILE = 0 AND U.PRIV_ALTER_TENANT = 0 AND U.PRIV_ALTER_SYSTEM = 0 AND U.PRIV_CREATE_RESOURCE_POOL = 0 AND U.PRIV_CREATE_RESOURCE_UNIT = 0 AND U.PRIV_REPL_SLAVE = 0 AND U.PRIV_REPL_CLIENT = 0 THEN 'USAGE' END PRIVILEGE_TYPE , CASE WHEN U.PRIV_GRANT_OPTION = 0 THEN 'NO' WHEN U.PRIV_ALTER = 0 AND U.PRIV_CREATE = 0 AND U.PRIV_CREATE_USER = 0 AND U.PRIV_DELETE = 0 AND U.PRIV_DROP = 0 AND U.PRIV_INSERT = 0 AND U.PRIV_UPDATE = 0 AND U.PRIV_SELECT = 0 AND U.PRIV_INDEX = 0 AND U.PRIV_CREATE_VIEW = 0 AND U.PRIV_SHOW_VIEW = 0 AND U.PRIV_SHOW_DB = 0 AND U.PRIV_SUPER = 0 AND U.PRIV_PROCESS = 0 AND U.PRIV_CREATE_SYNONYM = 0 AND U.PRIV_FILE = 0 AND U.PRIV_ALTER_TENANT = 0 AND U.PRIV_ALTER_SYSTEM = 0 AND U.PRIV_CREATE_RESOURCE_POOL = 0 AND U.PRIV_CREATE_RESOURCE_UNIT = 0 AND U.PRIV_REPL_SLAVE = 0 AND U.PRIV_REPL_CLIENT = 0 THEN 'NO' WHEN U.PRIV_GRANT_OPTION = 1 THEN 'YES' END IS_GRANTABLE FROM oceanbase.__all_user U, (SELECT 0 AS C1 UNION ALL SELECT 1 AS C1 UNION ALL SELECT 2 AS C1 UNION ALL SELECT 3 AS C1 UNION ALL SELECT 4 AS C1 UNION ALL SELECT 5 AS C1 UNION ALL SELECT 7 AS C1 UNION ALL SELECT 8 AS C1 UNION ALL SELECT 9 AS C1 UNION ALL SELECT 10 AS C1 UNION ALL SELECT 11 AS C1 UNION ALL SELECT 12 AS C1 UNION ALL SELECT 13 AS C1 UNION ALL SELECT 14 AS C1 UNION ALL SELECT 15 AS C1 UNION ALL SELECT 17 AS C1 UNION ALL SELECT 27 AS C1 UNION ALL SELECT 28 AS C1 UNION ALL SELECT 29 AS C1 UNION ALL SELECT 30 AS C1 UNION ALL SELECT 31 AS C1 UNION ALL SELECT 33 AS C1 UNION ALL SELECT 34 AS C1) V1, (SELECT USER_ID FROM oceanbase.__all_user WHERE TENANT_ID = 0 AND CONCAT(USER_NAME, '@', HOST) = CURRENT_USER()) CURR LEFT JOIN (SELECT USER_ID FROM oceanbase.__all_database_privilege WHERE TENANT_ID = 0 AND DATABASE_NAME = 'mysql' AND PRIV_SELECT = 1) DB ON CURR.USER_ID = DB.USER_ID WHERE U.TENANT_ID = 0 AND (DB.USER_ID IS NOT NULL OR 512 & CURRENT_USER_PRIV() = 512 OR U.USER_ID = CURR.USER_ID)) V WHERE V.PRIVILEGE_TYPE IS NOT NULL )__"))) { + LOG_ERROR("fail to set view_definition", K(ret)); + } + } + table_schema.set_index_using_type(USING_BTREE); + table_schema.set_row_store_type(ENCODING_ROW_STORE); + table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); + table_schema.set_progressive_merge_round(1); + table_schema.set_storage_format_version(3); + table_schema.set_tablet_id(0); + + table_schema.set_max_used_column_id(column_id); + return ret; +} + +int ObInnerTableSchema::schema_privileges_schema(ObTableSchema &table_schema) +{ + int ret = OB_SUCCESS; + uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; + + //generated fields: + table_schema.set_tenant_id(OB_SYS_TENANT_ID); + table_schema.set_tablegroup_id(OB_INVALID_ID); + table_schema.set_database_id(OB_INFORMATION_SCHEMA_ID); + table_schema.set_table_id(OB_SCHEMA_PRIVILEGES_TID); + table_schema.set_rowkey_split_pos(0); + table_schema.set_is_use_bloomfilter(false); + table_schema.set_progressive_merge_num(0); + table_schema.set_rowkey_column_num(0); + table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); + table_schema.set_table_type(SYSTEM_VIEW); + table_schema.set_index_type(INDEX_TYPE_IS_NOT); + table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_table_name(OB_SCHEMA_PRIVILEGES_TNAME))) { + LOG_ERROR("fail to set table_name", K(ret)); + } + } + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { + LOG_ERROR("fail to set compress_func_name", K(ret)); + } + } + table_schema.set_part_level(PARTITION_LEVEL_ZERO); + table_schema.set_charset_type(ObCharset::get_default_charset()); + table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(CONCAT('''', V.USER_NAME, '''', '@', '''', V.HOST, '''') AS CHAR(81)) AS GRANTEE , CAST('def' AS CHAR(512)) AS TABLE_CATALOG , CAST(V.DATABASE_NAME AS CHAR(128)) AS TABLE_SCHEMA , CAST(V.PRIVILEGE_TYPE AS CHAR(64)) AS PRIVILEGE_TYPE , CAST(V.IS_GRANTABLE AS CHAR(3)) AS IS_GRANTABLE FROM (SELECT DP.DATABASE_NAME DATABASE_NAME, U.USER_NAME AS USER_NAME, U.HOST AS HOST, CASE WHEN V1.C1 = 1 AND DP.PRIV_ALTER = 1 THEN 'ALTER' WHEN V1.C1 = 2 AND DP.PRIV_CREATE = 1 THEN 'CREATE' WHEN V1.C1 = 4 AND DP.PRIV_DELETE = 1 THEN 'DELETE' WHEN V1.C1 = 5 AND DP.PRIV_DROP = 1 THEN 'DROP' WHEN V1.C1 = 7 AND DP.PRIV_INSERT = 1 THEN 'INSERT' WHEN V1.C1 = 8 AND DP.PRIV_UPDATE = 1 THEN 'UPDATE' WHEN V1.C1 = 9 AND DP.PRIV_SELECT = 1 THEN 'SELECT' WHEN V1.C1 = 10 AND DP.PRIV_INDEX = 1 THEN 'INDEX' WHEN V1.C1 = 11 AND DP.PRIV_CREATE_VIEW = 1 THEN 'CREATE VIEW' WHEN V1.C1 = 12 AND DP.PRIV_SHOW_VIEW = 1 THEN 'SHOW VIEW' ELSE NULL END PRIVILEGE_TYPE , CASE WHEN DP.PRIV_GRANT_OPTION = 1 THEN 'YES' WHEN DP.PRIV_GRANT_OPTION = 0 THEN 'NO' END IS_GRANTABLE FROM oceanbase.__all_database_privilege DP, oceanbase.__all_user U, (SELECT 1 AS C1 UNION ALL SELECT 2 AS C1 UNION ALL SELECT 4 AS C1 UNION ALL SELECT 5 AS C1 UNION ALL SELECT 7 AS C1 UNION ALL SELECT 8 AS C1 UNION ALL SELECT 9 AS C1 UNION ALL SELECT 10 AS C1 UNION ALL SELECT 11 AS C1 UNION ALL SELECT 12 AS C1) V1, (SELECT USER_ID FROM oceanbase.__all_user WHERE TENANT_ID= 0 AND CONCAT(USER_NAME, '@', HOST) = CURRENT_USER()) CURR LEFT JOIN (SELECT USER_ID FROM oceanbase.__all_database_privilege WHERE TENANT_ID = 0 AND DATABASE_NAME = 'mysql' AND PRIV_SELECT = 1) DB ON CURR.USER_ID = DB.USER_ID WHERE DP.TENANT_ID = 0 AND DP.TENANT_ID = U.TENANT_ID AND DP.USER_ID = U.USER_ID AND DP.DATABASE_NAME != '__recyclebin' AND DP.DATABASE_NAME != '__public' AND DP.DATABASE_NAME != 'SYS' AND DP.DATABASE_NAME != 'LBACSYS' AND DP.DATABASE_NAME != 'ORAAUDITOR' AND (DB.USER_ID IS NOT NULL OR 512 & CURRENT_USER_PRIV() = 512 OR DP.USER_ID = CURR.USER_ID)) V WHERE V.PRIVILEGE_TYPE IS NOT NULL )__"))) { + LOG_ERROR("fail to set view_definition", K(ret)); + } + } + table_schema.set_index_using_type(USING_BTREE); + table_schema.set_row_store_type(ENCODING_ROW_STORE); + table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); + table_schema.set_progressive_merge_round(1); + table_schema.set_storage_format_version(3); + table_schema.set_tablet_id(0); + + table_schema.set_max_used_column_id(column_id); + return ret; +} + } // end namespace share } // end namespace oceanbase diff --git a/src/share/inner_table/ob_inner_table_schema.21351_21400.cpp b/src/share/inner_table/ob_inner_table_schema.21351_21400.cpp new file mode 100644 index 0000000000..3aa5269ba2 --- /dev/null +++ b/src/share/inner_table/ob_inner_table_schema.21351_21400.cpp @@ -0,0 +1,279 @@ +/** + * Copyright (c) 2021 OceanBase + * OceanBase CE is licensed under Mulan PubL v2. + * You can use this software according to the terms and conditions of the Mulan PubL v2. + * You may obtain a copy of Mulan PubL v2 at: + * http://license.coscl.org.cn/MulanPubL-2.0 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PubL v2 for more details. + */ + +#define USING_LOG_PREFIX SHARE_SCHEMA +#include "ob_inner_table_schema.h" + +#include "share/schema/ob_schema_macro_define.h" +#include "share/schema/ob_schema_service_sql_impl.h" +#include "share/schema/ob_table_schema.h" + +namespace oceanbase +{ +using namespace share::schema; +using namespace common; +namespace share +{ + +int ObInnerTableSchema::check_constraints_schema(ObTableSchema &table_schema) +{ + int ret = OB_SUCCESS; + uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; + + //generated fields: + table_schema.set_tenant_id(OB_SYS_TENANT_ID); + table_schema.set_tablegroup_id(OB_INVALID_ID); + table_schema.set_database_id(OB_INFORMATION_SCHEMA_ID); + table_schema.set_table_id(OB_CHECK_CONSTRAINTS_TID); + table_schema.set_rowkey_split_pos(0); + table_schema.set_is_use_bloomfilter(false); + table_schema.set_progressive_merge_num(0); + table_schema.set_rowkey_column_num(0); + table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); + table_schema.set_table_type(SYSTEM_VIEW); + table_schema.set_index_type(INDEX_TYPE_IS_NOT); + table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_table_name(OB_CHECK_CONSTRAINTS_TNAME))) { + LOG_ERROR("fail to set table_name", K(ret)); + } + } + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { + LOG_ERROR("fail to set compress_func_name", K(ret)); + } + } + table_schema.set_part_level(PARTITION_LEVEL_ZERO); + table_schema.set_charset_type(ObCharset::get_default_charset()); + table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST('def' AS CHAR(64)) AS CONSTRAINT_CATALOG, CAST(d.database_name AS CHAR(128)) AS CONSTRAINT_SCHEMA, CAST(c.constraint_name AS CHAR(64)) AS CONSTRAINT_NAME, CAST(c.check_expr AS CHAR(2048)) AS CHECK_CLAUSE FROM oceanbase.__all_database d JOIN oceanbase.__all_table t ON d.database_id = t.database_id JOIN oceanbase.__all_constraint c ON t.table_id = c.table_id WHERE d.database_id > 500000 and d.in_recyclebin = 0 AND t.table_type = 3 AND c.constraint_type = 3 )__"))) { + LOG_ERROR("fail to set view_definition", K(ret)); + } + } + table_schema.set_index_using_type(USING_BTREE); + table_schema.set_row_store_type(ENCODING_ROW_STORE); + table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); + table_schema.set_progressive_merge_round(1); + table_schema.set_storage_format_version(3); + table_schema.set_tablet_id(0); + + table_schema.set_max_used_column_id(column_id); + return ret; +} + +int ObInnerTableSchema::referential_constraints_schema(ObTableSchema &table_schema) +{ + int ret = OB_SUCCESS; + uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; + + //generated fields: + table_schema.set_tenant_id(OB_SYS_TENANT_ID); + table_schema.set_tablegroup_id(OB_INVALID_ID); + table_schema.set_database_id(OB_INFORMATION_SCHEMA_ID); + table_schema.set_table_id(OB_REFERENTIAL_CONSTRAINTS_TID); + table_schema.set_rowkey_split_pos(0); + table_schema.set_is_use_bloomfilter(false); + table_schema.set_progressive_merge_num(0); + table_schema.set_rowkey_column_num(0); + table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); + table_schema.set_table_type(SYSTEM_VIEW); + table_schema.set_index_type(INDEX_TYPE_IS_NOT); + table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_table_name(OB_REFERENTIAL_CONSTRAINTS_TNAME))) { + LOG_ERROR("fail to set table_name", K(ret)); + } + } + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { + LOG_ERROR("fail to set compress_func_name", K(ret)); + } + } + table_schema.set_part_level(PARTITION_LEVEL_ZERO); + table_schema.set_charset_type(ObCharset::get_default_charset()); + table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_view_definition(R"__( select CAST('def' AS CHAR(64)) AS CONSTRAINT_CATALOG, CAST(cd.database_name AS CHAR(128)) AS CONSTRAINT_SCHEMA, CAST(f.foreign_key_name AS CHAR(128)) AS CONSTRAINT_NAME, CAST('def' AS CHAR(64)) AS UNIQUE_CONSTRAINT_CATALOG, CAST(pd.database_name AS CHAR(128)) AS UNIQUE_CONSTRAINT_SCHEMA, CAST(CASE WHEN f.ref_cst_type = 1 THEN 'PRIMARY' ELSE NULL END AS CHAR(128)) AS UNIQUE_CONSTRAINT_NAME, CAST('NONE' AS CHAR(64)) AS MATCH_OPTION, CAST(CASE WHEN f.update_action = 1 THEN 'RESTRICT' WHEN f.update_action = 2 THEN 'CASCADE' WHEN f.update_action = 3 THEN 'SET_NULL' WHEN f.update_action = 4 THEN 'NO_ACTION' WHEN f.update_action = 5 THEN 'SET_DEFAULT' ELSE NULL END AS CHAR(64)) AS UPDATE_RULE, CAST(CASE WHEN f.delete_action = 1 THEN 'RESTRICT' WHEN f.delete_action = 2 THEN 'CASCADE' WHEN f.delete_action = 3 THEN 'SET_NULL' WHEN f.delete_action = 4 THEN 'NO_ACTION' WHEN f.delete_action = 5 THEN 'SET_DEFAULT' ELSE NULL END AS CHAR(64)) AS DELETE_RULE, CAST(ct.table_name AS CHAR(256)) AS TABLE_NAME, CAST(pt.table_name AS CHAR(256)) AS REFERENCED_TABLE_NAME FROM oceanbase.__all_foreign_key f JOIN oceanbase.__all_table ct on f.child_table_id = ct.table_id and f.is_parent_table_mock = 0 and f.ref_cst_type != 2 JOIN oceanbase.__all_database cd on ct.database_id = cd.database_id JOIN oceanbase.__all_table pt on f.parent_table_id = pt.table_id JOIN oceanbase.__all_database pd on pt.database_id = pd.database_id WHERE cd.database_id > 500000 and cd.in_recyclebin = 0 AND ct.table_type = 3 union all select CAST('def' AS CHAR(64)) AS CONSTRAINT_CATALOG, CAST(cd.database_name AS CHAR(128)) AS CONSTRAINT_SCHEMA, CAST(f.foreign_key_name AS CHAR(128)) AS CONSTRAINT_NAME, CAST('def' AS CHAR(64)) AS UNIQUE_CONSTRAINT_CATALOG, CAST(pd.database_name AS CHAR(128)) AS UNIQUE_CONSTRAINT_SCHEMA, CAST(SUBSTR(it.table_name, 7 + INSTR(SUBSTR(it.table_name, 7), '_')) AS CHAR(128)) AS UNIQUE_CONSTRAINT_NAME, CAST('NONE' AS CHAR(64)) AS MATCH_OPTION, CAST(CASE WHEN f.update_action = 1 THEN 'RESTRICT' WHEN f.update_action = 2 THEN 'CASCADE' WHEN f.update_action = 3 THEN 'SET_NULL' WHEN f.update_action = 4 THEN 'NO_ACTION' WHEN f.update_action = 5 THEN 'SET_DEFAULT' ELSE NULL END AS CHAR(64)) AS UPDATE_RULE, CAST(CASE WHEN f.delete_action = 1 THEN 'RESTRICT' WHEN f.delete_action = 2 THEN 'CASCADE' WHEN f.delete_action = 3 THEN 'SET_NULL' WHEN f.delete_action = 4 THEN 'NO_ACTION' WHEN f.delete_action = 5 THEN 'SET_DEFAULT' ELSE NULL END AS CHAR(64)) AS DELETE_RULE, CAST(ct.table_name AS CHAR(256)) AS TABLE_NAME, CAST(pt.table_name AS CHAR(256)) AS REFERENCED_TABLE_NAME FROM oceanbase.__all_foreign_key f JOIN oceanbase.__all_table ct on f.child_table_id = ct.table_id and f.is_parent_table_mock = 0 and f.ref_cst_type = 2 JOIN oceanbase.__all_database cd on ct.database_id = cd.database_id JOIN oceanbase.__all_table pt on f.parent_table_id = pt.table_id JOIN oceanbase.__all_database pd on pt.database_id = pd.database_id JOIN oceanbase.__all_table it on f.ref_cst_id = it.table_id WHERE cd.database_id > 500000 and cd.in_recyclebin = 0 AND ct.table_type = 3 union all select CAST('def' AS CHAR(64)) AS CONSTRAINT_CATALOG, CAST(cd.database_name AS CHAR(128)) AS CONSTRAINT_SCHEMA, CAST(f.foreign_key_name AS CHAR(128)) AS CONSTRAINT_NAME, CAST('def' AS CHAR(64)) AS UNIQUE_CONSTRAINT_CATALOG, CAST(pd.database_name AS CHAR(128)) AS UNIQUE_CONSTRAINT_SCHEMA, CAST(NULL AS CHAR(128)) AS UNIQUE_CONSTRAINT_NAME, CAST('NONE' AS CHAR(64)) AS MATCH_OPTION, CAST(CASE WHEN f.update_action = 1 THEN 'RESTRICT' WHEN f.update_action = 2 THEN 'CASCADE' WHEN f.update_action = 3 THEN 'SET_NULL' WHEN f.update_action = 4 THEN 'NO_ACTION' WHEN f.update_action = 5 THEN 'SET_DEFAULT' ELSE NULL END AS CHAR(64)) AS UPDATE_RULE, CAST(CASE WHEN f.delete_action = 1 THEN 'RESTRICT' WHEN f.delete_action = 2 THEN 'CASCADE' WHEN f.delete_action = 3 THEN 'SET_NULL' WHEN f.delete_action = 4 THEN 'NO_ACTION' WHEN f.delete_action = 5 THEN 'SET_DEFAULT' ELSE NULL END AS CHAR(64)) AS DELETE_RULE, CAST(ct.table_name AS CHAR(256)) AS TABLE_NAME, CAST(pt.mock_fk_parent_table_name AS CHAR(256)) AS REFERENCED_TABLE_NAME FROM oceanbase.__all_foreign_key f JOIN oceanbase.__all_table ct on f.child_table_id = ct.table_id and f.is_parent_table_mock = 1 JOIN oceanbase.__all_database cd on ct.database_id = cd.database_id JOIN oceanbase.__all_mock_fk_parent_table pt on f.parent_table_id = pt.mock_fk_parent_table_id JOIN oceanbase.__all_database pd on pt.database_id = pd.database_id WHERE cd.database_id > 500000 and cd.in_recyclebin = 0 AND ct.table_type = 3 )__"))) { + LOG_ERROR("fail to set view_definition", K(ret)); + } + } + table_schema.set_index_using_type(USING_BTREE); + table_schema.set_row_store_type(ENCODING_ROW_STORE); + table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); + table_schema.set_progressive_merge_round(1); + table_schema.set_storage_format_version(3); + table_schema.set_tablet_id(0); + + table_schema.set_max_used_column_id(column_id); + return ret; +} + +int ObInnerTableSchema::table_constraints_schema(ObTableSchema &table_schema) +{ + int ret = OB_SUCCESS; + uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; + + //generated fields: + table_schema.set_tenant_id(OB_SYS_TENANT_ID); + table_schema.set_tablegroup_id(OB_INVALID_ID); + table_schema.set_database_id(OB_INFORMATION_SCHEMA_ID); + table_schema.set_table_id(OB_TABLE_CONSTRAINTS_TID); + table_schema.set_rowkey_split_pos(0); + table_schema.set_is_use_bloomfilter(false); + table_schema.set_progressive_merge_num(0); + table_schema.set_rowkey_column_num(0); + table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); + table_schema.set_table_type(SYSTEM_VIEW); + table_schema.set_index_type(INDEX_TYPE_IS_NOT); + table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_table_name(OB_TABLE_CONSTRAINTS_TNAME))) { + LOG_ERROR("fail to set table_name", K(ret)); + } + } + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { + LOG_ERROR("fail to set compress_func_name", K(ret)); + } + } + table_schema.set_part_level(PARTITION_LEVEL_ZERO); + table_schema.set_charset_type(ObCharset::get_default_charset()); + table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST('def' AS CHAR(64)) AS CONSTRAINT_CATALOG, CAST(d.database_name AS CHAR(128)) AS CONSTRAINT_SCHEMA, CAST('PRIMARY' AS CHAR(256)) AS CONSTRAINT_NAME, CAST(d.database_name AS CHAR(128)) AS TABLE_SCHEMA, CAST(t.table_name AS CHAR(256)) AS TABLE_NAME, CAST('PRIMARY KEY' AS CHAR(11)) AS CONSTRAINT_TYPE, CAST('YES' AS CHAR(3)) AS ENFORCED FROM oceanbase.__all_database d JOIN oceanbase.__all_table t ON d.database_id = t.database_id WHERE (d.database_id = 201003 OR d.database_id > 500000) AND d.in_recyclebin = 0 AND t.table_type = 3 AND t.table_mode >> 16 & 1 = 0 union all SELECT CAST('def' AS CHAR(64)) AS CONSTRAINT_CATALOG, CAST(d.database_name AS CHAR(128)) AS CONSTRAINT_SCHEMA, CAST(SUBSTR(it.table_name, 7 + INSTR(SUBSTR(it.table_name, 7), '_')) AS CHAR(256)) AS CONSTRAINT_NAME, CAST(d.database_name AS CHAR(128)) AS TABLE_SCHEMA, CAST(ut.table_name AS CHAR(256)) AS TABLE_NAME, CAST('UNIQUE' AS CHAR(11)) AS CONSTRAINT_TYPE, CAST('YES' AS CHAR(3)) AS ENFORCED FROM oceanbase.__all_database d JOIN oceanbase.__all_table it ON d.database_id = it.database_id JOIN oceanbase.__all_table ut ON it.data_table_id = ut.table_id WHERE d.database_id > 500000 AND d.in_recyclebin = 0 AND it.table_type = 5 AND it.index_type IN (2, 4, 8) union all SELECT CAST('def' AS CHAR(64)) AS CONSTRAINT_CATALOG, CAST(d.database_name AS CHAR(128)) AS CONSTRAINT_SCHEMA, CAST(c.constraint_name AS CHAR(256)) AS CONSTRAINT_NAME, CAST(d.database_name AS CHAR(128)) AS TABLE_SCHEMA, CAST(t.table_name AS CHAR(256)) AS TABLE_NAME, CAST('CHECK' AS CHAR(11)) AS CONSTRAINT_TYPE, CAST(CASE WHEN c.enable_flag = 1 THEN 'YES' ELSE 'NO' END AS CHAR(3)) AS ENFORCED FROM oceanbase.__all_database d JOIN oceanbase.__all_table t ON d.database_id = t.database_id JOIN oceanbase.__all_constraint c ON t.table_id = c.table_id WHERE d.database_id > 500000 AND d.in_recyclebin = 0 AND t.table_type = 3 AND c.constraint_type = 3 union all SELECT CAST('def' AS CHAR(64)) AS CONSTRAINT_CATALOG, CAST(f.constraint_schema AS CHAR(128)) AS CONSTRAINT_SCHEMA, CAST(f.constraint_name AS CHAR(256)) AS CONSTRAINT_NAME, CAST(f.constraint_schema AS CHAR(128)) AS TABLE_SCHEMA, CAST(f.table_name AS CHAR(256)) AS TABLE_NAME, CAST('FOREIGN KEY' AS CHAR(11)) AS CONSTRAINT_TYPE, CAST('YES' AS CHAR(3)) AS ENFORCED FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS f )__"))) { + LOG_ERROR("fail to set view_definition", K(ret)); + } + } + table_schema.set_index_using_type(USING_BTREE); + table_schema.set_row_store_type(ENCODING_ROW_STORE); + table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); + table_schema.set_progressive_merge_round(1); + table_schema.set_storage_format_version(3); + table_schema.set_tablet_id(0); + + table_schema.set_max_used_column_id(column_id); + return ret; +} + +int ObInnerTableSchema::triggers_schema(ObTableSchema &table_schema) +{ + int ret = OB_SUCCESS; + uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; + + //generated fields: + table_schema.set_tenant_id(OB_SYS_TENANT_ID); + table_schema.set_tablegroup_id(OB_INVALID_ID); + table_schema.set_database_id(OB_INFORMATION_SCHEMA_ID); + table_schema.set_table_id(OB_TRIGGERS_TID); + table_schema.set_rowkey_split_pos(0); + table_schema.set_is_use_bloomfilter(false); + table_schema.set_progressive_merge_num(0); + table_schema.set_rowkey_column_num(0); + table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); + table_schema.set_table_type(SYSTEM_VIEW); + table_schema.set_index_type(INDEX_TYPE_IS_NOT); + table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_table_name(OB_TRIGGERS_TNAME))) { + LOG_ERROR("fail to set table_name", K(ret)); + } + } + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { + LOG_ERROR("fail to set compress_func_name", K(ret)); + } + } + table_schema.set_part_level(PARTITION_LEVEL_ZERO); + table_schema.set_charset_type(ObCharset::get_default_charset()); + table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_view_definition(R"__(SELECT CAST('def' AS CHAR(512)) AS TRIGGER_CATALOG, CAST(db.database_name AS CHAR(64)) AS TRIGGER_SCHEMA, CAST(trg.trigger_name AS CHAR(64)) AS TRIGGER_NAME, CAST((case when trg.trigger_events=1 then 'INSERT' when trg.trigger_events=2 then 'UPDATE' when trg.trigger_events=4 then 'DELETE' end) AS CHAR(6)) AS EVENT_MANIPULATION, CAST('def' AS CHAR(512)) AS EVENT_OBJECT_CATALOG, CAST(db.database_name AS CHAR(64)) AS EVENT_OBJECT_SCHEMA, CAST(t.table_name AS CHAR(64)) AS EVENT_OBJECT_TABLE, CAST(1 AS signed) AS ACTION_ORDER, CAST(NULL AS CHAR(4194304)) AS ACTION_CONDITION, CAST(trg.trigger_body AS CHAR(4194304)) AS ACTION_STATEMENT, CAST('ROW' AS CHAR(9)) AS ACTION_ORIENTATION, CAST((case when trg.TIMING_POINTS=4 then 'BEFORE' when trg.TIMING_POINTS=8 then 'AFTER' end) AS CHAR(6)) AS ACTION_TIMING, CAST(NULL AS CHAR(64)) AS ACTION_REFERENCE_OLD_TABLE, CAST(NULL AS CHAR(64)) AS ACTION_REFERENCE_NEW_TABLE, CAST('OLD' AS CHAR(3)) AS ACTION_REFERENCE_OLD_ROW, CAST('NEW' AS CHAR(3)) AS ACTION_REFERENCE_NEW_ROW, CAST(trg.gmt_create AS DATETIME(2)) AS CREATED, CAST(sql_mode_convert(trg.sql_mode) AS CHAR(8192)) AS SQL_MODE, CAST(trg.trigger_priv_user AS CHAR(93)) AS DEFINER, CAST((select charset from oceanbase.__tenant_virtual_collation where id = substring_index(substring_index(trg.package_exec_env, ',', 2), ',', -1)) AS CHAR(32) ) AS CHARACTER_SET_CLIENT, CAST((select collation from oceanbase.__tenant_virtual_collation where collation_type = substring_index(substring_index(trg.package_exec_env, ',', 3), ',', -1)) AS CHAR(32) ) AS COLLATION_CONNECTION, CAST((select collation from oceanbase.__tenant_virtual_collation where collation_type = substring_index(substring_index(trg.package_exec_env, ',', 4), ',', -1)) AS CHAR(32) ) AS DATABASE_COLLATION FROM oceanbase.__all_tenant_trigger trg JOIN oceanbase.__all_database db on trg.database_id = db.database_id JOIN oceanbase.__all_table t on trg.base_object_id = t.table_id WHERE db.database_name != '__recyclebin' and db.in_recyclebin = 0 )__"))) { + LOG_ERROR("fail to set view_definition", K(ret)); + } + } + table_schema.set_index_using_type(USING_BTREE); + table_schema.set_row_store_type(ENCODING_ROW_STORE); + table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); + table_schema.set_progressive_merge_round(1); + table_schema.set_storage_format_version(3); + table_schema.set_tablet_id(0); + + table_schema.set_max_used_column_id(column_id); + return ret; +} + +int ObInnerTableSchema::partitions_schema(ObTableSchema &table_schema) +{ + int ret = OB_SUCCESS; + uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; + + //generated fields: + table_schema.set_tenant_id(OB_SYS_TENANT_ID); + table_schema.set_tablegroup_id(OB_INVALID_ID); + table_schema.set_database_id(OB_INFORMATION_SCHEMA_ID); + table_schema.set_table_id(OB_PARTITIONS_TID); + table_schema.set_rowkey_split_pos(0); + table_schema.set_is_use_bloomfilter(false); + table_schema.set_progressive_merge_num(0); + table_schema.set_rowkey_column_num(0); + table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); + table_schema.set_table_type(SYSTEM_VIEW); + table_schema.set_index_type(INDEX_TYPE_IS_NOT); + table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_table_name(OB_PARTITIONS_TNAME))) { + LOG_ERROR("fail to set table_name", K(ret)); + } + } + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { + LOG_ERROR("fail to set compress_func_name", K(ret)); + } + } + table_schema.set_part_level(PARTITION_LEVEL_ZERO); + table_schema.set_charset_type(ObCharset::get_default_charset()); + table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_view_definition(R"__(SELECT CAST('def' as CHAR(4096)) AS TABLE_CATALOG, DB.DATABASE_NAME AS TABLE_SCHEMA, T.TABLE_NAME AS TABLE_NAME, P.PART_NAME AS PARTITION_NAME, SP.SUB_PART_NAME AS SUBPARTITION_NAME, CAST(PART_POSITION AS UNSIGNED) AS PARTITION_ORDINAL_POSITION, CAST(SUB_PART_POSITION AS UNSIGNED) AS SUBPARTITION_ORDINAL_POSITION, CAST(CASE WHEN T.PART_LEVEL = 0 THEN NULL ELSE (CASE T.PART_FUNC_TYPE WHEN 0 THEN 'HASH' WHEN 1 THEN 'KEY' WHEN 2 THEN 'KEY' WHEN 3 THEN 'RANGE' WHEN 4 THEN 'RANGE COLUMNS' WHEN 5 THEN 'LIST' WHEN 6 THEN 'LIST COLUMNS' WHEN 7 THEN 'RANGE' END) END AS CHAR(13)) PARTITION_METHOD, CAST(CASE WHEN (T.PART_LEVEL = 0 OR T.PART_LEVEL = 1) THEN NULL ELSE (CASE T.SUB_PART_FUNC_TYPE WHEN 0 THEN 'HASH' WHEN 1 THEN 'KEY' WHEN 2 THEN 'KEY' WHEN 3 THEN 'RANGE' WHEN 4 THEN 'RANGE COLUMNS' WHEN 5 THEN 'LIST' WHEN 6 THEN 'LIST COLUMNS' WHEN 7 THEN 'RANGE' END) END AS CHAR(13)) SUBPARTITION_METHOD, CAST(CASE WHEN (T.PART_LEVEL = 0) THEN NULL ELSE T.PART_FUNC_EXPR END AS CHAR(2048)) PARTITION_EXPRESSION, CAST(CASE WHEN (T.PART_LEVEL = 0 OR T.PART_LEVEL = 1) THEN NULL ELSE T.SUB_PART_FUNC_EXPR END AS CHAR(2048)) SUBPARTITION_EXPRESSION, CAST(CASE WHEN (T.PART_LEVEL = 0) THEN NULL ELSE (CASE WHEN LENGTH(P.HIGH_BOUND_VAL) > 0 THEN P.HIGH_BOUND_VAL ELSE P.LIST_VAL END) END AS CHAR(4096)) AS PARTITION_DESCRIPTION, CAST(CASE WHEN (T.PART_LEVEL = 0 OR T.PART_LEVEL = 1) THEN NULL ELSE (CASE WHEN LENGTH(SP.HIGH_BOUND_VAL) > 0 THEN SP.HIGH_BOUND_VAL ELSE SP.LIST_VAL END) END AS CHAR(4096)) AS SUBPARTITION_DESCRIPTION, CAST(TS.ROW_CNT AS UNSIGNED) AS TABLE_ROWS, CAST(TS.AVG_ROW_LEN AS UNSIGNED) AS AVG_ROW_LENGTH, CAST(NULL AS UNSIGNED) AS DATA_LENGTH, CAST(NULL AS UNSIGNED) AS MAX_DATA_LENGTH, CAST(NULL AS UNSIGNED) AS INDEX_LENGTH, CAST(NULL AS UNSIGNED) AS DATA_FREE, CASE T.PART_LEVEL WHEN 0 THEN T.GMT_CREATE WHEN 1 THEN P.GMT_CREATE WHEN 2 THEN SP.GMT_CREATE END AS CREATE_TIME, CAST(NULL AS DATETIME) AS UPDATE_TIME, CAST(NULL AS DATETIME) AS CHECK_TIME, CAST(NULL AS SIGNED) AS CHECKSUM, CAST(CASE T.PART_LEVEL WHEN 0 THEN NULL WHEN 1 THEN P.COMMENT WHEN 2 THEN SP.COMMENT END AS CHAR(1024)) AS PARTITION_COMMENT, CAST('default' AS CHAR(256)) NODEGROUP, CAST(TP.TABLESPACE_NAME AS CHAR(268)) AS TABLESPACE_NAME FROM OCEANBASE.__ALL_TABLE T JOIN OCEANBASE.__ALL_DATABASE DB ON T.DATABASE_ID = DB.DATABASE_ID AND T.TENANT_ID = DB.TENANT_ID LEFT JOIN ( SELECT TENANT_ID, TABLE_ID, PART_ID, PART_NAME, HIGH_BOUND_VAL, LIST_VAL, TABLESPACE_ID, GMT_CREATE, COMMENT, ROW_NUMBER() OVER(PARTITION BY TENANT_ID,TABLE_ID ORDER BY PART_IDX) AS PART_POSITION FROM OCEANBASE.__ALL_PART ) P ON T.TABLE_ID = P.TABLE_ID AND T.TENANT_ID = P.TENANT_ID LEFT JOIN ( SELECT TENANT_ID, TABLE_ID, PART_ID, SUB_PART_ID, SUB_PART_NAME, HIGH_BOUND_VAL, LIST_VAL, TABLESPACE_ID, GMT_CREATE, COMMENT, ROW_NUMBER() OVER(PARTITION BY TENANT_ID,TABLE_ID,PART_ID ORDER BY SUB_PART_IDX) AS SUB_PART_POSITION FROM OCEANBASE.__ALL_SUB_PART ) SP ON T.TABLE_ID = SP.TABLE_ID AND P.PART_ID = SP.PART_ID AND T.TENANT_ID = SP.TENANT_ID LEFT JOIN OCEANBASE.__ALL_TENANT_TABLESPACE TP ON TP.TABLESPACE_ID = IFNULL(SP.TABLESPACE_ID, P.TABLESPACE_ID) AND TP.TENANT_ID = T.TENANT_ID LEFT JOIN OCEANBASE.__ALL_TABLE_STAT TS ON T.TENANT_ID = TS.TENANT_ID AND TS.TABLE_ID = T.TABLE_ID AND TS.PARTITION_ID = CASE T.PART_LEVEL WHEN 0 THEN T.TABLE_ID WHEN 1 THEN P.PART_ID WHEN 2 THEN SP.SUB_PART_ID END WHERE T.TABLE_TYPE IN (3,6,8,9) )__"))) { + LOG_ERROR("fail to set view_definition", K(ret)); + } + } + table_schema.set_index_using_type(USING_BTREE); + table_schema.set_row_store_type(ENCODING_ROW_STORE); + table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); + table_schema.set_progressive_merge_round(1); + table_schema.set_storage_format_version(3); + table_schema.set_tablet_id(0); + + table_schema.set_max_used_column_id(column_id); + return ret; +} + + +} // end namespace share +} // end namespace oceanbase diff --git a/src/share/inner_table/ob_inner_table_schema.25001_25050.cpp b/src/share/inner_table/ob_inner_table_schema.25001_25050.cpp index 49bd6e9a9e..ae7923acb1 100644 --- a/src/share/inner_table/ob_inner_table_schema.25001_25050.cpp +++ b/src/share/inner_table/ob_inner_table_schema.25001_25050.cpp @@ -109,7 +109,7 @@ int ObInnerTableSchema::dba_objects_ora_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(B.DATABASE_NAME AS VARCHAR(128)) AS OWNER, CAST(A.OBJECT_NAME AS VARCHAR(128)) AS OBJECT_NAME, CAST(A.SUBOBJECT_NAME AS VARCHAR2(128)) AS SUBOBJECT_NAME, CAST(A.OBJECT_ID AS NUMBER) AS OBJECT_ID, CAST(A.DATA_OBJECT_ID AS NUMBER) AS DATA_OBJECT_ID, CAST(A.OBJECT_TYPE AS VARCHAR2(23)) AS OBJECT_TYPE, CAST(A.GMT_CREATE AS DATE) AS CREATED, CAST(A.GMT_MODIFIED AS DATE) AS LAST_DDL_TIME, CAST(TO_CHAR(A.GMT_CREATE) AS VARCHAR2(19)) AS TIMESTAMP, CAST(A.STATUS AS VARCHAR2(7)) AS STATUS, CAST(A.TEMPORARY AS VARCHAR2(1)) AS TEMPORARY, CAST(A."GENERATED" AS VARCHAR2(1)) AS "GENERATED", CAST(A.SECONDARY AS VARCHAR2(1)) AS SECONDARY, CAST(A.NAMESPACE AS NUMBER) AS NAMESPACE, CAST(A.EDITION_NAME AS VARCHAR2(128)) AS EDITION_NAME, CAST(NULL AS VARCHAR2(18)) AS SHARING, CAST(NULL AS VARCHAR2(1)) AS EDITIONABLE, CAST(NULL AS VARCHAR2(1)) AS ORACLE_MAINTAINED, CAST(NULL AS VARCHAR2(1)) AS APPLICATION, CAST(NULL AS VARCHAR2(1)) AS DEFAULT_COLLATION, CAST(NULL AS VARCHAR2(1)) AS DUPLICATED, CAST(NULL AS VARCHAR2(1)) AS SHARDED, CAST(NULL AS VARCHAR2(1)) AS IMPORTED_OBJECT, CAST(NULL AS NUMBER) AS CREATED_APPID, CAST(NULL AS NUMBER) AS CREATED_VSNID, CAST(NULL AS NUMBER) AS MODIFIED_APPID, CAST(NULL AS NUMBER) AS MODIFIED_VSNID FROM ( SELECT A.TENANT_ID, (TO_DATE('19700101','YYYYMMDD') + B.SCHEMA_VERSION / 86400 / 1000000 + TO_NUMBER(SUBSTR(TZ_OFFSET(SESSIONTIMEZONE),1,3))/24) AS GMT_CREATE, (TO_DATE('19700101','YYYYMMDD') + A.SCHEMA_VERSION / 86400 / 1000000 + TO_NUMBER(SUBSTR(TZ_OFFSET(SESSIONTIMEZONE),1,3))/24) AS GMT_MODIFIED, A.DATABASE_ID, A.TABLE_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, CAST(A.TABLE_ID AS NUMBER) AS OBJECT_ID, A.TABLE_ID AS DATA_OBJECT_ID, 'TABLE' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE A JOIN SYS.ALL_VIRTUAL_CORE_ALL_TABLE B ON A.TENANT_ID = B.TENANT_ID WHERE B.TABLE_NAME = '__all_core_table' AND A.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,CAST((CASE WHEN DATABASE_ID = 201004 THEN TABLE_NAME WHEN TABLE_TYPE = 5 THEN SUBSTR(TABLE_NAME, 7 + INSTR(SUBSTR(TABLE_NAME, 7), '_')) ELSE TABLE_NAME END) AS VARCHAR2(128)) AS OBJECT_NAME ,NULL SUBOBJECT_NAME ,TABLE_ID OBJECT_ID ,(CASE WHEN TABLET_ID != 0 THEN TABLET_ID ELSE NULL END) DATA_OBJECT_ID ,CASE WHEN TABLE_TYPE IN (0,3,6,8,9) THEN 'TABLE' WHEN TABLE_TYPE IN (2) THEN 'VIRTUAL TABLE' WHEN TABLE_TYPE IN (1,4) THEN 'VIEW' WHEN TABLE_TYPE IN (5) THEN 'INDEX' WHEN TABLE_TYPE IN (7) THEN 'MATERIALIZED VIEW' ELSE NULL END AS OBJECT_TYPE ,CAST(CASE WHEN TABLE_TYPE IN (5) THEN CASE WHEN INDEX_STATUS = 2 THEN 'VALID' WHEN INDEX_STATUS = 3 THEN 'CHECKING' WHEN INDEX_STATUS = 4 THEN 'INELEGIBLE' WHEN INDEX_STATUS = 5 THEN 'ERROR' ELSE 'UNUSABLE' END ELSE 'VALID' END AS VARCHAR2(10)) AS STATUS ,CASE WHEN TABLE_TYPE IN (6,8,9) THEN 'Y' ELSE 'N' END AS TEMPORARY ,CASE WHEN TABLE_TYPE IN (0,1) THEN 'Y' ELSE 'N' END AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() AND TABLE_TYPE != 12 AND TABLE_TYPE != 13 UNION ALL SELECT CST.TENANT_ID ,CST.GMT_CREATE ,CST.GMT_MODIFIED ,DB.DATABASE_ID ,CST.CONSTRAINT_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,TBL.TABLE_ID AS OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'INDEX' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_CONSTRAINT_REAL_AGENT CST, SYS.ALL_VIRTUAL_TABLE_REAL_AGENT TBL, SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT DB WHERE CST.TENANT_ID = EFFECTIVE_TENANT_ID() AND DB.DATABASE_ID = TBL.DATABASE_ID AND TBL.TABLE_ID = CST.TABLE_ID and CST.CONSTRAINT_TYPE = 1 AND TBL.TABLE_TYPE != 12 AND TBL.TABLE_TYPE != 13 UNION ALL SELECT P.TENANT_ID ,P.GMT_CREATE ,P.GMT_MODIFIED ,T.DATABASE_ID ,CAST((CASE WHEN T.DATABASE_ID = 201004 THEN T.TABLE_NAME WHEN T.TABLE_TYPE = 5 THEN SUBSTR(T.TABLE_NAME, 7 + INSTR(SUBSTR(T.TABLE_NAME, 7), '_')) ELSE T.TABLE_NAME END) AS VARCHAR2(128)) AS OBJECT_NAME ,P.PART_NAME SUBOBJECT_NAME ,P.PART_ID OBJECT_ID ,CASE WHEN P.TABLET_ID != 0 THEN P.TABLET_ID ELSE NULL END AS DATA_OBJECT_ID ,DECODE (T.TABLE_TYPE, 5, 'INDEX PARTITION', 'TABLE PARTITION') AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY , NULL AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT T JOIN SYS.ALL_VIRTUAL_PART_REAL_AGENT P ON T.TABLE_ID = P.TABLE_ID WHERE T.TENANT_ID = EFFECTIVE_TENANT_ID() AND P.TENANT_ID = EFFECTIVE_TENANT_ID() AND T.TABLE_TYPE != 12 AND T.TABLE_TYPE != 13 UNION ALL SELECT SUBP.TENANT_ID ,SUBP.GMT_CREATE ,SUBP.GMT_MODIFIED ,T.DATABASE_ID ,CAST((CASE WHEN T.DATABASE_ID = 201004 THEN T.TABLE_NAME WHEN T.TABLE_TYPE = 5 THEN SUBSTR(T.TABLE_NAME, 7 + INSTR(SUBSTR(T.TABLE_NAME, 7), '_')) ELSE T.TABLE_NAME END) AS VARCHAR2(128)) AS OBJECT_NAME ,SUBP.SUB_PART_NAME SUBOBJECT_NAME ,SUBP.SUB_PART_ID OBJECT_ID ,SUBP.TABLET_ID AS DATA_OBJECT_ID ,DECODE (T.TABLE_TYPE, 5, 'INDEX SUBPARTITION', 'TABLE SUBPARTITION') AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'Y' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT T, SYS.ALL_VIRTUAL_PART_REAL_AGENT P,SYS.ALL_VIRTUAL_SUB_PART_REAL_AGENT SUBP WHERE T.TABLE_ID =P.TABLE_ID AND P.TABLE_ID=SUBP.TABLE_ID AND P.PART_ID =SUBP.PART_ID AND T.TENANT_ID = EFFECTIVE_TENANT_ID() AND P.TENANT_ID = EFFECTIVE_TENANT_ID() AND SUBP.TENANT_ID = EFFECTIVE_TENANT_ID() AND T.TABLE_TYPE != 12 AND T.TABLE_TYPE != 13 UNION ALL SELECT EFFECTIVE_TENANT_ID() AS TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,CAST(201006 AS NUMBER) AS DATABASE_ID ,PACKAGE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,PACKAGE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,CASE WHEN TYPE = 1 THEN 'PACKAGE' WHEN TYPE = 2 THEN 'PACKAGE BODY' ELSE NULL END AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_PACKAGE_SYS_AGENT UNION ALL SELECT P.TENANT_ID ,P.GMT_CREATE ,P.GMT_MODIFIED ,P.DATABASE_ID ,P.PACKAGE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,P.PACKAGE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,CASE WHEN TYPE = 1 THEN 'PACKAGE' WHEN TYPE = 2 THEN 'PACKAGE BODY' ELSE NULL END AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE P.TENANT_ID = E.TENANT_ID AND P.PACKAGE_ID = E.OBJ_ID AND (E.OBJ_TYPE = 3 OR E.OBJ_TYPE = 5)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_PACKAGE_REAL_AGENT P WHERE P.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT R.TENANT_ID ,R.GMT_CREATE ,R.GMT_MODIFIED ,R.DATABASE_ID ,R.ROUTINE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,R.ROUTINE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,CASE WHEN ROUTINE_TYPE = 1 THEN 'PROCEDURE' WHEN ROUTINE_TYPE = 2 THEN 'FUNCTION' ELSE NULL END AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE R.TENANT_ID = E.TENANT_ID AND R.ROUTINE_ID = E.OBJ_ID AND (E.OBJ_TYPE = 9 OR E.OBJ_TYPE = 12)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_ROUTINE_REAL_AGENT R WHERE (ROUTINE_TYPE = 1 OR ROUTINE_TYPE = 2) AND R.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT EFFECTIVE_TENANT_ID() AS TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,CAST(201006 AS NUMBER) AS DATABASE_ID ,TS.TYPE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,TS.TYPE_ID AS OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE' AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE TS.TENANT_ID = E.TENANT_ID AND TS.TYPE_ID = E.OBJ_ID AND E.OBJ_TYPE = 4) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TYPE_SYS_AGENT TS UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,TYPE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,TYPE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE' AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE TY.TENANT_ID = E.TENANT_ID AND TY.TYPE_ID = E.OBJ_ID AND E.OBJ_TYPE = 4) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TYPE_REAL_AGENT TY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT EFFECTIVE_TENANT_ID() AS TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,CAST(201006 AS NUMBER) AS DATABASE_ID ,OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,OBJECT_TYPE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE BODY' AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE EFFECTIVE_TENANT_ID() = E.TENANT_ID AND TS.OBJECT_TYPE_ID = E.OBJ_ID AND E.OBJ_TYPE = 6) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TENANT_OBJECT_TYPE_SYS_AGENT TS WHERE TYPE = 2 UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,OBJECT_TYPE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE BODY' AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE TY.TENANT_ID = E.TENANT_ID AND TY.OBJECT_TYPE_ID = E.OBJ_ID AND E.OBJ_TYPE = 6) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TENANT_OBJECT_TYPE_REAL_AGENT TY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() and TYPE = 2 UNION ALL SELECT T.TENANT_ID ,T.GMT_CREATE ,T.GMT_MODIFIED ,T.DATABASE_ID ,T.TRIGGER_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,T.TRIGGER_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TRIGGER' OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE T.TENANT_ID = E.TENANT_ID AND T.TRIGGER_ID = E.OBJ_ID AND (E.OBJ_TYPE = 7)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TENANT_TRIGGER_REAL_AGENT T WHERE T.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,SEQUENCE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,SEQUENCE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'SEQUENCE' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_SEQUENCE_OBJECT_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,SYNONYM_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,SYNONYM_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'SYNONYM' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_SYNONYM_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,CAST(201006 AS NUMBER) AS DATABASE_ID ,NAMESPACE AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,CONTEXT_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'CONTEXT' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,21 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_CONTEXT_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID, GMT_CREATE, GMT_MODIFIED, DATABASE_ID, DATABASE_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, DATABASE_ID AS OBJECT_ID, NULL AS DATA_OBJECT_ID, 'DATABASE' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID, GMT_CREATE, GMT_MODIFIED, CAST(201001 AS NUMBER) AS DATABASE_ID, TABLEGROUP_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, TABLEGROUP_ID AS OBJECT_ID, NULL AS DATA_OBJECT_ID, 'TABLEGROUP' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLEGROUP_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT P.TENANT_ID, P.GMT_CREATE, P.GMT_MODIFIED, CAST(201001 AS NUMBER) AS DATABASE_ID, TG.TABLEGROUP_NAME AS OBJECT_NAME, P.PART_NAME SUBOBJECT_NAME, P.PART_ID OBJECT_ID, NULL AS DATA_OBJECT_ID, 'TABLEGROUP PARTITION' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, NULL AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLEGROUP_REAL_AGENT TG JOIN SYS.ALL_VIRTUAL_PART_REAL_AGENT P ON TG.TABLEGROUP_ID = P.TABLE_ID WHERE TG.TENANT_ID = EFFECTIVE_TENANT_ID() AND P.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT SUBP.TENANT_ID, SUBP.GMT_CREATE, SUBP.GMT_MODIFIED, CAST(201001 AS NUMBER) AS DATABASE_ID, TG.TABLEGROUP_NAME AS OBJECT_NAME, SUBP.SUB_PART_NAME SUBOBJECT_NAME, SUBP.SUB_PART_ID OBJECT_ID, NULL DATA_OBJECT_ID, 'TABLEGROUP SUBPARTITION' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'Y' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLEGROUP_REAL_AGENT TG, SYS.ALL_VIRTUAL_PART_REAL_AGENT P,SYS.ALL_VIRTUAL_SUB_PART_REAL_AGENT SUBP WHERE TG.TABLEGROUP_ID = P.TABLE_ID AND P.TABLE_ID = SUBP.TABLE_ID AND P.PART_ID = SUBP.PART_ID AND TG.TENANT_ID = EFFECTIVE_TENANT_ID() AND P.TENANT_ID = EFFECTIVE_TENANT_ID() AND SUBP.TENANT_ID = EFFECTIVE_TENANT_ID() ) A JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT B ON A.TENANT_ID = B.TENANT_ID AND A.DATABASE_ID = B.DATABASE_ID AND B.TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(B.DATABASE_NAME AS VARCHAR(128)) AS OWNER, CAST(A.OBJECT_NAME AS VARCHAR(128)) AS OBJECT_NAME, CAST(A.SUBOBJECT_NAME AS VARCHAR2(128)) AS SUBOBJECT_NAME, CAST(A.OBJECT_ID AS NUMBER) AS OBJECT_ID, CAST(A.DATA_OBJECT_ID AS NUMBER) AS DATA_OBJECT_ID, CAST(A.OBJECT_TYPE AS VARCHAR2(23)) AS OBJECT_TYPE, CAST(A.GMT_CREATE AS DATE) AS CREATED, CAST(A.GMT_MODIFIED AS DATE) AS LAST_DDL_TIME, CAST(TO_CHAR(A.GMT_CREATE) AS VARCHAR2(19)) AS TIMESTAMP, CAST(A.STATUS AS VARCHAR2(7)) AS STATUS, CAST(A.TEMPORARY AS VARCHAR2(1)) AS TEMPORARY, CAST(A."GENERATED" AS VARCHAR2(1)) AS "GENERATED", CAST(A.SECONDARY AS VARCHAR2(1)) AS SECONDARY, CAST(A.NAMESPACE AS NUMBER) AS NAMESPACE, CAST(A.EDITION_NAME AS VARCHAR2(128)) AS EDITION_NAME, CAST(NULL AS VARCHAR2(18)) AS SHARING, CAST(NULL AS VARCHAR2(1)) AS EDITIONABLE, CAST(NULL AS VARCHAR2(1)) AS ORACLE_MAINTAINED, CAST(NULL AS VARCHAR2(1)) AS APPLICATION, CAST(NULL AS VARCHAR2(1)) AS DEFAULT_COLLATION, CAST(NULL AS VARCHAR2(1)) AS DUPLICATED, CAST(NULL AS VARCHAR2(1)) AS SHARDED, CAST(NULL AS VARCHAR2(1)) AS IMPORTED_OBJECT, CAST(NULL AS NUMBER) AS CREATED_APPID, CAST(NULL AS NUMBER) AS CREATED_VSNID, CAST(NULL AS NUMBER) AS MODIFIED_APPID, CAST(NULL AS NUMBER) AS MODIFIED_VSNID FROM ( SELECT A.TENANT_ID, (TO_DATE('19700101','YYYYMMDD') + B.SCHEMA_VERSION / 86400 / 1000000 + TO_NUMBER(SUBSTR(TZ_OFFSET(SESSIONTIMEZONE),1,3))/24) AS GMT_CREATE, (TO_DATE('19700101','YYYYMMDD') + A.SCHEMA_VERSION / 86400 / 1000000 + TO_NUMBER(SUBSTR(TZ_OFFSET(SESSIONTIMEZONE),1,3))/24) AS GMT_MODIFIED, A.DATABASE_ID, A.TABLE_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, CAST(A.TABLE_ID AS NUMBER) AS OBJECT_ID, A.TABLE_ID AS DATA_OBJECT_ID, 'TABLE' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE A JOIN SYS.ALL_VIRTUAL_CORE_ALL_TABLE B ON A.TENANT_ID = B.TENANT_ID WHERE B.TABLE_NAME = '__all_core_table' AND A.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,CAST((CASE WHEN DATABASE_ID = 201004 THEN TABLE_NAME WHEN TABLE_TYPE = 5 THEN SUBSTR(TABLE_NAME, 7 + INSTR(SUBSTR(TABLE_NAME, 7), '_')) ELSE TABLE_NAME END) AS VARCHAR2(128)) AS OBJECT_NAME ,NULL SUBOBJECT_NAME ,TABLE_ID OBJECT_ID ,(CASE WHEN TABLET_ID != 0 THEN TABLET_ID ELSE NULL END) DATA_OBJECT_ID ,CASE WHEN TABLE_TYPE IN (0,3,6,8,9) THEN 'TABLE' WHEN TABLE_TYPE IN (2) THEN 'VIRTUAL TABLE' WHEN TABLE_TYPE IN (1,4) THEN 'VIEW' WHEN TABLE_TYPE IN (5) THEN 'INDEX' WHEN TABLE_TYPE IN (7) THEN 'MATERIALIZED VIEW' ELSE NULL END AS OBJECT_TYPE ,CAST(CASE WHEN TABLE_TYPE IN (5) THEN CASE WHEN INDEX_STATUS = 2 THEN 'VALID' WHEN INDEX_STATUS = 3 THEN 'CHECKING' WHEN INDEX_STATUS = 4 THEN 'INELEGIBLE' WHEN INDEX_STATUS = 5 THEN 'ERROR' ELSE 'UNUSABLE' END ELSE CASE WHEN OBJECT_STATUS = 1 THEN 'VALID' ELSE 'INVALID' END END AS VARCHAR2(10)) AS STATUS ,CASE WHEN TABLE_TYPE IN (6,8,9) THEN 'Y' ELSE 'N' END AS TEMPORARY ,CASE WHEN TABLE_TYPE IN (0,1) THEN 'Y' ELSE 'N' END AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() AND TABLE_TYPE != 12 AND TABLE_TYPE != 13 UNION ALL SELECT CST.TENANT_ID ,CST.GMT_CREATE ,CST.GMT_MODIFIED ,DB.DATABASE_ID ,CST.CONSTRAINT_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,TBL.TABLE_ID AS OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'INDEX' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_CONSTRAINT_REAL_AGENT CST, SYS.ALL_VIRTUAL_TABLE_REAL_AGENT TBL, SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT DB WHERE CST.TENANT_ID = EFFECTIVE_TENANT_ID() AND DB.DATABASE_ID = TBL.DATABASE_ID AND TBL.TABLE_ID = CST.TABLE_ID and CST.CONSTRAINT_TYPE = 1 AND TBL.TABLE_TYPE != 12 AND TBL.TABLE_TYPE != 13 UNION ALL SELECT P.TENANT_ID ,P.GMT_CREATE ,P.GMT_MODIFIED ,T.DATABASE_ID ,CAST((CASE WHEN T.DATABASE_ID = 201004 THEN T.TABLE_NAME WHEN T.TABLE_TYPE = 5 THEN SUBSTR(T.TABLE_NAME, 7 + INSTR(SUBSTR(T.TABLE_NAME, 7), '_')) ELSE T.TABLE_NAME END) AS VARCHAR2(128)) AS OBJECT_NAME ,P.PART_NAME SUBOBJECT_NAME ,P.PART_ID OBJECT_ID ,CASE WHEN P.TABLET_ID != 0 THEN P.TABLET_ID ELSE NULL END AS DATA_OBJECT_ID ,DECODE (T.TABLE_TYPE, 5, 'INDEX PARTITION', 'TABLE PARTITION') AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY , NULL AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT T JOIN SYS.ALL_VIRTUAL_PART_REAL_AGENT P ON T.TABLE_ID = P.TABLE_ID WHERE T.TENANT_ID = EFFECTIVE_TENANT_ID() AND P.TENANT_ID = EFFECTIVE_TENANT_ID() AND T.TABLE_TYPE != 12 AND T.TABLE_TYPE != 13 UNION ALL SELECT SUBP.TENANT_ID ,SUBP.GMT_CREATE ,SUBP.GMT_MODIFIED ,T.DATABASE_ID ,CAST((CASE WHEN T.DATABASE_ID = 201004 THEN T.TABLE_NAME WHEN T.TABLE_TYPE = 5 THEN SUBSTR(T.TABLE_NAME, 7 + INSTR(SUBSTR(T.TABLE_NAME, 7), '_')) ELSE T.TABLE_NAME END) AS VARCHAR2(128)) AS OBJECT_NAME ,SUBP.SUB_PART_NAME SUBOBJECT_NAME ,SUBP.SUB_PART_ID OBJECT_ID ,SUBP.TABLET_ID AS DATA_OBJECT_ID ,DECODE (T.TABLE_TYPE, 5, 'INDEX SUBPARTITION', 'TABLE SUBPARTITION') AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'Y' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT T, SYS.ALL_VIRTUAL_PART_REAL_AGENT P,SYS.ALL_VIRTUAL_SUB_PART_REAL_AGENT SUBP WHERE T.TABLE_ID =P.TABLE_ID AND P.TABLE_ID=SUBP.TABLE_ID AND P.PART_ID =SUBP.PART_ID AND T.TENANT_ID = EFFECTIVE_TENANT_ID() AND P.TENANT_ID = EFFECTIVE_TENANT_ID() AND SUBP.TENANT_ID = EFFECTIVE_TENANT_ID() AND T.TABLE_TYPE != 12 AND T.TABLE_TYPE != 13 UNION ALL SELECT EFFECTIVE_TENANT_ID() AS TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,CAST(201006 AS NUMBER) AS DATABASE_ID ,PACKAGE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,PACKAGE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,CASE WHEN TYPE = 1 THEN 'PACKAGE' WHEN TYPE = 2 THEN 'PACKAGE BODY' ELSE NULL END AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_PACKAGE_SYS_AGENT UNION ALL SELECT P.TENANT_ID ,P.GMT_CREATE ,P.GMT_MODIFIED ,P.DATABASE_ID ,P.PACKAGE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,P.PACKAGE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,CASE WHEN TYPE = 1 THEN 'PACKAGE' WHEN TYPE = 2 THEN 'PACKAGE BODY' ELSE NULL END AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE P.TENANT_ID = E.TENANT_ID AND P.PACKAGE_ID = E.OBJ_ID AND (E.OBJ_TYPE = 3 OR E.OBJ_TYPE = 5)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_PACKAGE_REAL_AGENT P WHERE P.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT R.TENANT_ID ,R.GMT_CREATE ,R.GMT_MODIFIED ,R.DATABASE_ID ,R.ROUTINE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,R.ROUTINE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,CASE WHEN ROUTINE_TYPE = 1 THEN 'PROCEDURE' WHEN ROUTINE_TYPE = 2 THEN 'FUNCTION' ELSE NULL END AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE R.TENANT_ID = E.TENANT_ID AND R.ROUTINE_ID = E.OBJ_ID AND (E.OBJ_TYPE = 9 OR E.OBJ_TYPE = 12)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_ROUTINE_REAL_AGENT R WHERE (ROUTINE_TYPE = 1 OR ROUTINE_TYPE = 2) AND R.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT EFFECTIVE_TENANT_ID() AS TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,CAST(201006 AS NUMBER) AS DATABASE_ID ,TS.TYPE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,TS.TYPE_ID AS OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE' AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE TS.TENANT_ID = E.TENANT_ID AND TS.TYPE_ID = E.OBJ_ID AND E.OBJ_TYPE = 4) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TYPE_SYS_AGENT TS UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,TYPE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,TYPE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE' AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE TY.TENANT_ID = E.TENANT_ID AND TY.TYPE_ID = E.OBJ_ID AND E.OBJ_TYPE = 4) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TYPE_REAL_AGENT TY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT EFFECTIVE_TENANT_ID() AS TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,CAST(201006 AS NUMBER) AS DATABASE_ID ,OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,OBJECT_TYPE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE BODY' AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE EFFECTIVE_TENANT_ID() = E.TENANT_ID AND TS.OBJECT_TYPE_ID = E.OBJ_ID AND E.OBJ_TYPE = 6) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TENANT_OBJECT_TYPE_SYS_AGENT TS WHERE TYPE = 2 UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,OBJECT_TYPE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE BODY' AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE TY.TENANT_ID = E.TENANT_ID AND TY.OBJECT_TYPE_ID = E.OBJ_ID AND E.OBJ_TYPE = 6) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TENANT_OBJECT_TYPE_REAL_AGENT TY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() and TYPE = 2 UNION ALL SELECT T.TENANT_ID ,T.GMT_CREATE ,T.GMT_MODIFIED ,T.DATABASE_ID ,T.TRIGGER_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,T.TRIGGER_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TRIGGER' OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE T.TENANT_ID = E.TENANT_ID AND T.TRIGGER_ID = E.OBJ_ID AND (E.OBJ_TYPE = 7)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TENANT_TRIGGER_REAL_AGENT T WHERE T.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,SEQUENCE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,SEQUENCE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'SEQUENCE' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_SEQUENCE_OBJECT_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,SYNONYM_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,SYNONYM_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'SYNONYM' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_SYNONYM_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,CAST(201006 AS NUMBER) AS DATABASE_ID ,NAMESPACE AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,CONTEXT_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'CONTEXT' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,21 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_CONTEXT_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID, GMT_CREATE, GMT_MODIFIED, DATABASE_ID, DATABASE_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, DATABASE_ID AS OBJECT_ID, NULL AS DATA_OBJECT_ID, 'DATABASE' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID, GMT_CREATE, GMT_MODIFIED, CAST(201001 AS NUMBER) AS DATABASE_ID, TABLEGROUP_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, TABLEGROUP_ID AS OBJECT_ID, NULL AS DATA_OBJECT_ID, 'TABLEGROUP' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLEGROUP_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT P.TENANT_ID, P.GMT_CREATE, P.GMT_MODIFIED, CAST(201001 AS NUMBER) AS DATABASE_ID, TG.TABLEGROUP_NAME AS OBJECT_NAME, P.PART_NAME SUBOBJECT_NAME, P.PART_ID OBJECT_ID, NULL AS DATA_OBJECT_ID, 'TABLEGROUP PARTITION' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, NULL AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLEGROUP_REAL_AGENT TG JOIN SYS.ALL_VIRTUAL_PART_REAL_AGENT P ON TG.TABLEGROUP_ID = P.TABLE_ID WHERE TG.TENANT_ID = EFFECTIVE_TENANT_ID() AND P.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT SUBP.TENANT_ID, SUBP.GMT_CREATE, SUBP.GMT_MODIFIED, CAST(201001 AS NUMBER) AS DATABASE_ID, TG.TABLEGROUP_NAME AS OBJECT_NAME, SUBP.SUB_PART_NAME SUBOBJECT_NAME, SUBP.SUB_PART_ID OBJECT_ID, NULL DATA_OBJECT_ID, 'TABLEGROUP SUBPARTITION' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'Y' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLEGROUP_REAL_AGENT TG, SYS.ALL_VIRTUAL_PART_REAL_AGENT P,SYS.ALL_VIRTUAL_SUB_PART_REAL_AGENT SUBP WHERE TG.TABLEGROUP_ID = P.TABLE_ID AND P.TABLE_ID = SUBP.TABLE_ID AND P.PART_ID = SUBP.PART_ID AND TG.TENANT_ID = EFFECTIVE_TENANT_ID() AND P.TENANT_ID = EFFECTIVE_TENANT_ID() AND SUBP.TENANT_ID = EFFECTIVE_TENANT_ID() ) A JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT B ON A.TENANT_ID = B.TENANT_ID AND A.DATABASE_ID = B.DATABASE_ID AND B.TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -159,7 +159,7 @@ int ObInnerTableSchema::all_objects_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(B.DATABASE_NAME AS VARCHAR(128)) AS OWNER, CAST(A.OBJECT_NAME AS VARCHAR(128)) AS OBJECT_NAME, CAST(A.SUBOBJECT_NAME AS VARCHAR2(128)) AS SUBOBJECT_NAME, CAST(A.OBJECT_ID AS NUMBER) AS OBJECT_ID, CAST(A.DATA_OBJECT_ID AS NUMBER) AS DATA_OBJECT_ID, CAST(A.OBJECT_TYPE AS VARCHAR2(23)) AS OBJECT_TYPE, CAST(A.GMT_CREATE AS DATE) AS CREATED, CAST(A.GMT_MODIFIED AS DATE) AS LAST_DDL_TIME, CAST(TO_CHAR(A.GMT_CREATE) AS VARCHAR2(19)) AS TIMESTAMP, CAST(A.STATUS AS VARCHAR2(7)) AS STATUS, CAST(A.TEMPORARY AS VARCHAR2(1)) AS TEMPORARY, CAST(A."GENERATED" AS VARCHAR2(1)) AS "GENERATED", CAST(A.SECONDARY AS VARCHAR2(1)) AS SECONDARY, CAST(A.NAMESPACE AS NUMBER) AS NAMESPACE, CAST(A.EDITION_NAME AS VARCHAR2(128)) AS EDITION_NAME, CAST(NULL AS VARCHAR2(18)) AS SHARING, CAST(NULL AS VARCHAR2(1)) AS EDITIONABLE, CAST(NULL AS VARCHAR2(1)) AS ORACLE_MAINTAINED, CAST(NULL AS VARCHAR2(1)) AS APPLICATION, CAST(NULL AS VARCHAR2(1)) AS DEFAULT_COLLATION, CAST(NULL AS VARCHAR2(1)) AS DUPLICATED, CAST(NULL AS VARCHAR2(1)) AS SHARDED, CAST(NULL AS VARCHAR2(1)) AS IMPORTED_OBJECT, CAST(NULL AS NUMBER) AS CREATED_APPID, CAST(NULL AS NUMBER) AS CREATED_VSNID, CAST(NULL AS NUMBER) AS MODIFIED_APPID, CAST(NULL AS NUMBER) AS MODIFIED_VSNID FROM ( SELECT A.TENANT_ID, (TO_DATE('19700101','YYYYMMDD') + B.SCHEMA_VERSION / 86400 / 1000000 + TO_NUMBER(SUBSTR(TZ_OFFSET(SESSIONTIMEZONE),1,3))/24) AS GMT_CREATE, (TO_DATE('19700101','YYYYMMDD') + A.SCHEMA_VERSION / 86400 / 1000000 + TO_NUMBER(SUBSTR(TZ_OFFSET(SESSIONTIMEZONE),1,3))/24) AS GMT_MODIFIED, A.DATABASE_ID, A.TABLE_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, CAST(A.TABLE_ID AS NUMBER) AS OBJECT_ID, CAST(A.TABLE_ID AS NUMBER) AS PRIV_OBJECT_ID, A.TABLE_ID AS DATA_OBJECT_ID, 'TABLE' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE A JOIN SYS.ALL_VIRTUAL_CORE_ALL_TABLE B ON A.TENANT_ID = B.TENANT_ID WHERE B.TABLE_NAME = '__all_core_table' AND A.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,CAST((CASE WHEN DATABASE_ID = 201004 THEN TABLE_NAME WHEN TABLE_TYPE = 5 THEN SUBSTR(TABLE_NAME, 7 + INSTR(SUBSTR(TABLE_NAME, 7), '_')) ELSE TABLE_NAME END) AS VARCHAR2(128)) AS OBJECT_NAME ,NULL SUBOBJECT_NAME ,TABLE_ID OBJECT_ID ,TABLE_ID PRIV_OBJECT_ID ,(CASE WHEN TABLET_ID != 0 THEN TABLET_ID ELSE NULL END) DATA_OBJECT_ID ,CASE WHEN TABLE_TYPE IN (0,3,6,8,9) THEN 'TABLE' WHEN TABLE_TYPE IN (2) THEN 'VIRTUAL TABLE' WHEN TABLE_TYPE IN (1,4) THEN 'VIEW' WHEN TABLE_TYPE IN (5) THEN 'INDEX' WHEN TABLE_TYPE IN (7) THEN 'MATERIALIZED VIEW' ELSE NULL END AS OBJECT_TYPE ,CAST(CASE WHEN TABLE_TYPE IN (5) THEN CASE WHEN INDEX_STATUS = 2 THEN 'VALID' WHEN INDEX_STATUS = 3 THEN 'CHECKING' WHEN INDEX_STATUS = 4 THEN 'INELEGIBLE' WHEN INDEX_STATUS = 5 THEN 'ERROR' ELSE 'UNUSABLE' END ELSE 'VALID' END AS VARCHAR2(10)) AS STATUS ,CASE WHEN TABLE_TYPE IN (6,8,9) THEN 'Y' ELSE 'N' END AS TEMPORARY ,CASE WHEN TABLE_TYPE IN (0,1) THEN 'Y' ELSE 'N' END AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() AND TABLE_TYPE != 12 AND TABLE_TYPE != 13 UNION ALL SELECT CST.TENANT_ID ,CST.GMT_CREATE ,CST.GMT_MODIFIED ,DB.DATABASE_ID ,CST.CONSTRAINT_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,TBL.TABLE_ID AS OBJECT_ID ,TBL.TABLE_ID AS PRIV_OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'INDEX' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_CONSTRAINT_REAL_AGENT CST, SYS.ALL_VIRTUAL_TABLE_REAL_AGENT TBL, SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT DB WHERE CST.TENANT_ID = EFFECTIVE_TENANT_ID() AND DB.DATABASE_ID = TBL.DATABASE_ID AND TBL.TABLE_ID = CST.TABLE_ID and CST.CONSTRAINT_TYPE = 1 AND TBL.TABLE_TYPE != 12 AND TBL.TABLE_TYPE != 13 UNION ALL SELECT P.TENANT_ID ,P.GMT_CREATE ,P.GMT_MODIFIED ,T.DATABASE_ID ,CAST((CASE WHEN T.DATABASE_ID = 201004 THEN T.TABLE_NAME WHEN T.TABLE_TYPE = 5 THEN SUBSTR(T.TABLE_NAME, 7 + INSTR(SUBSTR(T.TABLE_NAME, 7), '_')) ELSE T.TABLE_NAME END) AS VARCHAR2(128)) AS OBJECT_NAME ,P.PART_NAME SUBOBJECT_NAME ,P.PART_ID OBJECT_ID ,P.TABLE_ID PRIV_OBJECT_ID ,CASE WHEN P.TABLET_ID != 0 THEN P.TABLET_ID ELSE NULL END AS DATA_OBJECT_ID ,DECODE (T.TABLE_TYPE, 5, 'INDEX PARTITION', 'TABLE PARTITION') AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY , NULL AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT T JOIN SYS.ALL_VIRTUAL_PART_REAL_AGENT P ON T.TABLE_ID = P.TABLE_ID WHERE T.TENANT_ID = EFFECTIVE_TENANT_ID() AND P.TENANT_ID = EFFECTIVE_TENANT_ID() AND T.TABLE_TYPE != 12 AND T.TABLE_TYPE != 13 UNION ALL SELECT SUBP.TENANT_ID ,SUBP.GMT_CREATE ,SUBP.GMT_MODIFIED ,T.DATABASE_ID ,CAST((CASE WHEN T.DATABASE_ID = 201004 THEN T.TABLE_NAME WHEN T.TABLE_TYPE = 5 THEN SUBSTR(T.TABLE_NAME, 7 + INSTR(SUBSTR(T.TABLE_NAME, 7), '_')) ELSE T.TABLE_NAME END) AS VARCHAR2(128)) AS OBJECT_NAME ,SUBP.SUB_PART_NAME SUBOBJECT_NAME ,SUBP.SUB_PART_ID OBJECT_ID ,SUBP.TABLE_ID PRIV_OBJECT_ID ,SUBP.TABLET_ID AS DATA_OBJECT_ID ,DECODE (T.TABLE_TYPE, 5, 'INDEX SUBPARTITION', 'TABLE SUBPARTITION') AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'Y' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT T, SYS.ALL_VIRTUAL_PART_REAL_AGENT P,SYS.ALL_VIRTUAL_SUB_PART_REAL_AGENT SUBP WHERE T.TABLE_ID =P.TABLE_ID AND P.TABLE_ID=SUBP.TABLE_ID AND P.PART_ID =SUBP.PART_ID AND T.TENANT_ID = EFFECTIVE_TENANT_ID() AND P.TENANT_ID = EFFECTIVE_TENANT_ID() AND SUBP.TENANT_ID = EFFECTIVE_TENANT_ID() AND T.TABLE_TYPE != 12 AND T.TABLE_TYPE != 13 UNION ALL SELECT EFFECTIVE_TENANT_ID() AS TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,CAST(201006 AS NUMBER) AS DATABASE_ID ,PACKAGE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,PACKAGE_ID OBJECT_ID ,PACKAGE_ID PRIV_OBJECT_ID ,NULL AS DATA_OBJECT_ID ,CASE WHEN TYPE = 1 THEN 'PACKAGE' WHEN TYPE = 2 THEN 'PACKAGE BODY' ELSE NULL END AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_PACKAGE_SYS_AGENT UNION ALL SELECT P.TENANT_ID ,P.GMT_CREATE ,P.GMT_MODIFIED ,P.DATABASE_ID ,P.PACKAGE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,P.PACKAGE_ID OBJECT_ID ,P.PACKAGE_ID PRIV_OBJECT_ID ,NULL AS DATA_OBJECT_ID ,CASE WHEN TYPE = 1 THEN 'PACKAGE' WHEN TYPE = 2 THEN 'PACKAGE BODY' ELSE NULL END AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE P.TENANT_ID = E.TENANT_ID AND P.PACKAGE_ID = E.OBJ_ID AND (E.OBJ_TYPE = 3 OR E.OBJ_TYPE = 5)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_PACKAGE_REAL_AGENT P WHERE P.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT R.TENANT_ID ,R.GMT_CREATE ,R.GMT_MODIFIED ,R.DATABASE_ID ,R.ROUTINE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,R.ROUTINE_ID OBJECT_ID ,R.ROUTINE_ID PRIV_OBJECT_ID ,NULL AS DATA_OBJECT_ID ,CASE WHEN ROUTINE_TYPE = 1 THEN 'PROCEDURE' WHEN ROUTINE_TYPE = 2 THEN 'FUNCTION' ELSE NULL END AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE R.TENANT_ID = E.TENANT_ID AND R.ROUTINE_ID = E.OBJ_ID AND (E.OBJ_TYPE = 9 OR E.OBJ_TYPE = 12)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_ROUTINE_REAL_AGENT R WHERE (ROUTINE_TYPE = 1 OR ROUTINE_TYPE = 2) AND R.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT EFFECTIVE_TENANT_ID() AS TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,CAST(201006 AS NUMBER) AS DATABASE_ID ,TS.TYPE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,TS.TYPE_ID AS OBJECT_ID ,TS.TYPE_ID AS PRIV_OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE' AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE TS.TENANT_ID = E.TENANT_ID AND TS.TYPE_ID = E.OBJ_ID AND E.OBJ_TYPE = 4) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TYPE_SYS_AGENT TS UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,TYPE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,TYPE_ID OBJECT_ID ,TYPE_ID PRIV_OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE' AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE TY.TENANT_ID = E.TENANT_ID AND TY.TYPE_ID = E.OBJ_ID AND E.OBJ_TYPE = 4) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TYPE_REAL_AGENT TY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT EFFECTIVE_TENANT_ID() AS TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,CAST(201006 AS NUMBER) AS DATABASE_ID ,OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,OBJECT_TYPE_ID OBJECT_ID ,OBJECT_TYPE_ID PRIV_OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE BODY' AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE EFFECTIVE_TENANT_ID() = E.TENANT_ID AND TS.OBJECT_TYPE_ID = E.OBJ_ID AND E.OBJ_TYPE = 6) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TENANT_OBJECT_TYPE_SYS_AGENT TS WHERE TYPE = 2 UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,OBJECT_TYPE_ID OBJECT_ID ,OBJECT_TYPE_ID PRIV_OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE BODY' AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE TY.TENANT_ID = E.TENANT_ID AND TY.OBJECT_TYPE_ID = E.OBJ_ID AND E.OBJ_TYPE = 6) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TENANT_OBJECT_TYPE_REAL_AGENT TY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() and TYPE = 2 UNION ALL SELECT T.TENANT_ID ,T.GMT_CREATE ,T.GMT_MODIFIED ,T.DATABASE_ID ,T.TRIGGER_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,T.TRIGGER_ID OBJECT_ID ,T.TRIGGER_ID PRIV_OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TRIGGER' OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE T.TENANT_ID = E.TENANT_ID AND T.TRIGGER_ID = E.OBJ_ID AND (E.OBJ_TYPE = 7)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TENANT_TRIGGER_REAL_AGENT T WHERE T.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,SEQUENCE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,SEQUENCE_ID OBJECT_ID ,SEQUENCE_ID PRIV_OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'SEQUENCE' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_SEQUENCE_OBJECT_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,SYNONYM_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,SYNONYM_ID OBJECT_ID ,SYNONYM_ID PRIV_OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'SYNONYM' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_SYNONYM_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() /*UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,CAST(201006 AS NUMBER) AS DATABASE_ID ,NAMESPACE AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,CONTEXT_ID OBJECT_ID ,CONTEXT_ID PRIV_OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'CONTEXT' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,21 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_CONTEXT_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID()*/ UNION ALL SELECT TENANT_ID, GMT_CREATE, GMT_MODIFIED, DATABASE_ID, DATABASE_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, DATABASE_ID AS OBJECT_ID, CAST(-1 AS NUMBER) AS PRIV_OBJECT_ID, NULL AS DATA_OBJECT_ID, 'DATABASE' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() /*UNION ALL SELECT TENANT_ID, GMT_CREATE, GMT_MODIFIED, CAST(201001 AS NUMBER) AS DATABASE_ID, TABLEGROUP_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, TABLEGROUP_ID AS OBJECT_ID, CAST(-1 AS NUMBER) AS PRIV_OBJECT_ID, NULL AS DATA_OBJECT_ID, 'TABLEGROUP' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLEGROUP_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT P.TENANT_ID, P.GMT_CREATE, P.GMT_MODIFIED, CAST(201001 AS NUMBER) AS DATABASE_ID, TG.TABLEGROUP_NAME AS OBJECT_NAME, P.PART_NAME SUBOBJECT_NAME, P.PART_ID OBJECT_ID, CAST(-1 AS NUMBER) AS PRIV_OBJECT_ID, NULL AS DATA_OBJECT_ID, 'TABLEGROUP PARTITION' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, NULL AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLEGROUP_REAL_AGENT TG JOIN SYS.ALL_VIRTUAL_PART_REAL_AGENT P ON TG.TABLEGROUP_ID = P.TABLE_ID WHERE TG.TENANT_ID = EFFECTIVE_TENANT_ID() AND P.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT SUBP.TENANT_ID, SUBP.GMT_CREATE, SUBP.GMT_MODIFIED, CAST(201001 AS NUMBER) AS DATABASE_ID, TG.TABLEGROUP_NAME AS OBJECT_NAME, SUBP.SUB_PART_NAME SUBOBJECT_NAME, SUBP.SUB_PART_ID OBJECT_ID, CAST(-1 AS NUMBER) AS PRIV_OBJECT_ID, NULL DATA_OBJECT_ID, 'TABLEGROUP SUBPARTITION' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'Y' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLEGROUP_REAL_AGENT TG, SYS.ALL_VIRTUAL_PART_REAL_AGENT P,SYS.ALL_VIRTUAL_SUB_PART_REAL_AGENT SUBP WHERE TG.TABLEGROUP_ID = P.TABLE_ID AND P.TABLE_ID = SUBP.TABLE_ID AND P.PART_ID = SUBP.PART_ID AND TG.TENANT_ID = EFFECTIVE_TENANT_ID() AND P.TENANT_ID = EFFECTIVE_TENANT_ID() AND SUBP.TENANT_ID = EFFECTIVE_TENANT_ID()*/ ) A JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT B ON A.TENANT_ID = B.TENANT_ID AND A.DATABASE_ID = B.DATABASE_ID AND B.TENANT_ID = EFFECTIVE_TENANT_ID() AND (A.DATABASE_ID = USERENV('SCHEMAID') OR (A.PRIV_OBJECT_ID != -1 AND USER_CAN_ACCESS_OBJ(DECODE(OBJECT_TYPE, 'TABLE', 1, 'VIEW', 1, 'INDEX', 1, 'MATERIALIZED VIEW', 1, 'TABLE PARTITION', 1, 'TABLE SUBPARTITION', 1, 'INDEX PARTITION', 1, 'INDEX SUBPARTITION', 1, 'SEQUENCE', 2, 'PACKAGE', 3, 'PACKAGE BODY', 3, 'TYPE', 4, 'TYPE BODY', 4, 'TRIGGER', 7, 'FUNCTION', 9, 'PROCEDURE', 12, 'SYNONYM', 13, 1), A.PRIV_OBJECT_ID, A.DATABASE_ID) = 1)) )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(B.DATABASE_NAME AS VARCHAR(128)) AS OWNER, CAST(A.OBJECT_NAME AS VARCHAR(128)) AS OBJECT_NAME, CAST(A.SUBOBJECT_NAME AS VARCHAR2(128)) AS SUBOBJECT_NAME, CAST(A.OBJECT_ID AS NUMBER) AS OBJECT_ID, CAST(A.DATA_OBJECT_ID AS NUMBER) AS DATA_OBJECT_ID, CAST(A.OBJECT_TYPE AS VARCHAR2(23)) AS OBJECT_TYPE, CAST(A.GMT_CREATE AS DATE) AS CREATED, CAST(A.GMT_MODIFIED AS DATE) AS LAST_DDL_TIME, CAST(TO_CHAR(A.GMT_CREATE) AS VARCHAR2(19)) AS TIMESTAMP, CAST(A.STATUS AS VARCHAR2(7)) AS STATUS, CAST(A.TEMPORARY AS VARCHAR2(1)) AS TEMPORARY, CAST(A."GENERATED" AS VARCHAR2(1)) AS "GENERATED", CAST(A.SECONDARY AS VARCHAR2(1)) AS SECONDARY, CAST(A.NAMESPACE AS NUMBER) AS NAMESPACE, CAST(A.EDITION_NAME AS VARCHAR2(128)) AS EDITION_NAME, CAST(NULL AS VARCHAR2(18)) AS SHARING, CAST(NULL AS VARCHAR2(1)) AS EDITIONABLE, CAST(NULL AS VARCHAR2(1)) AS ORACLE_MAINTAINED, CAST(NULL AS VARCHAR2(1)) AS APPLICATION, CAST(NULL AS VARCHAR2(1)) AS DEFAULT_COLLATION, CAST(NULL AS VARCHAR2(1)) AS DUPLICATED, CAST(NULL AS VARCHAR2(1)) AS SHARDED, CAST(NULL AS VARCHAR2(1)) AS IMPORTED_OBJECT, CAST(NULL AS NUMBER) AS CREATED_APPID, CAST(NULL AS NUMBER) AS CREATED_VSNID, CAST(NULL AS NUMBER) AS MODIFIED_APPID, CAST(NULL AS NUMBER) AS MODIFIED_VSNID FROM ( SELECT A.TENANT_ID, (TO_DATE('19700101','YYYYMMDD') + B.SCHEMA_VERSION / 86400 / 1000000 + TO_NUMBER(SUBSTR(TZ_OFFSET(SESSIONTIMEZONE),1,3))/24) AS GMT_CREATE, (TO_DATE('19700101','YYYYMMDD') + A.SCHEMA_VERSION / 86400 / 1000000 + TO_NUMBER(SUBSTR(TZ_OFFSET(SESSIONTIMEZONE),1,3))/24) AS GMT_MODIFIED, A.DATABASE_ID, A.TABLE_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, CAST(A.TABLE_ID AS NUMBER) AS OBJECT_ID, CAST(A.TABLE_ID AS NUMBER) AS PRIV_OBJECT_ID, A.TABLE_ID AS DATA_OBJECT_ID, 'TABLE' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE A JOIN SYS.ALL_VIRTUAL_CORE_ALL_TABLE B ON A.TENANT_ID = B.TENANT_ID WHERE B.TABLE_NAME = '__all_core_table' AND A.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,CAST((CASE WHEN DATABASE_ID = 201004 THEN TABLE_NAME WHEN TABLE_TYPE = 5 THEN SUBSTR(TABLE_NAME, 7 + INSTR(SUBSTR(TABLE_NAME, 7), '_')) ELSE TABLE_NAME END) AS VARCHAR2(128)) AS OBJECT_NAME ,NULL SUBOBJECT_NAME ,TABLE_ID OBJECT_ID ,TABLE_ID PRIV_OBJECT_ID ,(CASE WHEN TABLET_ID != 0 THEN TABLET_ID ELSE NULL END) DATA_OBJECT_ID ,CASE WHEN TABLE_TYPE IN (0,3,6,8,9) THEN 'TABLE' WHEN TABLE_TYPE IN (2) THEN 'VIRTUAL TABLE' WHEN TABLE_TYPE IN (1,4) THEN 'VIEW' WHEN TABLE_TYPE IN (5) THEN 'INDEX' WHEN TABLE_TYPE IN (7) THEN 'MATERIALIZED VIEW' ELSE NULL END AS OBJECT_TYPE ,CAST(CASE WHEN TABLE_TYPE IN (5) THEN CASE WHEN INDEX_STATUS = 2 THEN 'VALID' WHEN INDEX_STATUS = 3 THEN 'CHECKING' WHEN INDEX_STATUS = 4 THEN 'INELEGIBLE' WHEN INDEX_STATUS = 5 THEN 'ERROR' ELSE 'UNUSABLE' END ELSE CASE WHEN OBJECT_STATUS = 1 THEN 'VALID' ELSE 'INVALID' END END AS VARCHAR2(10)) AS STATUS ,CASE WHEN TABLE_TYPE IN (6,8,9) THEN 'Y' ELSE 'N' END AS TEMPORARY ,CASE WHEN TABLE_TYPE IN (0,1) THEN 'Y' ELSE 'N' END AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() AND TABLE_TYPE != 12 AND TABLE_TYPE != 13 UNION ALL SELECT CST.TENANT_ID ,CST.GMT_CREATE ,CST.GMT_MODIFIED ,DB.DATABASE_ID ,CST.CONSTRAINT_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,TBL.TABLE_ID AS OBJECT_ID ,TBL.TABLE_ID AS PRIV_OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'INDEX' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_CONSTRAINT_REAL_AGENT CST, SYS.ALL_VIRTUAL_TABLE_REAL_AGENT TBL, SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT DB WHERE CST.TENANT_ID = EFFECTIVE_TENANT_ID() AND DB.DATABASE_ID = TBL.DATABASE_ID AND TBL.TABLE_ID = CST.TABLE_ID and CST.CONSTRAINT_TYPE = 1 AND TBL.TABLE_TYPE != 12 AND TBL.TABLE_TYPE != 13 UNION ALL SELECT P.TENANT_ID ,P.GMT_CREATE ,P.GMT_MODIFIED ,T.DATABASE_ID ,CAST((CASE WHEN T.DATABASE_ID = 201004 THEN T.TABLE_NAME WHEN T.TABLE_TYPE = 5 THEN SUBSTR(T.TABLE_NAME, 7 + INSTR(SUBSTR(T.TABLE_NAME, 7), '_')) ELSE T.TABLE_NAME END) AS VARCHAR2(128)) AS OBJECT_NAME ,P.PART_NAME SUBOBJECT_NAME ,P.PART_ID OBJECT_ID ,P.TABLE_ID PRIV_OBJECT_ID ,CASE WHEN P.TABLET_ID != 0 THEN P.TABLET_ID ELSE NULL END AS DATA_OBJECT_ID ,DECODE (T.TABLE_TYPE, 5, 'INDEX PARTITION', 'TABLE PARTITION') AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY , NULL AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT T JOIN SYS.ALL_VIRTUAL_PART_REAL_AGENT P ON T.TABLE_ID = P.TABLE_ID WHERE T.TENANT_ID = EFFECTIVE_TENANT_ID() AND P.TENANT_ID = EFFECTIVE_TENANT_ID() AND T.TABLE_TYPE != 12 AND T.TABLE_TYPE != 13 UNION ALL SELECT SUBP.TENANT_ID ,SUBP.GMT_CREATE ,SUBP.GMT_MODIFIED ,T.DATABASE_ID ,CAST((CASE WHEN T.DATABASE_ID = 201004 THEN T.TABLE_NAME WHEN T.TABLE_TYPE = 5 THEN SUBSTR(T.TABLE_NAME, 7 + INSTR(SUBSTR(T.TABLE_NAME, 7), '_')) ELSE T.TABLE_NAME END) AS VARCHAR2(128)) AS OBJECT_NAME ,SUBP.SUB_PART_NAME SUBOBJECT_NAME ,SUBP.SUB_PART_ID OBJECT_ID ,SUBP.TABLE_ID PRIV_OBJECT_ID ,SUBP.TABLET_ID AS DATA_OBJECT_ID ,DECODE (T.TABLE_TYPE, 5, 'INDEX SUBPARTITION', 'TABLE SUBPARTITION') AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'Y' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT T, SYS.ALL_VIRTUAL_PART_REAL_AGENT P,SYS.ALL_VIRTUAL_SUB_PART_REAL_AGENT SUBP WHERE T.TABLE_ID =P.TABLE_ID AND P.TABLE_ID=SUBP.TABLE_ID AND P.PART_ID =SUBP.PART_ID AND T.TENANT_ID = EFFECTIVE_TENANT_ID() AND P.TENANT_ID = EFFECTIVE_TENANT_ID() AND SUBP.TENANT_ID = EFFECTIVE_TENANT_ID() AND T.TABLE_TYPE != 12 AND T.TABLE_TYPE != 13 UNION ALL SELECT EFFECTIVE_TENANT_ID() AS TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,CAST(201006 AS NUMBER) AS DATABASE_ID ,PACKAGE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,PACKAGE_ID OBJECT_ID ,PACKAGE_ID PRIV_OBJECT_ID ,NULL AS DATA_OBJECT_ID ,CASE WHEN TYPE = 1 THEN 'PACKAGE' WHEN TYPE = 2 THEN 'PACKAGE BODY' ELSE NULL END AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_PACKAGE_SYS_AGENT UNION ALL SELECT P.TENANT_ID ,P.GMT_CREATE ,P.GMT_MODIFIED ,P.DATABASE_ID ,P.PACKAGE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,P.PACKAGE_ID OBJECT_ID ,P.PACKAGE_ID PRIV_OBJECT_ID ,NULL AS DATA_OBJECT_ID ,CASE WHEN TYPE = 1 THEN 'PACKAGE' WHEN TYPE = 2 THEN 'PACKAGE BODY' ELSE NULL END AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE P.TENANT_ID = E.TENANT_ID AND P.PACKAGE_ID = E.OBJ_ID AND (E.OBJ_TYPE = 3 OR E.OBJ_TYPE = 5)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_PACKAGE_REAL_AGENT P WHERE P.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT R.TENANT_ID ,R.GMT_CREATE ,R.GMT_MODIFIED ,R.DATABASE_ID ,R.ROUTINE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,R.ROUTINE_ID OBJECT_ID ,R.ROUTINE_ID PRIV_OBJECT_ID ,NULL AS DATA_OBJECT_ID ,CASE WHEN ROUTINE_TYPE = 1 THEN 'PROCEDURE' WHEN ROUTINE_TYPE = 2 THEN 'FUNCTION' ELSE NULL END AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE R.TENANT_ID = E.TENANT_ID AND R.ROUTINE_ID = E.OBJ_ID AND (E.OBJ_TYPE = 9 OR E.OBJ_TYPE = 12)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_ROUTINE_REAL_AGENT R WHERE (ROUTINE_TYPE = 1 OR ROUTINE_TYPE = 2) AND R.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT EFFECTIVE_TENANT_ID() AS TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,CAST(201006 AS NUMBER) AS DATABASE_ID ,TS.TYPE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,TS.TYPE_ID AS OBJECT_ID ,TS.TYPE_ID AS PRIV_OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE' AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE TS.TENANT_ID = E.TENANT_ID AND TS.TYPE_ID = E.OBJ_ID AND E.OBJ_TYPE = 4) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TYPE_SYS_AGENT TS UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,TYPE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,TYPE_ID OBJECT_ID ,TYPE_ID PRIV_OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE' AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE TY.TENANT_ID = E.TENANT_ID AND TY.TYPE_ID = E.OBJ_ID AND E.OBJ_TYPE = 4) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TYPE_REAL_AGENT TY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT EFFECTIVE_TENANT_ID() AS TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,CAST(201006 AS NUMBER) AS DATABASE_ID ,OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,OBJECT_TYPE_ID OBJECT_ID ,OBJECT_TYPE_ID PRIV_OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE BODY' AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE EFFECTIVE_TENANT_ID() = E.TENANT_ID AND TS.OBJECT_TYPE_ID = E.OBJ_ID AND E.OBJ_TYPE = 6) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TENANT_OBJECT_TYPE_SYS_AGENT TS WHERE TYPE = 2 UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,OBJECT_TYPE_ID OBJECT_ID ,OBJECT_TYPE_ID PRIV_OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE BODY' AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE TY.TENANT_ID = E.TENANT_ID AND TY.OBJECT_TYPE_ID = E.OBJ_ID AND E.OBJ_TYPE = 6) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TENANT_OBJECT_TYPE_REAL_AGENT TY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() and TYPE = 2 UNION ALL SELECT T.TENANT_ID ,T.GMT_CREATE ,T.GMT_MODIFIED ,T.DATABASE_ID ,T.TRIGGER_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,T.TRIGGER_ID OBJECT_ID ,T.TRIGGER_ID PRIV_OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TRIGGER' OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE T.TENANT_ID = E.TENANT_ID AND T.TRIGGER_ID = E.OBJ_ID AND (E.OBJ_TYPE = 7)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TENANT_TRIGGER_REAL_AGENT T WHERE T.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,SEQUENCE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,SEQUENCE_ID OBJECT_ID ,SEQUENCE_ID PRIV_OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'SEQUENCE' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_SEQUENCE_OBJECT_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,SYNONYM_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,SYNONYM_ID OBJECT_ID ,SYNONYM_ID PRIV_OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'SYNONYM' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_SYNONYM_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() /*UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,CAST(201006 AS NUMBER) AS DATABASE_ID ,NAMESPACE AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,CONTEXT_ID OBJECT_ID ,CONTEXT_ID PRIV_OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'CONTEXT' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,21 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_CONTEXT_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID()*/ UNION ALL SELECT TENANT_ID, GMT_CREATE, GMT_MODIFIED, DATABASE_ID, DATABASE_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, DATABASE_ID AS OBJECT_ID, CAST(-1 AS NUMBER) AS PRIV_OBJECT_ID, NULL AS DATA_OBJECT_ID, 'DATABASE' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() /*UNION ALL SELECT TENANT_ID, GMT_CREATE, GMT_MODIFIED, CAST(201001 AS NUMBER) AS DATABASE_ID, TABLEGROUP_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, TABLEGROUP_ID AS OBJECT_ID, CAST(-1 AS NUMBER) AS PRIV_OBJECT_ID, NULL AS DATA_OBJECT_ID, 'TABLEGROUP' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLEGROUP_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT P.TENANT_ID, P.GMT_CREATE, P.GMT_MODIFIED, CAST(201001 AS NUMBER) AS DATABASE_ID, TG.TABLEGROUP_NAME AS OBJECT_NAME, P.PART_NAME SUBOBJECT_NAME, P.PART_ID OBJECT_ID, CAST(-1 AS NUMBER) AS PRIV_OBJECT_ID, NULL AS DATA_OBJECT_ID, 'TABLEGROUP PARTITION' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, NULL AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLEGROUP_REAL_AGENT TG JOIN SYS.ALL_VIRTUAL_PART_REAL_AGENT P ON TG.TABLEGROUP_ID = P.TABLE_ID WHERE TG.TENANT_ID = EFFECTIVE_TENANT_ID() AND P.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT SUBP.TENANT_ID, SUBP.GMT_CREATE, SUBP.GMT_MODIFIED, CAST(201001 AS NUMBER) AS DATABASE_ID, TG.TABLEGROUP_NAME AS OBJECT_NAME, SUBP.SUB_PART_NAME SUBOBJECT_NAME, SUBP.SUB_PART_ID OBJECT_ID, CAST(-1 AS NUMBER) AS PRIV_OBJECT_ID, NULL DATA_OBJECT_ID, 'TABLEGROUP SUBPARTITION' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'Y' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLEGROUP_REAL_AGENT TG, SYS.ALL_VIRTUAL_PART_REAL_AGENT P,SYS.ALL_VIRTUAL_SUB_PART_REAL_AGENT SUBP WHERE TG.TABLEGROUP_ID = P.TABLE_ID AND P.TABLE_ID = SUBP.TABLE_ID AND P.PART_ID = SUBP.PART_ID AND TG.TENANT_ID = EFFECTIVE_TENANT_ID() AND P.TENANT_ID = EFFECTIVE_TENANT_ID() AND SUBP.TENANT_ID = EFFECTIVE_TENANT_ID()*/ ) A JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT B ON A.TENANT_ID = B.TENANT_ID AND A.DATABASE_ID = B.DATABASE_ID AND B.TENANT_ID = EFFECTIVE_TENANT_ID() AND (A.DATABASE_ID = USERENV('SCHEMAID') OR (A.PRIV_OBJECT_ID != -1 AND USER_CAN_ACCESS_OBJ(DECODE(OBJECT_TYPE, 'TABLE', 1, 'VIEW', 1, 'INDEX', 1, 'MATERIALIZED VIEW', 1, 'TABLE PARTITION', 1, 'TABLE SUBPARTITION', 1, 'INDEX PARTITION', 1, 'INDEX SUBPARTITION', 1, 'SEQUENCE', 2, 'PACKAGE', 3, 'PACKAGE BODY', 3, 'TYPE', 4, 'TYPE BODY', 4, 'TRIGGER', 7, 'FUNCTION', 9, 'PROCEDURE', 12, 'SYNONYM', 13, 1), A.PRIV_OBJECT_ID, A.DATABASE_ID) = 1)) )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -209,7 +209,7 @@ int ObInnerTableSchema::user_objects_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(A.OBJECT_NAME AS VARCHAR(128)) AS OBJECT_NAME, CAST(A.SUBOBJECT_NAME AS VARCHAR2(128)) AS SUBOBJECT_NAME, CAST(A.OBJECT_ID AS NUMBER) AS OBJECT_ID, CAST(A.DATA_OBJECT_ID AS NUMBER) AS DATA_OBJECT_ID, CAST(A.OBJECT_TYPE AS VARCHAR2(23)) AS OBJECT_TYPE, CAST(A.GMT_CREATE AS DATE) AS CREATED, CAST(A.GMT_MODIFIED AS DATE) AS LAST_DDL_TIME, CAST(TO_CHAR(A.GMT_CREATE) AS VARCHAR2(19)) AS TIMESTAMP, CAST(A.STATUS AS VARCHAR2(7)) AS STATUS, CAST(A.TEMPORARY AS VARCHAR2(1)) AS TEMPORARY, CAST(A."GENERATED" AS VARCHAR2(1)) AS "GENERATED", CAST(A.SECONDARY AS VARCHAR2(1)) AS SECONDARY, CAST(A.NAMESPACE AS NUMBER) AS NAMESPACE, CAST(A.EDITION_NAME AS VARCHAR2(128)) AS EDITION_NAME, CAST(NULL AS VARCHAR2(18)) AS SHARING, CAST(NULL AS VARCHAR2(1)) AS EDITIONABLE, CAST(NULL AS VARCHAR2(1)) AS ORACLE_MAINTAINED, CAST(NULL AS VARCHAR2(1)) AS APPLICATION, CAST(NULL AS VARCHAR2(1)) AS DEFAULT_COLLATION, CAST(NULL AS VARCHAR2(1)) AS DUPLICATED, CAST(NULL AS VARCHAR2(1)) AS SHARDED, CAST(NULL AS VARCHAR2(1)) AS IMPORTED_OBJECT, CAST(NULL AS NUMBER) AS CREATED_APPID, CAST(NULL AS NUMBER) AS CREATED_VSNID, CAST(NULL AS NUMBER) AS MODIFIED_APPID, CAST(NULL AS NUMBER) AS MODIFIED_VSNID FROM ( SELECT A.TENANT_ID, (TO_DATE('19700101','YYYYMMDD') + B.SCHEMA_VERSION / 86400 / 1000000 + TO_NUMBER(SUBSTR(TZ_OFFSET(SESSIONTIMEZONE),1,3))/24) AS GMT_CREATE, (TO_DATE('19700101','YYYYMMDD') + A.SCHEMA_VERSION / 86400 / 1000000 + TO_NUMBER(SUBSTR(TZ_OFFSET(SESSIONTIMEZONE),1,3))/24) AS GMT_MODIFIED, A.DATABASE_ID, A.TABLE_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, CAST(A.TABLE_ID AS NUMBER) AS OBJECT_ID, A.TABLE_ID AS DATA_OBJECT_ID, 'TABLE' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE A JOIN SYS.ALL_VIRTUAL_CORE_ALL_TABLE B ON A.TENANT_ID = B.TENANT_ID WHERE B.TABLE_NAME = '__all_core_table' AND A.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,CAST((CASE WHEN DATABASE_ID = 201004 THEN TABLE_NAME WHEN TABLE_TYPE = 5 THEN SUBSTR(TABLE_NAME, 7 + INSTR(SUBSTR(TABLE_NAME, 7), '_')) ELSE TABLE_NAME END) AS VARCHAR2(128)) AS OBJECT_NAME ,NULL SUBOBJECT_NAME ,TABLE_ID OBJECT_ID ,(CASE WHEN TABLET_ID != 0 THEN TABLET_ID ELSE NULL END) DATA_OBJECT_ID ,CASE WHEN TABLE_TYPE IN (0,3,6,8,9) THEN 'TABLE' WHEN TABLE_TYPE IN (2) THEN 'VIRTUAL TABLE' WHEN TABLE_TYPE IN (1,4) THEN 'VIEW' WHEN TABLE_TYPE IN (5) THEN 'INDEX' WHEN TABLE_TYPE IN (7) THEN 'MATERIALIZED VIEW' ELSE NULL END AS OBJECT_TYPE ,CAST(CASE WHEN TABLE_TYPE IN (5) THEN CASE WHEN INDEX_STATUS = 2 THEN 'VALID' WHEN INDEX_STATUS = 3 THEN 'CHECKING' WHEN INDEX_STATUS = 4 THEN 'INELEGIBLE' WHEN INDEX_STATUS = 5 THEN 'ERROR' ELSE 'UNUSABLE' END ELSE 'VALID' END AS VARCHAR2(10)) AS STATUS ,CASE WHEN TABLE_TYPE IN (6,8,9) THEN 'Y' ELSE 'N' END AS TEMPORARY ,CASE WHEN TABLE_TYPE IN (0,1) THEN 'Y' ELSE 'N' END AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() AND TABLE_TYPE != 12 AND TABLE_TYPE != 13 UNION ALL SELECT CST.TENANT_ID ,CST.GMT_CREATE ,CST.GMT_MODIFIED ,DB.DATABASE_ID ,CST.CONSTRAINT_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,TBL.TABLE_ID AS OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'INDEX' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_CONSTRAINT_REAL_AGENT CST, SYS.ALL_VIRTUAL_TABLE_REAL_AGENT TBL, SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT DB WHERE CST.TENANT_ID = EFFECTIVE_TENANT_ID() AND DB.DATABASE_ID = TBL.DATABASE_ID AND TBL.TABLE_ID = CST.TABLE_ID and CST.CONSTRAINT_TYPE = 1 AND TBL.TABLE_TYPE != 12 AND TBL.TABLE_TYPE != 13 UNION ALL SELECT P.TENANT_ID ,P.GMT_CREATE ,P.GMT_MODIFIED ,T.DATABASE_ID ,CAST((CASE WHEN T.DATABASE_ID = 201004 THEN T.TABLE_NAME WHEN T.TABLE_TYPE = 5 THEN SUBSTR(T.TABLE_NAME, 7 + INSTR(SUBSTR(T.TABLE_NAME, 7), '_')) ELSE T.TABLE_NAME END) AS VARCHAR2(128)) AS OBJECT_NAME ,P.PART_NAME SUBOBJECT_NAME ,P.PART_ID OBJECT_ID ,CASE WHEN P.TABLET_ID != 0 THEN P.TABLET_ID ELSE NULL END AS DATA_OBJECT_ID ,DECODE (T.TABLE_TYPE, 5, 'INDEX PARTITION', 'TABLE PARTITION') AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY , NULL AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT T JOIN SYS.ALL_VIRTUAL_PART_REAL_AGENT P ON T.TABLE_ID = P.TABLE_ID WHERE T.TENANT_ID = EFFECTIVE_TENANT_ID() AND P.TENANT_ID = EFFECTIVE_TENANT_ID() AND T.TABLE_TYPE != 12 AND T.TABLE_TYPE != 13 UNION ALL SELECT SUBP.TENANT_ID ,SUBP.GMT_CREATE ,SUBP.GMT_MODIFIED ,T.DATABASE_ID ,CAST((CASE WHEN T.DATABASE_ID = 201004 THEN T.TABLE_NAME WHEN T.TABLE_TYPE = 5 THEN SUBSTR(T.TABLE_NAME, 7 + INSTR(SUBSTR(T.TABLE_NAME, 7), '_')) ELSE T.TABLE_NAME END) AS VARCHAR2(128)) AS OBJECT_NAME ,SUBP.SUB_PART_NAME SUBOBJECT_NAME ,SUBP.SUB_PART_ID OBJECT_ID ,SUBP.TABLET_ID AS DATA_OBJECT_ID ,DECODE (T.TABLE_TYPE, 5, 'INDEX SUBPARTITION', 'TABLE SUBPARTITION') AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'Y' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT T, SYS.ALL_VIRTUAL_PART_REAL_AGENT P,SYS.ALL_VIRTUAL_SUB_PART_REAL_AGENT SUBP WHERE T.TABLE_ID =P.TABLE_ID AND P.TABLE_ID=SUBP.TABLE_ID AND P.PART_ID =SUBP.PART_ID AND T.TENANT_ID = EFFECTIVE_TENANT_ID() AND P.TENANT_ID = EFFECTIVE_TENANT_ID() AND SUBP.TENANT_ID = EFFECTIVE_TENANT_ID() AND T.TABLE_TYPE != 12 AND T.TABLE_TYPE != 13 UNION ALL SELECT EFFECTIVE_TENANT_ID() AS TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,CAST(201006 AS NUMBER) AS DATABASE_ID ,PACKAGE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,PACKAGE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,CASE WHEN TYPE = 1 THEN 'PACKAGE' WHEN TYPE = 2 THEN 'PACKAGE BODY' ELSE NULL END AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_PACKAGE_SYS_AGENT UNION ALL SELECT P.TENANT_ID ,P.GMT_CREATE ,P.GMT_MODIFIED ,P.DATABASE_ID ,P.PACKAGE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,P.PACKAGE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,CASE WHEN TYPE = 1 THEN 'PACKAGE' WHEN TYPE = 2 THEN 'PACKAGE BODY' ELSE NULL END AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE P.TENANT_ID = E.TENANT_ID AND P.PACKAGE_ID = E.OBJ_ID AND (E.OBJ_TYPE = 3 OR E.OBJ_TYPE = 5)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_PACKAGE_REAL_AGENT P WHERE P.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT R.TENANT_ID ,R.GMT_CREATE ,R.GMT_MODIFIED ,R.DATABASE_ID ,R.ROUTINE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,R.ROUTINE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,CASE WHEN ROUTINE_TYPE = 1 THEN 'PROCEDURE' WHEN ROUTINE_TYPE = 2 THEN 'FUNCTION' ELSE NULL END AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE R.TENANT_ID = E.TENANT_ID AND R.ROUTINE_ID = E.OBJ_ID AND (E.OBJ_TYPE = 9 OR E.OBJ_TYPE = 12)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_ROUTINE_REAL_AGENT R WHERE (ROUTINE_TYPE = 1 OR ROUTINE_TYPE = 2) AND R.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT EFFECTIVE_TENANT_ID() AS TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,CAST(201006 AS NUMBER) AS DATABASE_ID ,TS.TYPE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,TS.TYPE_ID AS OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE' AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE TS.TENANT_ID = E.TENANT_ID AND TS.TYPE_ID = E.OBJ_ID AND E.OBJ_TYPE = 4) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TYPE_SYS_AGENT TS UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,TYPE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,TYPE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE' AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE TY.TENANT_ID = E.TENANT_ID AND TY.TYPE_ID = E.OBJ_ID AND E.OBJ_TYPE = 4) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TYPE_REAL_AGENT TY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT EFFECTIVE_TENANT_ID() AS TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,CAST(201006 AS NUMBER) AS DATABASE_ID ,OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,OBJECT_TYPE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE BODY' AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE EFFECTIVE_TENANT_ID() = E.TENANT_ID AND TS.OBJECT_TYPE_ID = E.OBJ_ID AND E.OBJ_TYPE = 6) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TENANT_OBJECT_TYPE_SYS_AGENT TS WHERE TYPE = 2 UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,OBJECT_TYPE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE BODY' AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE TY.TENANT_ID = E.TENANT_ID AND TY.OBJECT_TYPE_ID = E.OBJ_ID AND E.OBJ_TYPE = 6) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TENANT_OBJECT_TYPE_REAL_AGENT TY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() and TYPE = 2 UNION ALL SELECT T.TENANT_ID ,T.GMT_CREATE ,T.GMT_MODIFIED ,T.DATABASE_ID ,T.TRIGGER_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,T.TRIGGER_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TRIGGER' OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE T.TENANT_ID = E.TENANT_ID AND T.TRIGGER_ID = E.OBJ_ID AND (E.OBJ_TYPE = 7)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TENANT_TRIGGER_REAL_AGENT T WHERE T.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,SEQUENCE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,SEQUENCE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'SEQUENCE' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_SEQUENCE_OBJECT_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,SYNONYM_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,SYNONYM_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'SYNONYM' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_SYNONYM_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() /*UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,CAST(201006 AS NUMBER) AS DATABASE_ID ,NAMESPACE AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,CONTEXT_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'CONTEXT' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,21 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_CONTEXT_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID()*/ UNION ALL SELECT TENANT_ID, GMT_CREATE, GMT_MODIFIED, DATABASE_ID, DATABASE_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, DATABASE_ID AS OBJECT_ID, NULL AS DATA_OBJECT_ID, 'DATABASE' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() /*UNION ALL SELECT TENANT_ID, GMT_CREATE, GMT_MODIFIED, CAST(201001 AS NUMBER) AS DATABASE_ID, TABLEGROUP_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, TABLEGROUP_ID AS OBJECT_ID, NULL AS DATA_OBJECT_ID, 'TABLEGROUP' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLEGROUP_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT P.TENANT_ID, P.GMT_CREATE, P.GMT_MODIFIED, CAST(201001 AS NUMBER) AS DATABASE_ID, TG.TABLEGROUP_NAME AS OBJECT_NAME, P.PART_NAME SUBOBJECT_NAME, P.PART_ID OBJECT_ID, NULL AS DATA_OBJECT_ID, 'TABLEGROUP PARTITION' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, NULL AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLEGROUP_REAL_AGENT TG JOIN SYS.ALL_VIRTUAL_PART_REAL_AGENT P ON TG.TABLEGROUP_ID = P.TABLE_ID WHERE TG.TENANT_ID = EFFECTIVE_TENANT_ID() AND P.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT SUBP.TENANT_ID, SUBP.GMT_CREATE, SUBP.GMT_MODIFIED, CAST(201001 AS NUMBER) AS DATABASE_ID, TG.TABLEGROUP_NAME AS OBJECT_NAME, SUBP.SUB_PART_NAME SUBOBJECT_NAME, SUBP.SUB_PART_ID OBJECT_ID, NULL DATA_OBJECT_ID, 'TABLEGROUP SUBPARTITION' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'Y' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLEGROUP_REAL_AGENT TG, SYS.ALL_VIRTUAL_PART_REAL_AGENT P,SYS.ALL_VIRTUAL_SUB_PART_REAL_AGENT SUBP WHERE TG.TABLEGROUP_ID = P.TABLE_ID AND P.TABLE_ID = SUBP.TABLE_ID AND P.PART_ID = SUBP.PART_ID AND TG.TENANT_ID = EFFECTIVE_TENANT_ID() AND P.TENANT_ID = EFFECTIVE_TENANT_ID() AND SUBP.TENANT_ID = EFFECTIVE_TENANT_ID()*/ ) A JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT B ON A.TENANT_ID = B.TENANT_ID AND A.DATABASE_ID = B.DATABASE_ID AND B.TENANT_ID = EFFECTIVE_TENANT_ID() AND A.DATABASE_ID = USERENV('SCHEMAID') )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(A.OBJECT_NAME AS VARCHAR(128)) AS OBJECT_NAME, CAST(A.SUBOBJECT_NAME AS VARCHAR2(128)) AS SUBOBJECT_NAME, CAST(A.OBJECT_ID AS NUMBER) AS OBJECT_ID, CAST(A.DATA_OBJECT_ID AS NUMBER) AS DATA_OBJECT_ID, CAST(A.OBJECT_TYPE AS VARCHAR2(23)) AS OBJECT_TYPE, CAST(A.GMT_CREATE AS DATE) AS CREATED, CAST(A.GMT_MODIFIED AS DATE) AS LAST_DDL_TIME, CAST(TO_CHAR(A.GMT_CREATE) AS VARCHAR2(19)) AS TIMESTAMP, CAST(A.STATUS AS VARCHAR2(7)) AS STATUS, CAST(A.TEMPORARY AS VARCHAR2(1)) AS TEMPORARY, CAST(A."GENERATED" AS VARCHAR2(1)) AS "GENERATED", CAST(A.SECONDARY AS VARCHAR2(1)) AS SECONDARY, CAST(A.NAMESPACE AS NUMBER) AS NAMESPACE, CAST(A.EDITION_NAME AS VARCHAR2(128)) AS EDITION_NAME, CAST(NULL AS VARCHAR2(18)) AS SHARING, CAST(NULL AS VARCHAR2(1)) AS EDITIONABLE, CAST(NULL AS VARCHAR2(1)) AS ORACLE_MAINTAINED, CAST(NULL AS VARCHAR2(1)) AS APPLICATION, CAST(NULL AS VARCHAR2(1)) AS DEFAULT_COLLATION, CAST(NULL AS VARCHAR2(1)) AS DUPLICATED, CAST(NULL AS VARCHAR2(1)) AS SHARDED, CAST(NULL AS VARCHAR2(1)) AS IMPORTED_OBJECT, CAST(NULL AS NUMBER) AS CREATED_APPID, CAST(NULL AS NUMBER) AS CREATED_VSNID, CAST(NULL AS NUMBER) AS MODIFIED_APPID, CAST(NULL AS NUMBER) AS MODIFIED_VSNID FROM ( SELECT A.TENANT_ID, (TO_DATE('19700101','YYYYMMDD') + B.SCHEMA_VERSION / 86400 / 1000000 + TO_NUMBER(SUBSTR(TZ_OFFSET(SESSIONTIMEZONE),1,3))/24) AS GMT_CREATE, (TO_DATE('19700101','YYYYMMDD') + A.SCHEMA_VERSION / 86400 / 1000000 + TO_NUMBER(SUBSTR(TZ_OFFSET(SESSIONTIMEZONE),1,3))/24) AS GMT_MODIFIED, A.DATABASE_ID, A.TABLE_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, CAST(A.TABLE_ID AS NUMBER) AS OBJECT_ID, A.TABLE_ID AS DATA_OBJECT_ID, 'TABLE' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE A JOIN SYS.ALL_VIRTUAL_CORE_ALL_TABLE B ON A.TENANT_ID = B.TENANT_ID WHERE B.TABLE_NAME = '__all_core_table' AND A.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,CAST((CASE WHEN DATABASE_ID = 201004 THEN TABLE_NAME WHEN TABLE_TYPE = 5 THEN SUBSTR(TABLE_NAME, 7 + INSTR(SUBSTR(TABLE_NAME, 7), '_')) ELSE TABLE_NAME END) AS VARCHAR2(128)) AS OBJECT_NAME ,NULL SUBOBJECT_NAME ,TABLE_ID OBJECT_ID ,(CASE WHEN TABLET_ID != 0 THEN TABLET_ID ELSE NULL END) DATA_OBJECT_ID ,CASE WHEN TABLE_TYPE IN (0,3,6,8,9) THEN 'TABLE' WHEN TABLE_TYPE IN (2) THEN 'VIRTUAL TABLE' WHEN TABLE_TYPE IN (1,4) THEN 'VIEW' WHEN TABLE_TYPE IN (5) THEN 'INDEX' WHEN TABLE_TYPE IN (7) THEN 'MATERIALIZED VIEW' ELSE NULL END AS OBJECT_TYPE ,CAST(CASE WHEN TABLE_TYPE IN (5) THEN CASE WHEN INDEX_STATUS = 2 THEN 'VALID' WHEN INDEX_STATUS = 3 THEN 'CHECKING' WHEN INDEX_STATUS = 4 THEN 'INELEGIBLE' WHEN INDEX_STATUS = 5 THEN 'ERROR' ELSE 'UNUSABLE' END ELSE CASE WHEN OBJECT_STATUS = 1 THEN 'VALID' ELSE 'INVALID' END END AS VARCHAR2(10)) AS STATUS ,CASE WHEN TABLE_TYPE IN (6,8,9) THEN 'Y' ELSE 'N' END AS TEMPORARY ,CASE WHEN TABLE_TYPE IN (0,1) THEN 'Y' ELSE 'N' END AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() AND TABLE_TYPE != 12 AND TABLE_TYPE != 13 UNION ALL SELECT CST.TENANT_ID ,CST.GMT_CREATE ,CST.GMT_MODIFIED ,DB.DATABASE_ID ,CST.CONSTRAINT_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,TBL.TABLE_ID AS OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'INDEX' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_CONSTRAINT_REAL_AGENT CST, SYS.ALL_VIRTUAL_TABLE_REAL_AGENT TBL, SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT DB WHERE CST.TENANT_ID = EFFECTIVE_TENANT_ID() AND DB.DATABASE_ID = TBL.DATABASE_ID AND TBL.TABLE_ID = CST.TABLE_ID and CST.CONSTRAINT_TYPE = 1 AND TBL.TABLE_TYPE != 12 AND TBL.TABLE_TYPE != 13 UNION ALL SELECT P.TENANT_ID ,P.GMT_CREATE ,P.GMT_MODIFIED ,T.DATABASE_ID ,CAST((CASE WHEN T.DATABASE_ID = 201004 THEN T.TABLE_NAME WHEN T.TABLE_TYPE = 5 THEN SUBSTR(T.TABLE_NAME, 7 + INSTR(SUBSTR(T.TABLE_NAME, 7), '_')) ELSE T.TABLE_NAME END) AS VARCHAR2(128)) AS OBJECT_NAME ,P.PART_NAME SUBOBJECT_NAME ,P.PART_ID OBJECT_ID ,CASE WHEN P.TABLET_ID != 0 THEN P.TABLET_ID ELSE NULL END AS DATA_OBJECT_ID ,DECODE (T.TABLE_TYPE, 5, 'INDEX PARTITION', 'TABLE PARTITION') AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY , NULL AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT T JOIN SYS.ALL_VIRTUAL_PART_REAL_AGENT P ON T.TABLE_ID = P.TABLE_ID WHERE T.TENANT_ID = EFFECTIVE_TENANT_ID() AND P.TENANT_ID = EFFECTIVE_TENANT_ID() AND T.TABLE_TYPE != 12 AND T.TABLE_TYPE != 13 UNION ALL SELECT SUBP.TENANT_ID ,SUBP.GMT_CREATE ,SUBP.GMT_MODIFIED ,T.DATABASE_ID ,CAST((CASE WHEN T.DATABASE_ID = 201004 THEN T.TABLE_NAME WHEN T.TABLE_TYPE = 5 THEN SUBSTR(T.TABLE_NAME, 7 + INSTR(SUBSTR(T.TABLE_NAME, 7), '_')) ELSE T.TABLE_NAME END) AS VARCHAR2(128)) AS OBJECT_NAME ,SUBP.SUB_PART_NAME SUBOBJECT_NAME ,SUBP.SUB_PART_ID OBJECT_ID ,SUBP.TABLET_ID AS DATA_OBJECT_ID ,DECODE (T.TABLE_TYPE, 5, 'INDEX SUBPARTITION', 'TABLE SUBPARTITION') AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'Y' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT T, SYS.ALL_VIRTUAL_PART_REAL_AGENT P,SYS.ALL_VIRTUAL_SUB_PART_REAL_AGENT SUBP WHERE T.TABLE_ID =P.TABLE_ID AND P.TABLE_ID=SUBP.TABLE_ID AND P.PART_ID =SUBP.PART_ID AND T.TENANT_ID = EFFECTIVE_TENANT_ID() AND P.TENANT_ID = EFFECTIVE_TENANT_ID() AND SUBP.TENANT_ID = EFFECTIVE_TENANT_ID() AND T.TABLE_TYPE != 12 AND T.TABLE_TYPE != 13 UNION ALL SELECT EFFECTIVE_TENANT_ID() AS TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,CAST(201006 AS NUMBER) AS DATABASE_ID ,PACKAGE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,PACKAGE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,CASE WHEN TYPE = 1 THEN 'PACKAGE' WHEN TYPE = 2 THEN 'PACKAGE BODY' ELSE NULL END AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_PACKAGE_SYS_AGENT UNION ALL SELECT P.TENANT_ID ,P.GMT_CREATE ,P.GMT_MODIFIED ,P.DATABASE_ID ,P.PACKAGE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,P.PACKAGE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,CASE WHEN TYPE = 1 THEN 'PACKAGE' WHEN TYPE = 2 THEN 'PACKAGE BODY' ELSE NULL END AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE P.TENANT_ID = E.TENANT_ID AND P.PACKAGE_ID = E.OBJ_ID AND (E.OBJ_TYPE = 3 OR E.OBJ_TYPE = 5)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_PACKAGE_REAL_AGENT P WHERE P.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT R.TENANT_ID ,R.GMT_CREATE ,R.GMT_MODIFIED ,R.DATABASE_ID ,R.ROUTINE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,R.ROUTINE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,CASE WHEN ROUTINE_TYPE = 1 THEN 'PROCEDURE' WHEN ROUTINE_TYPE = 2 THEN 'FUNCTION' ELSE NULL END AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE R.TENANT_ID = E.TENANT_ID AND R.ROUTINE_ID = E.OBJ_ID AND (E.OBJ_TYPE = 9 OR E.OBJ_TYPE = 12)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_ROUTINE_REAL_AGENT R WHERE (ROUTINE_TYPE = 1 OR ROUTINE_TYPE = 2) AND R.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT EFFECTIVE_TENANT_ID() AS TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,CAST(201006 AS NUMBER) AS DATABASE_ID ,TS.TYPE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,TS.TYPE_ID AS OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE' AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE TS.TENANT_ID = E.TENANT_ID AND TS.TYPE_ID = E.OBJ_ID AND E.OBJ_TYPE = 4) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TYPE_SYS_AGENT TS UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,TYPE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,TYPE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE' AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE TY.TENANT_ID = E.TENANT_ID AND TY.TYPE_ID = E.OBJ_ID AND E.OBJ_TYPE = 4) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TYPE_REAL_AGENT TY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT EFFECTIVE_TENANT_ID() AS TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,CAST(201006 AS NUMBER) AS DATABASE_ID ,OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,OBJECT_TYPE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE BODY' AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE EFFECTIVE_TENANT_ID() = E.TENANT_ID AND TS.OBJECT_TYPE_ID = E.OBJ_ID AND E.OBJ_TYPE = 6) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TENANT_OBJECT_TYPE_SYS_AGENT TS WHERE TYPE = 2 UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,OBJECT_TYPE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TYPE BODY' AS OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE TY.TENANT_ID = E.TENANT_ID AND TY.OBJECT_TYPE_ID = E.OBJ_ID AND E.OBJ_TYPE = 6) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TENANT_OBJECT_TYPE_REAL_AGENT TY WHERE TENANT_ID = EFFECTIVE_TENANT_ID() and TYPE = 2 UNION ALL SELECT T.TENANT_ID ,T.GMT_CREATE ,T.GMT_MODIFIED ,T.DATABASE_ID ,T.TRIGGER_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,T.TRIGGER_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'TRIGGER' OBJECT_TYPE ,CASE WHEN EXISTS (SELECT OBJ_ID FROM SYS.ALL_VIRTUAL_TENANT_ERROR_REAL_AGENT E WHERE T.TENANT_ID = E.TENANT_ID AND T.TRIGGER_ID = E.OBJ_ID AND (E.OBJ_TYPE = 7)) THEN 'INVALID' ELSE 'VALID' END AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TENANT_TRIGGER_REAL_AGENT T WHERE T.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,SEQUENCE_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,SEQUENCE_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'SEQUENCE' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_SEQUENCE_OBJECT_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,DATABASE_ID ,SYNONYM_NAME AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,SYNONYM_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'SYNONYM' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY , 0 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_SYNONYM_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() /*UNION ALL SELECT TENANT_ID ,GMT_CREATE ,GMT_MODIFIED ,CAST(201006 AS NUMBER) AS DATABASE_ID ,NAMESPACE AS OBJECT_NAME ,NULL AS SUBOBJECT_NAME ,CONTEXT_ID OBJECT_ID ,NULL AS DATA_OBJECT_ID ,'CONTEXT' AS OBJECT_TYPE ,'VALID' AS STATUS ,'N' AS TEMPORARY ,'N' AS "GENERATED" ,'N' AS SECONDARY ,21 AS NAMESPACE ,NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_CONTEXT_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID()*/ UNION ALL SELECT TENANT_ID, GMT_CREATE, GMT_MODIFIED, DATABASE_ID, DATABASE_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, DATABASE_ID AS OBJECT_ID, NULL AS DATA_OBJECT_ID, 'DATABASE' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() /*UNION ALL SELECT TENANT_ID, GMT_CREATE, GMT_MODIFIED, CAST(201001 AS NUMBER) AS DATABASE_ID, TABLEGROUP_NAME AS OBJECT_NAME, NULL AS SUBOBJECT_NAME, TABLEGROUP_ID AS OBJECT_ID, NULL AS DATA_OBJECT_ID, 'TABLEGROUP' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'N' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLEGROUP_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT P.TENANT_ID, P.GMT_CREATE, P.GMT_MODIFIED, CAST(201001 AS NUMBER) AS DATABASE_ID, TG.TABLEGROUP_NAME AS OBJECT_NAME, P.PART_NAME SUBOBJECT_NAME, P.PART_ID OBJECT_ID, NULL AS DATA_OBJECT_ID, 'TABLEGROUP PARTITION' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, NULL AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLEGROUP_REAL_AGENT TG JOIN SYS.ALL_VIRTUAL_PART_REAL_AGENT P ON TG.TABLEGROUP_ID = P.TABLE_ID WHERE TG.TENANT_ID = EFFECTIVE_TENANT_ID() AND P.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT SUBP.TENANT_ID, SUBP.GMT_CREATE, SUBP.GMT_MODIFIED, CAST(201001 AS NUMBER) AS DATABASE_ID, TG.TABLEGROUP_NAME AS OBJECT_NAME, SUBP.SUB_PART_NAME SUBOBJECT_NAME, SUBP.SUB_PART_ID OBJECT_ID, NULL DATA_OBJECT_ID, 'TABLEGROUP SUBPARTITION' AS OBJECT_TYPE, 'VALID' AS STATUS, 'N' AS TEMPORARY, 'Y' AS "GENERATED", 'N' AS SECONDARY, 0 AS NAMESPACE, NULL AS EDITION_NAME FROM SYS.ALL_VIRTUAL_TABLEGROUP_REAL_AGENT TG, SYS.ALL_VIRTUAL_PART_REAL_AGENT P,SYS.ALL_VIRTUAL_SUB_PART_REAL_AGENT SUBP WHERE TG.TABLEGROUP_ID = P.TABLE_ID AND P.TABLE_ID = SUBP.TABLE_ID AND P.PART_ID = SUBP.PART_ID AND TG.TENANT_ID = EFFECTIVE_TENANT_ID() AND P.TENANT_ID = EFFECTIVE_TENANT_ID() AND SUBP.TENANT_ID = EFFECTIVE_TENANT_ID()*/ ) A JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT B ON A.TENANT_ID = B.TENANT_ID AND A.DATABASE_ID = B.DATABASE_ID AND B.TENANT_ID = EFFECTIVE_TENANT_ID() AND A.DATABASE_ID = USERENV('SCHEMAID') )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -909,7 +909,7 @@ int ObInnerTableSchema::all_tab_cols_v_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT /*+NO_USE_NL(T)*/ CAST(DB.DATABASE_NAME AS VARCHAR2(128)) AS OWNER, CAST(T.TABLE_NAME AS VARCHAR2(128)) AS TABLE_NAME, CAST(C.COLUMN_NAME AS VARCHAR2(128)) AS COLUMN_NAME, CAST(DECODE(C.DATA_TYPE, 0, 'VARCHAR2', 1, 'NUMBER', 2, 'NUMBER', 3, 'NUMBER', 4, 'NUMBER', 5, 'NUMBER', 6, 'NUMBER', 7, 'NUMBER', 8, 'NUMBER', 9, 'NUMBER', 10, 'NUMBER', 11, 'BINARY_FLOAT', 12, 'BINARY_DOUBLE', 13, 'NUMBER', 14, 'NUMBER', 15, 'NUMBER', 16, 'NUMBER', 17, 'DATE', 18, 'TIMESTAMP', 19, 'DATE', 20, 'TIME', 21, 'YEAR', 22, 'VARCHAR2', 23, 'CHAR', 24, 'HEX_STRING', 25, 'EXT', 26, 'UNKNOWN', 27, 'TINYTEXT', 28, 'TEXT', 29, 'MEDIUMTEXT', 30, DECODE(C.COLLATION_TYPE, 63, 'BLOB', 'CLOB'), 31, 'BIT', 32, 'ENUM', 33, 'SET', 34, 'ENUM_INNER', 35, 'SET_INNER', 36, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH TIME ZONE')), 37, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH LOCAL TIME ZONE')), 38, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ')')), 39, 'RAW', 40, CONCAT('INTERVAL YEAR(', CONCAT(C.DATA_SCALE, ') TO MONTH')), 41, CONCAT('INTERVAL DAY(', CONCAT(TRUNC(C.DATA_SCALE/10), CONCAT(') TO SECOND(', CONCAT(MOD(C.DATA_SCALE, 10), ')')))), 42, 'FLOAT', 43, 'NVARCHAR2', 44, 'NCHAR', 45, 'UROWID', 46, '', 'UNDEFINED') AS VARCHAR2(128)) AS DATA_TYPE, CAST(NULL AS VARCHAR2(3)) AS DATA_TYPE_MOD, CAST(NULL AS VARCHAR2(128)) AS DATA_TYPE_OWNER, CAST(CASE WHEN C.DATA_TYPE in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 42) THEN 22 WHEN C.DATA_TYPE = 11 THEN 4 WHEN C.DATA_TYPE = 12 THEN 8 WHEN C.DATA_TYPE in (17, 19) THEN 7 WHEN C.DATA_TYPE in (18, 37, 38) THEN CASE WHEN C.DATA_SCALE = 0 THEN 7 ELSE 11 END WHEN C.DATA_TYPE = 41 THEN 11 WHEN C.DATA_TYPE = 40 THEN 5 WHEN C.DATA_TYPE = 30 THEN 4000 WHEN C.DATA_TYPE = 36 THEN 13 WHEN C.DATA_TYPE IN (0,22,43,46) AND C.DATA_PRECISION = 1 THEN LEAST(32767, C.DATA_LENGTH * DECODE(C.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) WHEN C.DATA_TYPE IN (23,44) AND C.DATA_PRECISION = 1 THEN LEAST(2000, C.DATA_LENGTH * DECODE(C.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) ELSE C.DATA_LENGTH END AS NUMBER) AS DATA_LENGTH, CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,18,19,22,23,27,28,29,30,36,37,38,43,44) THEN NULL ELSE CASE WHEN C.DATA_PRECISION < 0 THEN NULL ELSE C.DATA_PRECISION END END AS NUMBER) AS DATA_PRECISION, CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,19,22,23,27,28,29,30,42,43,44) THEN NULL ELSE CASE WHEN C.DATA_SCALE < -84 THEN NULL ELSE C.DATA_SCALE END END AS NUMBER) AS DATA_SCALE, CAST(DECODE(C.NULLABLE, 0, 'N', DECODE(BITAND(C.COLUMN_FLAGS, 5 * POWER(2, 13)), 5 * POWER(2, 13), 'N', 'Y')) AS VARCHAR2(1)) AS NULLABLE, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 64), 0, C.COLUMN_ID, NULL) AS NUMBER) AS COLUMN_ID, CAST(LENGTHB(C.CUR_DEFAULT_VALUE_V2) AS NUMBER) AS DEFAULT_LENGTH, CAST(C.CUR_DEFAULT_VALUE_V2 AS /* TODO: LONG() */ VARCHAR(32767)) AS DATA_DEFAULT, CAST(STAT.DISTINCT_CNT AS NUMBER) AS NUM_DISTINCT, CAST(STAT.MIN_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS LOW_VALUE, CAST(STAT.MAX_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS HIGH_VALUE, CAST(STAT.DENSITY AS NUMBER) AS DENSITY, CAST(STAT.NULL_CNT AS NUMBER) AS NUM_NULLS, CAST(STAT.BUCKET_CNT AS NUMBER) AS NUM_BUCKETS, CAST(STAT.LAST_ANALYZED AS DATE) AS LAST_ANALYZED, CAST(STAT.SAMPLE_SIZE AS NUMBER) AS SAMPLE_SIZE, CAST(DECODE(C.DATA_TYPE, 22, 'CHAR_CS', 23, 'CHAR_CS', 30, DECODE(C.COLLATION_TYPE, 63, 'NULL', 'CHAR_CS'), 43, 'NCHAR_CS', 44, 'NCHAR_CS', '') AS VARCHAR2(44)) AS CHARACTER_SET_NAME, CAST(NULL AS NUMBER) AS CHAR_COL_DECL_LENGTH, CAST(DECODE(STAT.GLOBAL_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS GLOBAL_STATS, CAST(DECODE(STAT.USER_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS USER_STATS, CAST(NULL AS VARCHAR2(80)) AS NOTES, CAST(STAT.AVG_LEN AS NUMBER) AS AVG_COL_LEN, CAST(CASE WHEN C.DATA_TYPE IN (22,23,43,44) THEN C.DATA_LENGTH ELSE 0 END AS NUMBER) AS CHAR_LENGTH, CAST(DECODE(C.DATA_TYPE, 22, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 23, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 43, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 44, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), NULL) AS VARCHAR2(1)) AS CHAR_USED, CAST(NULL AS VARCHAR2(3)) AS V80_FMT_IMAGE, CAST(NULL AS VARCHAR2(3)) AS DATA_UPGRADED, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 64), 0, 'NO', 'YES') AS VARCHAR2(3)) AS HIDDEN_COLUMN, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 1), 1, 'YES', 'NO') AS VARCHAR2(3)) AS VIRTUAL_COLUMN, CAST(NULL AS NUMBER) AS SEGMENT_COLUMN_ID, CAST(NULL AS NUMBER) AS INTERNAL_COLUMN_ID, CAST((CASE WHEN STAT.HISTOGRAM_TYPE = 1 THEN 'FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 3 THEN 'TOP-FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 4 THEN 'HYBRID' ELSE NULL END) AS VARCHAR2(15)) AS HISTOGRAM, CAST(C.COLUMN_NAME AS VARCHAR2(4000)) AS QUALIFIED_COL_NAME, CAST('YES' AS VARCHAR2(3)) AS USER_GENERATED, CAST(NULL AS VARCHAR2(3)) AS DEFAULT_ON_NULL, CAST(NULL AS VARCHAR2(3)) AS IDENTITY_COLUMN, CAST(NULL AS VARCHAR2(128)) AS EVALUATION_EDITION, CAST(NULL AS VARCHAR2(128)) AS UNUSABLE_BEFORE, CAST(NULL AS VARCHAR2(128)) AS UNUSABLE_BEGINNING, CAST(NULL AS VARCHAR2(100)) AS COLLATION, CAST(NULL AS NUMBER) AS COLLATED_COLUMN_ID FROM (SELECT TENANT_ID, TABLE_ID, DATABASE_ID, TABLE_NAME, TABLE_TYPE FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE UNION ALL SELECT TENANT_ID, TABLE_ID, DATABASE_ID, TABLE_NAME, TABLE_TYPE FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() AND TABLE_TYPE IN (0,3,5,8,9)) T JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT DB ON DB.TENANT_ID = T.TENANT_ID AND DB.DATABASE_ID = T.DATABASE_ID AND DB.TENANT_ID = EFFECTIVE_TENANT_ID() AND (T.DATABASE_ID = USERENV('SCHEMAID') OR USER_CAN_ACCESS_OBJ(1, T.TABLE_ID, T.DATABASE_ID) = 1) JOIN (SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, DATA_TYPE, COLLATION_TYPE, DATA_SCALE, DATA_LENGTH, DATA_PRECISION, NULLABLE, COLUMN_FLAGS, CUR_DEFAULT_VALUE_V2, IS_HIDDEN FROM SYS.ALL_VIRTUAL_CORE_COLUMN_TABLE UNION ALL SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, DATA_TYPE, COLLATION_TYPE, DATA_SCALE, DATA_LENGTH, DATA_PRECISION, NULLABLE, COLUMN_FLAGS, CUR_DEFAULT_VALUE_V2, IS_HIDDEN FROM SYS.ALL_VIRTUAL_COLUMN_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID()) C ON C.TENANT_ID = T.TENANT_ID AND C.TABLE_ID = T.TABLE_ID AND C.IS_HIDDEN = 0 LEFT JOIN SYS.ALL_VIRTUAL_COLUMN_STAT_REAL_AGENT STAT ON C.TENANT_ID = STAT.TENANT_ID AND C.TABLE_ID = STAT.TABLE_ID AND C.COLUMN_ID = STAT.COLUMN_ID AND STAT.OBJECT_TYPE = 1 AND STAT.TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT /*+NO_USE_NL(T)*/ CAST(DB.DATABASE_NAME AS VARCHAR2(128)) AS OWNER, CAST(T.TABLE_NAME AS VARCHAR2(128)) AS TABLE_NAME, CAST(C.COLUMN_NAME AS VARCHAR2(128)) AS COLUMN_NAME, CAST(DECODE(C.DATA_TYPE, 0, 'VARCHAR2', 1, 'NUMBER', 2, 'NUMBER', 3, 'NUMBER', 4, 'NUMBER', 5, 'NUMBER', 6, 'NUMBER', 7, 'NUMBER', 8, 'NUMBER', 9, 'NUMBER', 10, 'NUMBER', 11, 'BINARY_FLOAT', 12, 'BINARY_DOUBLE', 13, 'NUMBER', 14, 'NUMBER', 15, 'NUMBER', 16, 'NUMBER', 17, 'DATE', 18, 'TIMESTAMP', 19, 'DATE', 20, 'TIME', 21, 'YEAR', 22, 'VARCHAR2', 23, 'CHAR', 24, 'HEX_STRING', 25, 'UNDEFINED', 26, 'UNKNOWN', 27, 'TINYTEXT', 28, 'TEXT', 29, 'MEDIUMTEXT', 30, DECODE(C.COLLATION_TYPE, 63, 'BLOB', 'CLOB'), 31, 'BIT', 32, 'ENUM', 33, 'SET', 34, 'ENUM_INNER', 35, 'SET_INNER', 36, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH TIME ZONE')), 37, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH LOCAL TIME ZONE')), 38, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ')')), 39, 'RAW', 40, CONCAT('INTERVAL YEAR(', CONCAT(C.DATA_SCALE, ') TO MONTH')), 41, CONCAT('INTERVAL DAY(', CONCAT(TRUNC(C.DATA_SCALE/10), CONCAT(') TO SECOND(', CONCAT(MOD(C.DATA_SCALE, 10), ')')))), 42, 'FLOAT', 43, 'NVARCHAR2', 44, 'NCHAR', 45, 'UROWID', 46, '', 'UNDEFINED') AS VARCHAR2(128)) AS DATA_TYPE, CAST(NULL AS VARCHAR2(3)) AS DATA_TYPE_MOD, CAST(NULL AS VARCHAR2(128)) AS DATA_TYPE_OWNER, CAST(CASE WHEN C.DATA_TYPE in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 42) THEN 22 WHEN C.DATA_TYPE = 11 THEN 4 WHEN C.DATA_TYPE = 12 THEN 8 WHEN C.DATA_TYPE in (17, 19) THEN 7 WHEN C.DATA_TYPE in (18, 37, 38) THEN CASE WHEN C.DATA_SCALE = 0 THEN 7 ELSE 11 END WHEN C.DATA_TYPE = 41 THEN 11 WHEN C.DATA_TYPE = 40 THEN 5 WHEN C.DATA_TYPE = 30 THEN 4000 WHEN C.DATA_TYPE = 36 THEN 13 WHEN C.DATA_TYPE IN (0,22,43,46) AND C.DATA_PRECISION = 1 THEN LEAST(32767, C.DATA_LENGTH * DECODE(C.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) WHEN C.DATA_TYPE IN (23,44) AND C.DATA_PRECISION = 1 THEN LEAST(2000, C.DATA_LENGTH * DECODE(C.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) ELSE C.DATA_LENGTH END AS NUMBER) AS DATA_LENGTH, CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,18,19,22,23,27,28,29,30,36,37,38,43,44) THEN NULL ELSE CASE WHEN C.DATA_PRECISION < 0 THEN NULL ELSE C.DATA_PRECISION END END AS NUMBER) AS DATA_PRECISION, CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,19,22,23,27,28,29,30,42,43,44) THEN NULL ELSE CASE WHEN C.DATA_SCALE < -84 THEN NULL ELSE C.DATA_SCALE END END AS NUMBER) AS DATA_SCALE, CAST(DECODE(C.NULLABLE, 0, 'N', DECODE(BITAND(C.COLUMN_FLAGS, 5 * POWER(2, 13)), 5 * POWER(2, 13), 'N', 'Y')) AS VARCHAR2(1)) AS NULLABLE, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 64), 0, C.COLUMN_ID, NULL) AS NUMBER) AS COLUMN_ID, CAST(LENGTHB(C.CUR_DEFAULT_VALUE_V2) AS NUMBER) AS DEFAULT_LENGTH, CAST(C.CUR_DEFAULT_VALUE_V2 AS /* TODO: LONG() */ VARCHAR(32767)) AS DATA_DEFAULT, CAST(STAT.DISTINCT_CNT AS NUMBER) AS NUM_DISTINCT, CAST(STAT.MIN_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS LOW_VALUE, CAST(STAT.MAX_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS HIGH_VALUE, CAST(STAT.DENSITY AS NUMBER) AS DENSITY, CAST(STAT.NULL_CNT AS NUMBER) AS NUM_NULLS, CAST(STAT.BUCKET_CNT AS NUMBER) AS NUM_BUCKETS, CAST(STAT.LAST_ANALYZED AS DATE) AS LAST_ANALYZED, CAST(STAT.SAMPLE_SIZE AS NUMBER) AS SAMPLE_SIZE, CAST(DECODE(C.DATA_TYPE, 22, 'CHAR_CS', 23, 'CHAR_CS', 30, DECODE(C.COLLATION_TYPE, 63, 'NULL', 'CHAR_CS'), 43, 'NCHAR_CS', 44, 'NCHAR_CS', '') AS VARCHAR2(44)) AS CHARACTER_SET_NAME, CAST(NULL AS NUMBER) AS CHAR_COL_DECL_LENGTH, CAST(DECODE(STAT.GLOBAL_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS GLOBAL_STATS, CAST(DECODE(STAT.USER_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS USER_STATS, CAST(NULL AS VARCHAR2(80)) AS NOTES, CAST(STAT.AVG_LEN AS NUMBER) AS AVG_COL_LEN, CAST(CASE WHEN C.DATA_TYPE IN (22,23,43,44) THEN C.DATA_LENGTH ELSE 0 END AS NUMBER) AS CHAR_LENGTH, CAST(DECODE(C.DATA_TYPE, 22, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 23, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 43, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 44, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), NULL) AS VARCHAR2(1)) AS CHAR_USED, CAST(NULL AS VARCHAR2(3)) AS V80_FMT_IMAGE, CAST(NULL AS VARCHAR2(3)) AS DATA_UPGRADED, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 64), 0, 'NO', 'YES') AS VARCHAR2(3)) AS HIDDEN_COLUMN, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 1), 1, 'YES', 'NO') AS VARCHAR2(3)) AS VIRTUAL_COLUMN, CAST(NULL AS NUMBER) AS SEGMENT_COLUMN_ID, CAST(NULL AS NUMBER) AS INTERNAL_COLUMN_ID, CAST((CASE WHEN STAT.HISTOGRAM_TYPE = 1 THEN 'FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 3 THEN 'TOP-FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 4 THEN 'HYBRID' ELSE NULL END) AS VARCHAR2(15)) AS HISTOGRAM, CAST(C.COLUMN_NAME AS VARCHAR2(4000)) AS QUALIFIED_COL_NAME, CAST('YES' AS VARCHAR2(3)) AS USER_GENERATED, CAST(NULL AS VARCHAR2(3)) AS DEFAULT_ON_NULL, CAST(NULL AS VARCHAR2(3)) AS IDENTITY_COLUMN, CAST(NULL AS VARCHAR2(128)) AS EVALUATION_EDITION, CAST(NULL AS VARCHAR2(128)) AS UNUSABLE_BEFORE, CAST(NULL AS VARCHAR2(128)) AS UNUSABLE_BEGINNING, CAST(NULL AS VARCHAR2(100)) AS COLLATION, CAST(NULL AS NUMBER) AS COLLATED_COLUMN_ID FROM (SELECT TENANT_ID, TABLE_ID, DATABASE_ID, TABLE_NAME, TABLE_TYPE FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE UNION ALL SELECT TENANT_ID, TABLE_ID, DATABASE_ID, TABLE_NAME, TABLE_TYPE FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() AND TABLE_TYPE IN (0,1,3,4,5,7,8,9)) T JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT DB ON DB.TENANT_ID = T.TENANT_ID AND DB.DATABASE_ID = T.DATABASE_ID AND DB.TENANT_ID = EFFECTIVE_TENANT_ID() AND (T.DATABASE_ID = USERENV('SCHEMAID') OR USER_CAN_ACCESS_OBJ(1, T.TABLE_ID, T.DATABASE_ID) = 1) JOIN (SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, DATA_TYPE, COLLATION_TYPE, DATA_SCALE, DATA_LENGTH, DATA_PRECISION, NULLABLE, COLUMN_FLAGS, CUR_DEFAULT_VALUE_V2, IS_HIDDEN FROM SYS.ALL_VIRTUAL_CORE_COLUMN_TABLE UNION ALL SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, DATA_TYPE, COLLATION_TYPE, DATA_SCALE, DATA_LENGTH, DATA_PRECISION, NULLABLE, COLUMN_FLAGS, CUR_DEFAULT_VALUE_V2, IS_HIDDEN FROM SYS.ALL_VIRTUAL_COLUMN_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID()) C ON C.TENANT_ID = T.TENANT_ID AND C.TABLE_ID = T.TABLE_ID AND C.IS_HIDDEN = 0 LEFT JOIN SYS.ALL_VIRTUAL_COLUMN_STAT_REAL_AGENT STAT ON C.TENANT_ID = STAT.TENANT_ID AND C.TABLE_ID = STAT.TABLE_ID AND C.COLUMN_ID = STAT.COLUMN_ID AND STAT.OBJECT_TYPE = 1 AND STAT.TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -959,7 +959,7 @@ int ObInnerTableSchema::dba_tab_cols_v_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT/*+leading(DB,T,C,"STAT")*/ CAST(DB.DATABASE_NAME AS VARCHAR2(128)) AS OWNER, CAST(T.TABLE_NAME AS VARCHAR2(128)) AS TABLE_NAME, CAST(C.COLUMN_NAME AS VARCHAR2(128)) AS COLUMN_NAME, CAST(DECODE(C.DATA_TYPE, 0, 'VARCHAR2', 1, 'NUMBER', 2, 'NUMBER', 3, 'NUMBER', 4, 'NUMBER', 5, 'NUMBER', 6, 'NUMBER', 7, 'NUMBER', 8, 'NUMBER', 9, 'NUMBER', 10, 'NUMBER', 11, 'BINARY_FLOAT', 12, 'BINARY_DOUBLE', 13, 'NUMBER', 14, 'NUMBER', 15, 'NUMBER', 16, 'NUMBER', 17, 'DATE', 18, 'TIMESTAMP', 19, 'DATE', 20, 'TIME', 21, 'YEAR', 22, 'VARCHAR2', 23, 'CHAR', 24, 'HEX_STRING', 25, 'EXT', 26, 'UNKNOWN', 27, 'TINYTEXT', 28, 'TEXT', 29, 'MEDIUMTEXT', 30, DECODE(C.COLLATION_TYPE, 63, 'BLOB', 'CLOB'), 31, 'BIT', 32, 'ENUM', 33, 'SET', 34, 'ENUM_INNER', 35, 'SET_INNER', 36, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH TIME ZONE')), 37, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH LOCAL TIME ZONE')), 38, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ')')), 39, 'RAW', 40, CONCAT('INTERVAL YEAR(', CONCAT(C.DATA_SCALE, ') TO MONTH')), 41, CONCAT('INTERVAL DAY(', CONCAT(TRUNC(C.DATA_SCALE/10), CONCAT(') TO SECOND(', CONCAT(MOD(C.DATA_SCALE, 10), ')')))), 42, 'FLOAT', 43, 'NVARCHAR2', 44, 'NCHAR', 45, 'UROWID', 46, '', 'UNDEFINED') AS VARCHAR2(128)) AS DATA_TYPE, CAST(NULL AS VARCHAR2(3)) AS DATA_TYPE_MOD, CAST(NULL AS VARCHAR2(128)) AS DATA_TYPE_OWNER, CAST(CASE WHEN C.DATA_TYPE in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 42) THEN 22 WHEN C.DATA_TYPE = 11 THEN 4 WHEN C.DATA_TYPE = 12 THEN 8 WHEN C.DATA_TYPE in (17, 19) THEN 7 WHEN C.DATA_TYPE in (18, 37, 38) THEN CASE WHEN C.DATA_SCALE = 0 THEN 7 ELSE 11 END WHEN C.DATA_TYPE = 41 THEN 11 WHEN C.DATA_TYPE = 40 THEN 5 WHEN C.DATA_TYPE = 30 THEN 4000 WHEN C.DATA_TYPE = 36 THEN 13 WHEN C.DATA_TYPE IN (0,22,43,46) AND C.DATA_PRECISION = 1 THEN LEAST(32767, C.DATA_LENGTH * DECODE(C.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) WHEN C.DATA_TYPE IN (23,44) AND C.DATA_PRECISION = 1 THEN LEAST(2000, C.DATA_LENGTH * DECODE(C.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) ELSE C.DATA_LENGTH END AS NUMBER) AS DATA_LENGTH, CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,18,19,22,23,27,28,29,30,36,37,38,43,44) THEN NULL ELSE CASE WHEN C.DATA_PRECISION < 0 THEN NULL ELSE C.DATA_PRECISION END END AS NUMBER) AS DATA_PRECISION, CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,19,22,23,27,28,29,30,42,43,44) THEN NULL ELSE CASE WHEN C.DATA_SCALE < -84 THEN NULL ELSE C.DATA_SCALE END END AS NUMBER) AS DATA_SCALE, CAST(DECODE(C.NULLABLE, 0, 'N', DECODE(BITAND(C.COLUMN_FLAGS, 5 * POWER(2, 13)), 5 * POWER(2, 13), 'N', 'Y')) AS VARCHAR2(1)) AS NULLABLE, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 64), 0, C.COLUMN_ID, NULL) AS NUMBER) AS COLUMN_ID, CAST(LENGTHB(C.CUR_DEFAULT_VALUE_V2) AS NUMBER) AS DEFAULT_LENGTH, CAST(C.CUR_DEFAULT_VALUE_V2 AS /* TODO: LONG() */ VARCHAR(32767)) AS DATA_DEFAULT, CAST(STAT.DISTINCT_CNT AS NUMBER) AS NUM_DISTINCT, CAST(STAT.MIN_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS LOW_VALUE, CAST(STAT.MAX_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS HIGH_VALUE, CAST(STAT.DENSITY AS NUMBER) AS DENSITY, CAST(STAT.NULL_CNT AS NUMBER) AS NUM_NULLS, CAST(STAT.BUCKET_CNT AS NUMBER) AS NUM_BUCKETS, CAST(STAT.LAST_ANALYZED AS DATE) AS LAST_ANALYZED, CAST(STAT.SAMPLE_SIZE AS NUMBER) AS SAMPLE_SIZE, CAST(DECODE(C.DATA_TYPE, 22, 'CHAR_CS', 23, 'CHAR_CS', 30, DECODE(C.COLLATION_TYPE, 63, 'NULL', 'CHAR_CS'), 43, 'NCHAR_CS', 44, 'NCHAR_CS', '') AS VARCHAR2(44)) AS CHARACTER_SET_NAME, CAST(NULL AS NUMBER) AS CHAR_COL_DECL_LENGTH, CAST(DECODE(STAT.GLOBAL_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS GLOBAL_STATS, CAST(DECODE(STAT.USER_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS USER_STATS, CAST(NULL AS VARCHAR2(80)) AS NOTES, CAST(STAT.AVG_LEN AS NUMBER) AS AVG_COL_LEN, CAST(CASE WHEN C.DATA_TYPE IN (22,23,43,44) THEN C.DATA_LENGTH ELSE 0 END AS NUMBER) AS CHAR_LENGTH, CAST(DECODE(C.DATA_TYPE, 22, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 23, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 43, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 44, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), NULL) AS VARCHAR2(1)) AS CHAR_USED, CAST(NULL AS VARCHAR2(3)) AS V80_FMT_IMAGE, CAST(NULL AS VARCHAR2(3)) AS DATA_UPGRADED, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 64), 0, 'NO', 'YES') AS VARCHAR2(3)) AS HIDDEN_COLUMN, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 1), 1, 'YES', 'NO') AS VARCHAR2(3)) AS VIRTUAL_COLUMN, CAST(NULL AS NUMBER) AS SEGMENT_COLUMN_ID, CAST(NULL AS NUMBER) AS INTERNAL_COLUMN_ID, CAST((CASE WHEN STAT.HISTOGRAM_TYPE = 1 THEN 'FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 3 THEN 'TOP-FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 4 THEN 'HYBRID' ELSE NULL END) AS VARCHAR2(15)) AS HISTOGRAM, CAST(C.COLUMN_NAME AS VARCHAR2(4000)) AS QUALIFIED_COL_NAME, CAST('YES' AS VARCHAR2(3)) AS USER_GENERATED, CAST(NULL AS VARCHAR2(3)) AS DEFAULT_ON_NULL, CAST(NULL AS VARCHAR2(3)) AS IDENTITY_COLUMN, CAST(NULL AS VARCHAR2(128)) AS EVALUATION_EDITION, CAST(NULL AS VARCHAR2(128)) AS UNUSABLE_BEFORE, CAST(NULL AS VARCHAR2(128)) AS UNUSABLE_BEGINNING, CAST(NULL AS VARCHAR2(100)) AS COLLATION, CAST(NULL AS NUMBER) AS COLLATED_COLUMN_ID FROM (SELECT TENANT_ID, TABLE_ID, DATABASE_ID, TABLE_NAME, TABLE_TYPE FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE UNION ALL SELECT TENANT_ID, TABLE_ID, DATABASE_ID, TABLE_NAME, TABLE_TYPE FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() AND TABLE_TYPE IN (0,3,5,8,9)) T JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT DB ON DB.TENANT_ID = T.TENANT_ID AND DB.DATABASE_ID = T.DATABASE_ID AND DB.TENANT_ID = EFFECTIVE_TENANT_ID() JOIN (SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, DATA_TYPE, COLLATION_TYPE, DATA_SCALE, DATA_LENGTH, DATA_PRECISION, NULLABLE, COLUMN_FLAGS, CUR_DEFAULT_VALUE_V2, IS_HIDDEN FROM SYS.ALL_VIRTUAL_CORE_COLUMN_TABLE UNION ALL SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, DATA_TYPE, COLLATION_TYPE, DATA_SCALE, DATA_LENGTH, DATA_PRECISION, NULLABLE, COLUMN_FLAGS, CUR_DEFAULT_VALUE_V2, IS_HIDDEN FROM SYS.ALL_VIRTUAL_COLUMN_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID()) C ON C.TENANT_ID = T.TENANT_ID AND C.TABLE_ID = T.TABLE_ID AND C.IS_HIDDEN = 0 LEFT JOIN SYS.ALL_VIRTUAL_COLUMN_STAT_REAL_AGENT STAT ON C.TENANT_ID = STAT.TENANT_ID AND C.TABLE_ID = STAT.TABLE_ID AND C.COLUMN_ID = STAT.COLUMN_ID AND STAT.OBJECT_TYPE = 1 AND STAT.TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT/*+leading(DB,T,C,"STAT")*/ CAST(DB.DATABASE_NAME AS VARCHAR2(128)) AS OWNER, CAST(T.TABLE_NAME AS VARCHAR2(128)) AS TABLE_NAME, CAST(C.COLUMN_NAME AS VARCHAR2(128)) AS COLUMN_NAME, CAST(DECODE(C.DATA_TYPE, 0, 'VARCHAR2', 1, 'NUMBER', 2, 'NUMBER', 3, 'NUMBER', 4, 'NUMBER', 5, 'NUMBER', 6, 'NUMBER', 7, 'NUMBER', 8, 'NUMBER', 9, 'NUMBER', 10, 'NUMBER', 11, 'BINARY_FLOAT', 12, 'BINARY_DOUBLE', 13, 'NUMBER', 14, 'NUMBER', 15, 'NUMBER', 16, 'NUMBER', 17, 'DATE', 18, 'TIMESTAMP', 19, 'DATE', 20, 'TIME', 21, 'YEAR', 22, 'VARCHAR2', 23, 'CHAR', 24, 'HEX_STRING', 25, 'UNDEFINED', 26, 'UNKNOWN', 27, 'TINYTEXT', 28, 'TEXT', 29, 'MEDIUMTEXT', 30, DECODE(C.COLLATION_TYPE, 63, 'BLOB', 'CLOB'), 31, 'BIT', 32, 'ENUM', 33, 'SET', 34, 'ENUM_INNER', 35, 'SET_INNER', 36, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH TIME ZONE')), 37, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH LOCAL TIME ZONE')), 38, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ')')), 39, 'RAW', 40, CONCAT('INTERVAL YEAR(', CONCAT(C.DATA_SCALE, ') TO MONTH')), 41, CONCAT('INTERVAL DAY(', CONCAT(TRUNC(C.DATA_SCALE/10), CONCAT(') TO SECOND(', CONCAT(MOD(C.DATA_SCALE, 10), ')')))), 42, 'FLOAT', 43, 'NVARCHAR2', 44, 'NCHAR', 45, 'UROWID', 46, '', 'UNDEFINED') AS VARCHAR2(128)) AS DATA_TYPE, CAST(NULL AS VARCHAR2(3)) AS DATA_TYPE_MOD, CAST(NULL AS VARCHAR2(128)) AS DATA_TYPE_OWNER, CAST(CASE WHEN C.DATA_TYPE in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 42) THEN 22 WHEN C.DATA_TYPE = 11 THEN 4 WHEN C.DATA_TYPE = 12 THEN 8 WHEN C.DATA_TYPE in (17, 19) THEN 7 WHEN C.DATA_TYPE in (18, 37, 38) THEN CASE WHEN C.DATA_SCALE = 0 THEN 7 ELSE 11 END WHEN C.DATA_TYPE = 41 THEN 11 WHEN C.DATA_TYPE = 40 THEN 5 WHEN C.DATA_TYPE = 30 THEN 4000 WHEN C.DATA_TYPE = 36 THEN 13 WHEN C.DATA_TYPE IN (0,22,43,46) AND C.DATA_PRECISION = 1 THEN LEAST(32767, C.DATA_LENGTH * DECODE(C.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) WHEN C.DATA_TYPE IN (23,44) AND C.DATA_PRECISION = 1 THEN LEAST(2000, C.DATA_LENGTH * DECODE(C.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) ELSE C.DATA_LENGTH END AS NUMBER) AS DATA_LENGTH, CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,18,19,22,23,27,28,29,30,36,37,38,43,44) THEN NULL ELSE CASE WHEN C.DATA_PRECISION < 0 THEN NULL ELSE C.DATA_PRECISION END END AS NUMBER) AS DATA_PRECISION, CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,19,22,23,27,28,29,30,42,43,44) THEN NULL ELSE CASE WHEN C.DATA_SCALE < -84 THEN NULL ELSE C.DATA_SCALE END END AS NUMBER) AS DATA_SCALE, CAST(DECODE(C.NULLABLE, 0, 'N', DECODE(BITAND(C.COLUMN_FLAGS, 5 * POWER(2, 13)), 5 * POWER(2, 13), 'N', 'Y')) AS VARCHAR2(1)) AS NULLABLE, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 64), 0, C.COLUMN_ID, NULL) AS NUMBER) AS COLUMN_ID, CAST(LENGTHB(C.CUR_DEFAULT_VALUE_V2) AS NUMBER) AS DEFAULT_LENGTH, CAST(C.CUR_DEFAULT_VALUE_V2 AS /* TODO: LONG() */ VARCHAR(32767)) AS DATA_DEFAULT, CAST(STAT.DISTINCT_CNT AS NUMBER) AS NUM_DISTINCT, CAST(STAT.MIN_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS LOW_VALUE, CAST(STAT.MAX_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS HIGH_VALUE, CAST(STAT.DENSITY AS NUMBER) AS DENSITY, CAST(STAT.NULL_CNT AS NUMBER) AS NUM_NULLS, CAST(STAT.BUCKET_CNT AS NUMBER) AS NUM_BUCKETS, CAST(STAT.LAST_ANALYZED AS DATE) AS LAST_ANALYZED, CAST(STAT.SAMPLE_SIZE AS NUMBER) AS SAMPLE_SIZE, CAST(DECODE(C.DATA_TYPE, 22, 'CHAR_CS', 23, 'CHAR_CS', 30, DECODE(C.COLLATION_TYPE, 63, 'NULL', 'CHAR_CS'), 43, 'NCHAR_CS', 44, 'NCHAR_CS', '') AS VARCHAR2(44)) AS CHARACTER_SET_NAME, CAST(NULL AS NUMBER) AS CHAR_COL_DECL_LENGTH, CAST(DECODE(STAT.GLOBAL_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS GLOBAL_STATS, CAST(DECODE(STAT.USER_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS USER_STATS, CAST(NULL AS VARCHAR2(80)) AS NOTES, CAST(STAT.AVG_LEN AS NUMBER) AS AVG_COL_LEN, CAST(CASE WHEN C.DATA_TYPE IN (22,23,43,44) THEN C.DATA_LENGTH ELSE 0 END AS NUMBER) AS CHAR_LENGTH, CAST(DECODE(C.DATA_TYPE, 22, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 23, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 43, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 44, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), NULL) AS VARCHAR2(1)) AS CHAR_USED, CAST(NULL AS VARCHAR2(3)) AS V80_FMT_IMAGE, CAST(NULL AS VARCHAR2(3)) AS DATA_UPGRADED, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 64), 0, 'NO', 'YES') AS VARCHAR2(3)) AS HIDDEN_COLUMN, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 1), 1, 'YES', 'NO') AS VARCHAR2(3)) AS VIRTUAL_COLUMN, CAST(NULL AS NUMBER) AS SEGMENT_COLUMN_ID, CAST(NULL AS NUMBER) AS INTERNAL_COLUMN_ID, CAST((CASE WHEN STAT.HISTOGRAM_TYPE = 1 THEN 'FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 3 THEN 'TOP-FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 4 THEN 'HYBRID' ELSE NULL END) AS VARCHAR2(15)) AS HISTOGRAM, CAST(C.COLUMN_NAME AS VARCHAR2(4000)) AS QUALIFIED_COL_NAME, CAST('YES' AS VARCHAR2(3)) AS USER_GENERATED, CAST(NULL AS VARCHAR2(3)) AS DEFAULT_ON_NULL, CAST(NULL AS VARCHAR2(3)) AS IDENTITY_COLUMN, CAST(NULL AS VARCHAR2(128)) AS EVALUATION_EDITION, CAST(NULL AS VARCHAR2(128)) AS UNUSABLE_BEFORE, CAST(NULL AS VARCHAR2(128)) AS UNUSABLE_BEGINNING, CAST(NULL AS VARCHAR2(100)) AS COLLATION, CAST(NULL AS NUMBER) AS COLLATED_COLUMN_ID FROM (SELECT TENANT_ID, TABLE_ID, DATABASE_ID, TABLE_NAME, TABLE_TYPE FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE UNION ALL SELECT TENANT_ID, TABLE_ID, DATABASE_ID, TABLE_NAME, TABLE_TYPE FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() AND TABLE_TYPE IN (0,1,3,4,5,7,8,9)) T JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT DB ON DB.TENANT_ID = T.TENANT_ID AND DB.DATABASE_ID = T.DATABASE_ID AND DB.TENANT_ID = EFFECTIVE_TENANT_ID() JOIN (SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, DATA_TYPE, COLLATION_TYPE, DATA_SCALE, DATA_LENGTH, DATA_PRECISION, NULLABLE, COLUMN_FLAGS, CUR_DEFAULT_VALUE_V2, IS_HIDDEN FROM SYS.ALL_VIRTUAL_CORE_COLUMN_TABLE UNION ALL SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, DATA_TYPE, COLLATION_TYPE, DATA_SCALE, DATA_LENGTH, DATA_PRECISION, NULLABLE, COLUMN_FLAGS, CUR_DEFAULT_VALUE_V2, IS_HIDDEN FROM SYS.ALL_VIRTUAL_COLUMN_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID()) C ON C.TENANT_ID = T.TENANT_ID AND C.TABLE_ID = T.TABLE_ID AND C.IS_HIDDEN = 0 LEFT JOIN SYS.ALL_VIRTUAL_COLUMN_STAT_REAL_AGENT STAT ON C.TENANT_ID = STAT.TENANT_ID AND C.TABLE_ID = STAT.TABLE_ID AND C.COLUMN_ID = STAT.COLUMN_ID AND STAT.OBJECT_TYPE = 1 AND STAT.TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -1009,7 +1009,7 @@ int ObInnerTableSchema::user_tab_cols_v_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT /*+NO_USE_NL(T)*/ CAST(T.TABLE_NAME AS VARCHAR2(128)) AS TABLE_NAME, CAST(C.COLUMN_NAME AS VARCHAR2(128)) AS COLUMN_NAME, CAST(DECODE(C.DATA_TYPE, 0, 'VARCHAR2', 1, 'NUMBER', 2, 'NUMBER', 3, 'NUMBER', 4, 'NUMBER', 5, 'NUMBER', 6, 'NUMBER', 7, 'NUMBER', 8, 'NUMBER', 9, 'NUMBER', 10, 'NUMBER', 11, 'BINARY_FLOAT', 12, 'BINARY_DOUBLE', 13, 'NUMBER', 14, 'NUMBER', 15, 'NUMBER', 16, 'NUMBER', 17, 'DATE', 18, 'TIMESTAMP', 19, 'DATE', 20, 'TIME', 21, 'YEAR', 22, 'VARCHAR2', 23, 'CHAR', 24, 'HEX_STRING', 25, 'EXT', 26, 'UNKNOWN', 27, 'TINYTEXT', 28, 'TEXT', 29, 'MEDIUMTEXT', 30, DECODE(C.COLLATION_TYPE, 63, 'BLOB', 'CLOB'), 31, 'BIT', 32, 'ENUM', 33, 'SET', 34, 'ENUM_INNER', 35, 'SET_INNER', 36, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH TIME ZONE')), 37, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH LOCAL TIME ZONE')), 38, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ')')), 39, 'RAW', 40, CONCAT('INTERVAL YEAR(', CONCAT(C.DATA_SCALE, ') TO MONTH')), 41, CONCAT('INTERVAL DAY(', CONCAT(TRUNC(C.DATA_SCALE/10), CONCAT(') TO SECOND(', CONCAT(MOD(C.DATA_SCALE, 10), ')')))), 42, 'FLOAT', 43, 'NVARCHAR2', 44, 'NCHAR', 45, 'UROWID', 46, '', 'UNDEFINED') AS VARCHAR2(128)) AS DATA_TYPE, CAST(NULL AS VARCHAR2(3)) AS DATA_TYPE_MOD, CAST(NULL AS VARCHAR2(128)) AS DATA_TYPE_OWNER, CAST(CASE WHEN C.DATA_TYPE in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 42) THEN 22 WHEN C.DATA_TYPE = 11 THEN 4 WHEN C.DATA_TYPE = 12 THEN 8 WHEN C.DATA_TYPE in (17, 19) THEN 7 WHEN C.DATA_TYPE in (18, 37, 38) THEN CASE WHEN C.DATA_SCALE = 0 THEN 7 ELSE 11 END WHEN C.DATA_TYPE = 41 THEN 11 WHEN C.DATA_TYPE = 40 THEN 5 WHEN C.DATA_TYPE = 30 THEN 4000 WHEN C.DATA_TYPE = 36 THEN 13 WHEN C.DATA_TYPE IN (0,22,43,46) AND C.DATA_PRECISION = 1 THEN LEAST(32767, C.DATA_LENGTH * DECODE(C.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) WHEN C.DATA_TYPE IN (23,44) AND C.DATA_PRECISION = 1 THEN LEAST(2000, C.DATA_LENGTH * DECODE(C.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) ELSE C.DATA_LENGTH END AS NUMBER) AS DATA_LENGTH, CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,18,19,22,23,27,28,29,30,36,37,38,43,44) THEN NULL ELSE CASE WHEN C.DATA_PRECISION < 0 THEN NULL ELSE C.DATA_PRECISION END END AS NUMBER) AS DATA_PRECISION, CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,19,22,23,27,28,29,30,42,43,44) THEN NULL ELSE CASE WHEN C.DATA_SCALE < -84 THEN NULL ELSE C.DATA_SCALE END END AS NUMBER) AS DATA_SCALE, CAST(DECODE(C.NULLABLE, 0, 'N', DECODE(BITAND(C.COLUMN_FLAGS, 5 * POWER(2, 13)), 5 * POWER(2, 13), 'N', 'Y')) AS VARCHAR2(1)) AS NULLABLE, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 64), 0, C.COLUMN_ID, NULL) AS NUMBER) AS COLUMN_ID, CAST(LENGTHB(C.CUR_DEFAULT_VALUE_V2) AS NUMBER) AS DEFAULT_LENGTH, CAST(C.CUR_DEFAULT_VALUE_V2 AS /* TODO: LONG() */ VARCHAR(32767)) AS DATA_DEFAULT, CAST(STAT.DISTINCT_CNT AS NUMBER) AS NUM_DISTINCT, CAST(STAT.MIN_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS LOW_VALUE, CAST(STAT.MAX_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS HIGH_VALUE, CAST(STAT.DENSITY AS NUMBER) AS DENSITY, CAST(STAT.NULL_CNT AS NUMBER) AS NUM_NULLS, CAST(STAT.BUCKET_CNT AS NUMBER) AS NUM_BUCKETS, CAST(STAT.LAST_ANALYZED AS DATE) AS LAST_ANALYZED, CAST(STAT.SAMPLE_SIZE AS NUMBER) AS SAMPLE_SIZE, CAST(DECODE(C.DATA_TYPE, 22, 'CHAR_CS', 23, 'CHAR_CS', 30, DECODE(C.COLLATION_TYPE, 63, 'NULL', 'CHAR_CS'), 43, 'NCHAR_CS', 44, 'NCHAR_CS', '') AS VARCHAR2(44)) AS CHARACTER_SET_NAME, CAST(NULL AS NUMBER) AS CHAR_COL_DECL_LENGTH, CAST(DECODE(STAT.GLOBAL_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS GLOBAL_STATS, CAST(DECODE(STAT.USER_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS USER_STATS, CAST(NULL AS VARCHAR2(80)) AS NOTES, CAST(STAT.AVG_LEN AS NUMBER) AS AVG_COL_LEN, CAST(CASE WHEN C.DATA_TYPE IN (22,23,43,44) THEN C.DATA_LENGTH ELSE 0 END AS NUMBER) AS CHAR_LENGTH, CAST(DECODE(C.DATA_TYPE, 22, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 23, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 43, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 44, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), NULL) AS VARCHAR2(1)) AS CHAR_USED, CAST(NULL AS VARCHAR2(3)) AS V80_FMT_IMAGE, CAST(NULL AS VARCHAR2(3)) AS DATA_UPGRADED, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 64), 0, 'NO', 'YES') AS VARCHAR2(3)) AS HIDDEN_COLUMN, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 1), 1, 'YES', 'NO') AS VARCHAR2(3)) AS VIRTUAL_COLUMN, CAST(NULL AS NUMBER) AS SEGMENT_COLUMN_ID, CAST(NULL AS NUMBER) AS INTERNAL_COLUMN_ID, CAST((CASE WHEN STAT.HISTOGRAM_TYPE = 1 THEN 'FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 3 THEN 'TOP-FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 4 THEN 'HYBRID' ELSE NULL END) AS VARCHAR2(15)) AS HISTOGRAM, CAST(C.COLUMN_NAME AS VARCHAR2(4000)) AS QUALIFIED_COL_NAME, CAST('YES' AS VARCHAR2(3)) AS USER_GENERATED, CAST(NULL AS VARCHAR2(3)) AS DEFAULT_ON_NULL, CAST(NULL AS VARCHAR2(3)) AS IDENTITY_COLUMN, CAST(NULL AS VARCHAR2(128)) AS EVALUATION_EDITION, CAST(NULL AS VARCHAR2(128)) AS UNUSABLE_BEFORE, CAST(NULL AS VARCHAR2(128)) AS UNUSABLE_BEGINNING, CAST(NULL AS VARCHAR2(100)) AS COLLATION, CAST(NULL AS NUMBER) AS COLLATED_COLUMN_ID FROM (SELECT TENANT_ID, TABLE_ID, DATABASE_ID, TABLE_NAME, TABLE_TYPE FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE UNION ALL SELECT TENANT_ID, TABLE_ID, DATABASE_ID, TABLE_NAME, TABLE_TYPE FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() AND TABLE_TYPE IN (0,3,5,8,9)) T JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT DB ON DB.TENANT_ID = T.TENANT_ID AND DB.DATABASE_ID = T.DATABASE_ID AND DB.TENANT_ID = EFFECTIVE_TENANT_ID() AND T.DATABASE_ID = USERENV('SCHEMAID') JOIN (SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, DATA_TYPE, COLLATION_TYPE, DATA_SCALE, DATA_LENGTH, DATA_PRECISION, NULLABLE, COLUMN_FLAGS, CUR_DEFAULT_VALUE_V2, IS_HIDDEN FROM SYS.ALL_VIRTUAL_CORE_COLUMN_TABLE UNION ALL SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, DATA_TYPE, COLLATION_TYPE, DATA_SCALE, DATA_LENGTH, DATA_PRECISION, NULLABLE, COLUMN_FLAGS, CUR_DEFAULT_VALUE_V2, IS_HIDDEN FROM SYS.ALL_VIRTUAL_COLUMN_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID()) C ON C.TENANT_ID = T.TENANT_ID AND C.TABLE_ID = T.TABLE_ID AND C.IS_HIDDEN = 0 LEFT JOIN SYS.ALL_VIRTUAL_COLUMN_STAT_REAL_AGENT STAT ON C.TENANT_ID = STAT.TENANT_ID AND C.TABLE_ID = STAT.TABLE_ID AND C.COLUMN_ID = STAT.COLUMN_ID AND STAT.OBJECT_TYPE = 1 AND STAT.TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT /*+NO_USE_NL(T)*/ CAST(T.TABLE_NAME AS VARCHAR2(128)) AS TABLE_NAME, CAST(C.COLUMN_NAME AS VARCHAR2(128)) AS COLUMN_NAME, CAST(DECODE(C.DATA_TYPE, 0, 'VARCHAR2', 1, 'NUMBER', 2, 'NUMBER', 3, 'NUMBER', 4, 'NUMBER', 5, 'NUMBER', 6, 'NUMBER', 7, 'NUMBER', 8, 'NUMBER', 9, 'NUMBER', 10, 'NUMBER', 11, 'BINARY_FLOAT', 12, 'BINARY_DOUBLE', 13, 'NUMBER', 14, 'NUMBER', 15, 'NUMBER', 16, 'NUMBER', 17, 'DATE', 18, 'TIMESTAMP', 19, 'DATE', 20, 'TIME', 21, 'YEAR', 22, 'VARCHAR2', 23, 'CHAR', 24, 'HEX_STRING', 25, 'UNDEFINED', 26, 'UNKNOWN', 27, 'TINYTEXT', 28, 'TEXT', 29, 'MEDIUMTEXT', 30, DECODE(C.COLLATION_TYPE, 63, 'BLOB', 'CLOB'), 31, 'BIT', 32, 'ENUM', 33, 'SET', 34, 'ENUM_INNER', 35, 'SET_INNER', 36, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH TIME ZONE')), 37, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH LOCAL TIME ZONE')), 38, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ')')), 39, 'RAW', 40, CONCAT('INTERVAL YEAR(', CONCAT(C.DATA_SCALE, ') TO MONTH')), 41, CONCAT('INTERVAL DAY(', CONCAT(TRUNC(C.DATA_SCALE/10), CONCAT(') TO SECOND(', CONCAT(MOD(C.DATA_SCALE, 10), ')')))), 42, 'FLOAT', 43, 'NVARCHAR2', 44, 'NCHAR', 45, 'UROWID', 46, '', 'UNDEFINED') AS VARCHAR2(128)) AS DATA_TYPE, CAST(NULL AS VARCHAR2(3)) AS DATA_TYPE_MOD, CAST(NULL AS VARCHAR2(128)) AS DATA_TYPE_OWNER, CAST(CASE WHEN C.DATA_TYPE in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 42) THEN 22 WHEN C.DATA_TYPE = 11 THEN 4 WHEN C.DATA_TYPE = 12 THEN 8 WHEN C.DATA_TYPE in (17, 19) THEN 7 WHEN C.DATA_TYPE in (18, 37, 38) THEN CASE WHEN C.DATA_SCALE = 0 THEN 7 ELSE 11 END WHEN C.DATA_TYPE = 41 THEN 11 WHEN C.DATA_TYPE = 40 THEN 5 WHEN C.DATA_TYPE = 30 THEN 4000 WHEN C.DATA_TYPE = 36 THEN 13 WHEN C.DATA_TYPE IN (0,22,43,46) AND C.DATA_PRECISION = 1 THEN LEAST(32767, C.DATA_LENGTH * DECODE(C.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) WHEN C.DATA_TYPE IN (23,44) AND C.DATA_PRECISION = 1 THEN LEAST(2000, C.DATA_LENGTH * DECODE(C.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) ELSE C.DATA_LENGTH END AS NUMBER) AS DATA_LENGTH, CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,18,19,22,23,27,28,29,30,36,37,38,43,44) THEN NULL ELSE CASE WHEN C.DATA_PRECISION < 0 THEN NULL ELSE C.DATA_PRECISION END END AS NUMBER) AS DATA_PRECISION, CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,19,22,23,27,28,29,30,42,43,44) THEN NULL ELSE CASE WHEN C.DATA_SCALE < -84 THEN NULL ELSE C.DATA_SCALE END END AS NUMBER) AS DATA_SCALE, CAST(DECODE(C.NULLABLE, 0, 'N', DECODE(BITAND(C.COLUMN_FLAGS, 5 * POWER(2, 13)), 5 * POWER(2, 13), 'N', 'Y')) AS VARCHAR2(1)) AS NULLABLE, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 64), 0, C.COLUMN_ID, NULL) AS NUMBER) AS COLUMN_ID, CAST(LENGTHB(C.CUR_DEFAULT_VALUE_V2) AS NUMBER) AS DEFAULT_LENGTH, CAST(C.CUR_DEFAULT_VALUE_V2 AS /* TODO: LONG() */ VARCHAR(32767)) AS DATA_DEFAULT, CAST(STAT.DISTINCT_CNT AS NUMBER) AS NUM_DISTINCT, CAST(STAT.MIN_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS LOW_VALUE, CAST(STAT.MAX_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS HIGH_VALUE, CAST(STAT.DENSITY AS NUMBER) AS DENSITY, CAST(STAT.NULL_CNT AS NUMBER) AS NUM_NULLS, CAST(STAT.BUCKET_CNT AS NUMBER) AS NUM_BUCKETS, CAST(STAT.LAST_ANALYZED AS DATE) AS LAST_ANALYZED, CAST(STAT.SAMPLE_SIZE AS NUMBER) AS SAMPLE_SIZE, CAST(DECODE(C.DATA_TYPE, 22, 'CHAR_CS', 23, 'CHAR_CS', 30, DECODE(C.COLLATION_TYPE, 63, 'NULL', 'CHAR_CS'), 43, 'NCHAR_CS', 44, 'NCHAR_CS', '') AS VARCHAR2(44)) AS CHARACTER_SET_NAME, CAST(NULL AS NUMBER) AS CHAR_COL_DECL_LENGTH, CAST(DECODE(STAT.GLOBAL_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS GLOBAL_STATS, CAST(DECODE(STAT.USER_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS USER_STATS, CAST(NULL AS VARCHAR2(80)) AS NOTES, CAST(STAT.AVG_LEN AS NUMBER) AS AVG_COL_LEN, CAST(CASE WHEN C.DATA_TYPE IN (22,23,43,44) THEN C.DATA_LENGTH ELSE 0 END AS NUMBER) AS CHAR_LENGTH, CAST(DECODE(C.DATA_TYPE, 22, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 23, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 43, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 44, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), NULL) AS VARCHAR2(1)) AS CHAR_USED, CAST(NULL AS VARCHAR2(3)) AS V80_FMT_IMAGE, CAST(NULL AS VARCHAR2(3)) AS DATA_UPGRADED, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 64), 0, 'NO', 'YES') AS VARCHAR2(3)) AS HIDDEN_COLUMN, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 1), 1, 'YES', 'NO') AS VARCHAR2(3)) AS VIRTUAL_COLUMN, CAST(NULL AS NUMBER) AS SEGMENT_COLUMN_ID, CAST(NULL AS NUMBER) AS INTERNAL_COLUMN_ID, CAST((CASE WHEN STAT.HISTOGRAM_TYPE = 1 THEN 'FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 3 THEN 'TOP-FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 4 THEN 'HYBRID' ELSE NULL END) AS VARCHAR2(15)) AS HISTOGRAM, CAST(C.COLUMN_NAME AS VARCHAR2(4000)) AS QUALIFIED_COL_NAME, CAST('YES' AS VARCHAR2(3)) AS USER_GENERATED, CAST(NULL AS VARCHAR2(3)) AS DEFAULT_ON_NULL, CAST(NULL AS VARCHAR2(3)) AS IDENTITY_COLUMN, CAST(NULL AS VARCHAR2(128)) AS EVALUATION_EDITION, CAST(NULL AS VARCHAR2(128)) AS UNUSABLE_BEFORE, CAST(NULL AS VARCHAR2(128)) AS UNUSABLE_BEGINNING, CAST(NULL AS VARCHAR2(100)) AS COLLATION, CAST(NULL AS NUMBER) AS COLLATED_COLUMN_ID FROM (SELECT TENANT_ID, TABLE_ID, DATABASE_ID, TABLE_NAME, TABLE_TYPE FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE UNION ALL SELECT TENANT_ID, TABLE_ID, DATABASE_ID, TABLE_NAME, TABLE_TYPE FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() AND TABLE_TYPE IN (0,1,3,4,5,7,8,9)) T JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT DB ON DB.TENANT_ID = T.TENANT_ID AND DB.DATABASE_ID = T.DATABASE_ID AND DB.TENANT_ID = EFFECTIVE_TENANT_ID() AND T.DATABASE_ID = USERENV('SCHEMAID') JOIN (SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, DATA_TYPE, COLLATION_TYPE, DATA_SCALE, DATA_LENGTH, DATA_PRECISION, NULLABLE, COLUMN_FLAGS, CUR_DEFAULT_VALUE_V2, IS_HIDDEN FROM SYS.ALL_VIRTUAL_CORE_COLUMN_TABLE UNION ALL SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, DATA_TYPE, COLLATION_TYPE, DATA_SCALE, DATA_LENGTH, DATA_PRECISION, NULLABLE, COLUMN_FLAGS, CUR_DEFAULT_VALUE_V2, IS_HIDDEN FROM SYS.ALL_VIRTUAL_COLUMN_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID()) C ON C.TENANT_ID = T.TENANT_ID AND C.TABLE_ID = T.TABLE_ID AND C.IS_HIDDEN = 0 LEFT JOIN SYS.ALL_VIRTUAL_COLUMN_STAT_REAL_AGENT STAT ON C.TENANT_ID = STAT.TENANT_ID AND C.TABLE_ID = STAT.TABLE_ID AND C.COLUMN_ID = STAT.COLUMN_ID AND STAT.OBJECT_TYPE = 1 AND STAT.TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema.h b/src/share/inner_table/ob_inner_table_schema.h index 0483d2a5e1..e0afade665 100644 --- a/src/share/inner_table/ob_inner_table_schema.h +++ b/src/share/inner_table/ob_inner_table_schema.h @@ -588,12 +588,7 @@ public: static int all_virtual_io_quota_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_server_compaction_event_history_schema(share::schema::ObTableSchema &table_schema); static int session_variables_schema(share::schema::ObTableSchema &table_schema); - static int table_privileges_schema(share::schema::ObTableSchema &table_schema); - static int user_privileges_schema(share::schema::ObTableSchema &table_schema); - static int schema_privileges_schema(share::schema::ObTableSchema &table_schema); - static int table_constraints_schema(share::schema::ObTableSchema &table_schema); static int global_status_schema(share::schema::ObTableSchema &table_schema); - static int partitions_schema(share::schema::ObTableSchema &table_schema); static int session_status_schema(share::schema::ObTableSchema &table_schema); static int user_schema(share::schema::ObTableSchema &table_schema); static int db_schema(share::schema::ObTableSchema &table_schema); @@ -604,7 +599,6 @@ public: static int all_virtual_tenant_memstore_allocator_info_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_table_mgr_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_freeze_info_schema(share::schema::ObTableSchema &table_schema); - static int parameters_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_bad_block_table_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_px_worker_stat_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_auto_increment_schema(share::schema::ObTableSchema &table_schema); @@ -707,7 +701,6 @@ public: static int all_virtual_backup_info_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_error_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_id_service_schema(share::schema::ObTableSchema &table_schema); - static int referential_constraints_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_object_type_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_sql_plan_monitor_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_sql_monitor_statname_schema(share::schema::ObTableSchema &table_schema); @@ -734,7 +727,6 @@ public: static int all_virtual_column_stat_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_histogram_stat_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_tenant_memory_info_schema(share::schema::ObTableSchema &table_schema); - static int triggers_schema(share::schema::ObTableSchema &table_schema); static int tenant_virtual_show_create_trigger_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_px_target_monitor_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_monitor_modified_schema(share::schema::ObTableSchema &table_schema); @@ -748,7 +740,6 @@ public: static int all_virtual_log_archive_history_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_log_archive_piece_files_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_ls_log_archive_progress_schema(share::schema::ObTableSchema &table_schema); - static int check_constraints_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_backup_storage_info_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_ls_status_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_ls_schema(share::schema::ObTableSchema &table_schema); @@ -1306,6 +1297,15 @@ public: static int cdb_ob_database_privilege_schema(share::schema::ObTableSchema &table_schema); static int dba_ob_user_defined_rules_schema(share::schema::ObTableSchema &table_schema); static int dba_ob_cluster_event_history_schema(share::schema::ObTableSchema &table_schema); + static int parameters_schema(share::schema::ObTableSchema &table_schema); + static int table_privileges_schema(share::schema::ObTableSchema &table_schema); + static int user_privileges_schema(share::schema::ObTableSchema &table_schema); + static int schema_privileges_schema(share::schema::ObTableSchema &table_schema); + static int check_constraints_schema(share::schema::ObTableSchema &table_schema); + static int referential_constraints_schema(share::schema::ObTableSchema &table_schema); + static int table_constraints_schema(share::schema::ObTableSchema &table_schema); + static int triggers_schema(share::schema::ObTableSchema &table_schema); + static int partitions_schema(share::schema::ObTableSchema &table_schema); static int dba_synonyms_schema(share::schema::ObTableSchema &table_schema); static int dba_objects_ora_schema(share::schema::ObTableSchema &table_schema); static int all_objects_schema(share::schema::ObTableSchema &table_schema); @@ -2516,12 +2516,7 @@ const schema_create_func virtual_table_schema_creators [] = { ObInnerTableSchema::all_virtual_io_quota_schema, ObInnerTableSchema::all_virtual_server_compaction_event_history_schema, ObInnerTableSchema::session_variables_schema, - ObInnerTableSchema::table_privileges_schema, - ObInnerTableSchema::user_privileges_schema, - ObInnerTableSchema::schema_privileges_schema, - ObInnerTableSchema::table_constraints_schema, ObInnerTableSchema::global_status_schema, - ObInnerTableSchema::partitions_schema, ObInnerTableSchema::session_status_schema, ObInnerTableSchema::user_schema, ObInnerTableSchema::db_schema, @@ -2532,7 +2527,6 @@ const schema_create_func virtual_table_schema_creators [] = { ObInnerTableSchema::all_virtual_tenant_memstore_allocator_info_schema, ObInnerTableSchema::all_virtual_table_mgr_schema, ObInnerTableSchema::all_virtual_freeze_info_schema, - ObInnerTableSchema::parameters_schema, ObInnerTableSchema::all_virtual_bad_block_table_schema, ObInnerTableSchema::all_virtual_px_worker_stat_schema, ObInnerTableSchema::all_virtual_auto_increment_schema, @@ -2635,7 +2629,6 @@ const schema_create_func virtual_table_schema_creators [] = { ObInnerTableSchema::all_virtual_backup_info_schema, ObInnerTableSchema::all_virtual_error_schema, ObInnerTableSchema::all_virtual_id_service_schema, - ObInnerTableSchema::referential_constraints_schema, ObInnerTableSchema::all_virtual_object_type_schema, ObInnerTableSchema::all_virtual_sql_plan_monitor_schema, ObInnerTableSchema::all_virtual_sql_monitor_statname_schema, @@ -2662,7 +2655,6 @@ const schema_create_func virtual_table_schema_creators [] = { ObInnerTableSchema::all_virtual_column_stat_schema, ObInnerTableSchema::all_virtual_histogram_stat_schema, ObInnerTableSchema::all_virtual_tenant_memory_info_schema, - ObInnerTableSchema::triggers_schema, ObInnerTableSchema::tenant_virtual_show_create_trigger_schema, ObInnerTableSchema::all_virtual_px_target_monitor_schema, ObInnerTableSchema::all_virtual_monitor_modified_schema, @@ -2676,7 +2668,6 @@ const schema_create_func virtual_table_schema_creators [] = { ObInnerTableSchema::all_virtual_log_archive_history_schema, ObInnerTableSchema::all_virtual_log_archive_piece_files_schema, ObInnerTableSchema::all_virtual_ls_log_archive_progress_schema, - ObInnerTableSchema::check_constraints_schema, ObInnerTableSchema::all_virtual_backup_storage_info_schema, ObInnerTableSchema::all_virtual_ls_status_schema, ObInnerTableSchema::all_virtual_ls_schema, @@ -3254,6 +3245,15 @@ const schema_create_func sys_view_schema_creators [] = { ObInnerTableSchema::cdb_ob_database_privilege_schema, ObInnerTableSchema::dba_ob_user_defined_rules_schema, ObInnerTableSchema::dba_ob_cluster_event_history_schema, + ObInnerTableSchema::parameters_schema, + ObInnerTableSchema::table_privileges_schema, + ObInnerTableSchema::user_privileges_schema, + ObInnerTableSchema::schema_privileges_schema, + ObInnerTableSchema::check_constraints_schema, + ObInnerTableSchema::referential_constraints_schema, + ObInnerTableSchema::table_constraints_schema, + ObInnerTableSchema::triggers_schema, + ObInnerTableSchema::partitions_schema, ObInnerTableSchema::dba_synonyms_schema, ObInnerTableSchema::dba_objects_ora_schema, ObInnerTableSchema::all_objects_schema, @@ -3969,12 +3969,7 @@ const uint64_t tenant_space_tables [] = { OB_ALL_VIRTUAL_TABLET_COMPACTION_HISTORY_TID, OB_ALL_VIRTUAL_SERVER_COMPACTION_EVENT_HISTORY_TID, OB_SESSION_VARIABLES_TID, - OB_TABLE_PRIVILEGES_TID, - OB_USER_PRIVILEGES_TID, - OB_SCHEMA_PRIVILEGES_TID, - OB_TABLE_CONSTRAINTS_TID, OB_GLOBAL_STATUS_TID, - OB_PARTITIONS_TID, OB_SESSION_STATUS_TID, OB_USER_TID, OB_DB_TID, @@ -3983,7 +3978,6 @@ const uint64_t tenant_space_tables [] = { OB_TENANT_VIRTUAL_CHARSET_TID, OB_ALL_VIRTUAL_TABLE_MGR_TID, OB_ALL_VIRTUAL_FREEZE_INFO_TID, - OB_PARAMETERS_TID, OB_ALL_VIRTUAL_PX_WORKER_STAT_TID, OB_ALL_VIRTUAL_TABLE_TID, OB_ALL_VIRTUAL_USER_TID, @@ -3997,7 +3991,6 @@ const uint64_t tenant_space_tables [] = { OB_ALL_VIRTUAL_SQL_WORKAREA_HISTOGRAM_TID, OB_ALL_VIRTUAL_SQL_WORKAREA_MEMORY_INFO_TID, OB_ALL_VIRTUAL_BACKUP_INFO_TID, - OB_REFERENTIAL_CONSTRAINTS_TID, OB_ALL_VIRTUAL_SQL_PLAN_MONITOR_TID, OB_ALL_VIRTUAL_SQL_PLAN_MONITOR_ALL_VIRTUAL_SQL_PLAN_MONITOR_I1_TID, OB_ALL_VIRTUAL_SQL_MONITOR_STATNAME_TID, @@ -4006,14 +3999,12 @@ const uint64_t tenant_space_tables [] = { OB_TENANT_VIRTUAL_OBJECT_DEFINITION_TID, OB_ALL_VIRTUAL_DEADLOCK_EVENT_HISTORY_TID, OB_ALL_VIRTUAL_TENANT_MEMORY_INFO_TID, - OB_TRIGGERS_TID, OB_TENANT_VIRTUAL_SHOW_CREATE_TRIGGER_TID, OB_ALL_VIRTUAL_PX_TARGET_MONITOR_TID, OB_ALL_VIRTUAL_LOG_ARCHIVE_PROGRESS_TID, OB_ALL_VIRTUAL_LOG_ARCHIVE_HISTORY_TID, OB_ALL_VIRTUAL_LOG_ARCHIVE_PIECE_FILES_TID, OB_ALL_VIRTUAL_LS_LOG_ARCHIVE_PROGRESS_TID, - OB_CHECK_CONSTRAINTS_TID, OB_ALL_VIRTUAL_BACKUP_STORAGE_INFO_TID, OB_ALL_VIRTUAL_LS_STATUS_TID, OB_ALL_VIRTUAL_LS_META_TABLE_TID, @@ -4456,6 +4447,15 @@ const uint64_t tenant_space_tables [] = { OB_DBA_OB_USERS_TID, OB_DBA_OB_DATABASE_PRIVILEGE_TID, OB_DBA_OB_USER_DEFINED_RULES_TID, + OB_PARAMETERS_TID, + OB_TABLE_PRIVILEGES_TID, + OB_USER_PRIVILEGES_TID, + OB_SCHEMA_PRIVILEGES_TID, + OB_CHECK_CONSTRAINTS_TID, + OB_REFERENTIAL_CONSTRAINTS_TID, + OB_TABLE_CONSTRAINTS_TID, + OB_TRIGGERS_TID, + OB_PARTITIONS_TID, OB_DBA_SYNONYMS_TID, OB_DBA_OBJECTS_ORA_TID, OB_ALL_OBJECTS_TID, @@ -5775,12 +5775,7 @@ const char* const tenant_space_table_names [] = { OB_ALL_VIRTUAL_TABLET_COMPACTION_HISTORY_TNAME, OB_ALL_VIRTUAL_SERVER_COMPACTION_EVENT_HISTORY_TNAME, OB_SESSION_VARIABLES_TNAME, - OB_TABLE_PRIVILEGES_TNAME, - OB_USER_PRIVILEGES_TNAME, - OB_SCHEMA_PRIVILEGES_TNAME, - OB_TABLE_CONSTRAINTS_TNAME, OB_GLOBAL_STATUS_TNAME, - OB_PARTITIONS_TNAME, OB_SESSION_STATUS_TNAME, OB_USER_TNAME, OB_DB_TNAME, @@ -5789,7 +5784,6 @@ const char* const tenant_space_table_names [] = { OB_TENANT_VIRTUAL_CHARSET_TNAME, OB_ALL_VIRTUAL_TABLE_MGR_TNAME, OB_ALL_VIRTUAL_FREEZE_INFO_TNAME, - OB_PARAMETERS_TNAME, OB_ALL_VIRTUAL_PX_WORKER_STAT_TNAME, OB_ALL_VIRTUAL_TABLE_TNAME, OB_ALL_VIRTUAL_USER_TNAME, @@ -5803,7 +5797,6 @@ const char* const tenant_space_table_names [] = { OB_ALL_VIRTUAL_SQL_WORKAREA_HISTOGRAM_TNAME, OB_ALL_VIRTUAL_SQL_WORKAREA_MEMORY_INFO_TNAME, OB_ALL_VIRTUAL_BACKUP_INFO_TNAME, - OB_REFERENTIAL_CONSTRAINTS_TNAME, OB_ALL_VIRTUAL_SQL_PLAN_MONITOR_TNAME, OB_ALL_VIRTUAL_SQL_PLAN_MONITOR_ALL_VIRTUAL_SQL_PLAN_MONITOR_I1_TNAME, OB_ALL_VIRTUAL_SQL_MONITOR_STATNAME_TNAME, @@ -5812,14 +5805,12 @@ const char* const tenant_space_table_names [] = { OB_TENANT_VIRTUAL_OBJECT_DEFINITION_TNAME, OB_ALL_VIRTUAL_DEADLOCK_EVENT_HISTORY_TNAME, OB_ALL_VIRTUAL_TENANT_MEMORY_INFO_TNAME, - OB_TRIGGERS_TNAME, OB_TENANT_VIRTUAL_SHOW_CREATE_TRIGGER_TNAME, OB_ALL_VIRTUAL_PX_TARGET_MONITOR_TNAME, OB_ALL_VIRTUAL_LOG_ARCHIVE_PROGRESS_TNAME, OB_ALL_VIRTUAL_LOG_ARCHIVE_HISTORY_TNAME, OB_ALL_VIRTUAL_LOG_ARCHIVE_PIECE_FILES_TNAME, OB_ALL_VIRTUAL_LS_LOG_ARCHIVE_PROGRESS_TNAME, - OB_CHECK_CONSTRAINTS_TNAME, OB_ALL_VIRTUAL_BACKUP_STORAGE_INFO_TNAME, OB_ALL_VIRTUAL_LS_STATUS_TNAME, OB_ALL_VIRTUAL_LS_META_TABLE_TNAME, @@ -6262,6 +6253,15 @@ const char* const tenant_space_table_names [] = { OB_DBA_OB_USERS_TNAME, OB_DBA_OB_DATABASE_PRIVILEGE_TNAME, OB_DBA_OB_USER_DEFINED_RULES_TNAME, + OB_PARAMETERS_TNAME, + OB_TABLE_PRIVILEGES_TNAME, + OB_USER_PRIVILEGES_TNAME, + OB_SCHEMA_PRIVILEGES_TNAME, + OB_CHECK_CONSTRAINTS_TNAME, + OB_REFERENTIAL_CONSTRAINTS_TNAME, + OB_TABLE_CONSTRAINTS_TNAME, + OB_TRIGGERS_TNAME, + OB_PARTITIONS_TNAME, OB_DBA_SYNONYMS_TNAME, OB_DBA_OBJECTS_ORA_TNAME, OB_ALL_OBJECTS_TNAME, @@ -9275,8 +9275,8 @@ static inline int get_sys_table_lob_aux_schema(const uint64_t tid, const int64_t OB_CORE_TABLE_COUNT = 4; const int64_t OB_SYS_TABLE_COUNT = 216; -const int64_t OB_VIRTUAL_TABLE_COUNT = 555; -const int64_t OB_SYS_VIEW_COUNT = 611; +const int64_t OB_VIRTUAL_TABLE_COUNT = 546; +const int64_t OB_SYS_VIEW_COUNT = 620; const int64_t OB_SYS_TENANT_TABLE_COUNT = 1387; const int64_t OB_CORE_SCHEMA_VERSION = 1; const int64_t OB_BOOTSTRAP_SCHEMA_VERSION = 1390; diff --git a/src/share/inner_table/ob_inner_table_schema_constants.h b/src/share/inner_table/ob_inner_table_schema_constants.h index 169d4176b6..a893994982 100644 --- a/src/share/inner_table/ob_inner_table_schema_constants.h +++ b/src/share/inner_table/ob_inner_table_schema_constants.h @@ -334,12 +334,7 @@ const uint64_t OB_ALL_VIRTUAL_IO_BENCHMARK_TID = 11114; // "__all_virtual_io_ben const uint64_t OB_ALL_VIRTUAL_IO_QUOTA_TID = 11115; // "__all_virtual_io_quota" const uint64_t OB_ALL_VIRTUAL_SERVER_COMPACTION_EVENT_HISTORY_TID = 11116; // "__all_virtual_server_compaction_event_history" const uint64_t OB_SESSION_VARIABLES_TID = 12001; // "SESSION_VARIABLES" -const uint64_t OB_TABLE_PRIVILEGES_TID = 12002; // "TABLE_PRIVILEGES" -const uint64_t OB_USER_PRIVILEGES_TID = 12003; // "USER_PRIVILEGES" -const uint64_t OB_SCHEMA_PRIVILEGES_TID = 12004; // "SCHEMA_PRIVILEGES" -const uint64_t OB_TABLE_CONSTRAINTS_TID = 12005; // "TABLE_CONSTRAINTS" const uint64_t OB_GLOBAL_STATUS_TID = 12006; // "GLOBAL_STATUS" -const uint64_t OB_PARTITIONS_TID = 12007; // "PARTITIONS" const uint64_t OB_SESSION_STATUS_TID = 12008; // "SESSION_STATUS" const uint64_t OB_USER_TID = 12009; // "user" const uint64_t OB_DB_TID = 12010; // "db" @@ -350,7 +345,6 @@ const uint64_t OB_TENANT_VIRTUAL_CHARSET_TID = 12032; // "__tenant_virtual_chars const uint64_t OB_ALL_VIRTUAL_TENANT_MEMSTORE_ALLOCATOR_INFO_TID = 12033; // "__all_virtual_tenant_memstore_allocator_info" const uint64_t OB_ALL_VIRTUAL_TABLE_MGR_TID = 12034; // "__all_virtual_table_mgr" const uint64_t OB_ALL_VIRTUAL_FREEZE_INFO_TID = 12036; // "__all_virtual_freeze_info" -const uint64_t OB_PARAMETERS_TID = 12037; // "PARAMETERS" const uint64_t OB_ALL_VIRTUAL_BAD_BLOCK_TABLE_TID = 12038; // "__all_virtual_bad_block_table" const uint64_t OB_ALL_VIRTUAL_PX_WORKER_STAT_TID = 12039; // "__all_virtual_px_worker_stat" const uint64_t OB_ALL_VIRTUAL_AUTO_INCREMENT_TID = 12055; // "__all_virtual_auto_increment" @@ -453,7 +447,6 @@ const uint64_t OB_ALL_VIRTUAL_OBJAUTH_HISTORY_TID = 12166; // "__all_virtual_obj const uint64_t OB_ALL_VIRTUAL_BACKUP_INFO_TID = 12167; // "__all_virtual_backup_info" const uint64_t OB_ALL_VIRTUAL_ERROR_TID = 12175; // "__all_virtual_error" const uint64_t OB_ALL_VIRTUAL_ID_SERVICE_TID = 12176; // "__all_virtual_id_service" -const uint64_t OB_REFERENTIAL_CONSTRAINTS_TID = 12177; // "REFERENTIAL_CONSTRAINTS" const uint64_t OB_ALL_VIRTUAL_OBJECT_TYPE_TID = 12182; // "__all_virtual_object_type" const uint64_t OB_ALL_VIRTUAL_SQL_PLAN_MONITOR_TID = 12185; // "__all_virtual_sql_plan_monitor" const uint64_t OB_ALL_VIRTUAL_SQL_MONITOR_STATNAME_TID = 12186; // "__all_virtual_sql_monitor_statname" @@ -480,7 +473,6 @@ const uint64_t OB_ALL_VIRTUAL_TABLE_STAT_TID = 12217; // "__all_virtual_table_st const uint64_t OB_ALL_VIRTUAL_COLUMN_STAT_TID = 12218; // "__all_virtual_column_stat" const uint64_t OB_ALL_VIRTUAL_HISTOGRAM_STAT_TID = 12219; // "__all_virtual_histogram_stat" const uint64_t OB_ALL_VIRTUAL_TENANT_MEMORY_INFO_TID = 12220; // "__all_virtual_tenant_memory_info" -const uint64_t OB_TRIGGERS_TID = 12221; // "TRIGGERS" const uint64_t OB_TENANT_VIRTUAL_SHOW_CREATE_TRIGGER_TID = 12222; // "__tenant_virtual_show_create_trigger" const uint64_t OB_ALL_VIRTUAL_PX_TARGET_MONITOR_TID = 12223; // "__all_virtual_px_target_monitor" const uint64_t OB_ALL_VIRTUAL_MONITOR_MODIFIED_TID = 12224; // "__all_virtual_monitor_modified" @@ -494,7 +486,6 @@ const uint64_t OB_ALL_VIRTUAL_LOG_ARCHIVE_PROGRESS_TID = 12231; // "__all_virtua const uint64_t OB_ALL_VIRTUAL_LOG_ARCHIVE_HISTORY_TID = 12232; // "__all_virtual_log_archive_history" const uint64_t OB_ALL_VIRTUAL_LOG_ARCHIVE_PIECE_FILES_TID = 12233; // "__all_virtual_log_archive_piece_files" const uint64_t OB_ALL_VIRTUAL_LS_LOG_ARCHIVE_PROGRESS_TID = 12234; // "__all_virtual_ls_log_archive_progress" -const uint64_t OB_CHECK_CONSTRAINTS_TID = 12235; // "CHECK_CONSTRAINTS" const uint64_t OB_ALL_VIRTUAL_BACKUP_STORAGE_INFO_TID = 12236; // "__all_virtual_backup_storage_info" const uint64_t OB_ALL_VIRTUAL_LS_STATUS_TID = 12237; // "__all_virtual_ls_status" const uint64_t OB_ALL_VIRTUAL_LS_TID = 12238; // "__all_virtual_ls" @@ -1052,6 +1043,15 @@ const uint64_t OB_DBA_OB_DATABASE_PRIVILEGE_TID = 21338; // "DBA_OB_DATABASE_PRI const uint64_t OB_CDB_OB_DATABASE_PRIVILEGE_TID = 21339; // "CDB_OB_DATABASE_PRIVILEGE" const uint64_t OB_DBA_OB_USER_DEFINED_RULES_TID = 21340; // "DBA_OB_USER_DEFINED_RULES" const uint64_t OB_DBA_OB_CLUSTER_EVENT_HISTORY_TID = 21345; // "DBA_OB_CLUSTER_EVENT_HISTORY" +const uint64_t OB_PARAMETERS_TID = 21346; // "PARAMETERS" +const uint64_t OB_TABLE_PRIVILEGES_TID = 21347; // "TABLE_PRIVILEGES" +const uint64_t OB_USER_PRIVILEGES_TID = 21348; // "USER_PRIVILEGES" +const uint64_t OB_SCHEMA_PRIVILEGES_TID = 21349; // "SCHEMA_PRIVILEGES" +const uint64_t OB_CHECK_CONSTRAINTS_TID = 21350; // "CHECK_CONSTRAINTS" +const uint64_t OB_REFERENTIAL_CONSTRAINTS_TID = 21351; // "REFERENTIAL_CONSTRAINTS" +const uint64_t OB_TABLE_CONSTRAINTS_TID = 21352; // "TABLE_CONSTRAINTS" +const uint64_t OB_TRIGGERS_TID = 21355; // "TRIGGERS" +const uint64_t OB_PARTITIONS_TID = 21356; // "PARTITIONS" const uint64_t OB_DBA_SYNONYMS_TID = 25001; // "DBA_SYNONYMS" const uint64_t OB_DBA_OBJECTS_ORA_TID = 25002; // "DBA_OBJECTS_ORA" const uint64_t OB_ALL_OBJECTS_TID = 25003; // "ALL_OBJECTS" @@ -2246,12 +2246,7 @@ const char *const OB_ALL_VIRTUAL_IO_BENCHMARK_TNAME = "__all_virtual_io_benchmar const char *const OB_ALL_VIRTUAL_IO_QUOTA_TNAME = "__all_virtual_io_quota"; const char *const OB_ALL_VIRTUAL_SERVER_COMPACTION_EVENT_HISTORY_TNAME = "__all_virtual_server_compaction_event_history"; const char *const OB_SESSION_VARIABLES_TNAME = "SESSION_VARIABLES"; -const char *const OB_TABLE_PRIVILEGES_TNAME = "TABLE_PRIVILEGES"; -const char *const OB_USER_PRIVILEGES_TNAME = "USER_PRIVILEGES"; -const char *const OB_SCHEMA_PRIVILEGES_TNAME = "SCHEMA_PRIVILEGES"; -const char *const OB_TABLE_CONSTRAINTS_TNAME = "TABLE_CONSTRAINTS"; const char *const OB_GLOBAL_STATUS_TNAME = "GLOBAL_STATUS"; -const char *const OB_PARTITIONS_TNAME = "PARTITIONS"; const char *const OB_SESSION_STATUS_TNAME = "SESSION_STATUS"; const char *const OB_USER_TNAME = "user"; const char *const OB_DB_TNAME = "db"; @@ -2262,7 +2257,6 @@ const char *const OB_TENANT_VIRTUAL_CHARSET_TNAME = "__tenant_virtual_charset"; const char *const OB_ALL_VIRTUAL_TENANT_MEMSTORE_ALLOCATOR_INFO_TNAME = "__all_virtual_tenant_memstore_allocator_info"; const char *const OB_ALL_VIRTUAL_TABLE_MGR_TNAME = "__all_virtual_table_mgr"; const char *const OB_ALL_VIRTUAL_FREEZE_INFO_TNAME = "__all_virtual_freeze_info"; -const char *const OB_PARAMETERS_TNAME = "PARAMETERS"; const char *const OB_ALL_VIRTUAL_BAD_BLOCK_TABLE_TNAME = "__all_virtual_bad_block_table"; const char *const OB_ALL_VIRTUAL_PX_WORKER_STAT_TNAME = "__all_virtual_px_worker_stat"; const char *const OB_ALL_VIRTUAL_AUTO_INCREMENT_TNAME = "__all_virtual_auto_increment"; @@ -2365,7 +2359,6 @@ const char *const OB_ALL_VIRTUAL_OBJAUTH_HISTORY_TNAME = "__all_virtual_objauth_ const char *const OB_ALL_VIRTUAL_BACKUP_INFO_TNAME = "__all_virtual_backup_info"; const char *const OB_ALL_VIRTUAL_ERROR_TNAME = "__all_virtual_error"; const char *const OB_ALL_VIRTUAL_ID_SERVICE_TNAME = "__all_virtual_id_service"; -const char *const OB_REFERENTIAL_CONSTRAINTS_TNAME = "REFERENTIAL_CONSTRAINTS"; const char *const OB_ALL_VIRTUAL_OBJECT_TYPE_TNAME = "__all_virtual_object_type"; const char *const OB_ALL_VIRTUAL_SQL_PLAN_MONITOR_TNAME = "__all_virtual_sql_plan_monitor"; const char *const OB_ALL_VIRTUAL_SQL_MONITOR_STATNAME_TNAME = "__all_virtual_sql_monitor_statname"; @@ -2392,7 +2385,6 @@ const char *const OB_ALL_VIRTUAL_TABLE_STAT_TNAME = "__all_virtual_table_stat"; const char *const OB_ALL_VIRTUAL_COLUMN_STAT_TNAME = "__all_virtual_column_stat"; const char *const OB_ALL_VIRTUAL_HISTOGRAM_STAT_TNAME = "__all_virtual_histogram_stat"; const char *const OB_ALL_VIRTUAL_TENANT_MEMORY_INFO_TNAME = "__all_virtual_tenant_memory_info"; -const char *const OB_TRIGGERS_TNAME = "TRIGGERS"; const char *const OB_TENANT_VIRTUAL_SHOW_CREATE_TRIGGER_TNAME = "__tenant_virtual_show_create_trigger"; const char *const OB_ALL_VIRTUAL_PX_TARGET_MONITOR_TNAME = "__all_virtual_px_target_monitor"; const char *const OB_ALL_VIRTUAL_MONITOR_MODIFIED_TNAME = "__all_virtual_monitor_modified"; @@ -2406,7 +2398,6 @@ const char *const OB_ALL_VIRTUAL_LOG_ARCHIVE_PROGRESS_TNAME = "__all_virtual_log const char *const OB_ALL_VIRTUAL_LOG_ARCHIVE_HISTORY_TNAME = "__all_virtual_log_archive_history"; const char *const OB_ALL_VIRTUAL_LOG_ARCHIVE_PIECE_FILES_TNAME = "__all_virtual_log_archive_piece_files"; const char *const OB_ALL_VIRTUAL_LS_LOG_ARCHIVE_PROGRESS_TNAME = "__all_virtual_ls_log_archive_progress"; -const char *const OB_CHECK_CONSTRAINTS_TNAME = "CHECK_CONSTRAINTS"; const char *const OB_ALL_VIRTUAL_BACKUP_STORAGE_INFO_TNAME = "__all_virtual_backup_storage_info"; const char *const OB_ALL_VIRTUAL_LS_STATUS_TNAME = "__all_virtual_ls_status"; const char *const OB_ALL_VIRTUAL_LS_TNAME = "__all_virtual_ls"; @@ -2964,6 +2955,15 @@ const char *const OB_DBA_OB_DATABASE_PRIVILEGE_TNAME = "DBA_OB_DATABASE_PRIVILEG const char *const OB_CDB_OB_DATABASE_PRIVILEGE_TNAME = "CDB_OB_DATABASE_PRIVILEGE"; const char *const OB_DBA_OB_USER_DEFINED_RULES_TNAME = "DBA_OB_USER_DEFINED_RULES"; const char *const OB_DBA_OB_CLUSTER_EVENT_HISTORY_TNAME = "DBA_OB_CLUSTER_EVENT_HISTORY"; +const char *const OB_PARAMETERS_TNAME = "PARAMETERS"; +const char *const OB_TABLE_PRIVILEGES_TNAME = "TABLE_PRIVILEGES"; +const char *const OB_USER_PRIVILEGES_TNAME = "USER_PRIVILEGES"; +const char *const OB_SCHEMA_PRIVILEGES_TNAME = "SCHEMA_PRIVILEGES"; +const char *const OB_CHECK_CONSTRAINTS_TNAME = "CHECK_CONSTRAINTS"; +const char *const OB_REFERENTIAL_CONSTRAINTS_TNAME = "REFERENTIAL_CONSTRAINTS"; +const char *const OB_TABLE_CONSTRAINTS_TNAME = "TABLE_CONSTRAINTS"; +const char *const OB_TRIGGERS_TNAME = "TRIGGERS"; +const char *const OB_PARTITIONS_TNAME = "PARTITIONS"; const char *const OB_DBA_SYNONYMS_TNAME = "DBA_SYNONYMS"; const char *const OB_DBA_OBJECTS_ORA_TNAME = "DBA_OBJECTS"; const char *const OB_ALL_OBJECTS_TNAME = "ALL_OBJECTS"; diff --git a/src/share/inner_table/ob_inner_table_schema_def.py b/src/share/inner_table/ob_inner_table_schema_def.py index 1b9ede8b66..bc4c164623 100644 --- a/src/share/inner_table/ob_inner_table_schema_def.py +++ b/src/share/inner_table/ob_inner_table_schema_def.py @@ -264,7 +264,8 @@ all_table_def = dict( ('transition_point', 'varchar:OB_MAX_PARTITION_EXPR_LENGTH', 'true'), ('b_transition_point', 'varchar:OB_MAX_B_HIGH_BOUND_VAL_LENGTH', 'true'), ('interval_range', 'varchar:OB_MAX_PARTITION_EXPR_LENGTH', 'true'), - ('b_interval_range', 'varchar:OB_MAX_B_HIGH_BOUND_VAL_LENGTH', 'true') + ('b_interval_range', 'varchar:OB_MAX_B_HIGH_BOUND_VAL_LENGTH', 'true'), + ('object_status', 'int', 'false', '1') ], ) @@ -1422,6 +1423,7 @@ all_synonym_def = dict( ('synonym_name', 'varchar:OB_MAX_SYNONYM_NAME_LENGTH', 'false', ''), ('object_name', 'varchar:OB_MAX_SYNONYM_NAME_LENGTH', 'false', ''), ('object_database_id', 'int'), + ('status', 'int', 'false', '1'), ], ) @@ -7802,84 +7804,32 @@ def_table_schema( ], ) -def_table_schema( - owner = 'xinqi.zlm', - database_id = 'OB_INFORMATION_SCHEMA_ID', - table_name = 'TABLE_PRIVILEGES', - table_id = '12002', - table_type = 'VIRTUAL_TABLE', - gm_columns = [], - rowkey_columns = [], - in_tenant_space = True, +# 12002 virtual table "TABLE_PRIVILEGES" not used anymore +# 12003 virtual table "USER_PRIVILEGES" not used anymore +# 12004 virtual table "SCHEMA_PRIVILEGES" not used anymore - normal_columns = [ - ('GRANTEE', 'varchar:OB_MAX_INFOSCHEMA_GRANTEE_LEN', 'false', ''), - ('TABLE_CATALOG', 'varchar:MAX_TABLE_CATALOG_LENGTH', 'false', ''), - ('TABLE_SCHEMA', 'varchar:OB_MAX_DATABASE_NAME_LENGTH', 'false', ''), - ('TABLE_NAME', 'varchar:OB_MAX_INFOSCHEMA_TABLE_NAME_LENGTH', 'false', ''), - ('PRIVILEGE_TYPE', 'varchar:MAX_INFOSCHEMA_COLUMN_PRIVILEGE_LENGTH', 'false', ''), - ('IS_GRANTABLE', 'varchar:MAX_COLUMN_YES_NO_LENGTH', 'false', ''), - ], -) - -def_table_schema( - owner = 'xinqi.zlm', - database_id = 'OB_INFORMATION_SCHEMA_ID', - table_name = 'USER_PRIVILEGES', - table_id = '12003', - table_type = 'VIRTUAL_TABLE', - gm_columns = [], - rowkey_columns = [], - in_tenant_space = True, - - normal_columns = [ - ('GRANTEE', 'varchar:OB_MAX_INFOSCHEMA_GRANTEE_LEN', 'false', ''), - ('TABLE_CATALOG', 'varchar:MAX_TABLE_CATALOG_LENGTH', 'false', ''), - ('PRIVILEGE_TYPE', 'varchar:MAX_INFOSCHEMA_COLUMN_PRIVILEGE_LENGTH', 'false', ''), - ('IS_GRANTABLE', 'varchar:MAX_COLUMN_YES_NO_LENGTH', 'false', ''), - ], -) - -def_table_schema( - owner = 'xinqi.zlm', - database_id = 'OB_INFORMATION_SCHEMA_ID', - table_name = 'SCHEMA_PRIVILEGES', - table_id = '12004', - table_type = 'VIRTUAL_TABLE', - gm_columns = [], - rowkey_columns = [], - in_tenant_space = True, - - normal_columns = [ - ('GRANTEE', 'varchar:OB_MAX_INFOSCHEMA_GRANTEE_LEN', 'false', ''), - ('TABLE_CATALOG', 'varchar:MAX_TABLE_CATALOG_LENGTH', 'false', ''), - ('TABLE_SCHEMA', 'varchar:OB_MAX_DATABASE_NAME_LENGTH', 'false', ''), - ('PRIVILEGE_TYPE', 'varchar:MAX_INFOSCHEMA_COLUMN_PRIVILEGE_LENGTH', 'false', ''), - ('IS_GRANTABLE', 'varchar:MAX_COLUMN_YES_NO_LENGTH', 'false', ''), - ], -) - -def_table_schema( - owner = 'xiaofeng.lby', - tablegroup_id = 'OB_INVALID_ID', - database_id = 'OB_INFORMATION_SCHEMA_ID', - table_name = 'TABLE_CONSTRAINTS', - table_id = '12005', - table_type = 'VIRTUAL_TABLE', - gm_columns = [], - rowkey_columns = [], - in_tenant_space = True, - - normal_columns = [ - ('CONSTRAINT_CATALOG', 'varchar:MAX_TABLE_CATALOG_LENGTH', 'false', ''), - ('CONSTRAINT_SCHEMA', 'varchar:OB_MAX_DATABASE_NAME_LENGTH', 'false', ''), - ('CONSTRAINT_NAME', 'varchar:OB_MAX_COLUMN_NAME_LENGTH', 'false', ''), - ('TABLE_SCHEMA', 'varchar:OB_MAX_DATABASE_NAME_LENGTH', 'false', ''), - ('TABLE_NAME', 'varchar:OB_MAX_TABLE_NAME_LENGTH', 'false', ''), - ('CONSTRAINT_TYPE', 'varchar:INDEX_NULL_LENGTH', 'false', ''), - ('ENFORCED', 'varchar:MAX_BOOL_STR_LENGTH', 'false', ''), - ] -) +############################ NOTE: Id 12005 is deprecated, do not reuse ############################ +#def_table_schema( +# owner = 'xiaofeng.lby', +# tablegroup_id = 'OB_INVALID_ID', +# database_id = 'OB_INFORMATION_SCHEMA_ID', +# table_name = 'TABLE_CONSTRAINTS', +# table_id = '12005', +# table_type = 'VIRTUAL_TABLE', +# gm_columns = [], +# rowkey_columns = [], +# in_tenant_space = True, +# +# normal_columns = [ +# ('CONSTRAINT_CATALOG', 'varchar:MAX_TABLE_CATALOG_LENGTH', 'false', ''), +# ('CONSTRAINT_SCHEMA', 'varchar:OB_MAX_DATABASE_NAME_LENGTH', 'false', ''), +# ('CONSTRAINT_NAME', 'varchar:OB_MAX_COLUMN_NAME_LENGTH', 'false', ''), +# ('TABLE_SCHEMA', 'varchar:OB_MAX_DATABASE_NAME_LENGTH', 'false', ''), +# ('TABLE_NAME', 'varchar:OB_MAX_TABLE_NAME_LENGTH', 'false', ''), +# ('CONSTRAINT_TYPE', 'varchar:INDEX_NULL_LENGTH', 'false', ''), +# ('ENFORCED', 'varchar:MAX_BOOL_STR_LENGTH', 'false', ''), +# ] +#) def_table_schema( owner = 'xiaochu.yh', @@ -7897,45 +7847,46 @@ def_table_schema( ], ) -def_table_schema( - owner = 'yanmu.ztl', - tablegroup_id = 'OB_INVALID_ID', - database_id = 'OB_INFORMATION_SCHEMA_ID', - table_name = 'PARTITIONS', - table_id = '12007 ', - table_type = 'VIRTUAL_TABLE', - gm_columns = [], - rowkey_columns = [], - in_tenant_space = True, - - normal_columns = [ - ('TABLE_CATALOG', 'varchar:MAX_TABLE_CATALOG_LENGTH', 'false', ''), - ('TABLE_SCHEMA', 'varchar:OB_MAX_DATABASE_NAME_LENGTH', 'false', ''), - ('TABLE_NAME', 'varchar:OB_MAX_TABLE_NAME_LENGTH', 'false', ''), - ('PARTITION_NAME', 'varchar:OB_MAX_PARTITION_NAME_LENGTH', 'true'), - ('SUBPARTITION_NAME', 'varchar:OB_MAX_PARTITION_NAME_LENGTH', 'true'), - ('PARTITION_ORDINAL_POSITION', 'uint', 'true'), - ('SUBPARTITION_ORDINAL_POSITION', 'uint', 'true'), - ('PARTITION_METHOD', 'varchar:OB_MAX_PARTITION_METHOD_LENGTH', 'true'), - ('SUBPARTITION_METHOD', 'varchar:OB_MAX_PARTITION_METHOD_LENGTH', 'true'), - ('PARTITION_EXPRESSION', 'varchar:OB_MAX_PART_FUNC_EXPR_LENGTH', 'true'), - ('SUBPARTITION_EXPRESSION', 'varchar:OB_MAX_PART_FUNC_EXPR_LENGTH', 'true'), - ('PARTITION_DESCRIPTION', 'varchar:OB_MAX_PARTITION_DESCRIPTION_LENGTH', 'true'), - ('TABLE_ROWS', 'uint', 'false', '0'), - ('AVG_ROW_LENGTH', 'uint', 'false', '0'), - ('DATA_LENGTH', 'uint', 'false', '0'), - ('MAX_DATA_LENGTH', 'uint', 'true'), - ('INDEX_LENGTH', 'uint', 'false', '0'), - ('DATA_FREE', 'uint', 'false', '0'), - ('CREATE_TIME', 'timestamp', 'true'), - ('UPDATE_TIME', 'timestamp', 'true'), - ('CHECK_TIME', 'timestamp', 'true'), - ('CHECKSUM', 'int', 'true'), - ('PARTITION_COMMENT', 'varchar:OB_MAX_PARTITION_COMMENT_LENGTH', 'false', ''), - ('NODEGROUP', 'varchar:OB_MAX_NODEGROUP_LENGTH', 'false', ''), - ('TABLESPACE_NAME', 'varchar:OB_MAX_TABLEGROUP_NAME_LENGTH','true'), - ], -) +############################ NOTE: Id 12007 is deprecated, do not reuse ############################ +#def_table_schema( +# owner = 'yanmu.ztl', +# tablegroup_id = 'OB_INVALID_ID', +# database_id = 'OB_INFORMATION_SCHEMA_ID', +# table_name = 'PARTITIONS', +# table_id = '12007 ', +# table_type = 'VIRTUAL_TABLE', +# gm_columns = [], +# rowkey_columns = [], +# in_tenant_space = True, +# +# normal_columns = [ +# ('TABLE_CATALOG', 'varchar:MAX_TABLE_CATALOG_LENGTH', 'false', ''), +# ('TABLE_SCHEMA', 'varchar:OB_MAX_DATABASE_NAME_LENGTH', 'false', ''), +# ('TABLE_NAME', 'varchar:OB_MAX_TABLE_NAME_LENGTH', 'false', ''), +# ('PARTITION_NAME', 'varchar:OB_MAX_PARTITION_NAME_LENGTH', 'true'), +# ('SUBPARTITION_NAME', 'varchar:OB_MAX_PARTITION_NAME_LENGTH', 'true'), +# ('PARTITION_ORDINAL_POSITION', 'uint', 'true'), +# ('SUBPARTITION_ORDINAL_POSITION', 'uint', 'true'), +# ('PARTITION_METHOD', 'varchar:OB_MAX_PARTITION_METHOD_LENGTH', 'true'), +# ('SUBPARTITION_METHOD', 'varchar:OB_MAX_PARTITION_METHOD_LENGTH', 'true'), +# ('PARTITION_EXPRESSION', 'varchar:OB_MAX_PART_FUNC_EXPR_LENGTH', 'true'), +# ('SUBPARTITION_EXPRESSION', 'varchar:OB_MAX_PART_FUNC_EXPR_LENGTH', 'true'), +# ('PARTITION_DESCRIPTION', 'varchar:OB_MAX_PARTITION_DESCRIPTION_LENGTH', 'true'), +# ('TABLE_ROWS', 'uint', 'false', '0'), +# ('AVG_ROW_LENGTH', 'uint', 'false', '0'), +# ('DATA_LENGTH', 'uint', 'false', '0'), +# ('MAX_DATA_LENGTH', 'uint', 'true'), +# ('INDEX_LENGTH', 'uint', 'false', '0'), +# ('DATA_FREE', 'uint', 'false', '0'), +# ('CREATE_TIME', 'timestamp', 'true'), +# ('UPDATE_TIME', 'timestamp', 'true'), +# ('CHECK_TIME', 'timestamp', 'true'), +# ('CHECKSUM', 'int', 'true'), +# ('PARTITION_COMMENT', 'varchar:OB_MAX_PARTITION_COMMENT_LENGTH', 'false', ''), +# ('NODEGROUP', 'varchar:OB_MAX_NODEGROUP_LENGTH', 'false', ''), +# ('TABLESPACE_NAME', 'varchar:OB_MAX_TABLEGROUP_NAME_LENGTH','true'), +# ], +#) def_table_schema( owner = 'xiaochu.yh', @@ -8227,35 +8178,35 @@ def_table_schema(**gen_iterate_virtual_table_def( keywords = all_def_keywords['__all_freeze_info'], in_tenant_space = True)) -def_table_schema( - owner = 'linlin.xll', - database_id = 'OB_INFORMATION_SCHEMA_ID', - table_name = 'PARAMETERS', - table_id = '12037', - table_type = 'VIRTUAL_TABLE', - gm_columns = [], - rowkey_columns = [], - in_tenant_space = True, - - normal_columns = [ - ('SPECIFIC_CATALOG', 'varchar:MAX_TABLE_CATALOG_LENGTH', 'false', 'def'), - ('SPECIFIC_SCHEMA', 'varchar:OB_MAX_DATABASE_NAME_LENGTH', 'false', ''), - ('SPECIFIC_NAME', 'varchar:OB_MAX_PARAMETERS_NAME_LENGTH', 'false', ''), - ('ORDINAL_POSITION', 'int', 'false', '0'), - ('PARAMETER_MODE', 'varchar:OB_MAX_PARAMETERS_NAME_LENGTH', 'true'), - ('PARAMETER_NAME', 'varchar:OB_MAX_DEFAULT_VALUE_LENGTH', 'true'), - ('DATA_TYPE', 'varchar:OB_MAX_PARAMETERS_NAME_LENGTH', 'false', ''), - ('CHARACTER_MAXIMUM_LENGTH', 'uint', 'true'), - ('CHARACTER_OCTET_LENGTH', 'uint', 'true'), - ('NUMERIC_PRECISION', 'uint', 'true'), - ('NUMERIC_SCALE','uint', 'true'), - ('DATETIME_PRECISION', 'uint', 'true'), - ('CHARACTER_SET_NAME', 'varchar:MAX_CHARSET_LENGTH', 'true'), - ('COLLATION_NAME', 'varchar:MAX_COLLATION_LENGTH', 'true'), - ('DTD_IDENTIFIER', 'varchar:OB_MAX_SYS_PARAM_NAME_LENGTH', 'false'), - ('ROUTINE_TYPE', 'varchar:9', 'false', ''), - ], -) +############################NOTE: Id 12037 is deprecated, do not reuse ############################ +# def_table_schema( +# owner = 'linlin.xll', +# database_id = 'OB_INFORMATION_SCHEMA_ID', +# table_name = 'PARAMETERS', +# table_id = '12037', +# table_type = 'VIRTUAL_TABLE', +# gm_columns = [], +# rowkey_columns = [], +# in_tenant_space = True, +# normal_columns = [ +# ('SPECIFIC_CATALOG', 'varchar:MAX_TABLE_CATALOG_LENGTH', 'false', 'def'), +# ('SPECIFIC_SCHEMA', 'varchar:OB_MAX_DATABASE_NAME_LENGTH', 'false', ''), +# ('SPECIFIC_NAME', 'varchar:OB_MAX_PARAMETERS_NAME_LENGTH', 'false', ''), +# ('ORDINAL_POSITION', 'int', 'false', '0'), +# ('PARAMETER_MODE', 'varchar:OB_MAX_PARAMETERS_NAME_LENGTH', 'true'), +# ('PARAMETER_NAME', 'varchar:OB_MAX_DEFAULT_VALUE_LENGTH', 'true'), +# ('DATA_TYPE', 'varchar:OB_MAX_PARAMETERS_NAME_LENGTH', 'false', ''), +# ('CHARACTER_MAXIMUM_LENGTH', 'uint', 'true'), +# ('CHARACTER_OCTET_LENGTH', 'uint', 'true'), +# ('NUMERIC_PRECISION', 'uint', 'true'), +# ('NUMERIC_SCALE','uint', 'true'), +# ('DATETIME_PRECISION', 'uint', 'true'), +# ('CHARACTER_SET_NAME', 'varchar:MAX_CHARSET_LENGTH', 'true'), +# ('COLLATION_NAME', 'varchar:MAX_COLLATION_LENGTH', 'true'), +# ('DTD_IDENTIFIER', 'varchar:OB_MAX_SYS_PARAM_NAME_LENGTH', 'false'), +# ('ROUTINE_TYPE', 'varchar:9', 'false', ''), +# ], +# ) def_table_schema( owner = 'jianyun.sjy', @@ -9186,31 +9137,32 @@ def_table_schema( vtable_route_policy = 'distributed', ) -def_table_schema( - owner = 'xiaofeng.lby', - tablegroup_id = 'OB_INVALID_ID', - database_id = 'OB_INFORMATION_SCHEMA_ID', - table_name = 'REFERENTIAL_CONSTRAINTS', - table_id = '12177', - table_type = 'VIRTUAL_TABLE', - gm_columns = [], - rowkey_columns = [], - in_tenant_space = True, - - normal_columns = [ - ('CONSTRAINT_CATALOG', 'varchar:MAX_TABLE_CATALOG_LENGTH', 'false', ''), - ('CONSTRAINT_SCHEMA', 'varchar:OB_MAX_DATABASE_NAME_LENGTH', 'false', ''), - ('CONSTRAINT_NAME', 'varchar:OB_MAX_CONSTRAINT_NAME_LENGTH_ORACLE', 'false', ''), - ('UNIQUE_CONSTRAINT_CATALOG', 'varchar:MAX_TABLE_CATALOG_LENGTH', 'false', ''), - ('UNIQUE_CONSTRAINT_SCHEMA', 'varchar:OB_MAX_DATABASE_NAME_LENGTH', 'false', ''), - ('UNIQUE_CONSTRAINT_NAME', 'varchar:OB_MAX_CONSTRAINT_NAME_LENGTH_ORACLE', 'true', 'NULL'), - ('MATCH_OPTION', 'varchar:64', 'false', ''), - ('UPDATE_RULE', 'varchar:64', 'false', ''), - ('DELETE_RULE', 'varchar:64', 'false', ''), - ('TABLE_NAME', 'varchar:OB_MAX_TABLE_NAME_LENGTH', 'false', ''), - ('REFERENCED_TABLE_NAME', 'varchar:OB_MAX_TABLE_NAME_LENGTH', 'false', '') - ] -) +############################ NOTE: Id 12177 is deprecated, do not reuse ############################ +#def_table_schema( +# owner = 'xiaofeng.lby', +# tablegroup_id = 'OB_INVALID_ID', +# database_id = 'OB_INFORMATION_SCHEMA_ID', +# table_name = 'REFERENTIAL_CONSTRAINTS', +# table_id = '12177', +# table_type = 'VIRTUAL_TABLE', +# gm_columns = [], +# rowkey_columns = [], +# in_tenant_space = True, +# +# normal_columns = [ +# ('CONSTRAINT_CATALOG', 'varchar:MAX_TABLE_CATALOG_LENGTH', 'false', ''), +# ('CONSTRAINT_SCHEMA', 'varchar:OB_MAX_DATABASE_NAME_LENGTH', 'false', ''), +# ('CONSTRAINT_NAME', 'varchar:OB_MAX_CONSTRAINT_NAME_LENGTH_ORACLE', 'false', ''), +# ('UNIQUE_CONSTRAINT_CATALOG', 'varchar:MAX_TABLE_CATALOG_LENGTH', 'false', ''), +# ('UNIQUE_CONSTRAINT_SCHEMA', 'varchar:OB_MAX_DATABASE_NAME_LENGTH', 'false', ''), +# ('UNIQUE_CONSTRAINT_NAME', 'varchar:OB_MAX_CONSTRAINT_NAME_LENGTH_ORACLE', 'true', 'NULL'), +# ('MATCH_OPTION', 'varchar:64', 'false', ''), +# ('UPDATE_RULE', 'varchar:64', 'false', ''), +# ('DELETE_RULE', 'varchar:64', 'false', ''), +# ('TABLE_NAME', 'varchar:OB_MAX_TABLE_NAME_LENGTH', 'false', ''), +# ('REFERENCED_TABLE_NAME', 'varchar:OB_MAX_TABLE_NAME_LENGTH', 'false', '') +# ] +#) ## 12179: __all_virtual_table_modifications, abandoned on 4.0 @@ -9560,42 +9512,42 @@ def_table_schema( partition_columns = ['svr_ip', 'svr_port'], vtable_route_policy = 'distributed', ) - -def_table_schema( - owner = 'webber.wb', - tablegroup_id = 'OB_INVALID_ID', - database_id = 'OB_INFORMATION_SCHEMA_ID', - table_name = 'TRIGGERS', - table_id = '12221', - table_type = 'VIRTUAL_TABLE', - gm_columns = [], - rowkey_columns = [], - in_tenant_space = True, - normal_columns = [ - ('TRIGGER_CATALOG', 'varchar:512', 'false', ''), - ('TRIGGER_SCHEMA', 'varchar:64', 'false', ''), - ('TRIGGER_NAME', 'varchar:64', 'false', ''), - ('EVENT_MANIPULATION', 'varchar:6', 'false', ''), - ('EVENT_OBJECT_CATALOG', 'varchar:512', 'false', ''), - ('EVENT_OBJECT_SCHEMA', 'varchar:64', 'false', ''), - ('EVENT_OBJECT_TABLE', 'varchar:64', 'false', ''), - ('ACTION_ORDER', 'bigint:4', 'false', 0), - ('ACTION_CONDITION', 'longtext', 'true'), - ('ACTION_STATEMENT', 'longtext', 'false'), - ('ACTION_ORIENTATION', 'varchar:9', 'false', ''), - ('ACTION_TIMING', 'varchar:6', 'false', ''), - ('ACTION_REFERENCE_OLD_TABLE', 'varchar:64', 'true'), - ('ACTION_REFERENCE_NEW_TABLE', 'varchar:64', 'true'), - ('ACTION_REFERENCE_OLD_ROW', 'varchar:3', 'false', ''), - ('ACTION_REFERENCE_NEW_ROW', 'varchar:3', 'false', ''), - ('CREATED', 'datetime', 'true'), - ('SQL_MODE', 'varchar:8192', 'false', ''), - ('DEFINER', 'varchar:189', 'false', ''), - ('CHARACTER_SET_CLIENT', 'varchar:32', 'false', ''), - ('COLLATION_CONNECTION', 'varchar:32', 'false', ''), - ('DATABASE_COLLATION', 'varchar:32', 'false', ''), - ], -) +############################ NOTE: Id 12221 is deprecated, do not reuse ############################ +# def_table_schema( +# owner = 'webber.wb', +# tablegroup_id = 'OB_INVALID_ID', +# database_id = 'OB_INFORMATION_SCHEMA_ID', +# table_name = 'TRIGGERS', +# table_id = '12221', +# table_type = 'VIRTUAL_TABLE', +# gm_columns = [], +# rowkey_columns = [], +# in_tenant_space = True, +# normal_columns = [ +# ('TRIGGER_CATALOG', 'varchar:512', 'false', ''), +# ('TRIGGER_SCHEMA', 'varchar:64', 'false', ''), +# ('TRIGGER_NAME', 'varchar:64', 'false', ''), +# ('EVENT_MANIPULATION', 'varchar:6', 'false', ''), +# ('EVENT_OBJECT_CATALOG', 'varchar:512', 'false', ''), +# ('EVENT_OBJECT_SCHEMA', 'varchar:64', 'false', ''), +# ('EVENT_OBJECT_TABLE', 'varchar:64', 'false', ''), +# ('ACTION_ORDER', 'bigint:4', 'false', 0), +# ('ACTION_CONDITION', 'longtext', 'true'), +# ('ACTION_STATEMENT', 'longtext', 'false'), +# ('ACTION_ORIENTATION', 'varchar:9', 'false', ''), +# ('ACTION_TIMING', 'varchar:6', 'false', ''), +# ('ACTION_REFERENCE_OLD_TABLE', 'varchar:64', 'true'), +# ('ACTION_REFERENCE_NEW_TABLE', 'varchar:64', 'true'), +# ('ACTION_REFERENCE_OLD_ROW', 'varchar:3', 'false', ''), +# ('ACTION_REFERENCE_NEW_ROW', 'varchar:3', 'false', ''), +# ('CREATED', 'datetime', 'true'), +# ('SQL_MODE', 'varchar:8192', 'false', ''), +# ('DEFINER', 'varchar:189', 'false', ''), +# ('CHARACTER_SET_CLIENT', 'varchar:32', 'false', ''), +# ('COLLATION_CONNECTION', 'varchar:32', 'false', ''), +# ('DATABASE_COLLATION', 'varchar:32', 'false', ''), +# ], +# ) def_table_schema( owner = 'webber.wb', @@ -9734,23 +9686,24 @@ def_table_schema(**gen_iterate_private_virtual_table_def( keywords = all_def_keywords['__all_ls_log_archive_progress'], in_tenant_space = True)) -def_table_schema( - owner = 'xiaofeng.lby', - tablegroup_id = 'OB_INVALID_ID', - database_id = 'OB_INFORMATION_SCHEMA_ID', - table_name = 'CHECK_CONSTRAINTS', - table_id = '12235', - table_type = 'VIRTUAL_TABLE', - gm_columns = [], - rowkey_columns = [], - in_tenant_space = True, - normal_columns = [ - ('CONSTRAINT_CATALOG', 'varchar:MAX_TABLE_CATALOG_LENGTH', 'false', ''), - ('CONSTRAINT_SCHEMA', 'varchar:OB_MAX_DATABASE_NAME_LENGTH', 'false', ''), - ('CONSTRAINT_NAME', 'varchar:OB_MAX_COLUMN_NAME_LENGTH', 'false', ''), - ('CHECK_CLAUSE', 'varchar:OB_MAX_CONSTRAINT_EXPR_LENGTH', 'false', ''), - ] -) +############################ NOTE: Id 12235 is deprecated, do not reuse ############################ +#def_table_schema( +# owner = 'xiaofeng.lby', +# tablegroup_id = 'OB_INVALID_ID', +# database_id = 'OB_INFORMATION_SCHEMA_ID', +# table_name = 'CHECK_CONSTRAINTS', +# table_id = '12235', +# table_type = 'VIRTUAL_TABLE', +# gm_columns = [], +# rowkey_columns = [], +# in_tenant_space = True, +# normal_columns = [ +# ('CONSTRAINT_CATALOG', 'varchar:MAX_TABLE_CATALOG_LENGTH', 'false', ''), +# ('CONSTRAINT_SCHEMA', 'varchar:OB_MAX_DATABASE_NAME_LENGTH', 'false', ''), +# ('CONSTRAINT_NAME', 'varchar:OB_MAX_COLUMN_NAME_LENGTH', 'false', ''), +# ('CHECK_CLAUSE', 'varchar:OB_MAX_CONSTRAINT_EXPR_LENGTH', 'false', ''), +# ] +#) def_table_schema(**gen_iterate_private_virtual_table_def( table_id = '12236', @@ -11441,7 +11394,7 @@ def_table_schema( ) def_table_schema( - owner = 'xiaofeng.lby', + owner = 'jiangxiu.wt', tablegroup_id = 'OB_INVALID_ID', database_id = 'OB_INFORMATION_SCHEMA_ID', table_name = 'STATISTICS', @@ -11451,12 +11404,142 @@ def_table_schema( rowkey_columns = [], in_tenant_space = True, view_definition = """ - SELECT 'def' as TABLE_CATALOG, table_schema AS TABLE_SCHEMA, - `table` as TABLE_NAME, non_unique AS NON_UNIQUE, index_schema as INDEX_SCHEMA, - key_name as INDEX_NAME, seq_in_index as SEQ_IN_INDEX, column_name as COLUMN_NAME, - collation as COLLATION, cardinality as CARDINALITY, sub_part as SUB_PART, - packed as PACKED, `null` as NULLABLE, index_type as INDEX_TYPE, COMMENT, - index_comment as INDEX_COMMENT, is_visible as IS_VISIBLE FROM oceanbase.__tenant_virtual_table_index + SELECT CAST('def' AS CHAR(512)) AS TABLE_CATALOG, + V.TABLE_SCHEMA AS TABLE_SCHEMA, + V.TABLE_NAME AS TABLE_NAME, + CAST(V.NON_UNIQUE AS SIGNED) AS NON_UNIQUE, + V.INDEX_SCHEMA AS INDEX_SCHEMA, + V.INDEX_NAME AS INDEX_NAME, + CAST(V.SEQ_IN_INDEX AS UNSIGNED) AS SEQ_IN_INDEX, + V.COLUMN_NAME AS COLUMN_NAME, + CAST('A' AS CHAR(1)) AS COLLATION, + CAST(NULL AS SIGNED) AS CARDINALITY, + CAST(V.SUB_PART AS SIGNED) AS SUB_PART, + CAST(NULL AS CHAR(10)) AS PACKED, + CAST(V.NULLABLE AS CHAR(3)) AS NULLABLE, + CAST(V.INDEX_TYPE AS CHAR(16)) AS INDEX_TYPE, + CAST(V.COMMENT AS CHAR(16)) AS COMMENT, + CAST(V.INDEX_COMMENT AS CHAR(1024)) AS INDEX_COMMENT, + CAST('YES' AS CHAR(3)) AS IS_VISIBLE + FROM (SELECT db.database_name AS TABLE_SCHEMA, + t.table_name AS TABLE_NAME, + CASE WHEN i.index_type IN (2,4,8) THEN 0 ELSE 1 END AS NON_UNIQUE, + db.database_name AS INDEX_SCHEMA, + substr(i.table_name, 7 + instr(substr(i.table_name, 7), '_')) AS INDEX_NAME, + c.index_position AS SEQ_IN_INDEX, + CASE WHEN d_col.column_name IS NOT NULL THEN d_col.column_name ELSE c.column_name END AS COLUMN_NAME, + CASE WHEN d_col.column_name IS NOT NULL THEN c.data_length ELSE NULL END AS SUB_PART, + CASE WHEN c.nullable = 1 THEN 'YES' ELSE NULL END AS NULLABLE, + CASE WHEN i.index_using_type = 0 THEN 'BTREE' ELSE (CASE WHEN + i.index_using_type = 1 THEN 'HASH' ELSE 'UNKOWN' END)END AS INDEX_TYPE, + t.comment AS COMMENT, + i.comment AS INDEX_COMMENT + FROM oceanbase.__all_table i + JOIN oceanbase.__all_table t + ON i.data_table_id=t.table_id + AND i.tenant_id = t.tenant_id + AND i.database_id = t.database_id + AND i.table_type = 5 + AND t.table_type in (0,3) + JOIN oceanbase.__all_column c + ON i.table_id=c.table_id + AND i.tenant_id = c.tenant_id + AND c.index_position > 0 + JOIN oceanbase.__all_database db + ON i.tenant_id = db.tenant_id + AND i.database_id = db.database_id + AND db.in_recyclebin = 0 + AND db.database_name != '__recyclebin' + LEFT JOIN oceanbase.__all_column d_col + ON c.is_hidden = 1 + AND substr(c.column_name, 1, 8) = '__substr' + AND i.data_table_id = d_col.table_id + AND i.tenant_id = d_col.tenant_id + AND substr(c.column_name, 8 + instr(substr(c.column_name, 8), '_')) = d_col.column_id + UNION ALL + SELECT db.database_name AS TABLE_SCHEMA, + t.table_name AS TABLE_NAME, + 0 AS NON_UNIQUE, + db.database_name AS INDEX_SCHEMA, + 'PRIMARY' AS INDEX_NAME, + c.rowkey_position AS SEQ_IN_INDEX, + c.column_name AS COLUMN_NAME, + NULL AS SUB_PART, + NULL AS NULLABLE, + CASE WHEN t.index_using_type = 0 THEN 'BTREE' ELSE ( + CASE WHEN t.index_using_type = 1 THEN 'HASH' ELSE 'UNKOWN' END) END AS INDEX_TYPE, + t.comment AS COMMENT, + t.comment AS INDEX_COMMENT + FROM oceanbase.__all_table t + JOIN oceanbase.__all_column c + ON t.table_id=c.table_id + AND t.tenant_id = c.tenant_id + AND c.rowkey_position > 0 + AND c.is_hidden = 0 + AND t.table_type in (0,3) + JOIN oceanbase.__all_database db + ON t.tenant_id = db.tenant_id + AND t.database_id = db.database_id + AND db.in_recyclebin = 0 + AND db.database_name != '__recyclebin' + UNION ALL + SELECT db.database_name AS TABLE_SCHEMA, + t.table_name AS TABLE_NAME, + CASE WHEN i.index_type IN (2,4,8) THEN 0 ELSE 1 END AS NON_UNIQUE, + db.database_name AS INDEX_SCHEMA, + substr(i.table_name, 7 + instr(substr(i.table_name, 7), '_')) AS INDEX_NAME, + c.index_position AS SEQ_IN_INDEX, + CASE WHEN d_col.column_name IS NOT NULL THEN d_col.column_name ELSE c.column_name END AS COLUMN_NAME, + CASE WHEN d_col.column_name IS NOT NULL THEN c.data_length ELSE NULL END AS SUB_PART, + CASE WHEN c.nullable = 1 THEN 'YES' ELSE NULL END AS NULLABLE, + CASE WHEN i.index_using_type = 0 THEN 'BTREE' ELSE (CASE WHEN + i.index_using_type = 1 THEN 'HASH' ELSE 'UNKOWN' END)END AS INDEX_TYPE, + t.comment AS COMMENT, + i.comment AS INDEX_COMMENT + FROM oceanbase.__ALL_VIRTUAL_CORE_ALL_TABLE i + JOIN oceanbase.__ALL_VIRTUAL_CORE_ALL_TABLE t + ON i.data_table_id=t.table_id + AND i.tenant_id = t.tenant_id + AND i.database_id = t.database_id + AND i.table_type = 5 + AND t.table_type in (0,3) + AND t.tenant_id = EFFECTIVE_TENANT_ID() + JOIN oceanbase.__ALL_VIRTUAL_CORE_COLUMN_TABLE c + ON i.table_id=c.table_id + AND i.tenant_id = c.tenant_id + AND c.index_position > 0 + JOIN oceanbase.__all_database db + ON i.database_id = db.database_id + LEFT JOIN oceanbase.__ALL_VIRTUAL_CORE_COLUMN_TABLE d_col + ON c.is_hidden = 1 + AND substr(c.column_name, 1, 8) = '__substr' + AND i.data_table_id = d_col.table_id + AND i.tenant_id = d_col.tenant_id + AND substr(c.column_name, 8 + instr(substr(c.column_name, 8), '_')) = d_col.column_id + UNION ALL + SELECT db.database_name AS TABLE_SCHEMA, + t.table_name AS TABLE_NAME, + 0 AS NON_UNIQUE, + db.database_name AS INDEX_SCHEMA, + 'PRIMARY' AS INDEX_NAME, + c.rowkey_position AS SEQ_IN_INDEX, + c.column_name AS COLUMN_NAME, + NULL AS SUB_PART, + NULL AS NULLABLE, + CASE WHEN t.index_using_type = 0 THEN 'BTREE' ELSE ( + CASE WHEN t.index_using_type = 1 THEN 'HASH' ELSE 'UNKOWN' END) END AS INDEX_TYPE, + t.comment AS COMMENT, + t.comment AS INDEX_COMMENT + FROM oceanbase.__ALL_VIRTUAL_CORE_ALL_TABLE t + JOIN oceanbase.__ALL_VIRTUAL_CORE_COLUMN_TABLE c + ON t.table_id=c.table_id + AND t.tenant_id = c.tenant_id + AND t.tenant_id = EFFECTIVE_TENANT_ID() + AND c.rowkey_position > 0 + AND c.is_hidden = 0 + AND t.table_type in (0,3) + JOIN oceanbase.__all_database db + ON t.database_id = db.database_id)V """.replace("\n", " "), normal_columns = [ @@ -11475,16 +11558,22 @@ def_table_schema( in_tenant_space = True, view_definition = """select - 'def' AS TABLE_CATALOG, + cast('def' as CHAR(64)) AS TABLE_CATALOG, d.database_name as TABLE_SCHEMA, t.table_name as TABLE_NAME, t.view_definition as VIEW_DEFINITION, case t.view_check_option when 1 then 'LOCAL' when 2 then 'CASCADED' else 'NONE' end as CHECK_OPTION, case t.view_is_updatable when 1 then 'YES' else 'NO' end as IS_UPDATABLE, - case t.define_user_id when -1 then 'NONE' else concat(u.user_name, '@', u.host) end as DEFINER, - 'NONE' AS SECURITY_TYPE, - case t.collation_type when 45 then 'utf8mb4' else 'NONE' end AS CHARACTER_SET_CLIENT, - case t.collation_type when 45 then 'utf8mb4_general_ci' else 'NONE' end AS COLLATION_CONNECTION + cast((case t.define_user_id + when -1 then 'NONE' + else concat(u.user_name, '@', u.host) end) as CHAR(288)) as DEFINER, + cast('NONE' as CHAR(7)) AS SECURITY_TYPE, + cast((case t.collation_type + when 45 then 'utf8mb4' + else 'NONE' end) as CHAR(64)) AS CHARACTER_SET_CLIENT, + cast((case t.collation_type + when 45 then 'utf8mb4_general_ci' + else 'NONE' end) as CHAR(64)) AS COLLATION_CONNECTION from oceanbase.__all_table as t join oceanbase.__all_database as d on t.tenant_id = d.tenant_id and t.database_id = d.database_id @@ -11517,30 +11606,31 @@ def_table_schema( view_definition = """ select /*+ leading(a) no_use_nl(ts)*/ - 'def' as TABLE_CATALOG, - b.database_name as TABLE_SCHEMA, - a.table_name as TABLE_NAME, - case when (a.database_id = 201002 or a.table_type = 1) then 'SYSTEM VIEW' + cast('def' as char(512)) as TABLE_CATALOG, + cast(b.database_name as char(64)) as TABLE_SCHEMA, + cast(a.table_name as char(64)) as TABLE_NAME, + cast(case when (a.database_id = 201002 or a.table_type = 1) then 'SYSTEM VIEW' when a.table_type in (0, 2) then 'SYSTEM TABLE' when a.table_type = 4 then 'VIEW' - else 'BASE TABLE' end as TABLE_TYPE, - NULL as ENGINE, - NULL as VERSION, - NULL as ROW_FORMAT, - cast(ts.row_cnt as unsigned) as TABLE_ROWS, - cast(ts.avg_row_len as unsigned) as AVG_ROW_LENGTH, - cast(ts.data_size as unsigned) as DATA_LENGTH, - NULL as MAX_DATA_LENGTH, - NULL as INDEX_LENGTH, - NULL as DATA_FREE, - NULL as AUTO_INCREMENT, - a.gmt_create as CREATE_TIME, - a.gmt_modified as UPDATE_TIME, - NULL as CHECK_TIME, - d.collation as TABLE_COLLATION, + else 'BASE TABLE' end as char(64)) as TABLE_TYPE, + cast(NULL as char(64)) as ENGINE, + cast(NULL as unsigned) as VERSION, + cast(NULL as char(10)) as ROW_FORMAT, + cast( coalesce(ts.row_cnt,0) as unsigned) as TABLE_ROWS, + cast( coalesce(ts.avg_row_len,0) as unsigned) as AVG_ROW_LENGTH, + cast( coalesce(ts.data_size,0) as unsigned) as DATA_LENGTH, + cast(NULL as unsigned) as MAX_DATA_LENGTH, + cast(NULL as unsigned) as INDEX_LENGTH, + cast(NULL as unsigned) as DATA_FREE, + cast(NULL as unsigned) as AUTO_INCREMENT, + cast(a.gmt_create as datetime) as CREATE_TIME, + cast(a.gmt_modified as datetime) as UPDATE_TIME, + cast(NULL as datetime) as CHECK_TIME, + cast(d.collation as char(32)) as TABLE_COLLATION, cast(NULL as unsigned) as CHECKSUM, - NULL as CREATE_OPTIONS, - a.comment as TABLE_COMMENT + cast(NULL as char(255)) as CREATE_OPTIONS, + cast(case when a.table_type = 4 then 'VIEW' + else a.comment end as char(2048)) as TABLE_COMMENT from ( select cast(0 as signed) as tenant_id, @@ -11778,7 +11868,7 @@ def_table_schema( # table_id = 20013: DBA_OB_OUTLINES (from all_outline) not used on 4.0 def_table_schema( - owner = 'nijia.nj', + owner = 'jiangxiu.wt', tablegroup_id = 'OB_INVALID_ID', database_id = 'OB_INFORMATION_SCHEMA_ID', table_name = 'ENGINES', @@ -11789,13 +11879,13 @@ def_table_schema( gm_columns = [], in_tenant_space = True, view_definition = """ - SELECT ENGINE, - SUPPORT, - COMMENT, - TRANSACTIONS, - XA, - SAVEPOINTS - FROM oceanbase.__all_virtual_engine + SELECT CAST('OceanBase' as CHAR(64)) as ENGINE, + CAST('YES' AS CHAR(8)) as SUPPORT, + CAST('Supports transactions' as CHAR(80)) as COMMENT, + CAST('YES' as CHAR(3)) as TRANSACTIONS, + CAST('NO' as CHAR(3)) as XA, + CAST('YES' as CHAR(3)) as SAVEPOINTS + FROM DUAL; """.replace("\n", " ") ) @@ -11810,40 +11900,127 @@ def_table_schema( normal_columns = [], gm_columns = [], in_tenant_space = True, - view_definition = """ select - SPECIFIC_NAME, - 'def' as ROUTINE_CATALOG, - db as ROUTINE_SCHEMA, - name as ROUTINE_NAME, - type as ROUTINE_TYPE, - '' as DATA_TYPE, - NULL as CHARACTER_MAXIMUM_LENGTH, - NULL as CHARACTER_OCTET_LENGTH, - NULL as NUMERIC_PRECISION, - NULL as NUMERIC_SCALE, - NULL as DATETIME_PRECISION, - NULL as CHARACTER_SET_NAME, - NULL as COLLATION_NAME, - NULL as DTD_IDENTIFIER, - 'SQL' as ROUTINE_BODY, - body as ROUTINE_DEFINITION, - NULL as EXTERNAL_NAME, - NULL as EXTERNAL_LANGUAGE, - 'SQL' as PARAMETER_STYLE, - IS_DETERMINISTIC, - SQL_DATA_ACCESS, - NULL as SQL_PATH, - SECURITY_TYPE, - CREATED, - modified as LAST_ALTERED, - SQL_MODE, - comment as ROUTINE_COMMENT, - DEFINER, - CHARACTER_SET_CLIENT, - COLLATION_CONNECTION, - collation_database as DATABASE_COLLATION - from mysql.proc -""".replace("\n", " ") + view_definition = """select + CAST(mp.specific_name AS CHAR(64)) AS SPECIFIC_NAME, + CAST('def' AS CHAR(512)) as ROUTINE_CATALOG, + CAST(mp.db AS CHAR(64)) as ROUTINE_SCHEMA, + CAST(mp.name AS CHAR(64)) as ROUTINE_NAME, + CAST(mp.type AS CHAR(9)) as ROUTINE_TYPE, + CAST(lower(v.data_type_str) AS CHAR(64)) AS DATA_TYPE, + CAST( + CASE + WHEN mp.type = 'FUNCTION' THEN CASE + WHEN rp.param_type IN (22, 23, 27, 28, 29, 30) THEN rp.param_length + ELSE NULL + END + ELSE NULL + END + AS SIGNED + ) as CHARACTER_MAXIMUM_LENGTH, + CASE + WHEN rp.param_type IN (22, 23, 27, 28, 29, 30, 43, 44, 46) THEN CAST( + rp.param_length * CASE rp.param_coll_type + WHEN 63 THEN 1 + WHEN 249 THEN 4 + WHEN 248 THEN 4 + WHEN 87 THEN 2 + WHEN 28 THEN 2 + WHEN 55 THEN 4 + WHEN 54 THEN 4 + WHEN 101 THEN 2 + WHEN 46 THEN 4 + WHEN 45 THEN 4 + WHEN 224 THEN 4 + ELSE 1 + END + AS SIGNED + ) + ELSE CAST(NULL AS SIGNED) + END + AS CHARACTER_OCTET_LENGTH, + CASE + WHEN rp.param_type IN (1, 2, 3, 4, 5, 15, 16) THEN CAST(rp.param_precision AS UNSIGNED) + ELSE CAST(NULL AS UNSIGNED) + END + AS NUMERIC_PRECISION, + CASE + WHEN rp.param_type IN (15, 16) THEN CAST(rp.param_scale AS SIGNED) + WHEN rp.param_type IN (1, 2, 3, 4, 5, 11, 12, 13, 14) THEN CAST(0 AS SIGNED) + ELSE CAST(NULL AS SIGNED) + END + AS NUMERIC_SCALE, + CASE + WHEN rp.param_type IN (17, 18, 20) THEN CAST(rp.param_scale AS UNSIGNED) + ELSE CAST(NULL AS UNSIGNED) + END + AS DATETIME_PRECISION, + CAST( + CASE rp.param_charset + WHEN 1 THEN "binary" + WHEN 2 THEN "utf8mb4" + WHEN 3 THEN "gbk" + WHEN 4 THEN "utf16" + WHEN 5 THEN "gb18030" + ELSE NULL + END + AS CHAR(64) + ) AS CHARACTER_SET_NAME, + CAST( + CASE rp.param_coll_type + WHEN 45 THEN 'utf8mb4_general_ci' + WHEN 46 THEN 'utf8mb4_bin' + WHEN 63 THEN 'binary' + ELSE NULL + END + AS CHAR(64) + ) AS COLLATION_NAME, + CAST( + CASE + WHEN rp.param_type IN (1, 2, 3, 4, 5) THEN CONCAT( + lower(v.data_type_str), + '(', + rp.param_precision, + ')' + ) + WHEN rp.param_type IN (15, 16) THEN CONCAT( + lower(v.data_type_str), + '(', + rp.param_precision, + ',', + rp.param_scale, + ')' + ) + WHEN rp.param_type IN (18, 20) THEN CONCAT(lower(v.data_type_str), '(', rp.param_scale, ')') + ELSE lower(v.data_type_str) + END + AS CHAR(4194304) + ) AS DTD_IDENTIFIER, + CAST('SQL' AS CHAR(8)) as ROUTINE_BODY, + CAST(mp.body AS CHAR(4194304)) as ROUTINE_DEFINITION, + CAST(NULL AS CHAR(64)) as EXTERNAL_NAME, + CAST(NULL AS CHAR(64)) as EXTERNAL_LANGUAGE, + CAST('SQL' AS CHAR(8)) as PARAMETER_STYLE, + CAST(mp.IS_DETERMINISTIC AS CHAR(3)) AS IS_DETERMINISTIC, + CAST(mp.SQL_DATA_ACCESS AS CHAR(64)) AS SQL_DATA_ACCESS, + CAST(NULL AS CHAR(64)) as SQL_PATH, + CAST(mp.SECURITY_TYPE AS CHAR(7)) as SECURITY_TYPE, + CAST(r.gmt_create AS datetime) as CREATED, + CAST(r.gmt_modified AS datetime) as LAST_ALTERED, + CAST(mp.SQL_MODE AS CHAR(8192)) as SQL_MODE, + CAST(mp.comment AS CHAR(4194304)) as ROUTINE_COMMENT, + CAST(mp.DEFINER AS CHAR(93)) as DEFINER, + CAST(mp.CHARACTER_SET_CLIENT AS CHAR(32)) as CHARACTER_SET_CLIENT, + CAST(mp.COLLATION_CONNECTION AS CHAR(32)) as COLLATION_CONNECTION, + CAST(mp.collation_database AS CHAR(32)) as DATABASE_COLLATION + from + mysql.proc as mp + join oceanbase.__all_routine as r on mp.specific_name = r.routine_name + left join oceanbase.__all_routine_param as rp on rp.subprogram_id = r.subprogram_id + and rp.tenant_id = r.tenant_id + and rp.routine_id = r.routine_id + and rp.param_position = 0 + left join oceanbase.__all_virtual_data_type v on rp.param_type = v.data_type + """.replace("\n", " ") ) def_table_schema( @@ -14514,12 +14691,12 @@ def_table_schema( view_definition = """ select - 'def' AS VIEW_CATALOG, + cast('def' as CHAR(64)) AS VIEW_CATALOG, v.VIEW_SCHEMA as VIEW_SCHEMA, v.VIEW_NAME as VIEW_NAME, t.TABLE_SCHEMA as TABLE_SCHEMA, t.TABLE_NAME as TABLE_NAME, - 'def' AS TABLE_CATALOG + cast('def' as CHAR(64)) AS TABLE_CATALOG from (select o.tenant_id, o.database_name as VIEW_SCHEMA, @@ -15984,7 +16161,7 @@ def_table_schema( WHEN INDEX_STATUS = 4 THEN 'INELEGIBLE' WHEN INDEX_STATUS = 5 THEN 'ERROR' ELSE 'UNUSABLE' END - ELSE 'VALID' END AS CHAR(10)) AS STATUS + ELSE CASE WHEN OBJECT_STATUS = 1 THEN 'VALID' ELSE 'INVALID' END END AS CHAR(10)) AS STATUS ,CASE WHEN TABLE_TYPE IN (6,8,9) THEN 'Y' ELSE 'N' END AS TEMPORARY ,CASE WHEN TABLE_TYPE IN (0,1) THEN 'Y' @@ -16548,7 +16725,7 @@ SELECT/*+leading(DB,T,C,STAT)*/ WHEN 23 THEN 'CHAR' WHEN 24 THEN 'HEX_STRING' - WHEN 25 THEN 'EXT' + WHEN 25 THEN 'UNDEFINED' WHEN 26 THEN 'UNKNOWN' WHEN 27 THEN 'TINYTEXT' @@ -16716,7 +16893,7 @@ FROM AND C.COLUMN_ID = STAT.COLUMN_ID AND STAT.OBJECT_TYPE = 1 WHERE - T.TABLE_TYPE IN (0,3,5,6,8,9) + T.TABLE_TYPE IN (0,1,3,4,5,6,7,8,9) """.replace("\n", " ") ) @@ -18023,7 +18200,7 @@ def_table_schema( WHEN INDEX_STATUS = 4 THEN 'INELEGIBLE' WHEN INDEX_STATUS = 5 THEN 'ERROR' ELSE 'UNUSABLE' END - ELSE 'VALID' END AS CHAR(10)) AS STATUS + ELSE CASE WHEN OBJECT_STATUS = 1 THEN 'VALID' ELSE 'INVALID' END END AS CHAR(10)) AS STATUS ,CASE WHEN TABLE_TYPE IN (6,8,9) THEN 'Y' ELSE 'N' END AS TEMPORARY ,CASE WHEN TABLE_TYPE IN (0,1) THEN 'Y' @@ -23753,20 +23930,831 @@ FROM oceanbase.__all_cluster_event_history """.replace("\n", " ") ) -# 21346: PARAMETERS +def_table_schema( + owner = 'shady.hxy', + database_id = 'OB_INFORMATION_SCHEMA_ID', + table_name = 'PARAMETERS', + table_id = '21346', + table_type = 'SYSTEM_VIEW', + gm_columns = [], + rowkey_columns = [], + in_tenant_space = True, + view_definition = """select CAST('def' AS CHAR(512)) AS SPECIFIC_CATALOG, + CAST(d.database_name AS CHAR(128)) AS SPECIFIC_SCHEMA, + CAST(r.routine_name AS CHAR(64)) AS SPECIFIC_NAME, + CAST(rp.param_position AS signed) AS ORDINAL_POSITION, + CAST(CASE rp.param_position WHEN 0 THEN NULL + ELSE CASE rp.flag & 0x03 + WHEN 1 THEN "IN" + WHEN 2 THEN "OUT" + WHEN 3 THEN "INOUT" + ELSE NULL + END + END AS CHAR(5)) AS PARAMETER_MODE, + CAST(rp.param_name AS CHAR(64)) AS PARAMETER_NAME, + CAST(lower(v.data_type_str) AS CHAR(64)) AS DATA_TYPE, + CASE WHEN rp.param_type IN (22, 23, 27, 28, 29, 30) THEN CAST(rp.param_length AS SIGNED) + ELSE CAST(NULL AS SIGNED) + END AS CHARACTER_MAXIMUM_LENGTH, + CASE WHEN rp.param_type IN (22, 23, 27, 28, 29, 30, 43, 44, 46) + THEN CAST( + rp.param_length * CASE rp.param_coll_type + WHEN 63 THEN 1 + WHEN 249 THEN 4 + WHEN 248 THEN 4 + WHEN 87 THEN 2 + WHEN 28 THEN 2 + WHEN 55 THEN 4 + WHEN 54 THEN 4 + WHEN 101 THEN 2 + WHEN 46 THEN 4 + WHEN 45 THEN 4 + WHEN 224 THEN 4 + ELSE 1 + END + AS SIGNED + ) + ELSE CAST(NULL AS SIGNED) + END AS CHARACTER_OCTET_LENGTH, + CASE WHEN rp.param_type IN (1, 2, 3, 4, 5, 15, 16) + THEN CAST(rp.param_precision AS UNSIGNED) + ELSE CAST(NULL AS UNSIGNED) + END AS NUMERIC_PRECISION, + CASE WHEN rp.param_type IN (15, 16) THEN CAST(rp.param_scale AS SIGNED) + WHEN rp.param_type IN (1, 2, 3, 4, 5, 11, 12, 13, 14) THEN CAST(0 AS SIGNED) + ELSE CAST(NULL AS SIGNED) + END AS NUMERIC_SCALE, + CASE WHEN rp.param_type IN (17, 18, 20) THEN CAST(rp.param_scale AS UNSIGNED) + ELSE CAST(NULL AS UNSIGNED) + END AS DATETIME_PRECISION, + CAST(CASE rp.param_charset + WHEN 1 THEN "binary" + WHEN 2 THEN "utf8mb4" + WHEN 3 THEN "gbk" + WHEN 4 THEN "utf16" + WHEN 5 THEN "gb18030" + ELSE NULL + END AS CHAR(64)) AS CHARACTER_SET_NAME, + CAST(CASE rp.param_coll_type + WHEN 45 THEN 'utf8mb4_general_ci' + WHEN 46 THEN 'utf8mb4_bin' + WHEN 63 THEN 'binary' + ELSE NULL + END AS CHAR(64)) AS COLLATION_NAME, + CAST(CASE WHEN rp.param_type IN (1, 2, 3, 4, 5) + THEN CONCAT(lower(v.data_type_str),'(',rp.param_precision,')') + WHEN rp.param_type IN (15,16) + THEN CONCAT(lower(v.data_type_str),'(',rp.param_precision, ',', rp.param_scale,')') + WHEN rp.param_type IN (18, 20) + THEN CONCAT(lower(v.data_type_str),'(', rp.param_scale, ')') + ELSE lower(v.data_type_str) END AS char(4194304)) AS DTD_IDENTIFIER, + CAST(CASE WHEN r.routine_type = 1 THEN 'PROCEDURE' + WHEN ROUTINE_TYPE = 2 THEN 'FUNCTION' + ELSE NULL + END AS CHAR(9)) AS ROUTINE_TYPE + from + oceanbase.__all_routine_param as rp + join oceanbase.__all_routine as r on rp.subprogram_id = r.subprogram_id + and rp.tenant_id = r.tenant_id + and rp.routine_id = r.routine_id + join oceanbase.__all_database as d on r.database_id = d.database_id + left join oceanbase.__all_virtual_data_type v on rp.param_type = v.data_type + WHERE + rp.tenant_id = 0 + and in_recyclebin = 0 + and database_name != '__recyclebin' + order by SPECIFIC_SCHEMA, + SPECIFIC_NAME, + ORDINAL_POSITION + """.replace("\n", " "), + normal_columns = [], +) -# 21347: INFORMATION_SCHEMA.TABLE_PRIVILEGES -# 21348: INFORMATION_SCHEMA.USER_PRIVILEGES -# 21349: INFORMATION_SCHEMA.SCHEMA_PRIVILEGES -# 21350 : INFORMATION_SCHEMA.CHECK_CONSTRAINTS -# 21351 : INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS -# 21352 : INFORMATION_SCHEMA.TABLE_CONSTRAINTS +def_table_schema( + owner = 'yejingtao.yjt', + database_id = 'OB_INFORMATION_SCHEMA_ID', + table_name = 'TABLE_PRIVILEGES', + table_id = '21347', + table_type = 'SYSTEM_VIEW', + gm_columns = [], + rowkey_columns = [], + in_tenant_space = True, + + view_definition = """ + SELECT + CAST(CONCAT('''', V.USER_NAME, '''', '@', '''', V.HOST, '''') AS CHAR(81)) AS GRANTEE , + CAST('def' AS CHAR(512)) AS TABLE_CATALOG , + CAST(V.DATABASE_NAME AS CHAR(128)) AS TABLE_SCHEMA , + CAST(V.TABLE_NAME AS CHAR(64)) AS TABLE_NAME, + CAST(V.PRIVILEGE_TYPE AS CHAR(64)) AS PRIVILEGE_TYPE , + CAST(V.IS_GRANTABLE AS CHAR(3)) AS IS_GRANTABLE + FROM + (SELECT TP.DATABASE_NAME AS DATABASE_NAME, + TP.TABLE_NAME AS TABLE_NAME, + U.USER_NAME AS USER_NAME, + U.HOST AS HOST, + CASE + WHEN V1.C1 = 1 + AND TP.PRIV_ALTER = 1 THEN 'ALTER' + WHEN V1.C1 = 2 + AND TP.PRIV_CREATE = 1 THEN 'CREATE' + WHEN V1.C1 = 4 + AND TP.PRIV_DELETE = 1 THEN 'DELETE' + WHEN V1.C1 = 5 + AND TP.PRIV_DROP = 1 THEN 'DROP' + WHEN V1.C1 = 7 + AND TP.PRIV_INSERT = 1 THEN 'INSERT' + WHEN V1.C1 = 8 + AND TP.PRIV_UPDATE = 1 THEN 'UPDATE' + WHEN V1.C1 = 9 + AND TP.PRIV_SELECT = 1 THEN 'SELECT' + WHEN V1.C1 = 10 + AND TP.PRIV_INDEX = 1 THEN 'INDEX' + WHEN V1.C1 = 11 + AND TP.PRIV_CREATE_VIEW = 1 THEN 'CREATE VIEW' + WHEN V1.C1 = 12 + AND TP.PRIV_SHOW_VIEW = 1 THEN 'SHOW VIEW' + ELSE NULL + END PRIVILEGE_TYPE , + CASE + WHEN TP.PRIV_GRANT_OPTION = 1 THEN 'YES' + WHEN TP.PRIV_GRANT_OPTION = 0 THEN 'NO' + END IS_GRANTABLE + FROM oceanbase.__all_table_privilege TP, + oceanbase.__all_user U, + (SELECT 1 AS C1 + UNION ALL SELECT 2 AS C1 + UNION ALL SELECT 4 AS C1 + UNION ALL SELECT 5 AS C1 + UNION ALL SELECT 7 AS C1 + UNION ALL SELECT 8 AS C1 + UNION ALL SELECT 9 AS C1 + UNION ALL SELECT 10 AS C1 + UNION ALL SELECT 11 AS C1 + UNION ALL SELECT 12 AS C1) V1, + (SELECT USER_ID + FROM oceanbase.__all_user + WHERE TENANT_ID = 0 + AND CONCAT(USER_NAME, '@', HOST) = CURRENT_USER()) CURR + LEFT JOIN + (SELECT USER_ID + FROM oceanbase.__all_database_privilege + WHERE TENANT_ID = 0 + AND DATABASE_NAME = 'mysql' + AND PRIV_SELECT = 1) DB ON CURR.USER_ID = DB.USER_ID + WHERE TP.TENANT_ID = 0 + AND TP.TENANT_ID = U.TENANT_ID + AND TP.USER_ID = U.USER_ID + AND (DB.USER_ID IS NOT NULL + OR 512 & CURRENT_USER_PRIV() = 512 + OR TP.USER_ID = CURR.USER_ID)) V + WHERE V.PRIVILEGE_TYPE IS NOT NULL + """.replace("\n", " "), + + normal_columns = [ + ], +) + +def_table_schema( + owner = 'yejingtao.yjt', + database_id = 'OB_INFORMATION_SCHEMA_ID', + table_name = 'USER_PRIVILEGES', + table_id = '21348', + table_type = 'SYSTEM_VIEW', + gm_columns = [], + rowkey_columns = [], + in_tenant_space = True, + + view_definition = """ + SELECT CAST(CONCAT('''', V.USER_NAME, '''', '@', '''', V.HOST, '''') AS CHAR(81)) AS GRANTEE , + CAST('def' AS CHAR(512)) AS TABLE_CATALOG , + CAST(V.PRIVILEGE_TYPE AS CHAR(64)) AS PRIVILEGE_TYPE , + CAST(V.IS_GRANTABLE AS CHAR(3)) AS IS_GRANTABLE + FROM + (SELECT U.USER_NAME AS USER_NAME, + U.HOST AS HOST, + CASE + WHEN V1.C1 = 1 + AND U.PRIV_ALTER = 1 THEN 'ALTER' + WHEN V1.C1 = 2 + AND U.PRIV_CREATE = 1 THEN 'CREATE' + WHEN V1.C1 = 3 + AND U.PRIV_CREATE_USER = 1 THEN 'CREATE USER' + WHEN V1.C1 = 4 + AND U.PRIV_DELETE = 1 THEN 'DELETE' + WHEN V1.C1 = 5 + AND U.PRIV_DROP = 1 THEN 'DROP' + WHEN V1.C1 = 7 + AND U.PRIV_INSERT = 1 THEN 'INSERT' + WHEN V1.C1 = 8 + AND U.PRIV_UPDATE = 1 THEN 'UPDATE' + WHEN V1.C1 = 9 + AND U.PRIV_SELECT = 1 THEN 'SELECT' + WHEN V1.C1 = 10 + AND U.PRIV_INDEX = 1 THEN 'INDEX' + WHEN V1.C1 = 11 + AND U.PRIV_CREATE_VIEW = 1 THEN 'CREATE VIEW' + WHEN V1.C1 = 12 + AND U.PRIV_SHOW_VIEW = 1 THEN 'SHOW VIEW' + WHEN V1.C1 = 13 + AND U.PRIV_SHOW_DB = 1 THEN 'SHOW DB' + WHEN V1.C1 = 14 + AND U.PRIV_SUPER = 1 THEN 'SUPER' + WHEN V1.C1 = 15 + AND U.PRIV_PROCESS = 1 THEN 'PROCESS' + WHEN V1.C1 = 17 + AND U.PRIV_CREATE_SYNONYM = 1 THEN 'CREATE SYNONYM' + WHEN V1.C1 = 27 + AND U.PRIV_FILE = 1 THEN 'FILE' + WHEN V1.C1 = 28 + AND U.PRIV_ALTER_TENANT = 1 THEN 'ALTER TENANT' + WHEN V1.C1 = 29 + AND U.PRIV_ALTER_SYSTEM = 1 THEN 'ALTER SYSTEM' + WHEN V1.C1 = 30 + AND U.PRIV_CREATE_RESOURCE_POOL = 1 THEN 'CREATE RESOURCE POOL' + WHEN V1.C1 = 31 + AND U.PRIV_CREATE_RESOURCE_UNIT = 1 THEN 'CREATE RESOURCE UNIT' + WHEN V1.C1 = 33 + AND U.PRIV_REPL_SLAVE = 1 THEN 'REPLICATION SLAVE' + WHEN V1.C1 = 34 + AND U.PRIV_REPL_CLIENT = 1 THEN 'REPLICATION CLIENT' + WHEN V1.C1 = 0 + AND U.PRIV_ALTER = 0 + AND U.PRIV_CREATE = 0 + AND U.PRIV_CREATE_USER = 0 + AND U.PRIV_DELETE = 0 + AND U.PRIV_DROP = 0 + AND U.PRIV_INSERT = 0 + AND U.PRIV_UPDATE = 0 + AND U.PRIV_SELECT = 0 + AND U.PRIV_INDEX = 0 + AND U.PRIV_CREATE_VIEW = 0 + AND U.PRIV_SHOW_VIEW = 0 + AND U.PRIV_SHOW_DB = 0 + AND U.PRIV_SUPER = 0 + AND U.PRIV_PROCESS = 0 + AND U.PRIV_CREATE_SYNONYM = 0 + AND U.PRIV_FILE = 0 + AND U.PRIV_ALTER_TENANT = 0 + AND U.PRIV_ALTER_SYSTEM = 0 + AND U.PRIV_CREATE_RESOURCE_POOL = 0 + AND U.PRIV_CREATE_RESOURCE_UNIT = 0 + AND U.PRIV_REPL_SLAVE = 0 + AND U.PRIV_REPL_CLIENT = 0 THEN 'USAGE' + END PRIVILEGE_TYPE , + CASE + WHEN U.PRIV_GRANT_OPTION = 0 THEN 'NO' + WHEN U.PRIV_ALTER = 0 + AND U.PRIV_CREATE = 0 + AND U.PRIV_CREATE_USER = 0 + AND U.PRIV_DELETE = 0 + AND U.PRIV_DROP = 0 + AND U.PRIV_INSERT = 0 + AND U.PRIV_UPDATE = 0 + AND U.PRIV_SELECT = 0 + AND U.PRIV_INDEX = 0 + AND U.PRIV_CREATE_VIEW = 0 + AND U.PRIV_SHOW_VIEW = 0 + AND U.PRIV_SHOW_DB = 0 + AND U.PRIV_SUPER = 0 + AND U.PRIV_PROCESS = 0 + AND U.PRIV_CREATE_SYNONYM = 0 + AND U.PRIV_FILE = 0 + AND U.PRIV_ALTER_TENANT = 0 + AND U.PRIV_ALTER_SYSTEM = 0 + AND U.PRIV_CREATE_RESOURCE_POOL = 0 + AND U.PRIV_CREATE_RESOURCE_UNIT = 0 + AND U.PRIV_REPL_SLAVE = 0 + AND U.PRIV_REPL_CLIENT = 0 THEN 'NO' + WHEN U.PRIV_GRANT_OPTION = 1 THEN 'YES' + END IS_GRANTABLE + FROM oceanbase.__all_user U, + (SELECT 0 AS C1 + UNION ALL SELECT 1 AS C1 + UNION ALL SELECT 2 AS C1 + UNION ALL SELECT 3 AS C1 + UNION ALL SELECT 4 AS C1 + UNION ALL SELECT 5 AS C1 + UNION ALL SELECT 7 AS C1 + UNION ALL SELECT 8 AS C1 + UNION ALL SELECT 9 AS C1 + UNION ALL SELECT 10 AS C1 + UNION ALL SELECT 11 AS C1 + UNION ALL SELECT 12 AS C1 + UNION ALL SELECT 13 AS C1 + UNION ALL SELECT 14 AS C1 + UNION ALL SELECT 15 AS C1 + UNION ALL SELECT 17 AS C1 + UNION ALL SELECT 27 AS C1 + UNION ALL SELECT 28 AS C1 + UNION ALL SELECT 29 AS C1 + UNION ALL SELECT 30 AS C1 + UNION ALL SELECT 31 AS C1 + UNION ALL SELECT 33 AS C1 + UNION ALL SELECT 34 AS C1) V1, + (SELECT USER_ID + FROM oceanbase.__all_user + WHERE TENANT_ID = 0 + AND CONCAT(USER_NAME, '@', HOST) = CURRENT_USER()) CURR + LEFT JOIN + (SELECT USER_ID + FROM oceanbase.__all_database_privilege + WHERE TENANT_ID = 0 + AND DATABASE_NAME = 'mysql' + AND PRIV_SELECT = 1) DB ON CURR.USER_ID = DB.USER_ID + WHERE U.TENANT_ID = 0 + AND (DB.USER_ID IS NOT NULL + OR 512 & CURRENT_USER_PRIV() = 512 + OR U.USER_ID = CURR.USER_ID)) V + WHERE V.PRIVILEGE_TYPE IS NOT NULL + """.replace("\n", " "), + + normal_columns = [ + ], +) + +def_table_schema( + owner = 'yejingtao.yjt', + database_id = 'OB_INFORMATION_SCHEMA_ID', + table_name = 'SCHEMA_PRIVILEGES', + table_id = '21349', + table_type = 'SYSTEM_VIEW', + gm_columns = [], + rowkey_columns = [], + in_tenant_space = True, + + view_definition = """ + SELECT CAST(CONCAT('''', V.USER_NAME, '''', '@', '''', V.HOST, '''') AS CHAR(81)) AS GRANTEE , + CAST('def' AS CHAR(512)) AS TABLE_CATALOG , + CAST(V.DATABASE_NAME AS CHAR(128)) AS TABLE_SCHEMA , + CAST(V.PRIVILEGE_TYPE AS CHAR(64)) AS PRIVILEGE_TYPE , + CAST(V.IS_GRANTABLE AS CHAR(3)) AS IS_GRANTABLE + FROM + (SELECT DP.DATABASE_NAME DATABASE_NAME, + U.USER_NAME AS USER_NAME, + U.HOST AS HOST, + CASE + WHEN V1.C1 = 1 + AND DP.PRIV_ALTER = 1 THEN 'ALTER' + WHEN V1.C1 = 2 + AND DP.PRIV_CREATE = 1 THEN 'CREATE' + WHEN V1.C1 = 4 + AND DP.PRIV_DELETE = 1 THEN 'DELETE' + WHEN V1.C1 = 5 + AND DP.PRIV_DROP = 1 THEN 'DROP' + WHEN V1.C1 = 7 + AND DP.PRIV_INSERT = 1 THEN 'INSERT' + WHEN V1.C1 = 8 + AND DP.PRIV_UPDATE = 1 THEN 'UPDATE' + WHEN V1.C1 = 9 + AND DP.PRIV_SELECT = 1 THEN 'SELECT' + WHEN V1.C1 = 10 + AND DP.PRIV_INDEX = 1 THEN 'INDEX' + WHEN V1.C1 = 11 + AND DP.PRIV_CREATE_VIEW = 1 THEN 'CREATE VIEW' + WHEN V1.C1 = 12 + AND DP.PRIV_SHOW_VIEW = 1 THEN 'SHOW VIEW' + ELSE NULL + END PRIVILEGE_TYPE , + CASE + WHEN DP.PRIV_GRANT_OPTION = 1 THEN 'YES' + WHEN DP.PRIV_GRANT_OPTION = 0 THEN 'NO' + END IS_GRANTABLE + FROM oceanbase.__all_database_privilege DP, + oceanbase.__all_user U, + (SELECT 1 AS C1 + UNION ALL SELECT 2 AS C1 + UNION ALL SELECT 4 AS C1 + UNION ALL SELECT 5 AS C1 + UNION ALL SELECT 7 AS C1 + UNION ALL SELECT 8 AS C1 + UNION ALL SELECT 9 AS C1 + UNION ALL SELECT 10 AS C1 + UNION ALL SELECT 11 AS C1 + UNION ALL SELECT 12 AS C1) V1, + (SELECT USER_ID + FROM oceanbase.__all_user + WHERE TENANT_ID= 0 + AND CONCAT(USER_NAME, '@', HOST) = CURRENT_USER()) CURR + LEFT JOIN + (SELECT USER_ID + FROM oceanbase.__all_database_privilege + WHERE TENANT_ID = 0 + AND DATABASE_NAME = 'mysql' + AND PRIV_SELECT = 1) DB ON CURR.USER_ID = DB.USER_ID + WHERE DP.TENANT_ID = 0 + AND DP.TENANT_ID = U.TENANT_ID + AND DP.USER_ID = U.USER_ID + AND DP.DATABASE_NAME != '__recyclebin' + AND DP.DATABASE_NAME != '__public' + AND DP.DATABASE_NAME != 'SYS' + AND DP.DATABASE_NAME != 'LBACSYS' + AND DP.DATABASE_NAME != 'ORAAUDITOR' + AND (DB.USER_ID IS NOT NULL + OR 512 & CURRENT_USER_PRIV() = 512 + OR DP.USER_ID = CURR.USER_ID)) V + WHERE V.PRIVILEGE_TYPE IS NOT NULL + """.replace("\n", " "), + + normal_columns = [ + ], +) + +def_table_schema( + owner = 'xiaofeng.lby', + tablegroup_id = 'OB_INVALID_ID', + database_id = 'OB_INFORMATION_SCHEMA_ID', + table_name = 'CHECK_CONSTRAINTS', + table_id = '21350', + table_type = 'SYSTEM_VIEW', + gm_columns = [], + rowkey_columns = [], + normal_columns = [], + in_tenant_space = True, + view_definition = """ + SELECT CAST('def' AS CHAR(64)) AS CONSTRAINT_CATALOG, + CAST(d.database_name AS CHAR(128)) AS CONSTRAINT_SCHEMA, + CAST(c.constraint_name AS CHAR(64)) AS CONSTRAINT_NAME, + CAST(c.check_expr AS CHAR(2048)) AS CHECK_CLAUSE + FROM oceanbase.__all_database d + JOIN oceanbase.__all_table t ON d.database_id = t.database_id + JOIN oceanbase.__all_constraint c ON t.table_id = c.table_id + WHERE d.database_id > 500000 and d.in_recyclebin = 0 + AND t.table_type = 3 + AND c.constraint_type = 3 + """.replace("\n", " "), +) + +def_table_schema( + owner = 'xiaofeng.lby', + tablegroup_id = 'OB_INVALID_ID', + database_id = 'OB_INFORMATION_SCHEMA_ID', + table_name = 'REFERENTIAL_CONSTRAINTS', + table_id = '21351', + table_type = 'SYSTEM_VIEW', + gm_columns = [], + rowkey_columns = [], + normal_columns = [], + in_tenant_space = True, + view_definition = """ + + select + CAST('def' AS CHAR(64)) AS CONSTRAINT_CATALOG, + CAST(cd.database_name AS CHAR(128)) AS CONSTRAINT_SCHEMA, + CAST(f.foreign_key_name AS CHAR(128)) AS CONSTRAINT_NAME, + CAST('def' AS CHAR(64)) AS UNIQUE_CONSTRAINT_CATALOG, + CAST(pd.database_name AS CHAR(128)) AS UNIQUE_CONSTRAINT_SCHEMA, + CAST(CASE WHEN f.ref_cst_type = 1 THEN 'PRIMARY' + ELSE NULL END AS CHAR(128)) AS UNIQUE_CONSTRAINT_NAME, + CAST('NONE' AS CHAR(64)) AS MATCH_OPTION, + CAST(CASE WHEN f.update_action = 1 THEN 'RESTRICT' + WHEN f.update_action = 2 THEN 'CASCADE' + WHEN f.update_action = 3 THEN 'SET_NULL' + WHEN f.update_action = 4 THEN 'NO_ACTION' + WHEN f.update_action = 5 THEN 'SET_DEFAULT' + ELSE NULL END AS CHAR(64)) AS UPDATE_RULE, + CAST(CASE WHEN f.delete_action = 1 THEN 'RESTRICT' + WHEN f.delete_action = 2 THEN 'CASCADE' + WHEN f.delete_action = 3 THEN 'SET_NULL' + WHEN f.delete_action = 4 THEN 'NO_ACTION' + WHEN f.delete_action = 5 THEN 'SET_DEFAULT' + ELSE NULL END AS CHAR(64)) AS DELETE_RULE, + CAST(ct.table_name AS CHAR(256)) AS TABLE_NAME, + CAST(pt.table_name AS CHAR(256)) AS REFERENCED_TABLE_NAME + FROM oceanbase.__all_foreign_key f + JOIN oceanbase.__all_table ct on f.child_table_id = ct.table_id and f.is_parent_table_mock = 0 and f.ref_cst_type != 2 + JOIN oceanbase.__all_database cd on ct.database_id = cd.database_id + JOIN oceanbase.__all_table pt on f.parent_table_id = pt.table_id + JOIN oceanbase.__all_database pd on pt.database_id = pd.database_id + WHERE cd.database_id > 500000 and cd.in_recyclebin = 0 + AND ct.table_type = 3 + + union all + + select + CAST('def' AS CHAR(64)) AS CONSTRAINT_CATALOG, + CAST(cd.database_name AS CHAR(128)) AS CONSTRAINT_SCHEMA, + CAST(f.foreign_key_name AS CHAR(128)) AS CONSTRAINT_NAME, + CAST('def' AS CHAR(64)) AS UNIQUE_CONSTRAINT_CATALOG, + CAST(pd.database_name AS CHAR(128)) AS UNIQUE_CONSTRAINT_SCHEMA, + CAST(SUBSTR(it.table_name, 7 + INSTR(SUBSTR(it.table_name, 7), '_')) AS CHAR(128)) AS UNIQUE_CONSTRAINT_NAME, + CAST('NONE' AS CHAR(64)) AS MATCH_OPTION, + CAST(CASE WHEN f.update_action = 1 THEN 'RESTRICT' + WHEN f.update_action = 2 THEN 'CASCADE' + WHEN f.update_action = 3 THEN 'SET_NULL' + WHEN f.update_action = 4 THEN 'NO_ACTION' + WHEN f.update_action = 5 THEN 'SET_DEFAULT' + ELSE NULL END AS CHAR(64)) AS UPDATE_RULE, + CAST(CASE WHEN f.delete_action = 1 THEN 'RESTRICT' + WHEN f.delete_action = 2 THEN 'CASCADE' + WHEN f.delete_action = 3 THEN 'SET_NULL' + WHEN f.delete_action = 4 THEN 'NO_ACTION' + WHEN f.delete_action = 5 THEN 'SET_DEFAULT' + ELSE NULL END AS CHAR(64)) AS DELETE_RULE, + CAST(ct.table_name AS CHAR(256)) AS TABLE_NAME, + CAST(pt.table_name AS CHAR(256)) AS REFERENCED_TABLE_NAME + FROM oceanbase.__all_foreign_key f + JOIN oceanbase.__all_table ct on f.child_table_id = ct.table_id and f.is_parent_table_mock = 0 and f.ref_cst_type = 2 + JOIN oceanbase.__all_database cd on ct.database_id = cd.database_id + JOIN oceanbase.__all_table pt on f.parent_table_id = pt.table_id + JOIN oceanbase.__all_database pd on pt.database_id = pd.database_id + JOIN oceanbase.__all_table it on f.ref_cst_id = it.table_id + WHERE cd.database_id > 500000 and cd.in_recyclebin = 0 + AND ct.table_type = 3 + + union all + + select + CAST('def' AS CHAR(64)) AS CONSTRAINT_CATALOG, + CAST(cd.database_name AS CHAR(128)) AS CONSTRAINT_SCHEMA, + CAST(f.foreign_key_name AS CHAR(128)) AS CONSTRAINT_NAME, + CAST('def' AS CHAR(64)) AS UNIQUE_CONSTRAINT_CATALOG, + CAST(pd.database_name AS CHAR(128)) AS UNIQUE_CONSTRAINT_SCHEMA, + CAST(NULL AS CHAR(128)) AS UNIQUE_CONSTRAINT_NAME, + CAST('NONE' AS CHAR(64)) AS MATCH_OPTION, + CAST(CASE WHEN f.update_action = 1 THEN 'RESTRICT' + WHEN f.update_action = 2 THEN 'CASCADE' + WHEN f.update_action = 3 THEN 'SET_NULL' + WHEN f.update_action = 4 THEN 'NO_ACTION' + WHEN f.update_action = 5 THEN 'SET_DEFAULT' + ELSE NULL END AS CHAR(64)) AS UPDATE_RULE, + CAST(CASE WHEN f.delete_action = 1 THEN 'RESTRICT' + WHEN f.delete_action = 2 THEN 'CASCADE' + WHEN f.delete_action = 3 THEN 'SET_NULL' + WHEN f.delete_action = 4 THEN 'NO_ACTION' + WHEN f.delete_action = 5 THEN 'SET_DEFAULT' + ELSE NULL END AS CHAR(64)) AS DELETE_RULE, + CAST(ct.table_name AS CHAR(256)) AS TABLE_NAME, + CAST(pt.mock_fk_parent_table_name AS CHAR(256)) AS REFERENCED_TABLE_NAME + FROM oceanbase.__all_foreign_key f + JOIN oceanbase.__all_table ct on f.child_table_id = ct.table_id and f.is_parent_table_mock = 1 + JOIN oceanbase.__all_database cd on ct.database_id = cd.database_id + JOIN oceanbase.__all_mock_fk_parent_table pt on f.parent_table_id = pt.mock_fk_parent_table_id + JOIN oceanbase.__all_database pd on pt.database_id = pd.database_id + WHERE cd.database_id > 500000 and cd.in_recyclebin = 0 + AND ct.table_type = 3 + """.replace("\n", " "), +) + +def_table_schema( + owner = 'xiaofeng.lby', + tablegroup_id = 'OB_INVALID_ID', + database_id = 'OB_INFORMATION_SCHEMA_ID', + table_name = 'TABLE_CONSTRAINTS', + table_id = '21352', + table_type = 'SYSTEM_VIEW', + gm_columns = [], + rowkey_columns = [], + normal_columns = [], + in_tenant_space = True, + view_definition = """ + + SELECT + CAST('def' AS CHAR(64)) AS CONSTRAINT_CATALOG, + CAST(d.database_name AS CHAR(128)) AS CONSTRAINT_SCHEMA, + CAST('PRIMARY' AS CHAR(256)) AS CONSTRAINT_NAME, + CAST(d.database_name AS CHAR(128)) AS TABLE_SCHEMA, + CAST(t.table_name AS CHAR(256)) AS TABLE_NAME, + CAST('PRIMARY KEY' AS CHAR(11)) AS CONSTRAINT_TYPE, + CAST('YES' AS CHAR(3)) AS ENFORCED + FROM oceanbase.__all_database d + JOIN oceanbase.__all_table t ON d.database_id = t.database_id + WHERE (d.database_id = 201003 OR d.database_id > 500000) AND d.in_recyclebin = 0 + AND t.table_type = 3 + AND t.table_mode >> 16 & 1 = 0 + + union all + + SELECT + CAST('def' AS CHAR(64)) AS CONSTRAINT_CATALOG, + CAST(d.database_name AS CHAR(128)) AS CONSTRAINT_SCHEMA, + CAST(SUBSTR(it.table_name, 7 + INSTR(SUBSTR(it.table_name, 7), '_')) AS CHAR(256)) AS CONSTRAINT_NAME, + CAST(d.database_name AS CHAR(128)) AS TABLE_SCHEMA, + CAST(ut.table_name AS CHAR(256)) AS TABLE_NAME, + CAST('UNIQUE' AS CHAR(11)) AS CONSTRAINT_TYPE, + CAST('YES' AS CHAR(3)) AS ENFORCED + FROM oceanbase.__all_database d + JOIN oceanbase.__all_table it ON d.database_id = it.database_id + JOIN oceanbase.__all_table ut ON it.data_table_id = ut.table_id + WHERE d.database_id > 500000 AND d.in_recyclebin = 0 + AND it.table_type = 5 + AND it.index_type IN (2, 4, 8) + + union all + + SELECT + CAST('def' AS CHAR(64)) AS CONSTRAINT_CATALOG, + CAST(d.database_name AS CHAR(128)) AS CONSTRAINT_SCHEMA, + CAST(c.constraint_name AS CHAR(256)) AS CONSTRAINT_NAME, + CAST(d.database_name AS CHAR(128)) AS TABLE_SCHEMA, + CAST(t.table_name AS CHAR(256)) AS TABLE_NAME, + CAST('CHECK' AS CHAR(11)) AS CONSTRAINT_TYPE, + CAST(CASE WHEN c.enable_flag = 1 THEN 'YES' + ELSE 'NO' END AS CHAR(3)) AS ENFORCED + FROM oceanbase.__all_database d + JOIN oceanbase.__all_table t ON d.database_id = t.database_id + JOIN oceanbase.__all_constraint c ON t.table_id = c.table_id + WHERE d.database_id > 500000 AND d.in_recyclebin = 0 + AND t.table_type = 3 + AND c.constraint_type = 3 + + union all + + SELECT + CAST('def' AS CHAR(64)) AS CONSTRAINT_CATALOG, + CAST(f.constraint_schema AS CHAR(128)) AS CONSTRAINT_SCHEMA, + CAST(f.constraint_name AS CHAR(256)) AS CONSTRAINT_NAME, + CAST(f.constraint_schema AS CHAR(128)) AS TABLE_SCHEMA, + CAST(f.table_name AS CHAR(256)) AS TABLE_NAME, + CAST('FOREIGN KEY' AS CHAR(11)) AS CONSTRAINT_TYPE, + CAST('YES' AS CHAR(3)) AS ENFORCED + FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS f + + """.replace("\n", " "), +) # 21353 : GV$OB_TRANSACTION_SCHEDULERS # 21354 : V$OB_TRANSACTION_SCHEDULERS -# 21355 : INFORMATION_SCHEMA.TRIGGERS -# 21356 : INFORMATION_SCHEMA.PARTITIONS +def_table_schema( + owner = 'webber.wb', + tablegroup_id = 'OB_INVALID_ID', + table_name = 'TRIGGERS', + table_id = '21355', + database_id = 'OB_INFORMATION_SCHEMA_ID', + table_type = 'SYSTEM_VIEW', + rowkey_columns = [], + normal_columns = [], + gm_columns = [], + in_tenant_space = True, + view_definition = """SELECT CAST('def' AS CHAR(512)) AS TRIGGER_CATALOG, + CAST(db.database_name AS CHAR(64)) AS TRIGGER_SCHEMA, + CAST(trg.trigger_name AS CHAR(64)) AS TRIGGER_NAME, + CAST((case when trg.trigger_events=1 then 'INSERT' + when trg.trigger_events=2 then 'UPDATE' + when trg.trigger_events=4 then 'DELETE' end) + AS CHAR(6)) AS EVENT_MANIPULATION, + CAST('def' AS CHAR(512)) AS EVENT_OBJECT_CATALOG, + CAST(db.database_name AS CHAR(64)) AS EVENT_OBJECT_SCHEMA, + CAST(t.table_name AS CHAR(64)) AS EVENT_OBJECT_TABLE, + CAST(1 AS signed) AS ACTION_ORDER, + CAST(NULL AS CHAR(4194304)) AS ACTION_CONDITION, + CAST(trg.trigger_body AS CHAR(4194304)) AS ACTION_STATEMENT, + CAST('ROW' AS CHAR(9)) AS ACTION_ORIENTATION, + CAST((case when trg.TIMING_POINTS=4 then 'BEFORE' + when trg.TIMING_POINTS=8 then 'AFTER' end) + AS CHAR(6)) AS ACTION_TIMING, + CAST(NULL AS CHAR(64)) AS ACTION_REFERENCE_OLD_TABLE, + CAST(NULL AS CHAR(64)) AS ACTION_REFERENCE_NEW_TABLE, + CAST('OLD' AS CHAR(3)) AS ACTION_REFERENCE_OLD_ROW, + CAST('NEW' AS CHAR(3)) AS ACTION_REFERENCE_NEW_ROW, + CAST(trg.gmt_create AS DATETIME(2)) AS CREATED, + CAST(sql_mode_convert(trg.sql_mode) AS CHAR(8192)) AS SQL_MODE, + CAST(trg.trigger_priv_user AS CHAR(93)) AS DEFINER, + CAST((select charset from oceanbase.__tenant_virtual_collation + where id = substring_index(substring_index(trg.package_exec_env, ',', 2), ',', -1)) AS CHAR(32) + ) AS CHARACTER_SET_CLIENT, + CAST((select collation from oceanbase.__tenant_virtual_collation + where collation_type = substring_index(substring_index(trg.package_exec_env, ',', 3), ',', -1)) AS CHAR(32) + ) AS COLLATION_CONNECTION, + CAST((select collation from oceanbase.__tenant_virtual_collation + where collation_type = substring_index(substring_index(trg.package_exec_env, ',', 4), ',', -1)) AS CHAR(32) + ) AS DATABASE_COLLATION + FROM oceanbase.__all_tenant_trigger trg + JOIN oceanbase.__all_database db on trg.database_id = db.database_id + JOIN oceanbase.__all_table t on trg.base_object_id = t.table_id + WHERE db.database_name != '__recyclebin' and db.in_recyclebin = 0 +""".replace("\n", " "), +) + +def_table_schema( + owner = 'yibo.tyf', + tablegroup_id = 'OB_INVALID_ID', + database_id = 'OB_INFORMATION_SCHEMA_ID', + table_name = 'PARTITIONS', + table_id = '21356', + table_type = 'SYSTEM_VIEW', + gm_columns = [], + rowkey_columns = [], + normal_columns = [], + in_tenant_space = True, + view_definition = """SELECT + CAST('def' as CHAR(4096)) AS TABLE_CATALOG, + DB.DATABASE_NAME AS TABLE_SCHEMA, + T.TABLE_NAME AS TABLE_NAME, + P.PART_NAME AS PARTITION_NAME, + SP.SUB_PART_NAME AS SUBPARTITION_NAME, + CAST(PART_POSITION AS UNSIGNED) AS PARTITION_ORDINAL_POSITION, + CAST(SUB_PART_POSITION AS UNSIGNED) AS SUBPARTITION_ORDINAL_POSITION, + CAST(CASE WHEN T.PART_LEVEL = 0 + THEN NULL + ELSE (CASE T.PART_FUNC_TYPE + WHEN 0 THEN 'HASH' + WHEN 1 THEN 'KEY' + WHEN 2 THEN 'KEY' + WHEN 3 THEN 'RANGE' + WHEN 4 THEN 'RANGE COLUMNS' + WHEN 5 THEN 'LIST' + WHEN 6 THEN 'LIST COLUMNS' + WHEN 7 THEN 'RANGE' + END) + END AS CHAR(13)) PARTITION_METHOD, + CAST(CASE WHEN (T.PART_LEVEL = 0 OR T.PART_LEVEL = 1) + THEN NULL + ELSE (CASE T.SUB_PART_FUNC_TYPE + WHEN 0 THEN 'HASH' + WHEN 1 THEN 'KEY' + WHEN 2 THEN 'KEY' + WHEN 3 THEN 'RANGE' + WHEN 4 THEN 'RANGE COLUMNS' + WHEN 5 THEN 'LIST' + WHEN 6 THEN 'LIST COLUMNS' + WHEN 7 THEN 'RANGE' + END) + END AS CHAR(13)) SUBPARTITION_METHOD, + CAST(CASE WHEN (T.PART_LEVEL = 0) + THEN NULL + ELSE T.PART_FUNC_EXPR + END AS CHAR(2048)) PARTITION_EXPRESSION, + CAST(CASE WHEN (T.PART_LEVEL = 0 OR T.PART_LEVEL = 1) + THEN NULL + ELSE T.SUB_PART_FUNC_EXPR + END AS CHAR(2048)) SUBPARTITION_EXPRESSION, + CAST(CASE WHEN (T.PART_LEVEL = 0) + THEN NULL + ELSE (CASE WHEN LENGTH(P.HIGH_BOUND_VAL) > 0 + THEN P.HIGH_BOUND_VAL + ELSE P.LIST_VAL + END) + END AS CHAR(4096)) AS PARTITION_DESCRIPTION, + CAST(CASE WHEN (T.PART_LEVEL = 0 OR T.PART_LEVEL = 1) + THEN NULL + ELSE (CASE WHEN LENGTH(SP.HIGH_BOUND_VAL) > 0 + THEN SP.HIGH_BOUND_VAL + ELSE SP.LIST_VAL + END) + END AS CHAR(4096)) AS SUBPARTITION_DESCRIPTION, + CAST(TS.ROW_CNT AS UNSIGNED) AS TABLE_ROWS, + CAST(TS.AVG_ROW_LEN AS UNSIGNED) AS AVG_ROW_LENGTH, + CAST(NULL AS UNSIGNED) AS DATA_LENGTH, + CAST(NULL AS UNSIGNED) AS MAX_DATA_LENGTH, + CAST(NULL AS UNSIGNED) AS INDEX_LENGTH, + CAST(NULL AS UNSIGNED) AS DATA_FREE, + CASE T.PART_LEVEL + WHEN 0 THEN T.GMT_CREATE + WHEN 1 THEN P.GMT_CREATE + WHEN 2 THEN SP.GMT_CREATE + END AS CREATE_TIME, + CAST(NULL AS DATETIME) AS UPDATE_TIME, + CAST(NULL AS DATETIME) AS CHECK_TIME, + CAST(NULL AS SIGNED) AS CHECKSUM, + CAST(CASE T.PART_LEVEL + WHEN 0 THEN NULL + WHEN 1 THEN P.COMMENT + WHEN 2 THEN SP.COMMENT + END AS CHAR(1024)) AS PARTITION_COMMENT, + CAST('default' AS CHAR(256)) NODEGROUP, + CAST(TP.TABLESPACE_NAME AS CHAR(268)) AS TABLESPACE_NAME +FROM + OCEANBASE.__ALL_TABLE T + JOIN OCEANBASE.__ALL_DATABASE DB ON T.DATABASE_ID = DB.DATABASE_ID AND T.TENANT_ID = DB.TENANT_ID + LEFT JOIN ( + SELECT + TENANT_ID, + TABLE_ID, + PART_ID, + PART_NAME, + HIGH_BOUND_VAL, + LIST_VAL, + TABLESPACE_ID, + GMT_CREATE, + COMMENT, + ROW_NUMBER() OVER(PARTITION BY TENANT_ID,TABLE_ID ORDER BY PART_IDX) AS PART_POSITION + FROM OCEANBASE.__ALL_PART + ) P ON T.TABLE_ID = P.TABLE_ID AND T.TENANT_ID = P.TENANT_ID + LEFT JOIN ( + SELECT + TENANT_ID, + TABLE_ID, + PART_ID, + SUB_PART_ID, + SUB_PART_NAME, + HIGH_BOUND_VAL, + LIST_VAL, + TABLESPACE_ID, + GMT_CREATE, + COMMENT, + ROW_NUMBER() OVER(PARTITION BY TENANT_ID,TABLE_ID,PART_ID ORDER BY SUB_PART_IDX) AS SUB_PART_POSITION + FROM OCEANBASE.__ALL_SUB_PART + ) SP ON T.TABLE_ID = SP.TABLE_ID AND P.PART_ID = SP.PART_ID AND T.TENANT_ID = SP.TENANT_ID + + LEFT JOIN OCEANBASE.__ALL_TENANT_TABLESPACE TP ON TP.TABLESPACE_ID = IFNULL(SP.TABLESPACE_ID, P.TABLESPACE_ID) AND TP.TENANT_ID = T.TENANT_ID + LEFT JOIN OCEANBASE.__ALL_TABLE_STAT TS ON T.TENANT_ID = TS.TENANT_ID AND TS.TABLE_ID = T.TABLE_ID AND TS.PARTITION_ID = CASE T.PART_LEVEL WHEN 0 THEN T.TABLE_ID WHEN 1 THEN P.PART_ID WHEN 2 THEN SP.SUB_PART_ID END +WHERE T.TABLE_TYPE IN (3,6,8,9) + """.replace("\n", " "), + +) + # 21357: DBA_OB_ARBITRATION_SERVICE # 21358: CDB_OB_LS_ARB_REPLICA_TASKS @@ -23783,6 +24771,9 @@ FROM oceanbase.__all_cluster_event_history # 21367: GV$OB_KV_HOTKEY_STAT # 21368: V$OB_KV_HOTKEY_STAT + + + ################################################################################ # Oracle System View (25000, 30000] # Data Dictionary View (25000, 28000] @@ -23933,7 +24924,7 @@ def_table_schema( WHEN INDEX_STATUS = 4 THEN 'INELEGIBLE' WHEN INDEX_STATUS = 5 THEN 'ERROR' ELSE 'UNUSABLE' END - ELSE 'VALID' END AS VARCHAR2(10)) AS STATUS + ELSE CASE WHEN OBJECT_STATUS = 1 THEN 'VALID' ELSE 'INVALID' END END AS VARCHAR2(10)) AS STATUS ,CASE WHEN TABLE_TYPE IN (6,8,9) THEN 'Y' ELSE 'N' END AS TEMPORARY ,CASE WHEN TABLE_TYPE IN (0,1) THEN 'Y' @@ -24464,7 +25455,7 @@ def_table_schema( WHEN INDEX_STATUS = 4 THEN 'INELEGIBLE' WHEN INDEX_STATUS = 5 THEN 'ERROR' ELSE 'UNUSABLE' END - ELSE 'VALID' END AS VARCHAR2(10)) AS STATUS + ELSE CASE WHEN OBJECT_STATUS = 1 THEN 'VALID' ELSE 'INVALID' END END AS VARCHAR2(10)) AS STATUS ,CASE WHEN TABLE_TYPE IN (6,8,9) THEN 'Y' ELSE 'N' END AS TEMPORARY ,CASE WHEN TABLE_TYPE IN (0,1) THEN 'Y' @@ -25031,7 +26022,7 @@ def_table_schema( WHEN INDEX_STATUS = 4 THEN 'INELEGIBLE' WHEN INDEX_STATUS = 5 THEN 'ERROR' ELSE 'UNUSABLE' END - ELSE 'VALID' END AS VARCHAR2(10)) AS STATUS + ELSE CASE WHEN OBJECT_STATUS = 1 THEN 'VALID' ELSE 'INVALID' END END AS VARCHAR2(10)) AS STATUS ,CASE WHEN TABLE_TYPE IN (6,8,9) THEN 'Y' ELSE 'N' END AS TEMPORARY ,CASE WHEN TABLE_TYPE IN (0,1) THEN 'Y' @@ -26622,7 +27613,7 @@ SELECT /*+NO_USE_NL(T)*/ 23, 'CHAR', 24, 'HEX_STRING', - 25, 'EXT', + 25, 'UNDEFINED', 26, 'UNKNOWN', 27, 'TINYTEXT', @@ -26733,7 +27724,7 @@ FROM TABLE_TYPE FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() - AND TABLE_TYPE IN (0,3,5,8,9)) T + AND TABLE_TYPE IN (0,1,3,4,5,7,8,9)) T JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT DB ON DB.TENANT_ID = T.TENANT_ID @@ -26836,7 +27827,7 @@ SELECT/*+leading(DB,T,C,"STAT")*/ 23, 'CHAR', 24, 'HEX_STRING', - 25, 'EXT', + 25, 'UNDEFINED', 26, 'UNKNOWN', 27, 'TINYTEXT', @@ -26947,7 +27938,7 @@ FROM TABLE_TYPE FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() - AND TABLE_TYPE IN (0,3,5,8,9)) T + AND TABLE_TYPE IN (0,1,3,4,5,7,8,9)) T JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT DB ON DB.TENANT_ID = T.TENANT_ID @@ -27047,7 +28038,7 @@ SELECT /*+NO_USE_NL(T)*/ 23, 'CHAR', 24, 'HEX_STRING', - 25, 'EXT', + 25, 'UNDEFINED', 26, 'UNKNOWN', 27, 'TINYTEXT', @@ -27158,7 +28149,7 @@ FROM TABLE_TYPE FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() - AND TABLE_TYPE IN (0,3,5,8,9)) T + AND TABLE_TYPE IN (0,1,3,4,5,7,8,9)) T JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT DB ON DB.TENANT_ID = T.TENANT_ID @@ -45432,10 +46423,12 @@ def_table_schema( # 28174: GV$OB_PLAN_REAL_INFO # 28175: V$OB_PLAN_REAL_INFO + # 28176: V$OB_ARCHIVE_DEST_STATUS # 28177: DBA_OB_LS_LOG_ARCHIVE_PROGRESS # 28178: DBA_OB_LS_LOG_RESTORE_STAT + ################################################################################ # Lob Table (50000, 70000) ################################################################################ diff --git a/src/share/ob_common_rpc_proxy.h b/src/share/ob_common_rpc_proxy.h index 9c0fefb143..371a54752f 100644 --- a/src/share/ob_common_rpc_proxy.h +++ b/src/share/ob_common_rpc_proxy.h @@ -295,6 +295,8 @@ public: //----Definitions for sync rewrite rules---- RPC_S(PR5 admin_sync_rewrite_rules, obrpc::OB_ADMIN_SYNC_REWRITE_RULES, (ObSyncRewriteRuleArg)); //----End of Definitions for sync rewrite rules---- + RPC_S(PRD recompile_all_views_batch, obrpc::OB_RECOMPILE_ALL_VIEWS_BATCH, (ObRecompileAllViewsBatchArg)); + RPC_S(PRD try_add_dep_infos_for_synonym_batch, obrpc::OB_TRY_ADD_DEP_INFOS_FOR_SYNONYM_BATCH, (ObTryAddDepInofsForSynonymBatchArg)); public: void set_rs_mgr(share::ObRsMgr &rs_mgr) { diff --git a/src/share/ob_define.h b/src/share/ob_define.h index 1328cc49f6..8cc8072cb9 100644 --- a/src/share/ob_define.h +++ b/src/share/ob_define.h @@ -565,6 +565,18 @@ const char *const DISABLED_WITH_READONLY_CLUSTER_MODE_STR = "disabled_with_reado static const int64_t MODIFY_GC_SNAPSHOT_INTERVAL = 2 * 1000 * 1000; //2s +//reserved table id for information schema +const uint64_t OB_ALL_VIRTUAL_PARAMETERS_OLD_TID = 12037; // "PARAMETERS_OLD" +const uint64_t OB_ALL_VIRTUAL_TABLE_CONSTRAINTS_OLD_TID = 12005; // "TABLE_CONSTRAINTS_OLD" +const uint64_t OB_ALL_VIRTUAL_REFERENTIAL_CONSTRAINTS_OLD_TID = 12177; // "REFERENTIAL_CONSTRAINTS_OLD" +const uint64_t OB_ALL_VIRTUAL_CHECK_CONSTRAINTS_OLD_TID = 12235; // "CHECK_CONSTRAINTS_OLD" +const uint64_t OB_ALL_VIRTUAL_TRIGGERS_OLD_TID = 12221; // "TRIGGERS_OLD" +const uint64_t OB_TABLE_PRIVILEGES_OLD_TID = 12002; // not used anymore for "TABLE_PRIVILEGES" has a new table id +const uint64_t OB_USER_PRIVILEGES_OLD_TID = 12003; // not used anymore for "USER_PRIVILEGES" has a new table id +const uint64_t OB_SCHEMA_PRIVILEGES_OLD_TID = 12004; // not used anymore for "SCHEMA_PRIVILEGES" has a new table id +const uint64_t OB_PARTITIONS_OLD_TID = 12007; // not used anymore for "PARTITIONS" has a new table id +//end of reserved table id for information schema + ////////////////typedef typedef common::ObSEArray PartitionIdArray; /////////////// diff --git a/src/share/ob_rpc_struct.cpp b/src/share/ob_rpc_struct.cpp index 91b6e4752e..e3ee3fc498 100644 --- a/src/share/ob_rpc_struct.cpp +++ b/src/share/ob_rpc_struct.cpp @@ -2584,6 +2584,7 @@ int ObDependencyObjDDLArg::assign(const ObDependencyObjDDLArg &other) int ret = OB_SUCCESS; if (this != &other) { tenant_id_ = other.tenant_id_; + reset_view_column_infos_ = other.reset_view_column_infos_; if (OB_FAIL(ObDDLArg::assign(other))) { LOG_WARN("fail to assign ddl arg", KR(ret)); } else if (OB_FAIL(insert_dep_objs_.assign(other.insert_dep_objs_))) { @@ -2592,6 +2593,8 @@ int ObDependencyObjDDLArg::assign(const ObDependencyObjDDLArg &other) LOG_WARN("fail to assign keys", KR(ret), K(other)); } else if (OB_FAIL(delete_dep_objs_.assign(other.delete_dep_objs_))) { LOG_WARN("fail to assign keys", KR(ret), K(other)); + } else if (OB_FAIL(schema_.assign(other.schema_))) { + LOG_WARN("fail to assign schema", K(ret)); } } return ret; @@ -2601,7 +2604,9 @@ OB_SERIALIZE_MEMBER((ObDependencyObjDDLArg, ObDDLArg), tenant_id_, insert_dep_objs_, update_dep_objs_, - delete_dep_objs_); + delete_dep_objs_, + schema_, + reset_view_column_infos_); OB_SERIALIZE_MEMBER(ObCheckFrozenScnArg, frozen_scn_); @@ -4629,11 +4634,28 @@ int ObReportSingleReplicaArg::assign(const ObReportSingleReplicaArg &other) OB_SERIALIZE_MEMBER(ObReportSingleReplicaArg, tenant_id_, ls_id_); OB_SERIALIZE_MEMBER(ObSetDiskValidArg); + +int ObCreateSynonymArg::assign(const ObCreateSynonymArg &other) +{ + int ret = OB_SUCCESS; + db_name_ = other.db_name_; + obj_db_name_ = other.obj_db_name_; + if (OB_FAIL(ObDDLArg::assign(other))) { + LOG_WARN("failed to assign ddl arg", K(ret)); + } else if (OB_FAIL(synonym_info_.assign(other.synonym_info_))) { + LOG_WARN("failed to assign synonym info", K(ret)); + } else if (OB_FAIL(dependency_info_.assign(other.dependency_info_))) { + LOG_WARN("failed to assign dependency info", K(ret)); + } + return ret; +} + OB_SERIALIZE_MEMBER((ObCreateSynonymArg, ObDDLArg), or_replace_, synonym_info_, db_name_, - obj_db_name_); + obj_db_name_, + dependency_info_); OB_SERIALIZE_MEMBER((ObDropSynonymArg, ObDDLArg), tenant_id_, @@ -7236,6 +7258,7 @@ int ObFetchLocationResult::set_servers( return servers_.assign(servers); } + OB_SERIALIZE_MEMBER(ObSyncRewriteRuleArg, tenant_id_); OB_SERIALIZE_MEMBER(ObInitTenantConfigArg, tenant_configs_); @@ -7246,6 +7269,18 @@ int ObInitTenantConfigArg::assign(const ObInitTenantConfigArg &other) if (this == &other) { } else if (OB_FAIL(tenant_configs_.assign(other.tenant_configs_))) { LOG_WARN("fail to assign tenant configs", KR(ret), K(other)); + } + return ret; +} + +int ObRecompileAllViewsBatchArg::assign(const ObRecompileAllViewsBatchArg &other) +{ + int ret = OB_SUCCESS; + tenant_id_ = other.tenant_id_; + if (OB_FAIL(ObDDLArg::assign(other))) { + LOG_WARN("failed to assign ddl arg", K(ret)); + } else if (OB_FAIL(view_ids_.assign(other.view_ids_))) { + LOG_WARN("failed to assign view ids", K(ret)); } return ret; } @@ -7265,10 +7300,27 @@ int ObInitTenantConfigRes::assign(const ObInitTenantConfigRes &other) int ret = OB_SUCCESS; if (this != &other) { ret_ = other.ret_; + } + return ret; +} + +OB_SERIALIZE_MEMBER((ObRecompileAllViewsBatchArg, ObDDLArg), + tenant_id_, view_ids_); + +int ObTryAddDepInofsForSynonymBatchArg::assign(const ObTryAddDepInofsForSynonymBatchArg &other) +{ + int ret = OB_SUCCESS; + tenant_id_ = other.tenant_id_; + if (OB_FAIL(ObDDLArg::assign(other))) { + LOG_WARN("failed to assign ddl arg", K(ret)); + } else if (OB_FAIL(synonym_ids_.assign(other.synonym_ids_))) { + LOG_WARN("failed to assign view ids", K(ret)); } return ret; } +OB_SERIALIZE_MEMBER((ObTryAddDepInofsForSynonymBatchArg, ObDDLArg), + tenant_id_, synonym_ids_); }//end namespace obrpc }//end namepsace oceanbase diff --git a/src/share/ob_rpc_struct.h b/src/share/ob_rpc_struct.h index e2784ff84b..536cc4983d 100644 --- a/src/share/ob_rpc_struct.h +++ b/src/share/ob_rpc_struct.h @@ -1033,11 +1033,13 @@ ObCreateSynonymArg(): synonym_info_(), db_name_() {} - TO_STRING_KV(K_(synonym_info), K_(db_name), K_(obj_db_name)); + int assign(const ObCreateSynonymArg &other); + TO_STRING_KV(K_(synonym_info), K_(db_name), K_(obj_db_name), K_(dependency_info)); bool or_replace_; share::schema::ObSynonymInfo synonym_info_; common::ObString db_name_; common::ObString obj_db_name_; + share::schema::ObDependencyInfo dependency_info_; }; struct ObDropSynonymArg : ObDDLArg @@ -6748,7 +6750,8 @@ struct ObDependencyObjDDLArg: public ObDDLArg OB_UNIS_VERSION(1); public: ObDependencyObjDDLArg() - : tenant_id_(OB_INVALID_ID) + : tenant_id_(OB_INVALID_ID), + reset_view_column_infos_(false) { } bool is_valid() const { return tenant_id_ != OB_INVALID_ID; } @@ -6757,12 +6760,15 @@ public: TO_STRING_KV(K_(tenant_id), K_(insert_dep_objs), K_(update_dep_objs), - K_(delete_dep_objs)); + K_(delete_dep_objs), + K_(reset_view_column_infos)); uint64_t tenant_id_; share::schema::ObReferenceObjTable::DependencyObjKeyItemPairs insert_dep_objs_; share::schema::ObReferenceObjTable::DependencyObjKeyItemPairs update_dep_objs_; share::schema::ObReferenceObjTable::DependencyObjKeyItemPairs delete_dep_objs_; + share::schema::ObTableSchema schema_; + bool reset_view_column_infos_; // for oracle mode, recompile invalid view will reset its data type to undefined }; struct ObCheckServerEmptyArg @@ -8158,6 +8164,42 @@ private: int ret_; }; +struct ObRecompileAllViewsBatchArg: public ObDDLArg +{ + OB_UNIS_VERSION(1); +public: + ObRecompileAllViewsBatchArg() + : tenant_id_(OB_INVALID_ID), + view_ids_() + { + } + bool is_valid() const { return tenant_id_ != OB_INVALID_ID && !view_ids_.empty(); } + int assign(const ObRecompileAllViewsBatchArg &other); + virtual bool is_allow_when_upgrade() const { return true; } + TO_STRING_KV(K_(tenant_id), K_(view_ids)); + + uint64_t tenant_id_; + ObSArray view_ids_; +}; + +struct ObTryAddDepInofsForSynonymBatchArg: public ObDDLArg +{ + OB_UNIS_VERSION(1); +public: + ObTryAddDepInofsForSynonymBatchArg() + : tenant_id_(OB_INVALID_ID), + synonym_ids_() + { + } + bool is_valid() const { return tenant_id_ != OB_INVALID_ID && !synonym_ids_.empty(); } + int assign(const ObTryAddDepInofsForSynonymBatchArg &other); + virtual bool is_allow_when_upgrade() const { return true; } + TO_STRING_KV(K_(tenant_id), K_(synonym_ids)); + + uint64_t tenant_id_; + ObSArray synonym_ids_; +}; + }//end namespace obrpc }//end namespace oceanbase #endif diff --git a/src/share/ob_upgrade_utils.cpp b/src/share/ob_upgrade_utils.cpp index 18dbaae924..09f08f3a1a 100644 --- a/src/share/ob_upgrade_utils.cpp +++ b/src/share/ob_upgrade_utils.cpp @@ -778,6 +778,7 @@ int ObBaseUpgradeProcessor::init( #undef FORMAT_STR /* =========== special upgrade processor start ============= */ + int ObUpgradeFor4100Processor::post_upgrade() { int ret = OB_SUCCESS; @@ -787,6 +788,8 @@ int ObUpgradeFor4100Processor::post_upgrade() } else if (OB_FAIL(post_upgrade_for_srs())) { LOG_WARN("post upgrade for srs failed", K(ret)); } else if (OB_FAIL(init_rewrite_rule_version(tenant_id))) { + LOG_WARN("fail to check inner stat", KR(ret)); + } else if (OB_FAIL(recompile_all_views_and_synonyms(tenant_id))) { LOG_WARN("fail to init rewrite rule version", K(ret), K(tenant_id)); } return ret; @@ -835,6 +838,89 @@ int ObUpgradeFor4100Processor::post_upgrade_for_srs() } LOG_INFO("add tenant srs finish", K(ret), K(tenant_id_), K(affected_rows), "cost", ObTimeUtility::current_time() - start); + return ret; +} + +int ObUpgradeFor4100Processor::recompile_all_views_and_synonyms(const uint64_t tenant_id) +{ + int ret = OB_SUCCESS; + int tmp_ret = OB_SUCCESS; + CK(OB_NOT_NULL(GCTX.rs_rpc_proxy_) && OB_NOT_NULL(GCTX.schema_service_)); + ObSchemaGetterGuard schema_guard; + ObArray all_views; + ObArray all_synonyms; + const int64_t batch_size = 128; + const int64_t timeout = GCONF.internal_sql_execute_timeout; + if (OB_SUCC(ret)) { + if (OB_FAIL(GCTX.schema_service_->get_tenant_schema_guard(tenant_id, schema_guard))) { + LOG_WARN("failed to get tenant schema guard", K(ret)); + } else if (OB_FAIL(schema_guard.get_view_schemas_in_tenant(tenant_id, all_views))) { + LOG_WARN("failed to get view schemas", K(ret)); + } else if (OB_FAIL(schema_guard.get_synonym_infos_in_tenant(tenant_id, all_synonyms))) { + LOG_WARN("failed to get synonym infos", K(ret)); + } else { + int64_t idx = 0; + while (OB_SUCC(ret) && idx < all_views.count()) { + ObArray batch_ids; + for (int64_t i = 0; OB_SUCC(ret) && i < batch_size && idx < all_views.count(); ++idx) { + if (OB_ISNULL(all_views.at(idx))) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("failed to get view schema", K(ret), K(idx)); + } else if (!all_views.at(idx)->is_view_table()) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("get wrong schema", K(ret), K(*all_views.at(idx))); + } else if (ObObjectStatus::VALID == all_views.at(idx)->get_object_status()) { + OZ (batch_ids.push_back(all_views.at(idx)->get_table_id())); + ++i; + } + } + if (OB_SUCC(ret)) { + int64_t start_time = ObTimeUtility::current_time(); + SMART_VAR(obrpc::ObRecompileAllViewsBatchArg, recompile_arg) { + recompile_arg.tenant_id_ = tenant_id; + recompile_arg.exec_tenant_id_ = tenant_id; + if (batch_ids.empty()) { + } else if (OB_FAIL(recompile_arg.view_ids_.assign(batch_ids))) { + LOG_WARN("failed to assign ids", K(ret)); + } else if (OB_FAIL(GCTX.rs_rpc_proxy_->timeout(timeout).recompile_all_views_batch(recompile_arg))) { + LOG_WARN("failed to recompile batch views", K(ret), K(recompile_arg)); + } else { + LOG_INFO("succ reset batch view", KR(ret), K(start_time), + "cost_time", ObTimeUtility::current_time() - start_time); + } + } + } + } + idx = 0; + while (OB_SUCC(ret) && idx < all_synonyms.count()) { + ObArray batch_ids; + for (int64_t i = 0; OB_SUCC(ret) && i < batch_size && idx < all_synonyms.count(); ++i, ++idx) { + if (OB_ISNULL(all_synonyms.at(idx))) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("failed to get view schema", K(ret), K(idx)); + } else { + OZ (batch_ids.push_back(all_synonyms.at(idx)->get_synonym_id())); + } + } + if (OB_SUCC(ret)) { + int64_t start_time = ObTimeUtility::current_time(); + SMART_VAR(obrpc::ObTryAddDepInofsForSynonymBatchArg, dep_info_arg) { + dep_info_arg.tenant_id_ = tenant_id; + dep_info_arg.exec_tenant_id_ = tenant_id; + if (batch_ids.empty()) { + } else if (OB_FAIL(dep_info_arg.synonym_ids_.assign(batch_ids))) { + LOG_WARN("failed to assign ids", K(ret)); + } else if (OB_FAIL(GCTX.rs_rpc_proxy_->timeout(timeout).try_add_dep_infos_for_synonym_batch(dep_info_arg))) { + LOG_WARN("failed to add dep infos", K(ret), K(dep_info_arg)); + } else { + LOG_INFO("succ add dep info batch", KR(ret), K(start_time), + "cost_time", ObTimeUtility::current_time() - start_time); + } + } + } + } + } + } return ret; } diff --git a/src/share/ob_upgrade_utils.h b/src/share/ob_upgrade_utils.h index 454165f45b..bd4f329887 100644 --- a/src/share/ob_upgrade_utils.h +++ b/src/share/ob_upgrade_utils.h @@ -183,8 +183,9 @@ public: virtual int pre_upgrade() override { return common::OB_SUCCESS; } virtual int post_upgrade() override; private: - int post_upgrade_for_srs(); - int init_rewrite_rule_version(const uint64_t tenant_id); + int post_upgrade_for_srs(); + int init_rewrite_rule_version(const uint64_t tenant_id); + static int recompile_all_views_and_synonyms(const uint64_t tenant_id); }; /* =========== special upgrade processor end ============= */ diff --git a/src/share/schema/ob_dependency_info.cpp b/src/share/schema/ob_dependency_info.cpp index 4447ba337b..8548c42051 100644 --- a/src/share/schema/ob_dependency_info.cpp +++ b/src/share/schema/ob_dependency_info.cpp @@ -279,7 +279,6 @@ int ObDependencyInfo::insert_schema_object_dependency(common::ObISQLClient &tran bool is_replace, bool only_history) { int ret = OB_SUCCESS; - ObDependencyInfo& dep_info = *this; const uint64_t exec_tenant_id = ObSchemaUtils::get_exec_tenant_id(dep_info.get_tenant_id()); ObDMLSqlSplicer dml; @@ -337,14 +336,14 @@ int ObDependencyInfo::collect_dep_infos(const ObIArray &sche if (!s_objs.is_valid() // object may depend on self || (is_pl - && dep_obj_type == s_objs.get_schema_object_type())) { + && dep_obj_type == ObSchemaObjVersion::get_schema_object_type(s_objs.object_type_))) { continue; } dep.set_dep_obj_id(OB_INVALID_ID); dep.set_dep_obj_type(dep_obj_type); dep.set_dep_obj_owner_id(OB_INVALID_ID); dep.set_ref_obj_id(s_objs.get_object_id()); - dep.set_ref_obj_type(s_objs.get_schema_object_type()); + dep.set_ref_obj_type(ObSchemaObjVersion::get_schema_object_type(s_objs.object_type_)); dep.set_order(order); ++order; dep.set_dep_timestamp(-1); @@ -366,6 +365,189 @@ int ObDependencyInfo::collect_dep_infos(const ObIArray &sche return ret; } +int ObDependencyInfo::collect_dep_infos(ObReferenceObjTable &ref_objs, + ObIArray &deps, + ObObjectType dep_obj_type, + uint64_t dep_obj_id, + int64_t &max_version) +{ + int ret = OB_SUCCESS; + int64_t order = 0; + max_version = OB_INVALID_VERSION; + auto &ref_obj_map = ref_objs.get_ref_obj_table(); + for (auto it = ref_obj_map.begin(); OB_SUCC(ret) && it != ref_obj_map.end(); ++it) { + ObDependencyInfo dep; + uint64_t curr_dep_obj_id = it->first.dep_obj_id_; + // create view path, only record directly dependency + if (curr_dep_obj_id == dep_obj_id) { + for (int64_t i = 0; OB_SUCC(ret) && i < it->second->ref_obj_versions_.count(); ++i) { + ObDependencyInfo dep; + max_version = std::max(it->second->ref_obj_versions_.at(i).version_, max_version); + dep.set_dep_obj_id(OB_INVALID_ID); + dep.set_dep_obj_type(it->first.dep_obj_type_); + dep.set_dep_obj_owner_id(it->first.dep_db_id_); + dep.set_ref_obj_id(it->second->ref_obj_versions_.at(i).object_id_); + dep.set_ref_obj_type(ObSchemaObjVersion::get_schema_object_type(it->second->ref_obj_versions_.at(i).object_type_)); + dep.set_order(order); + ++order; + dep.set_dep_timestamp(-1); + dep.set_ref_timestamp(it->second->ref_obj_versions_.at(i).version_); + OZ (deps.push_back(dep)); + } + } + } + + return ret; +} + +int ObDependencyInfo::collect_all_dep_objs(uint64_t tenant_id, + uint64_t ref_obj_id, + common::ObISQLClient &sql_proxy, + common::ObIArray> &objs) +{ + int ret = OB_SUCCESS; + ObSqlString sql; + const uint64_t exec_tenant_id = gen_meta_tenant_id(tenant_id); + SMART_VAR(common::ObMySQLProxy::MySQLResult, res) { + common::sqlclient::ObMySQLResult *result = NULL; + if (OB_FAIL(sql.assign_fmt("SELECT dep_obj_id, dep_obj_type FROM %s WHERE tenant_id = %lu AND ref_obj_id = %lu", + OB_ALL_TENANT_DEPENDENCY_TNAME, + ObSchemaUtils::get_extract_tenant_id(exec_tenant_id, tenant_id), + ref_obj_id))) { + LOG_WARN("failed to assign sql", K(ret)); + } else if (OB_FAIL(sql_proxy.read(res, tenant_id, sql.ptr()))) { + LOG_WARN("execute sql failed", K(ret), K(sql)); + } else if (OB_ISNULL(result = res.get_result())) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("result is null", K(ret)); + } else { + while (OB_SUCC(result->next())) { + int64_t tmp_obj_id = OB_INVALID_ID; + int64_t tmp_type = static_cast (share::schema::ObObjectType::INVALID); + EXTRACT_INT_FIELD_MYSQL(*result, "dep_obj_id", tmp_obj_id, int64_t); + EXTRACT_INT_FIELD_MYSQL(*result, "dep_obj_type", tmp_type, int64_t); + if (OB_FAIL(ret)) { + } else if (tmp_type <= static_cast (share::schema::ObObjectType::INVALID) + || tmp_type >= static_cast (share::schema::ObObjectType::MAX_TYPE)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("get wrong obj type", K(ret)); + } else if (ref_obj_id == tmp_obj_id) { + // skip + } else if (OB_FAIL(objs.push_back({static_cast (tmp_obj_id), static_cast (tmp_type)}))) { + LOG_WARN("failed to push back obj", K(ret)); + } + } + if (OB_ITER_END == ret) { + ret = OB_SUCCESS; + } else { + ret = OB_SUCC(ret) ? OB_ERR_UNEXPECTED : ret; + LOG_WARN("read dependency info failed", K(ret)); + } + } + } + return ret; +} + +int ObDependencyInfo::modify_dep_obj_status(common::ObMySQLTransaction &trans, + uint64_t tenant_id, + uint64_t obj_id, + rootserver::ObDDLOperator &ddl_operator, + share::schema::ObMultiVersionSchemaService &schema_service) +{ + int ret = OB_SUCCESS; + uint64_t data_version = 0; + ObSchemaGetterGuard schema_guard; + common::hash::ObHashSet obj_id_set; + const int64_t BKT_NUM = 32; + if (OB_FAIL(GET_MIN_DATA_VERSION(tenant_id, data_version))) { + LOG_WARN("failed to get data version", K(ret)); + } else if (data_version < DATA_VERSION_4_1_0_0) { + // do nothing + } else if (OB_FAIL(obj_id_set.create(BKT_NUM))) { + LOG_WARN("failed to create hash set ", K(ret)); + } else if (OB_FAIL(schema_service.get_tenant_schema_guard(tenant_id, schema_guard))) { + LOG_WARN("failed to get schema guard", K(ret)); + } else if (OB_FAIL(cascading_modify_obj_status(trans, tenant_id, obj_id, + schema_guard, ddl_operator, + schema_service, obj_id_set))) { + LOG_WARN("failed to modify obj status", K(ret)); + } + return ret; +} + +int ObDependencyInfo::cascading_modify_obj_status(common::ObMySQLTransaction &trans, + uint64_t tenant_id, + uint64_t obj_id, + ObSchemaGetterGuard &schema_guard, + rootserver::ObDDLOperator &ddl_operator, + share::schema::ObMultiVersionSchemaService &schema_service, + common::hash::ObHashSet &obj_id_set) +{ + int ret = OB_SUCCESS; + bool is_overflow = false; + ObArray> objs; + const bool update_object_status_ignore_version = false; + if (OB_FAIL(check_stack_overflow(is_overflow))) { + LOG_WARN("failed to check stack overflow", K(ret)); + } else if (is_overflow) { + ret = OB_SIZE_OVERFLOW; + LOG_WARN("too deep recusive", K(ret)); + } else if (OB_FAIL(collect_all_dep_objs(tenant_id, obj_id, trans, objs))) { + LOG_WARN("failed to collect all objs", K(ret)); + } else { + for (int64_t i = 0; OB_SUCC(ret) && i < objs.count(); ++i) { + const ObTableSchema *view_schema = NULL; + ObObjectStatus new_status = ObObjectStatus::INVALID; + int64_t refresh_schema_version = OB_INVALID_SCHEMA_VERSION; + if (share::schema::ObObjectType::VIEW == objs.at(i).second) { + if (OB_FAIL(schema_service.gen_new_schema_version(tenant_id, refresh_schema_version))) { + LOG_WARN("fail to gen new schema_version", K(ret), K(tenant_id)); + } else if (OB_FAIL(schema_guard.get_table_schema(tenant_id, objs.at(i).first, view_schema))) { + LOG_WARN("failed to get view schema", K(ret)); + } else if (OB_ISNULL(view_schema) || !view_schema->is_view_table()) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("get wrong schema", K(ret), KP(view_schema)); + } else if (OB_FAIL(ddl_operator.update_table_status(*view_schema, refresh_schema_version, + new_status, update_object_status_ignore_version, + trans))) { + LOG_WARN("failed to update table status", K(ret)); + } + } else if (share::schema::ObObjectType::SYNONYM == objs.at(i).second) { + // TODO:peihan.dph + } + } + for (int64_t i = 0; OB_SUCC(ret) && i < objs.count(); ++i) { + // why we need do pre check by using hashset ? + /* obj1 --> obj2 --> obj3 + obj1 --> obj3 + if dependency record its ref relation like this, we should only update obj3 status once. + */ + if (OB_FAIL(obj_id_set.exist_refactored(objs.at(i).first))) { + if (OB_HASH_EXIST == ret) { + ret = OB_SUCCESS; + continue; + } else if (OB_HASH_NOT_EXIST == ret) { + ret = OB_SUCCESS; + OZ (obj_id_set.set_refactored(objs.at(i).first)); + } else { + LOG_WARN("failed to check hash set", K(ret)); + } + } else { + // exist_refactored will not return OB_SUCC + ret = OB_ERR_UNEXPECTED; + LOG_WARN("error occur", K(ret)); + } + if (OB_FAIL(ret)) { + } else if (OB_FAIL(cascading_modify_obj_status(trans, tenant_id, objs.at(i).first, + schema_guard, ddl_operator, + schema_service, obj_id_set))) { + LOG_WARN("failed to modify obj status", K(ret)); + } + } + } + return ret; +} + void ObDependencyInfo::reset() { tenant_id_ = OB_INVALID_ID; @@ -627,6 +809,8 @@ int ObReferenceObjTable::ObGetDependencyObjOp::operator()( LOG_WARN("dependency object item is null", KP(entry.second), K(ret)); } else if (is_sys_view(entry.first.dep_obj_id_) || is_sys_table(entry.first.dep_obj_id_)) { // do nothing + } else if (OB_INVALID_ID == entry.first.dep_obj_id_) { + // do nothing } else { ObSchemaRefObjOp op = entry.second->get_ref_obj_op(); ObReferenceObjTable::DependencyObjKeyItemPair key_item(entry.first, *entry.second); @@ -919,16 +1103,16 @@ int ObReferenceObjTable::set_ref_obj_op(const uint64_t dep_obj_id, return ret; } -int ObReferenceObjTable::process_reference_obj_table(const uint64_t tenant_id, - sql::ObSqlCtx &sql_ctx, +int ObReferenceObjTable::process_reference_obj_table(const uint64_t tenant_id, + const uint64_t dep_obj_id, + const ObTableSchema *view_schema, sql::ObMaintainDepInfoTaskQueue &task_queue) { int ret = OB_SUCCESS; if (!is_inited() || GCTX.is_standby_cluster()) { - // do nothing - } else if (OB_ISNULL(sql_ctx.session_info_)) { - ret = OB_INVALID_ARGUMENT; - LOG_WARN("invalid session info", K(ret), K(sql_ctx.session_info_)); + if (OB_INVALID_ID != dep_obj_id) { + OZ (task_queue.erase_view_id_from_set(dep_obj_id)); + } } else { SMART_VAR(sql::ObMaintainObjDepInfoTask, task, tenant_id) { ObGetDependencyObjOp op(&task.get_insert_dep_objs(), @@ -936,15 +1120,29 @@ int ObReferenceObjTable::process_reference_obj_table(const uint64_t tenant_id, &task.get_delete_dep_objs()); if (OB_FAIL(ref_obj_version_table_.foreach_refactored(op))) { LOG_WARN("traverse ref_obj_version_table_ failed", K(ret)); + } else if (nullptr != view_schema && OB_FAIL(task.assign_view_schema(*view_schema))) { + LOG_WARN("failed to assign view schema", K(ret)); } else if (OB_FAIL(op.get_callback_ret())) { LOG_WARN("traverse ref_obj_version_table_ failed", K(ret)); } else if (task.is_empty_task()) { - // do nothing + if (OB_INVALID_ID != dep_obj_id) { + OZ (task_queue.erase_view_id_from_set(dep_obj_id)); + } } else if (OB_FAIL(task_queue.push(task))) { LOG_WARN("push task failed", K(ret)); } } } + if (OB_FAIL(ret) && OB_INVALID_ID != dep_obj_id) { + int tmp_ret = OB_SUCCESS; + if (OB_SUCCESS != (tmp_ret = task_queue.erase_view_id_from_set(dep_obj_id))) { + LOG_WARN("failed to erase obj id", K(tmp_ret), K(ret)); + } + if (OB_SIZE_OVERFLOW == ret) { + ret = OB_SUCCESS; + LOG_TRACE("async queue is full"); + } + } return ret; } diff --git a/src/share/schema/ob_dependency_info.h b/src/share/schema/ob_dependency_info.h index 6972b03fa5..84765648c3 100644 --- a/src/share/schema/ob_dependency_info.h +++ b/src/share/schema/ob_dependency_info.h @@ -15,6 +15,8 @@ #include "share/schema/ob_schema_struct.h" #include "common/object/ob_object.h" #include "lib/container/ob_fixed_array.h" +#include "lib/hash/ob_hashset.h" +#include "share/schema/ob_multi_version_schema_service.h" namespace oceanbase @@ -57,6 +59,7 @@ namespace schema { class ObSchemaService; +class ObReferenceObjTable; extern const char *ob_object_type_str(const ObObjectType object_type); class ObDependencyInfo : public ObSchema { @@ -134,6 +137,11 @@ public: common::ObString &dep_attrs, common::ObString &dep_reason, bool is_pl = true); + static int collect_dep_infos(ObReferenceObjTable &ref_objs, + common::ObIArray &deps, + ObObjectType dep_obj_type, + uint64_t dep_obj_id, + int64_t &max_version); int get_object_create_time(common::ObISQLClient &sql_client, share::schema::ObObjectType obj_type, @@ -141,6 +149,23 @@ public: common::ObString &ref_obj_name); int gen_dependency_dml(const uint64_t exec_tenant_id, oceanbase::share::ObDMLSqlSplicer &dml); + static int collect_all_dep_objs(uint64_t tenant_id, + uint64_t ref_obj_id, + common::ObISQLClient &sql_proxy, + common::ObIArray> &objs); + static int cascading_modify_obj_status(common::ObMySQLTransaction &trans, + uint64_t tenant_id, + uint64_t obj_id, + ObSchemaGetterGuard &schema_guard, + rootserver::ObDDLOperator &ddl_operator, + share::schema::ObMultiVersionSchemaService &schema_service, + common::hash::ObHashSet &obj_id_set); + static int modify_dep_obj_status(common::ObMySQLTransaction &trans, + uint64_t tenant_id, + uint64_t obj_id, + rootserver::ObDDLOperator &ddl_operator, + share::schema::ObMultiVersionSchemaService &schema_service); + TO_STRING_KV(K_(tenant_id), K_(dep_obj_id), K_(dep_obj_type), @@ -278,7 +303,8 @@ OB_INLINE ret_type get_##name() const { return name##_; } K_(ref_obj_op), K_(max_dependency_version), K_(max_ref_obj_schema_version), - K_(ref_obj_versions)); + K_(ref_obj_versions), + K_(dep_obj_schema_version)); int error_ret_; ObSchemaRefObjOp ref_obj_op_; @@ -349,7 +375,8 @@ public: } int process_reference_obj_table( const uint64_t tenant_id, - sql::ObSqlCtx &sql_ctx, + const uint64_t dep_obj_id, + const ObTableSchema *view_schema, sql::ObMaintainDepInfoTaskQueue &task_queue); int add_ref_obj_version( const uint64_t dep_obj_id, diff --git a/src/share/schema/ob_multi_version_schema_service.cpp b/src/share/schema/ob_multi_version_schema_service.cpp index f1323cc600..15b24ce1cf 100644 --- a/src/share/schema/ob_multi_version_schema_service.cpp +++ b/src/share/schema/ob_multi_version_schema_service.cpp @@ -2801,10 +2801,12 @@ int ObMultiVersionSchemaService::check_synonym_exist(const uint64_t tenant_id, int ObMultiVersionSchemaService::check_udf_exist(const uint64_t tenant_id, const common::ObString &name, - bool &exist) + bool &exist, + uint64_t &udf_id) { int ret = OB_SUCCESS; exist = false; + udf_id = OB_INVALID_ID; if (!check_inner_stat()) { ret = OB_INNER_STAT_ERROR; LOG_WARN("inner stat error", K(ret)); @@ -2819,7 +2821,8 @@ int ObMultiVersionSchemaService::check_udf_exist(const uint64_t tenant_id, } else if (OB_FAIL(schema_guard.check_udf_exist_with_name( tenant_id, name, - exist))) { + exist, + udf_id))) { LOG_WARN("failed to check udf sql exist", K(tenant_id), K(name), K(ret)); } else {/*do nothing*/} diff --git a/src/share/schema/ob_multi_version_schema_service.h b/src/share/schema/ob_multi_version_schema_service.h index 722c20afd2..1e27bf32a7 100644 --- a/src/share/schema/ob_multi_version_schema_service.h +++ b/src/share/schema/ob_multi_version_schema_service.h @@ -269,7 +269,8 @@ public: uint64_t &synonym_id) ; int check_udf_exist(const uint64_t tenant_id, const common::ObString &name, - bool &exist); + bool &exist, + uint64_t &udf_id); int check_sequence_exist(const uint64_t tenant_id, const uint64_t database_id, const common::ObString &name, diff --git a/src/share/schema/ob_schema_getter_guard.cpp b/src/share/schema/ob_schema_getter_guard.cpp index 36e8911724..cb8e00a22e 100644 --- a/src/share/schema/ob_schema_getter_guard.cpp +++ b/src/share/schema/ob_schema_getter_guard.cpp @@ -4792,6 +4792,25 @@ GET_TABLE_SCHEMAS_IN_DST_SCHEMA_FUNC_DEFINE(tablespace); int ObSchemaGetterGuard::get_table_schemas_in_tenant( const uint64_t tenant_id, common::ObIArray &table_schemas) +{ + int ret = OB_SUCCESS; + bool only_view_schema = false; + ret = get_table_schemas_in_tenant_(tenant_id, only_view_schema, table_schemas); + return ret; +} + +int ObSchemaGetterGuard::get_view_schemas_in_tenant(const uint64_t tenant_id, + ObIArray &table_schemas) +{ + int ret = OB_SUCCESS; + bool only_view_schema = true; + ret = get_table_schemas_in_tenant_(tenant_id, only_view_schema, table_schemas); + return ret; +} + +int ObSchemaGetterGuard::get_table_schemas_in_tenant_(const uint64_t tenant_id, + const bool only_view_schema, + ObIArray &table_schemas) { int ret = OB_SUCCESS; const ObSchemaMgr *mgr = NULL; @@ -4824,6 +4843,8 @@ int ObSchemaGetterGuard::get_table_schemas_in_tenant( if (OB_ISNULL(tmp_schema)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("NULL ptr", KR(ret), KP(tmp_schema)); + } else if (only_view_schema && !tmp_schema->is_view_table()) { + // do nothing } else if (OB_FAIL(get_schema(TABLE_SCHEMA, tmp_schema->get_tenant_id(), tmp_schema->get_table_id(), table_schema, tmp_schema->get_schema_version()))) { @@ -7298,12 +7319,13 @@ int ObSchemaGetterGuard::get_tenant_mv_ids(const uint64_t tenant_id, ObArrayget_udf_id(); } } return ret; diff --git a/src/share/schema/ob_schema_getter_guard.h b/src/share/schema/ob_schema_getter_guard.h index 0f9d22f754..e26fc625c2 100644 --- a/src/share/schema/ob_schema_getter_guard.h +++ b/src/share/schema/ob_schema_getter_guard.h @@ -214,6 +214,8 @@ public: common::ObIArray &tablegroup_schemas); int get_table_schemas_in_tenant(const uint64_t tenant_id, common::ObIArray &table_schemas); + int get_view_schemas_in_tenant(const uint64_t tenant_id, + common::ObIArray &table_schemas); int get_outline_infos_in_tenant(const uint64_t tenant_id, common::ObIArray &outline_infos); int get_package_infos_in_tenant(const uint64_t tenant_id, @@ -736,7 +738,8 @@ public: //about user define function int check_udf_exist_with_name(const uint64_t tenant_id, const common::ObString &name, - bool &exist); + bool &exist, + uint64_t &udf_id); int get_udf_info(const uint64_t tenant_id, const common::ObString &name, const ObUDF *&udf_info, @@ -1101,6 +1104,9 @@ private: const uint64_t tenant_id, const uint64_t user_id, bool& pass); + int get_table_schemas_in_tenant_(const uint64_t tenant_id, + const bool only_view_schema, + common::ObIArray &table_schemas); private: common::ObArenaAllocator local_allocator_; ObMultiVersionSchemaService *schema_service_; diff --git a/src/share/schema/ob_schema_retrieve_utils.ipp b/src/share/schema/ob_schema_retrieve_utils.ipp index 195cdb9ca6..2151ad739b 100644 --- a/src/share/schema/ob_schema_retrieve_utils.ipp +++ b/src/share/schema/ob_schema_retrieve_utils.ipp @@ -1271,6 +1271,8 @@ int ObSchemaRetrieveUtils::fill_table_schema( EXTRACT_INT_FIELD_TO_CLASS_MYSQL_WITH_DEFAULT_VALUE(result, tablet_id, table_schema, uint64_t, true, ignore_column_error, ObTabletID::INVALID_TABLET_ID); + ignore_column_error = true; + EXTRACT_INT_FIELD_TO_CLASS_MYSQL_WITH_DEFAULT_VALUE(result, object_status, table_schema, int64_t, true, ignore_column_error, static_cast (ObObjectStatus::VALID)); } if (OB_SUCC(ret) && OB_FAIL(fill_sys_table_lob_tid(table_schema))) { SHARE_SCHEMA_LOG(WARN, "fail to fill lob table id for inner table", K(ret), K(table_schema.get_table_id())); @@ -1878,6 +1880,8 @@ int ObSchemaRetrieveUtils::fill_synonym_schema( EXTRACT_VARCHAR_FIELD_TO_CLASS_MYSQL(result, synonym_name, synonym_info); EXTRACT_VARCHAR_FIELD_TO_CLASS_MYSQL(result, object_name, synonym_info); EXTRACT_INT_FIELD_TO_CLASS_MYSQL_WITH_TENANT_ID(result, object_database_id, synonym_info, tenant_id); + bool ignore_column_error = true; + EXTRACT_INT_FIELD_TO_CLASS_MYSQL_WITH_DEFAULT_VALUE(result, status, synonym_info, int64_t, true, ignore_column_error, ObObjectStatus::VALID); } return ret; } @@ -3778,6 +3782,8 @@ int ObSchemaRetrieveUtils::fill_table_schema(const uint64_t tenant_id, } } EXTRACT_INT_FIELD_TO_CLASS_MYSQL_WITH_DEFAULT_VALUE(result, tablet_id, table_schema, uint64_t, true, ignore_column_error, 0); + ignore_column_error = true; + EXTRACT_INT_FIELD_TO_CLASS_MYSQL_WITH_DEFAULT_VALUE(result, object_status, table_schema, int64_t, true, ignore_column_error, ObObjectStatus::VALID); } return ret; } @@ -3953,6 +3959,8 @@ int ObSchemaRetrieveUtils::fill_synonym_schema( EXTRACT_VARCHAR_FIELD_TO_CLASS_MYSQL(result, synonym_name, synonym_schema); EXTRACT_VARCHAR_FIELD_TO_CLASS_MYSQL(result, object_name, synonym_schema); EXTRACT_INT_FIELD_TO_CLASS_MYSQL_WITH_TENANT_ID(result, object_database_id, synonym_schema, tenant_id); + bool ignore_column_error = true; + EXTRACT_INT_FIELD_TO_CLASS_MYSQL_WITH_DEFAULT_VALUE(result, status, synonym_schema, int64_t, true, ignore_column_error, ObObjectStatus::VALID); } return ret; } diff --git a/src/share/schema/ob_schema_service_sql_impl.cpp b/src/share/schema/ob_schema_service_sql_impl.cpp index c3007f9661..c671a8e036 100644 --- a/src/share/schema/ob_schema_service_sql_impl.cpp +++ b/src/share/schema/ob_schema_service_sql_impl.cpp @@ -2009,7 +2009,7 @@ int ObSchemaServiceSQLImpl::sort_tables_partition_info( ret = OB_ERR_UNEXPECTED; LOG_WARN("table schema is null", K(ret)); } else if (OB_FAIL(sort_table_partition_info(*table))) { - LOG_WARN("fail to sort table partition info", K(ret), KPC(table)); + LOG_WARN("fail to sort table partition info", K(ret), KPC(table), K(i)); } } return ret; @@ -2310,7 +2310,8 @@ int ObSchemaServiceSQLImpl::fetch_all_table_info(const ObRefreshSchemaStatus &sc table_name, schema_service_))) { LOG_WARN("fail to get all table name", K(ret), K(exec_tenant_id)); - } else if (OB_FAIL(sql.append_fmt(FETCH_ALL_TABLE_SQL, table_name, + } else if (OB_FAIL(sql.append_fmt(FETCH_ALL_TABLE_SQL, + table_name, fill_extract_tenant_id(schema_status, tenant_id)))) { LOG_WARN("append sql failed", K(ret)); } @@ -2334,8 +2335,9 @@ int ObSchemaServiceSQLImpl::fetch_all_table_info(const ObRefreshSchemaStatus &sc table_name, schema_service_))) { LOG_WARN("fail to get all table name", K(ret), K(exec_tenant_id)); - } else if (OB_FAIL(sql.append_fmt(FETCH_ALL_TABLE_HISTORY_SQL, table_name, - fill_extract_tenant_id(schema_status, tenant_id)))) { + } else if (OB_FAIL(sql.append_fmt(FETCH_ALL_TABLE_HISTORY_SQL, + table_name, + fill_extract_tenant_id(schema_status, tenant_id)))) { LOG_WARN("append sql failed", K(ret)); } if (OB_SUCC(ret)) { @@ -3759,7 +3761,8 @@ int ObSchemaServiceSQLImpl::fetch_all_synonym_info( const int64_t snapshot_timestamp = schema_status.snapshot_timestamp_; DEFINE_SQL_CLIENT_RETRY_WEAK_WITH_SNAPSHOT(sql_client, snapshot_timestamp); const uint64_t exec_tenant_id = fill_exec_tenant_id(schema_status); - if (OB_FAIL(sql.append_fmt(FETCH_ALL_SYNONYM_HISTORY_SQL, OB_ALL_SYNONYM_HISTORY_TNAME, + if (OB_FAIL(sql.append_fmt(FETCH_ALL_SYNONYM_HISTORY_SQL, + OB_ALL_SYNONYM_HISTORY_TNAME, fill_extract_tenant_id(schema_status, tenant_id)))) { LOG_WARN("append sql failed", K(ret)); } else if (NULL != synonym_keys && synonyms_size > 0) { @@ -4227,14 +4230,15 @@ int ObSchemaServiceSQLImpl::fetch_tables( LOG_WARN("fail to get all table name", K(ret), K(exec_tenant_id)); } else if (!is_increase_schema) { if (OB_FAIL(sql.append_fmt(FETCH_ALL_TABLE_HISTORY_FULL_SCHEMA, - table_name, table_name, - fill_extract_tenant_id(schema_status, tenant_id), - schema_version, - fill_extract_schema_id(schema_status, OB_ALL_CORE_TABLE_TID)))) { + table_name, table_name, + fill_extract_tenant_id(schema_status, tenant_id), + schema_version, + fill_extract_schema_id(schema_status, OB_ALL_CORE_TABLE_TID)))) { LOG_WARN("append sql failed", K(ret)); } } else { - if (OB_FAIL(sql.append_fmt(FETCH_ALL_TABLE_HISTORY_SQL3, table_name, + if (OB_FAIL(sql.append_fmt(FETCH_ALL_TABLE_HISTORY_SQL3, + table_name, fill_extract_tenant_id(schema_status, tenant_id)))) { LOG_WARN("append sql failed", K(ret)); } else if (OB_FAIL(sql.append_fmt(" AND SCHEMA_VERSION <= %ld", schema_version))) { @@ -4844,10 +4848,8 @@ int ObSchemaServiceSQLImpl::get_not_core_table_schema( sql_client, allocator, table_schema))) { LOG_WARN("fetch all table info failed", K(tenant_id), K(table_id), K(schema_version), K(ret)); - } else if (table_schema->is_view_table()) { - // do-nothing - } else if (OB_FAIL(fetch_column_info(schema_status, tenant_id, table_id, schema_version, - sql_client, table_schema))) { + } else if ((OB_FAIL(fetch_column_info(schema_status, tenant_id, table_id, schema_version, + sql_client, table_schema)))) { LOG_WARN("Failed to fetch column info", K(ret)); } else if (OB_FAIL(fetch_partition_info(schema_status, tenant_id, table_id, schema_version, sql_client, table_schema))) { @@ -4925,8 +4927,9 @@ int ObSchemaServiceSQLImpl::fetch_table_info( table_name, schema_service_))) { LOG_WARN("fail to get all table name", K(ret), K(exec_tenant_id)); - } else if (OB_FAIL(sql.append_fmt(FETCH_ALL_TABLE_HISTORY_SQL, table_name, - fill_extract_tenant_id(schema_status, tenant_id)))) { + } else if (OB_FAIL(sql.append_fmt(FETCH_ALL_TABLE_HISTORY_SQL, + table_name, + fill_extract_tenant_id(schema_status, tenant_id)))) { LOG_WARN("append sql failed", K(ret)); } else if (OB_FAIL(sql.append_fmt(" AND table_id = %lu and schema_version <= %ld order by schema_version desc limit 1", fill_extract_schema_id(schema_status, table_id), diff --git a/src/share/schema/ob_schema_struct.cpp b/src/share/schema/ob_schema_struct.cpp index 4dc0699cbf..72bf801fad 100644 --- a/src/share/schema/ob_schema_struct.cpp +++ b/src/share/schema/ob_schema_struct.cpp @@ -10222,6 +10222,7 @@ ObSynonymInfo &ObSynonymInfo::operator=(const ObSynonymInfo &src_info) synonym_id_ = src_info.synonym_id_; schema_version_ = src_info.schema_version_; object_db_id_ = src_info.object_db_id_; + status_ = src_info.status_; if (OB_FAIL(deep_copy_str(src_info.name_, name_))) { LOG_WARN("Fail to deep copy name", K(ret)); } else if (OB_FAIL(deep_copy_str(src_info.object_name_, object_name_))) { @@ -10236,6 +10237,17 @@ ObSynonymInfo &ObSynonymInfo::operator=(const ObSynonymInfo &src_info) return *this; } +int ObSynonymInfo::assign(const ObSynonymInfo &src_info) +{ + int ret = OB_SUCCESS; + *this = src_info; + if (OB_UNLIKELY(OB_SUCCESS != error_ret_)) { + ret = error_ret_; + LOG_WARN("failed to assign synonym info", K(ret)); + } + return ret; +} + /* void *ObSynonymInfo::alloc(int64_t size) { @@ -10263,6 +10275,7 @@ void ObSynonymInfo::reset() reset_string(version_); reset_string(object_name_); object_db_id_ = 0; + status_ = ObObjectStatus::VALID; ObSchema::reset(); //allocator_.reset(); } @@ -10271,7 +10284,7 @@ OB_DEF_SERIALIZE(ObSynonymInfo) { int ret = OB_SUCCESS; LST_DO_CODE(OB_UNIS_ENCODE, tenant_id_, database_id_, synonym_id_, schema_version_, - name_, version_, object_name_, object_db_id_); + name_, version_, object_name_, object_db_id_, status_); return ret; } @@ -10283,7 +10296,7 @@ OB_DEF_DESERIALIZE(ObSynonymInfo) ObString object_name; ObString version; LST_DO_CODE(OB_UNIS_DECODE, tenant_id_, database_id_, synonym_id_, schema_version_, - name, version, object_name, object_db_id_); + name, version, object_name, object_db_id_, status_); if (OB_FAIL(ret)) { LOG_WARN("Fail to deserialize data", K(ret)); } else if (OB_FAIL(deep_copy_str(name, name_))) { @@ -10301,7 +10314,7 @@ OB_DEF_SERIALIZE_SIZE(ObSynonymInfo) { int64_t len = 0; LST_DO_CODE(OB_UNIS_ADD_LEN, tenant_id_, database_id_, synonym_id_, schema_version_, - name_, version_, object_name_, object_db_id_); + name_, version_, object_name_, object_db_id_, status_); return len; } diff --git a/src/share/schema/ob_schema_struct.h b/src/share/schema/ob_schema_struct.h index 0a1280bc42..68da673057 100644 --- a/src/share/schema/ob_schema_struct.h +++ b/src/share/schema/ob_schema_struct.h @@ -174,6 +174,13 @@ enum ObPartitionFuncType PARTITION_FUNC_TYPE_MAX, }; +enum ObObjectStatus : int64_t +{ + INVALID = 0, + VALID = 1, + NA = 2, /*The use case is unknown*/ +}; + int get_part_type_str(const bool is_oracle_mode, ObPartitionFuncType type, common::ObString &str); inline bool is_hash_part(const ObPartitionFuncType part_type) @@ -916,10 +923,10 @@ struct ObSchemaObjVersion } return ret_type; } - ObObjectType get_schema_object_type() const + static ObObjectType get_schema_object_type(ObDependencyTableType object_type) { ObObjectType ret_type = ObObjectType::MAX_TYPE; - switch (object_type_) { + switch (object_type) { case DEPENDENCY_TABLE: ret_type = ObObjectType::TABLE; break; @@ -5104,10 +5111,11 @@ class ObSynonymInfo: public ObSchema public: ObSynonymInfo(); explicit ObSynonymInfo(common::ObIAllocator *allocator); - VIRTUAL_TO_STRING_KV(K_(tenant_id), K_(database_id), K_(synonym_id), K_(schema_version)); + VIRTUAL_TO_STRING_KV(K_(tenant_id), K_(database_id), K_(synonym_id), K_(schema_version), K_(status)); virtual ~ObSynonymInfo(); ObSynonymInfo &operator=(const ObSynonymInfo &src_schema); ObSynonymInfo(const ObSynonymInfo &src_schema); + int assign(const ObSynonymInfo &src_schema); inline void set_tenant_id(const uint64_t id) { tenant_id_ = id; } inline void set_database_id(const uint64_t id) { database_id_ = id; } inline void set_object_database_id(const uint64_t id) { object_db_id_ = id; } @@ -5131,6 +5139,9 @@ public: inline const char *get_version() const { return extract_str(version_); } inline const common::ObString &get_version_str() const { return version_; } inline uint64_t get_object_database_id() const { return object_db_id_; } + inline ObObjectStatus get_status() const { return status_; } + inline void set_status(const ObObjectStatus status) { status_ = status; } + inline void set_status(const int64_t status) { status_ = static_cast (status); } void reset(); private: //void *alloc(int64_t size); @@ -5143,6 +5154,7 @@ private: common::ObString version_; common::ObString object_name_; uint64_t object_db_id_; + ObObjectStatus status_; //common::ObArenaAllocator allocator_; }; diff --git a/src/share/schema/ob_synonym_mgr.cpp b/src/share/schema/ob_synonym_mgr.cpp index f65d1fe820..d0d8ee5de5 100644 --- a/src/share/schema/ob_synonym_mgr.cpp +++ b/src/share/schema/ob_synonym_mgr.cpp @@ -61,6 +61,7 @@ ObSimpleSynonymSchema &ObSimpleSynonymSchema::operator =(const ObSimpleSynonymSc schema_version_ = other.schema_version_; database_id_ = other.database_id_; object_database_id_ = other.object_database_id_; + status_ = other.status_; if (OB_FAIL(deep_copy_str(other.synonym_name_, synonym_name_))) { LOG_WARN("Fail to deep copy synonym name", K(ret)); } else if (OB_FAIL(deep_copy_str(other.object_name_, object_name_))) { @@ -85,6 +86,7 @@ void ObSimpleSynonymSchema::reset() object_database_id_ = OB_INVALID_ID; synonym_name_.reset(); object_name_.reset(); + status_ = ObObjectStatus::VALID; } bool ObSimpleSynonymSchema::is_valid() const @@ -96,7 +98,8 @@ bool ObSimpleSynonymSchema::is_valid() const OB_INVALID_ID == database_id_ || OB_INVALID_ID == object_database_id_|| synonym_name_.empty() || - object_name_.empty()) { + object_name_.empty() || + ObObjectStatus::INVALID == status_) { ret = false; } return ret; diff --git a/src/share/schema/ob_synonym_mgr.h b/src/share/schema/ob_synonym_mgr.h index dd94b2391f..bb2f8df50d 100644 --- a/src/share/schema/ob_synonym_mgr.h +++ b/src/share/schema/ob_synonym_mgr.h @@ -41,7 +41,8 @@ public: K_(database_id), K_(synonym_name), K_(object_name), - K_(object_database_id)); + K_(object_database_id), + K_(status)); virtual void reset(); inline bool is_valid() const; inline int64_t get_convert_size() const; @@ -67,6 +68,9 @@ public: inline common::ObString &get_object_name_str() { return object_name_; } inline ObTenantSynonymId get_tenant_synonym_id() const { return ObTenantSynonymId(tenant_id_, synonym_id_); } + inline void set_status(const ObObjectStatus status) { status_ = status; } + inline void set_status(const int64_t status) { status_ = static_cast (status); } + inline ObObjectStatus get_status() const { return status_; } private: uint64_t tenant_id_; uint64_t synonym_id_; @@ -75,6 +79,7 @@ private: common::ObString synonym_name_; common::ObString object_name_; uint64_t object_database_id_; + ObObjectStatus status_; }; class ObSynonymHashWrapper diff --git a/src/share/schema/ob_table_schema.cpp b/src/share/schema/ob_table_schema.cpp index 71249f74ab..b451a6b9df 100644 --- a/src/share/schema/ob_table_schema.cpp +++ b/src/share/schema/ob_table_schema.cpp @@ -143,6 +143,8 @@ int ObSimpleTableSchemaV2::assign(const ObSimpleTableSchemaV2 &other) link_table_id_ = other.link_table_id_; link_schema_version_ = other.link_schema_version_; in_offline_ddl_white_list_ = other.in_offline_ddl_white_list_; + object_status_ = other.object_status_; + is_force_view_ = other.is_force_view_; if (OB_FAIL(table_mode_.assign(other.table_mode_))) { LOG_WARN("Fail to assign table mode", K(ret), K(other.table_mode_)); } else if (OB_FAIL(deep_copy_str(other.table_name_, table_name_))) { @@ -202,7 +204,8 @@ bool ObSimpleTableSchemaV2::operator ==(const ObSimpleTableSchemaV2 &other) cons dblink_id_ == other.dblink_id_ && link_table_id_ == other.link_table_id_ && link_schema_version_ == other.link_schema_version_ && - link_database_name_ == other.link_database_name_) { + link_database_name_ == other.link_database_name_ && + object_status_ == other.object_status_) { ret = true; if (true == ret) { if (simple_foreign_key_info_array_.count() == other.simple_foreign_key_info_array_.count()) { @@ -257,6 +260,8 @@ void ObSimpleTableSchemaV2::reset() index_type_ = INDEX_TYPE_IS_NOT; session_id_ = 0; in_offline_ddl_white_list_ = false; + object_status_ = ObObjectStatus::VALID; + is_force_view_ = false; for (int64_t i = 0; i < simple_foreign_key_info_array_.count(); ++i) { free(simple_foreign_key_info_array_.at(i).foreign_key_name_.ptr()); } @@ -779,7 +784,9 @@ int64_t ObSimpleTableSchemaV2::to_string(char *buf, const int64_t buf_len) const K_(master_key_id), K_(sub_part_template_flags), K(get_tablet_id()), - K_(max_dependency_version) + K_(max_dependency_version), + K_(object_status), + K_(is_force_view) ); J_OBJ_END(); @@ -1788,6 +1795,7 @@ int ObTableSchema::delete_column(const common::ObString &column_name) { int ret = OB_SUCCESS; ObColumnSchemaV2 *column_schema = NULL; + bool for_view = false; if (OB_ISNULL(column_name) || column_name.empty()) { ret = OB_INVALID_ARGUMENT; LOG_WARN("The column name is NULL", K(ret)); @@ -1796,14 +1804,15 @@ int ObTableSchema::delete_column(const common::ObString &column_name) if (NULL == column_schema) { ret = OB_ERR_CANT_DROP_FIELD_OR_KEY; LOG_USER_ERROR(OB_ERR_CANT_DROP_FIELD_OR_KEY, column_name.length(), column_name.ptr()); - } else if (OB_FAIL(delete_column_internal(column_schema))) { + } else if (OB_FAIL(delete_column_internal(column_schema, for_view))) { LOG_WARN("Failed to delete column, ", K(column_name), K(ret)); } } return ret; } -int ObTableSchema::alter_column(ObColumnSchemaV2 &column_schema, ObColumnCheckMode check_mode) +// for view = true, no constraint checking +int ObTableSchema::alter_column(ObColumnSchemaV2 &column_schema, ObColumnCheckMode check_mode, const bool for_view) { int ret = OB_SUCCESS; char *buf = NULL; @@ -1819,10 +1828,10 @@ int ObTableSchema::alter_column(ObColumnSchemaV2 &column_schema, ObColumnCheckMo //if the src_schema is a rowkey column //check_column_can_be_altered will modify dst_schema's is_nullable attribute to not nullable //TODO @hualong should move it to other place - } else if (ObColumnCheckMode::CHECK_MODE_ONLINE == check_mode && + } else if (!for_view && ObColumnCheckMode::CHECK_MODE_ONLINE == check_mode && OB_FAIL(check_column_can_be_altered_online(src_schema, &column_schema))) { LOG_WARN("Failed to alter column schema", K(ret)); - } else if (ObColumnCheckMode::CHECK_MODE_OFFLINE == check_mode && + } else if (!for_view && ObColumnCheckMode::CHECK_MODE_OFFLINE == check_mode && OB_FAIL(check_column_can_be_altered_offline(src_schema, &column_schema))) { LOG_WARN("Failed to alter column schema", K(ret)); } else { @@ -3477,7 +3486,7 @@ int ObTableSchema::remove_col_from_column_array(const ObColumnSchemaV2 *column) return ret; } -int ObTableSchema::delete_column_internal(ObColumnSchemaV2 *column_schema) +int ObTableSchema::delete_column_internal(ObColumnSchemaV2 *column_schema, const bool for_view) { int ret = OB_SUCCESS; if (OB_ISNULL(column_schema)) { @@ -3489,13 +3498,13 @@ int ObTableSchema::delete_column_internal(ObColumnSchemaV2 *column_schema) } else if (table_id_ != column_schema->get_table_id()) { ret = OB_SCHEMA_ERROR; LOG_WARN("The column schema does not belong to this table", K(ret)); - } else if (!is_user_table() && !is_index_table() && !is_tmp_table() && !is_sys_table() && !is_aux_vp_table()) { + } else if (!is_view_table() && !is_user_table() && !is_index_table() && !is_tmp_table() && !is_sys_table() && !is_aux_vp_table()) { ret = OB_NOT_SUPPORTED; - LOG_WARN("Only NORMAL table and index table and SYSTEM table are allowed", K(ret)); - } else if ((!is_heap_table() && column_cnt_ <= MIN_COLUMN_COUNT_WITH_PK_TABLE) - || (is_heap_table() && column_cnt_ <= - ((column_schema->is_rowkey_column() && column_schema->is_hidden()) ? MIN_COLUMN_COUNT_WITH_HEAP_TABLE - 1 : - MIN_COLUMN_COUNT_WITH_HEAP_TABLE))) { + LOG_WARN("Only NORMAL table and index table and SYSTEM table and view table are allowed", K(ret)); + } else if (!for_view && ((!is_heap_table() && column_cnt_ <= MIN_COLUMN_COUNT_WITH_PK_TABLE) + || (is_heap_table() && column_cnt_ <= + ((column_schema->is_rowkey_column() && column_schema->is_hidden()) ? MIN_COLUMN_COUNT_WITH_HEAP_TABLE - 1 : + MIN_COLUMN_COUNT_WITH_HEAP_TABLE)))) { ret = OB_CANT_REMOVE_ALL_FIELDS; LOG_USER_ERROR(OB_CANT_REMOVE_ALL_FIELDS); LOG_WARN("Can not delete all columns in table", K(ret)); @@ -3504,7 +3513,7 @@ int ObTableSchema::delete_column_internal(ObColumnSchemaV2 *column_schema) if (static_cast(table_id_) > 0 // may be used in resolver && OB_FAIL(check_if_oracle_compat_mode(is_oracle_mode))) { LOG_WARN("fail to check oracle mode", KR(ret)); - } else if (OB_FAIL(delete_column_update_prev_id(column_schema))) { + } else if (!for_view && OB_FAIL(delete_column_update_prev_id(column_schema))) { LOG_WARN("Failed to update column previous id", K(ret)); } else if (OB_FAIL(remove_col_from_column_array(column_schema))) { LOG_WARN("Failed to remove col from column array", K(ret)); @@ -5545,6 +5554,7 @@ OB_DEF_SERIALIZE(ObTableSchema) aux_lob_piece_tid_, depend_mock_fk_parent_table_ids_); } + LST_DO_CODE(OB_UNIS_ENCODE, object_status_, is_force_view_); }(); return ret; } @@ -5877,6 +5887,7 @@ OB_DEF_DESERIALIZE(ObTableSchema) aux_lob_meta_tid_, aux_lob_piece_tid_, depend_mock_fk_parent_table_ids_); + LST_DO_CODE(OB_UNIS_DECODE, object_status_, is_force_view_); } }(); return ret; @@ -6003,6 +6014,8 @@ OB_DEF_SERIALIZE_SIZE(ObTableSchema) OB_UNIS_ADD_LEN(tablet_id_); OB_UNIS_ADD_LEN(aux_lob_meta_tid_); OB_UNIS_ADD_LEN(aux_lob_piece_tid_); + OB_UNIS_ADD_LEN(object_status_); + OB_UNIS_ADD_LEN(is_force_view_); return len; } @@ -6718,10 +6731,7 @@ int ObColumnIterByPrevNextID::next(const ObColumnSchemaV2 *&column_schema) { int ret = OB_SUCCESS; column_schema = NULL; - if (table_schema_.is_view_table() && !table_schema_.is_materialized_view()) { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("This iterator cannot support view", K(ret)); - } else if (is_end_) { + if (is_end_) { ret = OB_ITER_END; } else if (table_schema_.is_index_table()) { if (OB_ISNULL(last_iter_)) { @@ -6973,6 +6983,51 @@ int ObTableSchema::get_spatial_index_column_ids(common::ObIArray &colu LOG_WARN("fail to push back geo column id", K(ret), K(geo_column_id)); } else { // do nothing + } + return ret; +} + +int ObTableSchema::delete_all_view_columns() +{ + int ret = OB_SUCCESS; + bool for_view = true; + for (int64_t i = column_cnt_ - 1; OB_SUCC(ret) && i >= 0; --i) { + ObColumnSchemaV2 *column_schema = get_column_schema_by_idx(i); + if (nullptr != column_schema) { + OZ (delete_column_internal(column_schema, for_view)); + } + } + CK (0 == column_cnt_); + return ret; +} + +int ObTableSchema::alter_all_view_columns_type_undefined(bool &already_invalid) +{ + int ret = OB_SUCCESS; + // for force create view, it is invalid when created + already_invalid = (0 == column_cnt_); + bool for_view = true; + //useless param + ObColumnCheckMode dummy_mode = ObColumnCheckMode::CHECK_MODE_ONLINE; + for (int64_t i = 0; OB_SUCC(ret) && i < column_cnt_; ++i) { + ObColumnSchemaV2 *column_schema = get_column_schema_by_idx(i); + ObColumnSchemaV2 new_column_schema; + if (OB_ISNULL(column_schema)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("failed to get column schema", K(ret)); + } else if (ObObjType::ObExtendType == column_schema->get_data_type()) { + already_invalid = true; + break; + } else if (OB_FAIL(new_column_schema.assign(*column_schema))) { + LOG_WARN("failed to copy column schema", K(ret)); + } else { + //ObExtendType only used internal, we user it to describe UNDEFINED type + new_column_schema.set_data_type(ObObjType::ObExtendType); + new_column_schema.set_data_length(0); + new_column_schema.set_data_precision(-1); + new_column_schema.set_data_scale(OB_MIN_NUMBER_SCALE - 1); + OZ (alter_column(new_column_schema, dummy_mode, for_view)); + } } return ret; } diff --git a/src/share/schema/ob_table_schema.h b/src/share/schema/ob_table_schema.h index 754867333c..644f81fe26 100644 --- a/src/share/schema/ob_table_schema.h +++ b/src/share/schema/ob_table_schema.h @@ -178,6 +178,12 @@ enum ObTableRowidMode ROWID_EXTENDED = 1, }; +enum ObViewColumnFilledFlag +{ + NOT_FILLED = 0, + FILLED = 1, +}; + struct ObTableMode { OB_UNIS_VERSION_V(1); private: @@ -195,7 +201,9 @@ private: static const int32_t TM_TABLE_AUTO_INCREMENT_MODE_BITS = 1; static const int32_t TM_TABLE_ROWID_MODE_OFFSET = 22; static const int32_t TM_TABLE_ROWID_MODE_BITS = 1; - static const int32_t TM_RESERVED = 9; + static const int32_t TM_VIEW_COLUMN_FILLED_OFFSET = 23; + static const int32_t TM_VIEW_COLUMN_FILLED_BITS = 1; + static const int32_t TM_RESERVED = 8; static const uint32_t MODE_FLAG_MASK = (1U << TM_MODE_FLAG_BITS) - 1; static const uint32_t PK_MODE_MASK = (1U << TM_PK_MODE_BITS) - 1; @@ -204,6 +212,7 @@ private: static const uint32_t VIEW_CREATED_METHOD_FLAG_MASK = (1U << TM_TABLE_STATE_FLAG_BITS) - 1; static const uint32_t AUTO_INCREMENT_MODE_MASK = (1U << TM_TABLE_AUTO_INCREMENT_MODE_BITS) - 1; static const uint32_t ROWID_MODE_MASK = (1U << TM_TABLE_ROWID_MODE_BITS) - 1; + static const uint32_t VIEW_COLUMN_FILLED_MASK = (1U << TM_VIEW_COLUMN_FILLED_BITS) - 1; public: ObTableMode() { reset(); } virtual ~ObTableMode() { reset(); } @@ -244,13 +253,18 @@ public: { return (ObTableRowidMode)((table_mode >> TM_TABLE_ROWID_MODE_OFFSET) & ROWID_MODE_MASK); } + static ObViewColumnFilledFlag get_view_column_filled_flag(int32_t table_mode) + { + return (ObViewColumnFilledFlag)((table_mode >> TM_VIEW_COLUMN_FILLED_OFFSET) & VIEW_COLUMN_FILLED_MASK); + } TO_STRING_KV("table_mode_flag", mode_flag_, "pk_mode", pk_mode_, "table_state_flag", state_flag_, "view_created_method_flag", view_created_method_flag_, "table_organization_mode", organization_mode_, "auto_increment_mode", auto_increment_mode_, - "rowid_mode", rowid_mode_); + "rowid_mode", rowid_mode_, + "view_column_filled_flag", view_column_filled_flag_); union { int32_t mode_; struct { @@ -261,6 +275,7 @@ public: uint32_t view_created_method_flag_ :TM_VIEW_CREATED_METHOD_FLAG_BITS; uint32_t auto_increment_mode_: TM_TABLE_AUTO_INCREMENT_MODE_BITS; uint32_t rowid_mode_: TM_TABLE_ROWID_MODE_BITS; + uint32_t view_column_filled_flag_ : TM_VIEW_COLUMN_FILLED_BITS; uint32_t reserved_ :TM_RESERVED; }; }; @@ -467,6 +482,11 @@ public: inline virtual uint64_t get_table_id() const { return table_id_; } inline void set_tablet_id(const ObTabletID &tablet_id) { tablet_id_ = tablet_id; } inline void set_tablet_id(const uint64_t tablet_id) { tablet_id_ = tablet_id; } + inline void set_object_status(const ObObjectStatus status) { object_status_ = status; } + inline void set_object_status(const int64_t status) { object_status_ = static_cast (status); } + inline ObObjectStatus get_object_status() const { return object_status_; } + inline void set_force_view(const bool flag) { is_force_view_ = flag; } + inline bool is_force_view() const { return is_force_view_; } virtual ObObjectID get_object_id() const override; inline ObTabletID get_tablet_id() const { return tablet_id_; } inline void set_association_table_id(const uint64_t table_id) { association_table_id_ = table_id; } @@ -545,6 +565,11 @@ public: { return TOM_INDEX_ORGANIZED == (enum ObTableOrganizationMode)table_mode_.organization_mode_; } inline bool is_heap_table() const { return TOM_HEAP_ORGANIZED == (enum ObTableOrganizationMode)table_mode_.organization_mode_; } + inline bool view_column_filled() const + { return FILLED == (enum ObViewColumnFilledFlag)table_mode_.view_column_filled_flag_; } + inline void set_view_column_filled_flag(const ObViewColumnFilledFlag flag) + { table_mode_.view_column_filled_flag_ = flag; } + inline void set_session_id(const uint64_t id) { session_id_ = id; } inline uint64_t get_session_id() const { return session_id_; } virtual int get_zone_list( @@ -793,6 +818,8 @@ protected: uint64_t association_table_id_; bool in_offline_ddl_white_list_; ObTabletID tablet_id_; + ObObjectStatus object_status_; + bool is_force_view_; // only record in create view path, do not persist to disk }; class ObTableSchema : public ObSimpleTableSchemaV2 { @@ -930,7 +957,9 @@ public: template int add_column(const ColumnType &column); int delete_column(const common::ObString &column_name); - int alter_column(ObColumnSchemaV2 &column, ObColumnCheckMode check_mode); + int delete_all_view_columns(); + int alter_all_view_columns_type_undefined(bool &already_invalid); + int alter_column(ObColumnSchemaV2 &column, ObColumnCheckMode check_mode, const bool for_view); int reorder_column(const ObString &column_name, const bool is_first, const ObString &prev_column_name, const ObString &next_column_name); int add_aux_vp_tid(const uint64_t aux_vp_tid); int add_partition_key(const common::ObString &column_name); @@ -1354,7 +1383,7 @@ private: common::ObNewRow &default_row) const; inline int64_t get_id_hash_array_mem_size(const int64_t column_cnt) const; inline int64_t get_name_hash_array_mem_size(const int64_t column_cnt) const; - int delete_column_internal(ObColumnSchemaV2 *column_schema); + int delete_column_internal(ObColumnSchemaV2 *column_schema, const bool for_view); ObColumnSchemaV2 *get_column_schema_by_id_internal(const uint64_t column_id) const; ObColumnSchemaV2 *get_column_schema_by_name_internal(const common::ObString &column_name) const; int check_rowkey_column_can_be_altered(const ObColumnSchemaV2 *src_schema, @@ -1384,6 +1413,7 @@ private: static int convert_column_ids_in_info( const common::hash::ObHashMap &column_id_map, ObRowkeyInfo &rowkey_info); + int alter_view_column_internal(ObColumnSchemaV2 &column_schema); protected: int add_mv_tid(const uint64_t mv_tid); @@ -1714,7 +1744,7 @@ int ObTableSchema::add_column(const ColumnType &column) SHARE_SCHEMA_LOG(WARN, "check if_oracle_compat_mode failed", K(ret), K(tenant_id_), K(table_id_)); } if (OB_FAIL(ret)) { - } else if (OB_FAIL(check_row_length(is_oracle_mode, NULL, &column))) { + } else if (!is_view_table() && OB_FAIL(check_row_length(is_oracle_mode, NULL, &column))) { SHARE_SCHEMA_LOG(WARN, "check row length failed", K(ret)); } else { if (NULL == (local_column = new (buf) ColumnType(allocator_))) { diff --git a/src/share/schema/ob_table_sql_service.cpp b/src/share/schema/ob_table_sql_service.cpp index bc369e804b..47f82543f4 100644 --- a/src/share/schema/ob_table_sql_service.cpp +++ b/src/share/schema/ob_table_sql_service.cpp @@ -631,15 +631,12 @@ int ObTableSqlService::drop_table(const ObTableSchema &table_schema, LOG_WARN("delete_from_all_table_history failed", K(table_schema), K(ret)); } } - + bool need_drop_column = (!table_schema.is_view_table() || table_schema.view_column_filled()); // delete from __all_column_history if (OB_FAIL(ret)) { - } else if (!table_schema.is_view_table()) { - // view don't preserve column schema - if (OB_FAIL(delete_from_all_column_history( - sql_client, table_schema, new_schema_version))) { - LOG_WARN("delete_from_column_history_table failed", K(table_schema), K(ret)); - } + } else if (need_drop_column && OB_FAIL(delete_from_all_column_history( + sql_client, table_schema, new_schema_version))) { + LOG_WARN("delete_from_column_history_table failed", K(table_schema), K(ret)); } // delete from __all_table and __all_column if (OB_SUCC(ret)) { @@ -1767,6 +1764,7 @@ int ObTableSqlService::add_single_column(ObISQLClient &sql_client, int ObTableSqlService::add_table( ObISQLClient &sql_client, const ObTableSchema &table, + const bool update_object_status_ignore_version, const bool only_history) { int ret = OB_SUCCESS; @@ -1783,7 +1781,7 @@ int ObTableSqlService::add_table( LOG_USER_ERROR(OB_NOT_SUPPORTED, "tenant data version is less than 4.1, spatial index"); } else if (OB_FAIL(check_ddl_allowed(table))) { LOG_WARN("check ddl allowd failed", K(ret), K(table)); - } else if (OB_FAIL(gen_table_dml(exec_tenant_id, table, dml))) { + } else if (OB_FAIL(gen_table_dml(exec_tenant_id, table, update_object_status_ignore_version, dml))) { LOG_WARN("gen table dml failed", K(ret)); } else { ObDMLExecHelper exec(sql_client, exec_tenant_id); @@ -1837,6 +1835,7 @@ int ObTableSqlService::update_table_options(ObISQLClient &sql_client, uint64_t table_id = table_schema.get_table_id(); ObDMLSqlSplicer dml; const uint64_t exec_tenant_id = ObSchemaUtils::get_exec_tenant_id(tenant_id); + const bool update_object_status_ignore_version = false; if (OB_FAIL(check_ddl_allowed(new_table_schema))) { LOG_WARN("check ddl allowd failed", K(ret), K(new_table_schema)); } else if (OB_FAIL(gen_table_options_dml(exec_tenant_id, new_table_schema, dml))) { @@ -1858,7 +1857,7 @@ int ObTableSqlService::update_table_options(ObISQLClient &sql_client, // add to __all_table_history table if (OB_SUCC(ret)) { const bool only_history = true; - if (OB_FAIL(add_table(sql_client, new_table_schema, only_history))) { + if (OB_FAIL(add_table(sql_client, new_table_schema, update_object_status_ignore_version, only_history))) { LOG_WARN("add_table failed", K(new_table_schema), K(only_history), K(ret)); } } @@ -2190,16 +2189,30 @@ int ObTableSqlService::create_table(ObTableSchema &table, } bool only_history = false; + uint64_t data_version = 0; + const bool update_object_status_ignore_version = false; if (OB_FAIL(ret)) { - } else if (OB_FAIL(add_table(sql_client, table, only_history))) { + } else if (OB_FAIL(GET_MIN_DATA_VERSION(tenant_id, data_version))) { + LOG_WARN("failed to get data version", K(ret)); + } else if (table.is_view_table() && data_version >= DATA_VERSION_4_1_0_0 + && !table.is_sys_view() + && !table.is_force_view() && table.get_column_count() <= 0) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("get wrong view schema", K(ret), K(table)); + } else if (data_version >= DATA_VERSION_4_1_0_0 + && table.is_force_view() + && table.get_column_count() <= 0 + && FALSE_IT(table.set_object_status(ObObjectStatus::INVALID))) { + } else if (table.is_view_table() && data_version >= DATA_VERSION_4_1_0_0 + && table.get_column_count() > 0 + && FALSE_IT(table.set_view_column_filled_flag(ObViewColumnFilledFlag::FILLED))) { + } else if (OB_FAIL(add_table(sql_client, table, update_object_status_ignore_version, only_history))) { LOG_WARN("insert table schema failed, ", K(ret), "table", to_cstring(table)); } else if (!table.is_view_table()) { end_usec = ObTimeUtility::current_time(); cost_usec = end_usec - start_usec; start_usec = end_usec; LOG_INFO("add_table cost: ", K(cost_usec)); - - // view don't preserve column schema if (OB_FAIL(add_columns(sql_client, table))) { LOG_WARN("insert column schema failed, ", K(ret), "table", to_cstring(table)); } else if (OB_FAIL(add_constraints(sql_client, table))) { @@ -2224,6 +2237,9 @@ int ObTableSqlService::create_table(ObTableSchema &table, LOG_WARN("failed to add foreign key", K(ret)); } } + } else if (table.view_column_filled() //view table + && OB_FAIL(add_columns(sql_client, table))) { + LOG_WARN("insert column schema failed, ", K(ret), "table", to_cstring(table)); } ObSchemaOperation opt; @@ -2321,6 +2337,7 @@ int ObTableSqlService::update_index_status( if (OB_SUCC(ret)) { ObRefreshSchemaStatus schema_status; schema_status.tenant_id_ = tenant_id; + const bool update_object_status_ignore_version = false; if (OB_FAIL(schema_service_.get_table_schema_from_inner_table(schema_status, index_table_id, sql_client, index_schema))) { LOG_WARN("get_table_schema failed", K(index_table_id), K(ret)); } else { @@ -2328,7 +2345,7 @@ int ObTableSqlService::update_index_status( index_schema.set_index_status(status); index_schema.set_schema_version(new_schema_version); index_schema.set_in_offline_ddl_white_list(data_table_schema.get_in_offline_ddl_white_list()); - if (OB_FAIL(add_table(sql_client, index_schema, only_history))) { + if (OB_FAIL(add_table(sql_client, index_schema, update_object_status_ignore_version, only_history))) { LOG_WARN("add_table failed", K(index_schema), K(only_history), K(ret)); } } @@ -2438,11 +2455,20 @@ int ObTableSqlService::add_interval_range_val(ObDMLSqlSplicer &dml, int ObTableSqlService::gen_table_dml( const uint64_t exec_tenant_id, const ObTableSchema &table, + const bool update_object_status_ignore_version, ObDMLSqlSplicer &dml) { int ret = OB_SUCCESS; + uint64_t data_version = 0; if (OB_FAIL(check_ddl_allowed(table))) { LOG_WARN("check ddl allowd failed", K(ret), K(table)); + } else if (OB_FAIL(GET_MIN_DATA_VERSION(table.get_tenant_id(), data_version))) { + LOG_WARN("failed to get data version", K(ret)); + } else if (data_version < DATA_VERSION_4_1_0_0 + && OB_UNLIKELY((!update_object_status_ignore_version && ObObjectStatus::VALID != table.get_object_status()) + || table.view_column_filled())) { + ret = OB_NOT_SUPPORTED; + LOG_WARN("option is not support before 4.1", K(ret), K(table)); } else { const ObPartitionOption &part_option = table.get_part_option(); const ObPartitionOption &sub_part_option = table.get_sub_part_option(); @@ -2542,6 +2568,8 @@ int ObTableSqlService::gen_table_dml( || (table.is_interval_part() && OB_FAIL(add_transition_point_val(dml, table))) || (table.is_interval_part() && OB_FAIL(add_interval_range_val(dml, table))) || (OB_FAIL(dml.add_column("tablet_id", table.get_tablet_id().id()))) + || ((data_version >= DATA_VERSION_4_1_0_0 || update_object_status_ignore_version) + && OB_FAIL(dml.add_column("object_status", static_cast (table.get_object_status())))) ) { LOG_WARN("add column failed", K(ret)); } @@ -2555,9 +2583,11 @@ int ObTableSqlService::gen_table_options_dml( ObDMLSqlSplicer &dml) { int ret = OB_SUCCESS; - + uint64_t data_version = 0; if (OB_FAIL(check_ddl_allowed(table))) { LOG_WARN("check ddl allowd failed", K(ret), K(table)); + } else if (OB_FAIL(GET_MIN_DATA_VERSION(table.get_tenant_id(), data_version))) { + LOG_WARN("failed to get data version", K(ret)); } else { const ObPartitionOption &part_option = table.get_part_option(); const ObPartitionOption &sub_part_option = table.get_sub_part_option(); @@ -2577,6 +2607,9 @@ int ObTableSqlService::gen_table_options_dml( if (OB_FAIL(check_table_options(table))) { LOG_WARN("fail to check table option", K(ret), K(table)); + } else if (data_version < DATA_VERSION_4_1_0_0 && OB_UNLIKELY(table.view_column_filled())) { + ret = OB_NOT_SUPPORTED; + LOG_WARN("option is not support before 4.1", K(ret), K(table)); } else if (OB_FAIL(dml.add_pk_column("tenant_id", ObSchemaUtils::get_extract_tenant_id( exec_tenant_id, table.get_tenant_id()))) || OB_FAIL(dml.add_pk_column("table_id", ObSchemaUtils::get_extract_schema_id( @@ -2640,6 +2673,7 @@ int ObTableSqlService::gen_table_options_dml( int ObTableSqlService::update_table_attribute(ObISQLClient &sql_client, ObTableSchema &new_table_schema, const ObSchemaOperationType operation_type, + const bool update_object_status_ignore_version, const ObString *ddl_stmt_str/*=NULL*/) { int ret = OB_SUCCESS; @@ -2650,8 +2684,16 @@ int ObTableSqlService::update_table_attribute(ObISQLClient &sql_client, const char *table_name = new_table_schema.get_table_name_str().length() <= 0 ? "" : new_table_schema.get_table_name_str().ptr(); const ObPartitionOption &part_option = new_table_schema.get_part_option(); + uint64_t data_version = 0; if (OB_FAIL(check_ddl_allowed(new_table_schema))) { LOG_WARN("check ddl allowd failed", K(ret), K(new_table_schema)); + } else if (OB_FAIL(GET_MIN_DATA_VERSION(tenant_id, data_version))) { + LOG_WARN("failed to get data version", K(ret)); + } else if (data_version < DATA_VERSION_4_1_0_0 + && OB_UNLIKELY((!update_object_status_ignore_version && ObObjectStatus::VALID != new_table_schema.get_object_status()) + || new_table_schema.view_column_filled())) { + ret = OB_NOT_SUPPORTED; + LOG_WARN("option is not support before 4.1", K(ret), K(new_table_schema)); } else if (OB_FAIL(dml.add_pk_column("tenant_id", ObSchemaUtils::get_extract_tenant_id( exec_tenant_id, tenant_id))) || OB_FAIL(dml.add_pk_column("table_id", ObSchemaUtils::get_extract_schema_id( @@ -2676,7 +2718,10 @@ int ObTableSqlService::update_table_attribute(ObISQLClient &sql_client, || (OB_FAIL(dml.add_column("part_func_type", part_option.get_part_func_type()))) || OB_FAIL(dml.add_column("auto_increment", share::ObRealUInt64(new_table_schema.get_auto_increment()))) || OB_FAIL(dml.add_column("tablet_id", new_table_schema.get_tablet_id().id())) - || OB_FAIL(dml.add_column("data_table_id", new_table_schema.get_data_table_id()))) { + || OB_FAIL(dml.add_column("data_table_id", new_table_schema.get_data_table_id())) + || ((data_version >= DATA_VERSION_4_1_0_0 || update_object_status_ignore_version) + && OB_FAIL(dml.add_column("object_status", static_cast (new_table_schema.get_object_status())))) + ) { LOG_WARN("add column failed", K(ret)); } else { int64_t affected_rows = 0; @@ -2695,7 +2740,7 @@ int ObTableSqlService::update_table_attribute(ObISQLClient &sql_client, // add updated table to __all_table_history if (OB_SUCC(ret)) { const bool only_history = true; - if (OB_FAIL(add_table(sql_client, new_table_schema, only_history))) { + if (OB_FAIL(add_table(sql_client, new_table_schema, update_object_status_ignore_version, only_history))) { LOG_WARN("add_table failed", K(new_table_schema), K(only_history)); } else { ObSchemaOperation opt; @@ -2766,6 +2811,7 @@ int ObTableSqlService::update_partition_option(ObISQLClient &sql_client, const uint64_t tenant_id = table.get_tenant_id(); const uint64_t table_id = table.get_table_id(); ObDMLSqlSplicer dml; + const bool update_object_status_ignore_version = false; if (OB_FAIL(check_ddl_allowed(table))) { LOG_WARN("check ddl allowd failed", K(ret), K(table)); } else if (OB_FAIL(gen_partition_option_dml(table, dml))) { @@ -2788,7 +2834,7 @@ int ObTableSqlService::update_partition_option(ObISQLClient &sql_client, // add updated table to __all_table_history if (OB_SUCC(ret)) { const bool only_history = true; - if (OB_FAIL(add_table(sql_client, table, only_history))) { + if (OB_FAIL(add_table(sql_client, table, update_object_status_ignore_version, only_history))) { LOG_WARN("add_table failed", K(table), K(only_history)); } else { ObSchemaOperation opt; @@ -2839,7 +2885,8 @@ int ObTableSqlService::update_partition_option(ObISQLClient &sql_client, // add updated table to __all_table_history if (OB_SUCC(ret)) { const bool only_history = true; - if (OB_FAIL(add_table(sql_client, table, only_history))) { + const bool update_object_status_ignore_version = false; + if (OB_FAIL(add_table(sql_client, table, update_object_status_ignore_version, only_history))) { LOG_WARN("add_table failed", K(table), K(only_history)); } else {} } @@ -3347,8 +3394,9 @@ int ObTableSqlService::update_data_table_schema_version( // add new table_schema to __all_table_history if (OB_SUCC(ret)) { const bool only_history = true; + const bool update_object_status_ignore_version = false; table_schema.set_schema_version(new_schema_version); - if (OB_FAIL(add_table(sql_client, table_schema, only_history))) { + if (OB_FAIL(add_table(sql_client, table_schema, update_object_status_ignore_version, only_history))) { LOG_WARN("add_table failed", K(table_schema), K(only_history), K(ret)); } } @@ -3437,13 +3485,14 @@ int ObTableSqlService::sync_aux_schema_version_for_history( int ret = OB_SUCCESS; const bool only_history = true; ObTableSchema aux_schema; + const bool update_object_status_ignore_version = false; if (OB_FAIL(check_ddl_allowed(aux_schema1))) { LOG_WARN("check ddl allowd failed", K(ret), K(aux_schema1)); } else if (OB_FAIL(aux_schema.assign(aux_schema1))) { LOG_WARN("fail to assign schema", K(ret)); } else { aux_schema.set_schema_version(new_schema_version); - if (OB_FAIL(add_table(sql_client, aux_schema, only_history))) { + if (OB_FAIL(add_table(sql_client, aux_schema, update_object_status_ignore_version, only_history))) { LOG_WARN("add_table failed", K(aux_schema), K(only_history), K(ret)); } } @@ -3471,10 +3520,11 @@ int ObTableSqlService::sync_schema_version_for_history( { int ret = OB_SUCCESS; const bool only_history = true; + const bool update_object_status_ignore_version = false; schema.set_schema_version(new_schema_version); if (OB_FAIL(check_ddl_allowed(schema))) { LOG_WARN("check ddl allowd failed", K(ret), K(schema)); - } else if (OB_FAIL(add_table(sql_client, schema, only_history))) { + } else if (OB_FAIL(add_table(sql_client, schema, update_object_status_ignore_version, only_history))) { LOG_WARN("fail to add table for history", K(schema), K(ret)); } @@ -3502,6 +3552,7 @@ int ObTableSqlService::update_tablegroup(ObSchemaGetterGuard &schema_guard, ObDMLSqlSplicer dml; const uint64_t tenant_id = new_table_schema.get_tenant_id(); const uint64_t exec_tenant_id = ObSchemaUtils::get_exec_tenant_id(tenant_id); + const bool update_object_status_ignore_version = false; if (OB_FAIL(check_ddl_allowed(new_table_schema))) { LOG_WARN("check ddl allowd failed", K(ret), K(new_table_schema)); } else { @@ -3531,7 +3582,7 @@ int ObTableSqlService::update_tablegroup(ObSchemaGetterGuard &schema_guard, // insert __all_table_history const bool only_history = true; if (OB_FAIL(ret)) { - } else if (OB_FAIL(add_table(sql_client, new_table_schema, only_history))) { + } else if (OB_FAIL(add_table(sql_client, new_table_schema, update_object_status_ignore_version, only_history))) { LOG_WARN("add_table failed", K(new_table_schema), K(only_history), K(ret)); } } @@ -4597,6 +4648,7 @@ int ObTableSqlService::update_table_schema_version(ObISQLClient &sql_client, uint64_t table_id = table_schema.get_table_id(); uint64_t tenant_id = table_schema.get_tenant_id(); const uint64_t exec_tenant_id = ObSchemaUtils::get_exec_tenant_id(table_schema.get_tenant_id()); + const bool update_object_status_ignore_version = false; ObDMLSqlSplicer dml; if (OB_FAIL(check_ddl_allowed(table_schema))) { LOG_WARN("check ddl allowd failed", K(ret), K(table_schema)); @@ -4623,7 +4675,7 @@ int ObTableSqlService::update_table_schema_version(ObISQLClient &sql_client, // add to __all_table_history table if (OB_SUCC(ret)) { const bool only_history = true; - if (OB_FAIL(add_table(sql_client, table_schema, only_history))) { + if (OB_FAIL(add_table(sql_client, table_schema, update_object_status_ignore_version, only_history))) { LOG_WARN("add_table failed", K(table_schema), K(only_history), K(ret)); } } @@ -5217,6 +5269,80 @@ int ObTableSqlService::format_delete_mock_table_column_dml_sql( return ret; } +int ObTableSqlService::update_view_columns(ObISQLClient &sql_client, + const ObTableSchema &table) +{ + int ret = OB_SUCCESS; + const int64_t new_schema_version = table.get_schema_version(); + const uint64_t tenant_id = table.get_tenant_id(); + const uint64_t exec_tenant_id = ObSchemaUtils::get_exec_tenant_id(tenant_id); + uint64_t data_version = 0; + if (OB_FAIL(check_ddl_allowed(table))) { + LOG_WARN("check ddl allowd failed", K(ret), K(table)); + } else if (OB_FAIL(GET_MIN_DATA_VERSION(tenant_id, data_version))) { + LOG_WARN("failed to get data version", K(ret)); + } else if (data_version < DATA_VERSION_4_1_0_0) { + ret = OB_NOT_SUPPORTED; + LOG_WARN("version and feature mismatch", K(ret)); + } + ObSqlString column_sql_obj; + ObSqlString column_history_sql_obj; + ObSqlString *column_sql_ptr = &column_sql_obj; + ObSqlString *column_history_sql_ptr = &column_history_sql_obj; + ObSqlString &column_sql = *column_sql_ptr; + ObSqlString &column_history_sql = *column_history_sql_ptr; + int64_t affected_rows = 0; + for (ObTableSchema::const_column_iterator iter = table.column_begin(); + OB_SUCCESS == ret && iter != table.column_end(); ++iter) { + if (OB_ISNULL(*iter)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("iter is NULL", K(ret)); + } else { + ObColumnSchemaV2 column = (**iter); + column.set_schema_version(new_schema_version); + column.set_tenant_id(table.get_tenant_id()); + column.set_table_id(table.get_table_id()); + ObDMLSqlSplicer dml; + if (OB_FAIL(gen_column_dml(exec_tenant_id, column, dml))) { + LOG_WARN("gen_column_dml failed", K(column), K(ret)); + } else if (OB_FAIL(dml.splice_insert_update_sql(OB_ALL_COLUMN_TNAME, column_sql))) { + LOG_WARN("splice_insert_sql failed", "table_name", OB_ALL_COLUMN_TNAME, K(ret)); + } else if (OB_FAIL(sql_client.write(exec_tenant_id, column_sql.ptr(), affected_rows))) { + LOG_WARN("execute sql failed", K(column_sql), K(ret)); + } else if (affected_rows > 2) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("affected_rows not equal to column count", K(affected_rows), K(ret)); + } else if (column_history_sql.empty()) { + const int64_t is_deleted = 0; + if (OB_FAIL(dml.add_column("is_deleted", is_deleted))) { + LOG_WARN("dml add column failed", K(ret)); + } else if (OB_FAIL(dml.splice_insert_sql_without_plancache( + OB_ALL_COLUMN_HISTORY_TNAME, column_history_sql))) { + LOG_WARN("splice_insert_sql failed", "table_name", OB_ALL_COLUMN_HISTORY_TNAME, K(ret)); + } + } else { + ObSqlString value_str; + const int64_t is_deleted = 0; + if (OB_FAIL(dml.add_column("is_deleted", is_deleted))) { + LOG_WARN("add column failed", K(ret)); + } else if (OB_FAIL(dml.splice_values(value_str))) { + LOG_WARN("splice_values failed", K(ret)); + } else if (OB_FAIL(column_history_sql.append_fmt(", (%s)", value_str.ptr()))) { + LOG_WARN("append_fmt failed", K(value_str), K(ret)); + } + } + } + } + if (OB_FAIL(ret)) { + } else if (OB_FAIL(sql_client.write(exec_tenant_id, column_history_sql.ptr(), affected_rows))) { + LOG_WARN("execute_sql failed", K(column_history_sql), K(ret)); + } else if (affected_rows != table.get_column_count()) { + LOG_WARN("affected_rows not equal to column count", K(affected_rows), + "column_count", table.get_column_count(), K(ret)); + } + return ret; +} + } //end of schema } //end of share } //end of oceanbase diff --git a/src/share/schema/ob_table_sql_service.h b/src/share/schema/ob_table_sql_service.h index a0cc9fc9c0..833ed92e46 100644 --- a/src/share/schema/ob_table_sql_service.h +++ b/src/share/schema/ob_table_sql_service.h @@ -58,6 +58,7 @@ public: int update_table_attribute(common::ObISQLClient &sql_client, ObTableSchema &new_table_schema, const ObSchemaOperationType operation_type, + const bool update_object_status_ignore_version, const common::ObString *ddl_stmt_str = NULL); int update_partition_option(common::ObISQLClient &sql_client, ObTableSchema &table, @@ -235,6 +236,7 @@ public: private: int add_table(common::ObISQLClient &sql_client, const ObTableSchema &table, + const bool update_object_status_ignore_version, const bool only_history = false); int delete_from_all_table(common::ObISQLClient &sql_client, const uint64_t tenant_id, @@ -254,7 +256,8 @@ private: int delete_from_all_column(common::ObISQLClient &sql_client, const uint64_t tenant_id, const uint64_t table_id, - const int64_t column_count, bool check_affect_rows = true); + const int64_t column_count, + bool check_affect_rows = true); int delete_from_all_table_history(common::ObISQLClient &sql_client, const ObTableSchema &table_schema, const int64_t new_schema_version); @@ -284,7 +287,8 @@ private: const ObTableSchema &table); int add_interval_range_val(share::ObDMLSqlSplicer &dml, const ObTableSchema &table); - int gen_table_dml(const uint64_t exec_tenant_id, const ObTableSchema &table, share::ObDMLSqlSplicer &dml); + int gen_table_dml(const uint64_t exec_tenant_id, const ObTableSchema &table, + const bool update_object_status_ignore_version, share::ObDMLSqlSplicer &dml); int gen_table_options_dml(const uint64_t exec_tenant_id, const ObTableSchema &table, share::ObDMLSqlSplicer &dml); int gen_column_dml(const uint64_t exec_tenant_id, const ObColumnSchemaV2 &column, share::ObDMLSqlSplicer &dml); int gen_constraint_dml(const uint64_t exec_tenant_id, const ObConstraint &constraint, share::ObDMLSqlSplicer &dml); @@ -411,6 +415,9 @@ public: int update_mock_fk_parent_table_schema_version( common::ObISQLClient *sql_client, ObMockFKParentTableSchema &mock_fk_parent_table_schema); + int update_view_columns(ObISQLClient &sql_client, + const ObTableSchema &table); + private: int update_foreign_key_in_mock_fk_parent_table( common::ObISQLClient *sql_client, diff --git a/src/sql/CMakeLists.txt b/src/sql/CMakeLists.txt index 64370d9efc..9cea51d7a7 100644 --- a/src/sql/CMakeLists.txt +++ b/src/sql/CMakeLists.txt @@ -282,6 +282,7 @@ ob_set_subtarget(ob_sql engine_expr engine/expr/ob_expr_crc32.cpp engine/expr/ob_expr_cur_time.cpp engine/expr/ob_expr_current_user.cpp + engine/expr/ob_expr_current_user_priv.cpp engine/expr/ob_expr_database.cpp engine/expr/ob_expr_date.cpp engine/expr/ob_expr_date_add.cpp @@ -600,6 +601,7 @@ ob_set_subtarget(ob_sql engine_expr engine/expr/ob_expr_st_distance_sphere.cpp engine/expr/ob_expr_st_contains.cpp engine/expr/ob_expr_st_within.cpp + engine/expr/ob_expr_sql_mode_convert.cpp ) ob_set_subtarget(ob_sql engine_join diff --git a/src/sql/engine/expr/ob_expr_cast.cpp b/src/sql/engine/expr/ob_expr_cast.cpp index ff0bbde6c1..b1d2211cb8 100644 --- a/src/sql/engine/expr/ob_expr_cast.cpp +++ b/src/sql/engine/expr/ob_expr_cast.cpp @@ -525,11 +525,27 @@ int ObExprCast::get_cast_type(const ObExprResType param_type2, ParseNode parse_node; parse_node.value_ = param.get_int(); ObObjType obj_type = static_cast(parse_node.int16_values_[OB_NODE_CAST_TYPE_IDX]); + bool is_explicit_cast = CM_IS_EXPLICIT_CAST(cast_mode); dst_type.set_collation_type(static_cast(parse_node.int16_values_[OB_NODE_CAST_COLL_IDX])); dst_type.set_type(obj_type); - if (ob_is_string_type(obj_type) || ob_is_lob_locator(obj_type)) { + int64_t maxblen = 4; + if (ob_is_lob_locator(obj_type)) { // cast(x as char(10)) or cast(x as binary(10)) dst_type.set_full_length(parse_node.int32_values_[OB_NODE_CAST_C_LEN_IDX], param_type2.get_accuracy().get_length_semantics()); + } else if (ob_is_string_type(obj_type)) { + dst_type.set_full_length(parse_node.int32_values_[OB_NODE_CAST_C_LEN_IDX], param_type2.get_accuracy().get_length_semantics()); + if (lib::is_mysql_mode() && is_explicit_cast && !dst_type.is_binary() && !dst_type.is_varbinary()) { + if (dst_type.get_length() > OB_MAX_CAST_CHAR_VARCHAR_LENGTH && dst_type.get_length() <= OB_MAX_CAST_CHAR_TEXT_LENGTH) { + dst_type.set_type(ObTextType); + dst_type.set_length(OB_MAX_CAST_CHAR_TEXT_LENGTH); + } else if (dst_type.get_length() > OB_MAX_CAST_CHAR_TEXT_LENGTH && dst_type.get_length() <= OB_MAX_CAST_CHAR_MEDIUMTEXT_LENGTH) { + dst_type.set_type(ObMediumTextType); + dst_type.set_length(OB_MAX_CAST_CHAR_MEDIUMTEXT_LENGTH); + } else if (dst_type.get_length() > OB_MAX_CAST_CHAR_MEDIUMTEXT_LENGTH) { + dst_type.set_type(ObLongTextType); + dst_type.set_length(OB_MAX_LONGTEXT_LENGTH / maxblen); + } + } } else if (ob_is_raw(obj_type)) { dst_type.set_length(parse_node.int32_values_[OB_NODE_CAST_C_LEN_IDX]); } else if (ob_is_extend(obj_type)) { diff --git a/src/sql/engine/expr/ob_expr_current_user_priv.cpp b/src/sql/engine/expr/ob_expr_current_user_priv.cpp new file mode 100644 index 0000000000..b7d6bd683b --- /dev/null +++ b/src/sql/engine/expr/ob_expr_current_user_priv.cpp @@ -0,0 +1,73 @@ +/** + * Copyright (c) 2021 OceanBase + * OceanBase CE is licensed under Mulan PubL v2. + * You can use this software according to the terms and conditions of the Mulan PubL v2. + * You may obtain a copy of Mulan PubL v2 at: + * http://license.coscl.org.cn/MulanPubL-2.0 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PubL v2 for more details. + */ + +#define USING_LOG_PREFIX SQL_ENG +#include "sql/engine/expr/ob_expr_current_user_priv.h" +#include "sql/engine/ob_physical_plan_ctx.h" +#include "lib/mysqlclient/ob_mysql_result.h" +#include "lib/mysqlclient/ob_mysql_transaction.h" +#include "lib/string/ob_sql_string.h" +#include "lib/mysqlclient/ob_mysql_proxy.h" +#include "lib/oblog/ob_log_module.h" +#include "sql/engine/ob_exec_context.h" + +using namespace oceanbase::common; +using namespace oceanbase::sql; + +namespace oceanbase +{ +namespace sql +{ +ObExprCurrentUserPriv::ObExprCurrentUserPriv(ObIAllocator &alloc) + : ObFuncExprOperator(alloc, T_FUN_SYS_CURRENT_USER_PRIV, + N_CURRENT_USER_PRIV, 0, + NOT_ROW_DIMENSION) { +} + +ObExprCurrentUserPriv::~ObExprCurrentUserPriv() { +} + +int ObExprCurrentUserPriv::calc_result_type0(ObExprResType &type, + ObExprTypeCtx &type_ctx) const { + int ret = OB_SUCCESS; + UNUSED(type_ctx); + type.set_type(ObIntType); + type.set_precision(ObAccuracy::DDL_DEFAULT_ACCURACY[ObIntType].precision_); + type.set_scale(ObAccuracy::DDL_DEFAULT_ACCURACY[ObIntType].scale_); + return ret; +} + +int ObExprCurrentUserPriv::eval_current_user_priv(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &expr_datum) { + int ret = OB_SUCCESS; + UNUSED(expr); + const ObSQLSessionInfo *session_info = NULL; + if (OB_ISNULL(session_info = ctx.exec_ctx_.get_my_session())) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("session info is null", K(ret)); + } else { + const ObPrivSet user_priv_set = session_info->get_user_priv_set(); + expr_datum.set_int(user_priv_set); + } + return ret; +} + +int ObExprCurrentUserPriv::cg_expr(ObExprCGCtx &op_cg_ctx, const ObRawExpr &raw_expr, + ObExpr &rt_expr) const +{ + UNUSED(raw_expr); + UNUSED(op_cg_ctx); + rt_expr.eval_func_ = ObExprCurrentUserPriv::eval_current_user_priv; + return OB_SUCCESS; +} + +}/* ns sql*/ +}/* ns oceanbase */ diff --git a/src/sql/engine/expr/ob_expr_current_user_priv.h b/src/sql/engine/expr/ob_expr_current_user_priv.h new file mode 100644 index 0000000000..85f7d19ba4 --- /dev/null +++ b/src/sql/engine/expr/ob_expr_current_user_priv.h @@ -0,0 +1,38 @@ +/** + * Copyright (c) 2021 OceanBase + * OceanBase CE is licensed under Mulan PubL v2. + * You can use this software according to the terms and conditions of the Mulan PubL v2. + * You may obtain a copy of Mulan PubL v2 at: + * http://license.coscl.org.cn/MulanPubL-2.0 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PubL v2 for more details. + */ + +#ifndef OCEANBASE_SQL_ENGINE_EXPR_OB_EXPR_CURRENT_USER_PRIV_ +#define OCEANBASE_SQL_ENGINE_EXPR_OB_EXPR_CURRENT_USER_PRIV_ + +#include "sql/engine/expr/ob_expr_operator.h" + +namespace oceanbase +{ +namespace sql +{ +class ObExprCurrentUserPriv : public ObFuncExprOperator +{ +public: + explicit ObExprCurrentUserPriv(common::ObIAllocator &alloc); + virtual ~ObExprCurrentUserPriv(); + virtual int calc_result_type0(ObExprResType &type, + common::ObExprTypeCtx &type_ctx) const; + static int eval_current_user_priv(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &expr_datum); + virtual int cg_expr(ObExprCGCtx &op_cg_ctx, + const ObRawExpr &raw_expr, + ObExpr &rt_expr) const override; +private: + DISALLOW_COPY_AND_ASSIGN(ObExprCurrentUserPriv); +}; +} +} +#endif /* OCEANBASE_SQL_ENGINE_EXPR_OB_EXPR_CURRENT_USER_PRIV_ */ diff --git a/src/sql/engine/expr/ob_expr_eval_functions.cpp b/src/sql/engine/expr/ob_expr_eval_functions.cpp index 53ce710b99..3131586423 100644 --- a/src/sql/engine/expr/ob_expr_eval_functions.cpp +++ b/src/sql/engine/expr/ob_expr_eval_functions.cpp @@ -21,6 +21,7 @@ #include "ob_expr_regexp_count.h" #include "ob_expr_conv.h" #include "ob_expr_current_user.h" +#include "ob_expr_current_user_priv.h" #include "ob_expr_cur_time.h" #include "ob_expr_database.h" #include "ob_expr_date.h" @@ -296,6 +297,7 @@ #include "ob_expr_st_contains.h" #include "ob_expr_st_within.h" #include "ob_expr_priv_st_asewkb.h" +#include "ob_expr_sql_mode_convert.h" namespace oceanbase { @@ -895,7 +897,6 @@ static ObExpr::EvalFunc g_expr_eval_functions[] = { #endif ObExprDayName::calc_dayname, /* 510 */ ObExprNullif::eval_nullif_enumset, /* 511 */ - ObExprSTIntersects::eval_st_intersects, /* 512 */ ObExprSTX::eval_st_x, /* 513 */ ObExprSTY::eval_st_y, /* 514 */ @@ -941,7 +942,9 @@ static ObExpr::EvalFunc g_expr_eval_functions[] = { ObExprSTWithin::eval_st_within, /* 554 */ ObExprPrivSTTransform::eval_priv_st_transform, /* 555 */ ObExprSTGeomFromText::eval_st_geomfromtext, /* 556 */ - ObExprSTArea::eval_st_area /* 557 */ + ObExprSTArea::eval_st_area, /* 557 */ + ObExprCurrentUserPriv::eval_current_user_priv, /* 558 */ + ObExprSqlModeConvert::sql_mode_convert, /* 559 */ }; static ObExpr::EvalBatchFunc g_expr_eval_batch_functions[] = { diff --git a/src/sql/engine/expr/ob_expr_operator_factory.cpp b/src/sql/engine/expr/ob_expr_operator_factory.cpp index ebdeacf27c..2af3792a40 100644 --- a/src/sql/engine/expr/ob_expr_operator_factory.cpp +++ b/src/sql/engine/expr/ob_expr_operator_factory.cpp @@ -46,6 +46,7 @@ #include "sql/engine/expr/ob_expr_convert.h" #include "sql/engine/expr/ob_expr_coalesce.h" #include "sql/engine/expr/ob_expr_current_user.h" +#include "sql/engine/expr/ob_expr_current_user_priv.h" #include "sql/engine/expr/ob_expr_nvl.h" #include "sql/engine/expr/ob_expr_concat.h" #include "sql/engine/expr/ob_expr_concat_ws.h" @@ -370,6 +371,7 @@ #include "sql/engine/expr/ob_expr_st_contains.h" #include "sql/engine/expr/ob_expr_st_within.h" #include "sql/engine/expr/ob_expr_priv_st_asewkb.h" +#include "sql/engine/expr/ob_expr_sql_mode_convert.h" using namespace oceanbase::common; namespace oceanbase @@ -580,6 +582,7 @@ void ObExprOperatorFactory::register_expr_operators() REG_OP(ObExprNvl); REG_OP(ObExprConcat); REG_OP(ObExprCurrentUser); + REG_OP(ObExprCurrentUserPriv); REG_OP(ObExprYear); REG_OP(ObExprOracleDecode); REG_OP(ObExprOracleTrunc); @@ -882,6 +885,7 @@ void ObExprOperatorFactory::register_expr_operators() REG_OP(ObExprStatementDigestText); REG_OP(ObExprTimestampToScn); REG_OP(ObExprScnToTimestamp); + REG_OP(ObExprSqlModeConvert); #if defined(ENABLE_DEBUG_LOG) || !defined(NDEBUG) // convert input value into an OceanBase error number and throw out as exception REG_OP(ObExprErrno); diff --git a/src/sql/engine/expr/ob_expr_sql_mode_convert.cpp b/src/sql/engine/expr/ob_expr_sql_mode_convert.cpp new file mode 100644 index 0000000000..999b943d5e --- /dev/null +++ b/src/sql/engine/expr/ob_expr_sql_mode_convert.cpp @@ -0,0 +1,83 @@ +/** + * Copyright (c) 2021 OceanBase + * OceanBase CE is licensed under Mulan PubL v2. + * You can use this software according to the terms and conditions of the Mulan PubL v2. + * You may obtain a copy of Mulan PubL v2 at: + * http://license.coscl.org.cn/MulanPubL-2.0 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PubL v2 for more details. + */ + +#define USING_LOG_PREFIX SQL_ENG + +#include "sql/engine/expr/ob_expr_sql_mode_convert.h" +#include "common/sql_mode/ob_sql_mode_utils.h" + +using namespace oceanbase::common; + +namespace oceanbase +{ +namespace sql +{ + +ObExprSqlModeConvert::ObExprSqlModeConvert(ObIAllocator &alloc) + : ObStringExprOperator(alloc, T_FUN_SYS_SQL_MODE_CONVERT, N_SQL_MODE_CONVERT, 1) +{ +} + +ObExprSqlModeConvert::~ObExprSqlModeConvert() +{ +} + +int ObExprSqlModeConvert::calc_result_type1(ObExprResType &type, + ObExprResType &type1, + common::ObExprTypeCtx &type_ctx) const +{ + UNUSED(type_ctx); + UNUSED(type1); + + int ret = OB_SUCCESS; + type.set_varchar(); + type.set_default_collation_type(); + type.set_collation_level(CS_LEVEL_SYSCONST); + type.set_length(static_cast(OB_MAX_SYS_VAR_VAL_LENGTH)); + return ret; +} + +int ObExprSqlModeConvert::sql_mode_convert(const ObExpr &expr, + ObEvalCtx &ctx, + ObDatum &expr_datum) +{ + int ret = OB_SUCCESS; + ObDatum *arg = NULL; + if (OB_FAIL(expr.args_[0]->eval(ctx, arg))) { + LOG_WARN("eval arg failed", K(ret)); + } else if (arg->is_null()) { + expr_datum.set_null(); + } else { + ObObj int_value; + ObObj str_value; + int_value.set_uint64(arg->get_uint64()); + if (OB_FAIL(common::ob_sql_mode_to_str(int_value, str_value, &ctx.get_expr_res_alloc()))) { + LOG_WARN("convert sql mode failed", K(ret)); + } else { + expr_datum.set_string(str_value.get_string()); + } + } + return ret; +} + +int ObExprSqlModeConvert::cg_expr(ObExprCGCtx &op_cg_ctx, + const ObRawExpr &raw_expr, + ObExpr &rt_expr) const +{ + UNUSED(raw_expr); + UNUSED(op_cg_ctx); + rt_expr.eval_func_ = ObExprSqlModeConvert::sql_mode_convert; + return OB_SUCCESS; +} + +} +} \ No newline at end of file diff --git a/src/sql/engine/expr/ob_expr_sql_mode_convert.h b/src/sql/engine/expr/ob_expr_sql_mode_convert.h new file mode 100644 index 0000000000..3341640947 --- /dev/null +++ b/src/sql/engine/expr/ob_expr_sql_mode_convert.h @@ -0,0 +1,35 @@ +/** + * Copyright (c) 2021 OceanBase + * OceanBase CE is licensed under Mulan PubL v2. + * You can use this software according to the terms and conditions of the Mulan PubL v2. + * You may obtain a copy of Mulan PubL v2 at: + * http://license.coscl.org.cn/MulanPubL-2.0 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PubL v2 for more details. + */ + +#ifndef _OB_EXPR_SQL_MODE_CONVERT_H +#define _OB_EXPR_SQL_MODE_CONVERT_H + +#include "sql/engine/expr/ob_expr_operator.h" + +namespace oceanbase +{ +namespace sql +{ +class ObExprSqlModeConvert : public ObStringExprOperator +{ +public: + explicit ObExprSqlModeConvert(common::ObIAllocator &alloc); + virtual ~ObExprSqlModeConvert(); + virtual int calc_result_type1(ObExprResType &type, ObExprResType &type1, common::ObExprTypeCtx &type_ctx) const; + static int sql_mode_convert(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &expr_datum); + virtual int cg_expr(ObExprCGCtx &op_cg_ctx, const ObRawExpr &raw_expr, ObExpr &rt_expr) const override; +private: + DISALLOW_COPY_AND_ASSIGN(ObExprSqlModeConvert); +}; +} +} +#endif \ No newline at end of file diff --git a/src/sql/executor/ob_maintain_dependency_info_task.cpp b/src/sql/executor/ob_maintain_dependency_info_task.cpp index c69647963c..91acceb1f8 100644 --- a/src/sql/executor/ob_maintain_dependency_info_task.cpp +++ b/src/sql/executor/ob_maintain_dependency_info_task.cpp @@ -26,7 +26,9 @@ namespace sql ObMaintainObjDepInfoTask::ObMaintainObjDepInfoTask (const uint64_t tenant_id) : tenant_id_(tenant_id), gctx_(GCTX), - rs_rpc_proxy_(*GCTX.rs_rpc_proxy_) + rs_rpc_proxy_(*GCTX.rs_rpc_proxy_), + view_schema_(&alloc_), + reset_view_column_infos_(false) { set_retry_times(0); } @@ -39,7 +41,9 @@ ObMaintainObjDepInfoTask::ObMaintainObjDepInfoTask ( const DepObjKeyItemList &delete_dep_objs) : tenant_id_(tenant_id), gctx_(GCTX), - rs_rpc_proxy_(rs_rpc_proxy) + rs_rpc_proxy_(rs_rpc_proxy), + view_schema_(&alloc_), + reset_view_column_infos_(false) { set_retry_times(0); insert_dep_objs_.assign(insert_dep_objs); @@ -88,6 +92,14 @@ int ObMaintainObjDepInfoTask::check_and_build_dep_info_arg( int ret = OB_SUCCESS; bool is_valid = false; for (int64_t i = 0 ; OB_SUCC(ret) && i < dep_objs.count(); ++i) { + // multi views in one stmt share ref_obj_array, just update own dep + if (view_schema_.get_table_id() != dep_objs.at(i).dep_obj_key_.dep_obj_id_) { + /* + * create view will maintain -1 as dep obj id, but will not call this function + * if current view level is less than 1 will maintain -1 as dep obj id, try to remove task like this earlier + */ + continue; + } if (OB_FAIL(check_cur_maintain_task_is_valid( dep_objs.at(i).dep_obj_key_, dep_objs.at(i).dep_obj_item_.dep_obj_schema_version_, @@ -132,6 +144,8 @@ share::ObAsyncTask *ObMaintainObjDepInfoTask::deep_copy(char *buf, const int64_t insert_dep_objs_, update_dep_objs_, delete_dep_objs_); + OZ ((static_cast (task))->assign_view_schema(view_schema_)); + OX ((static_cast (task))->reset_view_column_infos_ = reset_view_column_infos_); } return task; } @@ -144,6 +158,7 @@ int ObMaintainObjDepInfoTask::process() SMART_VAR(obrpc::ObDependencyObjDDLArg, dep_obj_info_arg) { dep_obj_info_arg.tenant_id_ = tenant_id_; dep_obj_info_arg.exec_tenant_id_ = tenant_id_; + dep_obj_info_arg.reset_view_column_infos_ = reset_view_column_infos_; OZ (gctx_.schema_service_->async_refresh_schema(tenant_id_, last_version)); OZ (gctx_.schema_service_->get_tenant_schema_guard(tenant_id_, schema_guard)); OZ (check_and_build_dep_info_arg(schema_guard, dep_obj_info_arg, @@ -153,9 +168,12 @@ int ObMaintainObjDepInfoTask::process() OZ (check_and_build_dep_info_arg(schema_guard, dep_obj_info_arg, delete_dep_objs_, share::schema::ObReferenceObjTable::DELETE_OP)); if (OB_FAIL(ret)) { + } else if (view_schema_.is_valid() && OB_FAIL(dep_obj_info_arg.schema_.assign(view_schema_))) { + LOG_WARN("failed to assign view schema", K(ret)); } else if (dep_obj_info_arg.insert_dep_objs_.empty() && dep_obj_info_arg.update_dep_objs_.empty() - && dep_obj_info_arg.delete_dep_objs_.empty()) { + && dep_obj_info_arg.delete_dep_objs_.empty() + && !dep_obj_info_arg.schema_.is_valid()) { // do nothing } else if (OB_FAIL(rs_rpc_proxy_.maintain_obj_dependency_info(dep_obj_info_arg))) { LOG_WARN("failed to maintain_obj_dependency_info", K(ret), K(dep_obj_info_arg)); @@ -164,6 +182,26 @@ int ObMaintainObjDepInfoTask::process() return ret; } +int ObMaintainObjDepInfoTask::assign_view_schema(const ObTableSchema &view_schema) +{ + int ret = OB_SUCCESS; + if (OB_FAIL(view_schema_.assign(view_schema))) { + LOG_WARN("failed to copy view schema", K(ret)); + } + return ret; +} + +int ObMaintainDepInfoTaskQueue::init(const int64_t thread_cnt, const int64_t queue_size) +{ + int ret = OB_SUCCESS; + if (OB_FAIL(ObAsyncTaskQueue::init(thread_cnt, queue_size))) { + LOG_WARN("failed to init base queue", K(ret)); + } else if (OB_FAIL(view_info_set_.create(INIT_BKT_SIZE))) { + LOG_WARN("failed to init view set", K(ret)); + } + return ret; +} + void ObMaintainDepInfoTaskQueue::run2() { int ret = OB_SUCCESS; @@ -174,7 +212,11 @@ void ObMaintainDepInfoTaskQueue::run2() } else { ObAddr zero_addr; while (!stop_) { - if (REACH_TIME_INTERVAL(600 * 1000 * 1000)) { + if (REACH_TIME_INTERVAL(6 * 1000 * 1000)) { + if (0 == queue_.size() && 0 != view_info_set_.size()) { + LOG_WARN("queue size not match", K(queue_.size()), K(view_info_set_.size())); + view_info_set_.clear(); + } LOG_INFO("[ASYNC TASK QUEUE]", "queue_size", queue_.size()); } if (last_execute_time_ > 0 @@ -229,6 +271,15 @@ void ObMaintainDepInfoTaskQueue::run2() rescheduled = true; } } + } else { + const ObTableSchema &view_schema = (static_cast (task))->get_view_schema(); + if (view_schema.is_valid()) { + // ignore ret + int tmp_ret = OB_SUCCESS; + if (OB_SUCCESS != (tmp_ret = view_info_set_.erase_refactored(view_schema.get_table_id()))) { + LOG_WARN("failed to erase obj id", K(tmp_ret)); + } + } } last_execute_time_ = ObTimeUtility::current_time(); if (!rescheduled) { diff --git a/src/sql/executor/ob_maintain_dependency_info_task.h b/src/sql/executor/ob_maintain_dependency_info_task.h index b99d026ad6..668799393d 100644 --- a/src/sql/executor/ob_maintain_dependency_info_task.h +++ b/src/sql/executor/ob_maintain_dependency_info_task.h @@ -16,6 +16,9 @@ #include "lib/container/ob_fixed_array.h" #include "lib/thread/ob_async_task_queue.h" #include "share/schema/ob_dependency_info.h" +#include "lib/hash/ob_hashset.h" +#include "share/schema/ob_multi_version_schema_service.h" +#include "share/schema/ob_schema_struct.h" namespace oceanbase { @@ -49,7 +52,7 @@ public: DepObjKeyItemList& get_update_dep_objs() { return update_dep_objs_; } DepObjKeyItemList& get_delete_dep_objs() { return delete_dep_objs_; } bool is_empty_task() const - { return insert_dep_objs_.empty() && update_dep_objs_.empty() && delete_dep_objs_.empty(); } + { return !reset_view_column_infos_ && (insert_dep_objs_.empty() && update_dep_objs_.empty() && delete_dep_objs_.empty() && !view_schema_.is_valid()); } // int check_and_refresh_schema(uint64_t effective_tenant_id); int check_cur_maintain_task_is_valid( const share::schema::ObReferenceObjTable::ObDependencyObjKey &dep_obj_key, @@ -65,6 +68,10 @@ public: virtual int process() override; virtual int64_t get_deep_copy_size() const override { return sizeof(ObMaintainObjDepInfoTask); } ObAsyncTask *deep_copy(char *buf, const int64_t buf_size) const override; + int assign_view_schema(const share::schema::ObTableSchema &view_schema); + share::schema::ObTableSchema &get_view_schema() { return view_schema_; } + void set_reset_view_column_infos(bool flag) { reset_view_column_infos_ = flag; } + bool reset_view_column_infos() const { return reset_view_column_infos_; } private: uint64_t tenant_id_; @@ -73,21 +80,31 @@ private: DepObjKeyItemList insert_dep_objs_; DepObjKeyItemList update_dep_objs_; DepObjKeyItemList delete_dep_objs_; + ObArenaAllocator alloc_; + share::schema::ObTableSchema view_schema_; + bool reset_view_column_infos_; DISALLOW_COPY_AND_ASSIGN(ObMaintainObjDepInfoTask); }; class ObMaintainDepInfoTaskQueue: public share::ObAsyncTaskQueue { public: + static const int64_t INIT_BKT_SIZE = 8192; ObMaintainDepInfoTaskQueue() : last_execute_time_(0) {} - virtual ~ObMaintainDepInfoTaskQueue() {} + virtual ~ObMaintainDepInfoTaskQueue() + { + view_info_set_.destroy(); + } + int init(const int64_t thread_cnt, const int64_t queue_size); virtual void run2() override; inline int64_t get_last_execute_time() const { return last_execute_time_; } inline void set_last_execute_time(const int64_t execute_time) { last_execute_time_ = execute_time; } - + int add_view_id_to_set(const uint64_t view_id) { return view_info_set_.set_refactored(view_id); } + int erase_view_id_from_set(const uint64_t view_id) { return view_info_set_.erase_refactored(view_id); } private: int64_t last_execute_time_; + common::hash::ObHashSet view_info_set_; }; } // namespace sql diff --git a/src/sql/ob_sql.cpp b/src/sql/ob_sql.cpp index 80dc68741d..6e6142b58d 100644 --- a/src/sql/ob_sql.cpp +++ b/src/sql/ob_sql.cpp @@ -113,7 +113,7 @@ int ObSql::init(common::ObOptStatManager *opt_stat_mgr, } else { if (OB_FAIL(plan_cache_manager_.init(addr))) { LOG_WARN("Failed to init plan cache manager", K(ret)); - } else if (OB_FAIL(queue_.init(1, 1024))) { + } else if (OB_FAIL(queue_.init(1, 8192))) { LOG_WARN("queue init failed", K(ret)); } else { opt_stat_mgr_ = opt_stat_mgr; @@ -2927,16 +2927,18 @@ int ObSql::generate_physical_plan(ParseResult &parse_result, if (OB_NOT_NULL(basic_stmt) && basic_stmt->is_dml_stmt()) { int tmp_ret = ret; ObDMLStmt *stmt = static_cast(basic_stmt); - if (stmt->get_ref_obj_table()->is_inited()) { + uint64_t data_version = 0; + if (OB_FAIL(GET_MIN_DATA_VERSION(tenant_id, data_version))) { + LOG_WARN("failed to get data version", K(ret)); + } else if (data_version < DATA_VERSION_4_1_0_0 && stmt->get_ref_obj_table()->is_inited()) { if (OB_FAIL(stmt->get_ref_obj_table()->process_reference_obj_table( - tenant_id, sql_ctx, queue_))) { + tenant_id, OB_INVALID_ID, nullptr, queue_))) { LOG_WARN("failed to process reference obj table", K(ret)); - } else { - // update the object's dependencies is successful, but may have failed when the plan - // was previously generated. need to return the previous error code - ret = tmp_ret; } } + if (OB_SUCC(ret)) { + ret = tmp_ret; + } } return ret; } diff --git a/src/sql/ob_sql.h b/src/sql/ob_sql.h index f6aad58268..50a24347c2 100644 --- a/src/sql/ob_sql.h +++ b/src/sql/ob_sql.h @@ -251,6 +251,7 @@ public: } virtual ~ObSql() { destroy(); } + ObMaintainDepInfoTaskQueue &get_dep_info_queue() { return queue_; } private: // disallow copy diff --git a/src/sql/ob_sql_utils.cpp b/src/sql/ob_sql_utils.cpp index bfa7df65ce..6594ff2587 100644 --- a/src/sql/ob_sql_utils.cpp +++ b/src/sql/ob_sql_utils.cpp @@ -51,6 +51,8 @@ #include "lib/utility/ob_tracepoint.h" #include "pl/ob_pl_user_type.h" #include "observer/omt/ob_tenant_srs_mgr.h" +#include "sql/executor/ob_maintain_dependency_info_task.h" +#include "sql/resolver/ddl/ob_create_view_resolver.h" using namespace oceanbase; using namespace oceanbase::sql; @@ -4651,3 +4653,211 @@ void ObSQLUtils::adjust_time_by_ntp_offset(int64_t &dst_timeout_ts) { dst_timeout_ts += THIS_WORKER.get_ntp_offset(); } + + +int ObSQLUtils::async_recompile_view(const share::schema::ObTableSchema &old_view_schema, + ObSelectStmt *select_stmt, + bool reset_column_infos) +{ + int ret = OB_SUCCESS; + ObTableSchema new_view_schema; + uint64_t data_version = 0; + if (OB_FAIL(new_view_schema.assign(old_view_schema))) { + LOG_WARN("failed to assign table schema", K(ret)); + } else if (OB_FAIL(GET_MIN_DATA_VERSION(old_view_schema.get_tenant_id(), data_version))) { + LOG_WARN("failed to get data version", K(ret)); + } else if (data_version < DATA_VERSION_4_1_0_0) { + // do nothing + } else if (OB_ISNULL(GCTX.sql_engine_)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("failed to get sql engine", K(ret)); + } else if ((0 == old_view_schema.get_object_status() || 0 == old_view_schema.get_column_count())) { + if (!reset_column_infos) { + if (OB_ISNULL(select_stmt)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("failed to get select stmt", K(ret)); + } else if (OB_FAIL(new_view_schema.delete_all_view_columns())) { + LOG_WARN("failed to delete all columns", K(ret)); + } else if (OB_ISNULL(select_stmt->get_ref_obj_table())) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("ref obj is null", K(ret)); + } else if (OB_FAIL(ObCreateViewResolver::add_column_infos(old_view_schema.get_tenant_id(), *select_stmt, new_view_schema))) { + LOG_WARN("failed to update view column info", K(ret)); + } else if (!new_view_schema.is_view_table() || new_view_schema.get_column_count() <= 0) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("get wrong schema", K(ret), K(new_view_schema)); + } else if (!select_stmt->get_ref_obj_table()->is_inited()) { + // do nothing + } else if (OB_FAIL(GCTX.sql_engine_->get_dep_info_queue().add_view_id_to_set(new_view_schema.get_table_id()))) { + if (OB_HASH_EXIST == ret) { + ret = OB_SUCCESS; + LOG_WARN("table id exists", K(new_view_schema.get_table_id())); + } else { + LOG_WARN("failed to set table id", K(ret)); + } + } else if (OB_FAIL(select_stmt->get_ref_obj_table()->process_reference_obj_table( + new_view_schema.get_tenant_id(), new_view_schema.get_table_id(), &new_view_schema, GCTX.sql_engine_->get_dep_info_queue()))) { + LOG_WARN("failed to process reference obj table", K(ret), K(new_view_schema), K(old_view_schema)); + } + } else if (lib::is_oracle_mode()) { + bool already_invalid = false; + if (OB_FAIL(new_view_schema.alter_all_view_columns_type_undefined(already_invalid))) { + LOG_WARN("failed to reset all columns", K(ret)); + } else if (already_invalid) { + // have reset all column to be undefined before, do nothing + } else if (!new_view_schema.is_view_table() || new_view_schema.get_column_count() <= 0) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("get wrong schema", K(ret), K(new_view_schema)); + } else if (OB_FAIL(GCTX.sql_engine_->get_dep_info_queue().add_view_id_to_set(new_view_schema.get_table_id()))) { + if (OB_HASH_EXIST == ret) { + ret = OB_SUCCESS; + LOG_WARN("table id exists", K(new_view_schema.get_table_id())); + } else { + LOG_WARN("failed to set table id", K(ret)); + } + } else { + SMART_VAR(sql::ObMaintainObjDepInfoTask, task, new_view_schema.get_tenant_id()) { + if (OB_FAIL(task.assign_view_schema(new_view_schema))) { + LOG_WARN("failed to assign view schema", K(ret)); + } else if (FALSE_IT(task.set_reset_view_column_infos(true))) { + } else if (OB_FAIL(GCTX.sql_engine_->get_dep_info_queue().push(task))) { + LOG_WARN("push task failed", K(ret)); + } + } + if (OB_FAIL(ret)) { + int tmp_ret = OB_SUCCESS; + if (OB_SUCCESS != (tmp_ret = GCTX.sql_engine_->get_dep_info_queue().erase_view_id_from_set(new_view_schema.get_table_id()))) { + LOG_WARN("failed to erase obj id", K(tmp_ret), K(ret)); + } + if (OB_SIZE_OVERFLOW == ret) { + ret = OB_SUCCESS; + LOG_TRACE("async queue is full"); + } + } + } + } + } + return ret; +} + +int ObSQLUtils::find_synonym_ref_obj(const ObString &database_name, + const ObString &object_name, + const uint64_t tenant_id, + bool &exist, + uint64_t &object_id, + ObObjectType &obj_type, + uint64_t &schema_version) +{ + int ret = OB_SUCCESS; + ObSchemaGetterGuard guard; + exist = false; + uint64_t database_id = OB_INVALID_ID; + const ObTableSchema *table_schema = nullptr; + const ObSimpleSynonymSchema *synonym_schema = nullptr; + const share::schema::ObPackageInfo *package_info = nullptr; + const ObUDTTypeInfo *udt_info = nullptr; + const ObRoutineInfo *routine_info = nullptr; + const ObSequenceSchema *seq_schema = nullptr; + // table/view/synomyon/package/function/udt/sequence/procedure + if (OB_FAIL(GCTX.schema_service_->get_tenant_schema_guard(tenant_id, guard))) { + LOG_WARN("fail to get schema guard", K(ret)); + } else if (OB_FAIL(guard.get_database_id(tenant_id, database_name, database_id))) { + LOG_WARN("failed to get database id", K(ret), K(tenant_id), K(database_name)); + } else if (OB_FAIL(find_synonym_ref_obj(database_id, object_name, tenant_id, exist, object_id, obj_type, schema_version))) { + LOG_WARN("failed to find synonym ref obj", K(ret)); + } + return ret; +} + + +int ObSQLUtils::find_synonym_ref_obj(const uint64_t database_id, + const ObString &object_name, + const uint64_t tenant_id, + bool &exist, + uint64_t &object_id, + ObObjectType &obj_type, + uint64_t &schema_version) +{ + int ret = OB_SUCCESS; + ObSchemaGetterGuard guard; + exist = false; + const ObTableSchema *table_schema = nullptr; + const ObSimpleSynonymSchema *synonym_schema = nullptr; + const share::schema::ObPackageInfo *package_info = nullptr; + const ObUDTTypeInfo *udt_info = nullptr; + const ObRoutineInfo *routine_info = nullptr; + const ObSequenceSchema *seq_schema = nullptr; + // table/view/synomyon/package/function/udt/sequence/procedure + if (OB_ISNULL(GCTX.schema_service_)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("failed to get schema service", K(ret)); + } else if (OB_FAIL(GCTX.schema_service_->get_tenant_schema_guard(tenant_id, guard))) { + LOG_WARN("fail to get schema guard", K(ret)); + } else if (OB_INVALID_ID == database_id) { + // do nothing + } else if (OB_FAIL(guard.get_table_schema(tenant_id, database_id, object_name, false, table_schema))) { + LOG_WARN("failed to get table schema", K(ret)); + } else if (nullptr != table_schema) { + exist = true; + object_id = table_schema->get_table_id(); + obj_type = table_schema->is_view_table() ? ObObjectType::VIEW : ObObjectType::TABLE; + schema_version = table_schema->get_schema_version(); + } else if (OB_FAIL(guard.get_synonym_info(tenant_id, database_id, object_name, synonym_schema))) { + LOG_WARN("failed to get synonym schema", K(ret)); + } else if (nullptr != synonym_schema) { + exist = true; + object_id = synonym_schema->get_synonym_id(); + obj_type = ObObjectType::SYNONYM; + schema_version = synonym_schema->get_schema_version(); + } else if (OB_FAIL(guard.get_standalone_function_info(tenant_id, database_id, object_name, routine_info))) { + LOG_WARN("failed to get udf info", K(ret)); + } else if (nullptr != routine_info) { + exist = true; + object_id = routine_info->get_object_id(); + obj_type = ObObjectType::FUNCTION; + schema_version = routine_info->get_schema_version(); + } else if (OB_FAIL(guard.get_standalone_procedure_info(tenant_id, database_id, object_name, routine_info))) { + LOG_WARN("failed to get procedore info", K(ret)); + } else if (nullptr != routine_info) { + exist = true; + object_id = routine_info->get_object_id(); + obj_type = ObObjectType::PROCEDURE; + schema_version = routine_info->get_schema_version(); + } else if (OB_FAIL(guard.get_udt_info(tenant_id, database_id, OB_INVALID_ID, + object_name, udt_info))) { + LOG_WARN("failed to get udt info", K(ret)); + } else if (nullptr != udt_info) { + exist = true; + object_id = udt_info->get_type_id(); + obj_type = ObObjectType::TYPE; + schema_version = udt_info->get_schema_version(); + } else if (OB_FAIL(guard.get_sequence_schema_with_name(tenant_id, database_id, object_name, seq_schema))) { + LOG_WARN("failed to get sequence schema", K(ret)); + } else if (nullptr != seq_schema) { + exist = true; + object_id = seq_schema->get_sequence_id(); + obj_type = ObObjectType::SEQUENCE; + schema_version = seq_schema->get_schema_version(); + } else if (OB_FAIL(guard.get_package_info(tenant_id, database_id, object_name, + share::schema::ObPackageType::PACKAGE_TYPE, + COMPATIBLE_ORACLE_MODE, + package_info))) { + LOG_WARN("failed to get package info", K(ret)); + } else if (nullptr != package_info) { + exist = true; + object_id = package_info->get_package_id(); + obj_type = ObObjectType::PACKAGE; + schema_version = package_info->get_schema_version(); + } else if (OB_FAIL(guard.get_package_info(OB_SYS_TENANT_ID, OB_SYS_DATABASE_ID, object_name, + share::schema::ObPackageType::PACKAGE_TYPE, + COMPATIBLE_ORACLE_MODE, + package_info))) { + LOG_WARN("failed to get package info", K(ret)); + } else if (nullptr != package_info) { + exist = true; + object_id = package_info->get_package_id(); + obj_type = ObObjectType::PACKAGE; + schema_version = package_info->get_schema_version(); + } + return ret; +} diff --git a/src/sql/ob_sql_utils.h b/src/sql/ob_sql_utils.h index 1262902b0f..51630c6657 100644 --- a/src/sql/ob_sql_utils.h +++ b/src/sql/ob_sql_utils.h @@ -57,6 +57,7 @@ typedef common::ObSEArray ObQueryRangeArray; typedef common::ObSEArray ObGetMethodArray; struct ObExprConstraint; typedef common::ObSEArray ObMbrFilterArray; +class ObSelectStmt; struct EstimatedPartition { common::ObAddr addr_; @@ -566,6 +567,23 @@ public: * That is the time correctly set by the processor of the RPC ------------------------*/ static void adjust_time_by_ntp_offset(int64_t &dst_timeout_ts); + static int async_recompile_view(const share::schema::ObTableSchema &old_view_schema, + ObSelectStmt *select_stmt, + bool reset_column_infos); + static int find_synonym_ref_obj(const ObString &database_name, + const ObString &object_name, + const uint64_t tenant_id, + bool &exist, + uint64_t &object_id, + share::schema::ObObjectType &obj_type, + uint64_t &schema_version); + static int find_synonym_ref_obj(const uint64_t database_id, + const ObString &object_name, + const uint64_t tenant_id, + bool &exist, + uint64_t &object_id, + share::schema::ObObjectType &obj_type, + uint64_t &schema_version); private: static int check_ident_name(const common::ObCollationType cs_type, common::ObString &name, const bool check_for_path_char, const int64_t max_ident_len); diff --git a/src/sql/resolver/ddl/ob_create_synonym_resolver.cpp b/src/sql/resolver/ddl/ob_create_synonym_resolver.cpp index 657dedb714..682ce76d2a 100644 --- a/src/sql/resolver/ddl/ob_create_synonym_resolver.cpp +++ b/src/sql/resolver/ddl/ob_create_synonym_resolver.cpp @@ -23,6 +23,9 @@ #include "sql/session/ob_sql_session_info.h" #include "sql/resolver/ob_resolver_utils.h" #include "sql/ob_sql_utils.h" +#include "sql/resolver/dml/ob_select_resolver.h" +#include "share/schema/ob_dependency_info.h" +#include "share/ob_tenant_id_schema_version.h" @@ -203,10 +206,39 @@ int ObCreateSynonymResolver::resolve(const ParseNode &parse_tree) } } //well done. + + //add def obj info if exists + bool ref_exists = false; + ObObjectType ref_type = ObObjectType::INVALID; + uint64_t ref_obj_id = OB_INVALID_ID; + uint64_t ref_schema_version = share::OB_INVALID_SCHEMA_VERSION; + uint64_t data_version = 0; if (OB_FAIL(ret)) { } else if (OB_FAIL(check_valid(create_synonym_stmt))) { LOG_WARN("fail to check synonym stmt", K(ret)); + } else if (OB_FAIL(GET_MIN_DATA_VERSION(session_info_->get_effective_tenant_id(), data_version))) { + LOG_WARN("failed to get data version", K(ret)); + } else if (data_version >= DATA_VERSION_4_1_0_0 + && OB_FAIL(ObSQLUtils::find_synonym_ref_obj(create_synonym_stmt->get_object_database_name(), + create_synonym_stmt->get_object_name(), + session_info_->get_effective_tenant_id(), + ref_exists, + ref_obj_id, + ref_type, + ref_schema_version))) { + LOG_WARN("failed to find synonym ref obj", K(ret)); } else { + if (ref_exists) { + ObDependencyInfo dep; + dep.set_dep_obj_id(OB_INVALID_ID); + dep.set_dep_obj_type(ObObjectType::SYNONYM); + dep.set_ref_obj_id(ref_obj_id); + dep.set_ref_obj_type(ref_type); + dep.set_dep_timestamp(-1); + dep.set_ref_timestamp(ref_schema_version); + dep.set_tenant_id(session_info_->get_effective_tenant_id()); + create_synonym_stmt->set_dependency_info(dep); + } stmt_ = create_synonym_stmt; } } diff --git a/src/sql/resolver/ddl/ob_create_synonym_stmt.h b/src/sql/resolver/ddl/ob_create_synonym_stmt.h index 1aa2367fee..41f1241e81 100644 --- a/src/sql/resolver/ddl/ob_create_synonym_stmt.h +++ b/src/sql/resolver/ddl/ob_create_synonym_stmt.h @@ -48,6 +48,8 @@ public: void set_object_database_name(const common::ObString &db_name) { create_synonym_arg_.obj_db_name_ = db_name; } const common::ObString &get_object_database_name() const { return create_synonym_arg_.obj_db_name_; } + void set_dependency_info(const ObDependencyInfo &dep) { create_synonym_arg_.dependency_info_ = dep; } + const ObDependencyInfo &get_dependency_info() const { return create_synonym_arg_.dependency_info_; } virtual obrpc::ObDDLArg &get_ddl_arg() { return create_synonym_arg_; } TO_STRING_KV(K_(create_synonym_arg)); diff --git a/src/sql/resolver/ddl/ob_create_table_resolver.cpp b/src/sql/resolver/ddl/ob_create_table_resolver.cpp index c319f51f90..f59622950b 100644 --- a/src/sql/resolver/ddl/ob_create_table_resolver.cpp +++ b/src/sql/resolver/ddl/ob_create_table_resolver.cpp @@ -1428,7 +1428,10 @@ int ObCreateTableResolver::resolve_table_elements(const ParseNode *node, int ObCreateTableResolver::set_nullable_for_cta_column(ObSelectStmt *select_stmt, ObColumnSchemaV2& column, - const ObRawExpr *expr) + const ObRawExpr *expr, + const ObString &table_name, + ObIAllocator &allocator, + ObStmt *stmt) { int ret = OB_SUCCESS; bool is_not_null = false; @@ -1473,7 +1476,7 @@ int ObCreateTableResolver::set_nullable_for_cta_column(ObSelectStmt *select_stmt if (OB_SUCC(ret)) { if (is_oracle_mode()) { if (is_not_null) { - if (OB_FAIL(add_default_not_null_constraint(column))) { + if (OB_FAIL(add_default_not_null_constraint(column, table_name, allocator, stmt))) { LOG_WARN("add default not null constraint failed", K(ret)); } } else { @@ -1681,7 +1684,10 @@ int ObCreateTableResolver::resolve_table_elements_from_select(const ParseNode &p // nullable property of org_column instead of column should be set. if (OB_FAIL(set_nullable_for_cta_column(select_stmt, *org_column, - expr))) { + expr, + table_name_, + *allocator_, + stmt_))) { LOG_WARN("failed to check and set nullable for cta.", K(ret)); } else if (column.is_enum_or_set()) { if (OB_FAIL(org_column->set_extended_type_info(column.get_extended_type_info()))) { @@ -1702,10 +1708,15 @@ int ObCreateTableResolver::resolve_table_elements_from_select(const ParseNode &p new_column.set_next_column_id(UINT64_MAX); if (1 == table_schema.get_column_count()) { //do nothing, 只有一列就不用调整了 - if (OB_FAIL(set_nullable_for_cta_column(select_stmt, *org_column, expr))) { + if (OB_FAIL(set_nullable_for_cta_column(select_stmt, *org_column, expr, table_name_, *allocator_, stmt_))) { LOG_WARN("failed to check and set nullable for cta.", K(ret)); } - } else if (OB_FAIL(set_nullable_for_cta_column(select_stmt, new_column, expr))) { + } else if (OB_FAIL(set_nullable_for_cta_column(select_stmt, + new_column, + expr, + table_name_, + *allocator_, + stmt_))) { LOG_WARN("failed to check and set nullable for cta.", K(ret)); } else if (OB_FAIL(table_schema.delete_column(org_column->get_column_name_str()))) { LOG_WARN("delete column failed", K(ret), K(new_column.get_column_name_str())); @@ -1715,7 +1726,7 @@ int ObCreateTableResolver::resolve_table_elements_from_select(const ParseNode &p LOG_DEBUG("reorder column successfully", K(new_column)); } } else { - if (OB_FAIL(set_nullable_for_cta_column(select_stmt, column, expr))) { + if (OB_FAIL(set_nullable_for_cta_column(select_stmt, column, expr, table_name_, *allocator_, stmt_))) { LOG_WARN("failed to check and set nullable for cta.", K(ret)); } else if (column.is_string_type() || column.is_json() || column.is_geometry()) { if (column.is_geometry() && T_REF_COLUMN == select_item.expr_->get_expr_type()) { diff --git a/src/sql/resolver/ddl/ob_create_table_resolver.h b/src/sql/resolver/ddl/ob_create_table_resolver.h index b4c24750bf..f6b03cca16 100644 --- a/src/sql/resolver/ddl/ob_create_table_resolver.h +++ b/src/sql/resolver/ddl/ob_create_table_resolver.h @@ -48,6 +48,12 @@ public: virtual ~ObCreateTableResolver(); virtual int resolve(const ParseNode &parse_tree); + static int set_nullable_for_cta_column(ObSelectStmt *select_stmt, + share::schema::ObColumnSchemaV2& column, + const ObRawExpr *expr, + const ObString &table_name, + common::ObIAllocator &allocator, + ObStmt *stmt); private: enum ResolveRule { @@ -73,9 +79,6 @@ private: common::ObArray &table_level_constraint_list, const int resolve_rule); int resolve_table_elements_from_select(const ParseNode &parse_tree); - int set_nullable_for_cta_column(ObSelectStmt *select_stmt, - share::schema::ObColumnSchemaV2& column, - const ObRawExpr *expr); int set_temp_table_info(share::schema::ObTableSchema &table_schema, ParseNode *commit_option_node); int set_table_option_to_schema(share::schema::ObTableSchema &table_schema); diff --git a/src/sql/resolver/ddl/ob_create_view_resolver.cpp b/src/sql/resolver/ddl/ob_create_view_resolver.cpp index e8028076c7..c88eb8725e 100644 --- a/src/sql/resolver/ddl/ob_create_view_resolver.cpp +++ b/src/sql/resolver/ddl/ob_create_view_resolver.cpp @@ -20,7 +20,7 @@ #include "sql/ob_sql_context.h" #include "sql/ob_select_stmt_printer.h" #include "sql/session/ob_sql_session_info.h" - +#include "sql/resolver/ddl/ob_create_table_resolver.h" #include "lib/json/ob_json_print_utils.h" // for SJ #include "lib/hash/ob_hashset.h" @@ -81,6 +81,7 @@ int ObCreateViewResolver::resolve(const ParseNode &parse_tree) create_arg.if_not_exist_ = NULL != parse_tree.children_[IF_NOT_EXISTS_NODE] || 1 == parse_tree.reserved_; create_arg.is_alter_view_ = (1 == parse_tree.reserved_); + table_schema.set_force_view(is_force_view); table_schema.set_tenant_id(session_info_->get_effective_tenant_id()); table_schema.set_tablegroup_id(OB_SYS_TABLEGROUP_ID); table_schema.set_define_user_id(session_info_->get_priv_user_id()); @@ -165,7 +166,12 @@ int ObCreateViewResolver::resolve(const ParseNode &parse_tree) view_table_resolver.get_select_stmt()))) { LOG_WARN("failed to init query hint.", K(ret)); } - + // specify view related flags + if (table_schema.is_sys_table()) { + table_schema.set_table_type(SYSTEM_VIEW); + } else if (table_schema.is_user_table()) { + table_schema.set_table_type(USER_VIEW); + } if (OB_FAIL(ret)) { } else if (OB_ISNULL(select_stmt = view_table_resolver.get_select_stmt())) { ret = OB_ERR_UNEXPECTED; @@ -173,15 +179,11 @@ int ObCreateViewResolver::resolve(const ParseNode &parse_tree) } else if (OB_FAIL(check_view_columns(*select_stmt, view_columns_node, create_arg.error_info_, is_force_view))) { LOG_WARN("failed to check view columns", K(ret)); + } else if (OB_FAIL(add_column_infos(session_info_->get_effective_tenant_id(), *select_stmt, table_schema))) { + LOG_WARN("failed to add column infos", K(ret)); } else if (OB_FAIL(collect_dependency_infos(params_.query_ctx_, create_arg))) { LOG_WARN("failed to collect dependency infos", K(ret)); } else { - // specify view related flags - if (table_schema.is_sys_table()) { - table_schema.set_table_type(SYSTEM_VIEW); - } else if (table_schema.is_user_table()) { - table_schema.set_table_type(USER_VIEW); - } bool is_updatable = true; ViewCheckOption check_option = VIEW_CHECK_OPTION_NONE; if (NULL != parse_tree.children_[WITH_OPT_NODE]) { @@ -691,18 +693,109 @@ int ObCreateViewResolver::collect_dependency_infos(ObQueryCtx *query_ctx, ObCreateTableArg &create_arg) { int ret = OB_SUCCESS; - ObString dummy; - ObReferenceObjTable::ObDependencyObjItem *dep_obj_item = nullptr; + uint64_t data_version = 0; + int64_t max_ref_obj_schema_version = -1; CK (OB_NOT_NULL(query_ctx)); - if (query_ctx->reference_obj_tables_.is_inited()) { - OZ (query_ctx->reference_obj_tables_.get_dep_obj_item( - OB_INVALID_ID, OB_INVALID_ID, ObObjectType::VIEW, dep_obj_item)); - CK (OB_NOT_NULL(dep_obj_item)); - OZ (ObDependencyInfo::collect_dep_infos(dep_obj_item->get_ref_obj_versions(), + if (OB_FAIL(ret)) { + } else if (OB_FAIL(GET_MIN_DATA_VERSION(create_arg.schema_.get_tenant_id(), data_version))) { + LOG_WARN("failed to get data version", K(ret)); + } else if (data_version >= DATA_VERSION_4_1_0_0) { + OZ (ObDependencyInfo::collect_dep_infos(query_ctx->reference_obj_tables_, create_arg.dep_infos_, ObObjectType::VIEW, - 0, dummy, dummy, false/* is_pl */)); - OX (create_arg.schema_.set_max_dependency_version(dep_obj_item->max_ref_obj_schema_version_)); + OB_INVALID_ID, + max_ref_obj_schema_version)); + OX (create_arg.schema_.set_max_dependency_version(max_ref_obj_schema_version)); + } else { + ObReferenceObjTable::ObDependencyObjItem *dep_obj_item = nullptr; + ObString dummy; + if (query_ctx->reference_obj_tables_.is_inited()) { + OZ (query_ctx->reference_obj_tables_.get_dep_obj_item( + OB_INVALID_ID, OB_INVALID_ID, ObObjectType::VIEW, dep_obj_item)); + CK (OB_NOT_NULL(dep_obj_item)); + OZ (ObDependencyInfo::collect_dep_infos(dep_obj_item->get_ref_obj_versions(), + create_arg.dep_infos_, + ObObjectType::VIEW, + 0, dummy, dummy, false/* is_pl */)); + OX (create_arg.schema_.set_max_dependency_version(dep_obj_item->max_ref_obj_schema_version_)); + } + } + return ret; +} + +int ObCreateViewResolver::add_column_infos(const uint64_t tenant_id, ObSelectStmt &select_stmt, ObTableSchema &table_schema) +{ + int ret = OB_SUCCESS; + ObIArray &select_items = select_stmt.get_select_items(); + ObColumnSchemaV2 column; + int64_t cur_column_id = OB_APP_MIN_COLUMN_ID; + uint64_t data_version = 0; + if (OB_FAIL(GET_MIN_DATA_VERSION(tenant_id, data_version))) { + LOG_WARN("failed to get data version", K(ret)); + } else if (data_version >= DATA_VERSION_4_1_0_0) { + for (int64_t i = 0; OB_SUCC(ret) && i < select_items.count(); ++i) { + const SelectItem &select_item = select_items.at(i); + const ObRawExpr *expr = select_item.expr_; + if (OB_UNLIKELY(NULL == expr)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("select item expr is null", K(ret), K(i)); + } else { + column.reset(); + if (!select_item.alias_name_.empty()) { + column.set_column_name(select_item.alias_name_); + } else { + column.set_column_name(select_item.expr_name_); + } + ObObjMeta column_meta = expr->get_result_type().get_obj_meta(); + if (column_meta.is_lob_locator()) { + column_meta.set_type(ObLongTextType); + } + column.set_meta_type(column_meta); + if (column.is_enum_or_set()) { + if (OB_FAIL(column.set_extended_type_info(expr->get_enum_set_values()))) { + LOG_WARN("set enum or set info failed", K(ret), K(*expr)); + } + } + column.set_charset_type(table_schema.get_charset_type()); + column.set_collation_type(expr->get_collation_type()); + column.set_accuracy(expr->get_accuracy()); + OZ (adjust_string_column_length_within_max(column, lib::is_oracle_mode())); + if (OB_FAIL(ret)) { + // do nothing. + } else { + column.set_column_id(cur_column_id++); + ObColumnSchemaV2 *org_column = table_schema.get_column_schema(column.get_column_name()); + if (OB_NOT_NULL(org_column)) { + ObColumnSchemaV2 new_column(*org_column); + new_column.set_column_id(cur_column_id++); + new_column.set_prev_column_id(UINT64_MAX); + new_column.set_next_column_id(UINT64_MAX); + if (1 == table_schema.get_column_count()) { + } else if (OB_FAIL(table_schema.delete_column(org_column->get_column_name_str()))) { + LOG_WARN("delete column failed", K(ret), K(new_column.get_column_name_str())); + } else if (OB_FAIL(table_schema.add_column(new_column))) { + LOG_WARN("add column failed", K(ret), K(new_column)); + } else { + LOG_DEBUG("reorder column successfully", K(new_column)); + } + } else { + if (column.is_string_type() || column.is_json()) { + if (column.get_meta_type().is_lob() || column.get_meta_type().is_json()) { + if (OB_FAIL(check_text_column_length_and_promote(column, table_schema.get_table_id(), true))) { + LOG_WARN("fail to check text or blob column length", K(ret), K(column)); + } + } + } + if (OB_FAIL(ret)) { + //do nothing ... + } else if (OB_FAIL(table_schema.add_column(column))) { + LOG_WARN("add column to table_schema failed", K(ret), K(column)); + } + } + LOG_DEBUG("ctas mysql mode, create_table_column_count = 0,end", K(column)); + } + } + } } return ret; } diff --git a/src/sql/resolver/ddl/ob_create_view_resolver.h b/src/sql/resolver/ddl/ob_create_view_resolver.h index b3a8c3eee0..f38f1e9859 100644 --- a/src/sql/resolver/ddl/ob_create_view_resolver.h +++ b/src/sql/resolver/ddl/ob_create_view_resolver.h @@ -47,6 +47,7 @@ public: virtual ~ObCreateViewResolver(); virtual int resolve(const ParseNode &parse_tree); + static int add_column_infos(const uint64_t tenant_id, ObSelectStmt &select_stmt, ObTableSchema &table_schema); private: int check_privilege(ObCreateTableStmt *stmt, ObSelectStmt *select_stmt); diff --git a/src/sql/resolver/ddl/ob_ddl_resolver.cpp b/src/sql/resolver/ddl/ob_ddl_resolver.cpp index df689ff374..5f5da16816 100644 --- a/src/sql/resolver/ddl/ob_ddl_resolver.cpp +++ b/src/sql/resolver/ddl/ob_ddl_resolver.cpp @@ -2363,7 +2363,7 @@ int ObDDLResolver::resolve_column_definition(ObColumnSchemaV2 &column, // identity column默认为not null,不可更改 if (OB_SUCC(ret) && column.is_identity_column()) { if (!column.has_not_null_constraint()) { - if (OB_FAIL(add_default_not_null_constraint(column))) { + if (OB_FAIL(add_default_not_null_constraint(column, table_name_, *allocator_, stmt_))) { LOG_WARN("add default not null constraint for identity column failed", K(ret)); } } @@ -7932,7 +7932,7 @@ int ObDDLResolver::resolve_not_null_constraint_node( } else { // do nothing if alter table modify identity_column not null } - } else if (OB_FAIL(add_not_null_constraint(column, cst_name, cst))) { + } else if (OB_FAIL(add_not_null_constraint(column, cst_name, cst, *allocator_, stmt_))) { LOG_WARN("add not null constraint", K(ret)); } else { LOG_DEBUG("before column set not null", K(column), K(cst)); @@ -7947,16 +7947,19 @@ int ObDDLResolver::resolve_not_null_constraint_node( } // identity column is default not null, also for ctas not null column -int ObDDLResolver::add_default_not_null_constraint(ObColumnSchemaV2 &column) +int ObDDLResolver::add_default_not_null_constraint(ObColumnSchemaV2 &column, + const ObString &table_name, + ObIAllocator &allocator, + ObStmt *stmt) { int ret = OB_SUCCESS; ObString cst_name; ObConstraint cst; - if (OB_FAIL(ObTableSchema::create_cons_name_automatically(cst_name, table_name_, *allocator_, + if (OB_FAIL(ObTableSchema::create_cons_name_automatically(cst_name, table_name, allocator, CONSTRAINT_TYPE_NOT_NULL, lib::is_oracle_mode()))) { LOG_WARN("create cons name automatically failed", K(ret)); - } else if (OB_FAIL(add_not_null_constraint(column, cst_name, cst))) { + } else if (OB_FAIL(add_not_null_constraint(column, cst_name, cst, allocator, stmt))) { LOG_WARN("add not null constraint", K(ret)); } else { column.add_not_null_cst(); @@ -7967,12 +7970,16 @@ int ObDDLResolver::add_default_not_null_constraint(ObColumnSchemaV2 &column) int ObDDLResolver::add_not_null_constraint(ObColumnSchemaV2 &column, const ObString &cst_name, - ObConstraint &cst) + ObConstraint &cst, + ObIAllocator &allocator, + ObStmt *stmt) { int ret = OB_SUCCESS; - if (OB_UNLIKELY(OB_INVALID_ID == column.get_column_id())) { + CK (OB_NOT_NULL(stmt)); + if (OB_FAIL(ret)) { + } else if (OB_UNLIKELY(OB_INVALID_ID == column.get_column_id())) { bool is_alter_add_column = false; - if (stmt::T_ALTER_TABLE == stmt_->get_stmt_type()) { + if (stmt::T_ALTER_TABLE == stmt->get_stmt_type()) { AlterColumnSchema &alter_col_schema = static_cast(column); if (OB_DDL_ADD_COLUMN == alter_col_schema.alter_type_) { is_alter_add_column = true; @@ -7998,7 +8005,7 @@ int ObDDLResolver::add_not_null_constraint(ObColumnSchemaV2 &column, cst.set_check_expr(column.get_column_name_str()); const ObString &column_name = column.get_column_name_str(); ObString expr_str; - if (OB_FAIL(ObResolverUtils::create_not_null_expr_str(column_name, *allocator_, expr_str, is_oracle_mode()))) { + if (OB_FAIL(ObResolverUtils::create_not_null_expr_str(column_name, allocator, expr_str, is_oracle_mode()))) { LOG_WARN("create not null expr string failed", K(ret)); } else { cst.set_check_expr(expr_str); @@ -8007,8 +8014,8 @@ int ObDDLResolver::add_not_null_constraint(ObColumnSchemaV2 &column, } if (OB_FAIL(ret)) { - } else if (stmt::T_CREATE_TABLE == stmt_->get_stmt_type()) { - ObCreateTableStmt *create_table_stmt = static_cast(stmt_); + } else if (stmt::T_CREATE_TABLE == stmt->get_stmt_type()) { + ObCreateTableStmt *create_table_stmt = static_cast(stmt); ObSEArray &csts = create_table_stmt->get_create_table_arg().constraint_list_; for (uint64_t i = 0; OB_SUCC(ret) && i < csts.count(); ++i) { if (csts.at(i).get_constraint_name_str() == cst_name) { @@ -8019,8 +8026,8 @@ int ObDDLResolver::add_not_null_constraint(ObColumnSchemaV2 &column, if (OB_SUCC(ret) && OB_FAIL(csts.push_back(cst))) { LOG_WARN("push back cst failed", K(ret)); } - } else if (stmt::T_ALTER_TABLE == stmt_->get_stmt_type()) { - ObAlterTableStmt *alter_table_stmt = static_cast(stmt_); + } else if (stmt::T_ALTER_TABLE == stmt->get_stmt_type()) { + ObAlterTableStmt *alter_table_stmt = static_cast(stmt); AlterTableSchema &alter_table_schema = alter_table_stmt-> get_alter_table_arg().alter_table_schema_; for (ObTableSchema::const_constraint_iterator iter = alter_table_schema.constraint_begin(); @@ -8040,7 +8047,7 @@ int ObDDLResolver::add_not_null_constraint(ObColumnSchemaV2 &column, LOG_DEBUG("alter, add not null constraint", K(cst), K(alter_table_schema)); } else { ret = OB_ERR_UNEXPECTED; - SQL_RESV_LOG(WARN, "unexpected stmt type", K(ret), K(stmt_->get_stmt_type())); + SQL_RESV_LOG(WARN, "unexpected stmt type", K(ret), K(stmt->get_stmt_type())); } return ret; } diff --git a/src/sql/resolver/ddl/ob_ddl_resolver.h b/src/sql/resolver/ddl/ob_ddl_resolver.h index ba4ba29b8b..34ac1fb565 100644 --- a/src/sql/resolver/ddl/ob_ddl_resolver.h +++ b/src/sql/resolver/ddl/ob_ddl_resolver.h @@ -672,10 +672,15 @@ protected: int resolve_not_null_constraint_node(share::schema::ObColumnSchemaV2 &column, const ParseNode *cst_node, const bool is_identity_column); - int add_default_not_null_constraint(share::schema::ObColumnSchemaV2 &column); - int add_not_null_constraint(share::schema::ObColumnSchemaV2 &column, + static int add_default_not_null_constraint(share::schema::ObColumnSchemaV2 &column, + const common::ObString &table_name, + common::ObIAllocator &allocator, + ObStmt *stmt); + static int add_not_null_constraint(share::schema::ObColumnSchemaV2 &column, const common::ObString &cst_name, - share::schema::ObConstraint &cst); + share::schema::ObConstraint &cst, + common::ObIAllocator &allocator, + ObStmt *stmt); int create_name_for_empty_partition(const bool is_subpartition, ObIArray &partitions, ObIArray &subpartitions); diff --git a/src/sql/resolver/dml/ob_del_upd_resolver.cpp b/src/sql/resolver/dml/ob_del_upd_resolver.cpp index 9595fb6c53..b5c8159ae2 100644 --- a/src/sql/resolver/dml/ob_del_upd_resolver.cpp +++ b/src/sql/resolver/dml/ob_del_upd_resolver.cpp @@ -1325,6 +1325,7 @@ int ObDelUpdResolver::resolve_err_log_table(const ParseNode *node) bool use_sys_tenant = false; uint64_t table_id = OB_INVALID_ID; ObDelUpdStmt *del_upd_stmt = get_del_upd_stmt(); + ObArray ref_obj_ids; CK (OB_NOT_NULL(del_upd_stmt)); if (OB_ISNULL(relation_factor_node = node->children_[0])) { ret = OB_ERR_UNEXPECTED; @@ -1341,7 +1342,8 @@ int ObDelUpdResolver::resolve_err_log_table(const ParseNode *node) database_name, dblink_name, is_db_explicit, - use_sys_tenant))) { + use_sys_tenant, + ref_obj_ids))) { if (OB_TABLE_NOT_EXIST == ret || OB_ERR_BAD_DATABASE == ret) { if (is_information_schema_database_id(database_id)) { ret = OB_ERR_UNKNOWN_TABLE; diff --git a/src/sql/resolver/dml/ob_dml_resolver.cpp b/src/sql/resolver/dml/ob_dml_resolver.cpp index 84cfa69cca..f2744e1ceb 100755 --- a/src/sql/resolver/dml/ob_dml_resolver.cpp +++ b/src/sql/resolver/dml/ob_dml_resolver.cpp @@ -310,13 +310,23 @@ int ObDMLResolver::resolve_sql_expr(const ParseNode &node, ObRawExpr *&expr, } else { ObDMLStmt *stmt = get_stmt(); ObUDFRawExpr *udf_expr = static_cast(udf_info.at(i).ref_expr_); + share::schema::ObSchemaGetterGuard *schema_guard = NULL; + uint64_t database_id = OB_INVALID_ID; if (OB_ISNULL(stmt) || OB_ISNULL(udf_expr)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("stmt or expr is null", K(stmt), K(udf_expr), K(ret)); + } else if (OB_ISNULL(schema_guard = params_.schema_checker_->get_schema_guard())) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("table schema is null", K(ret), K(schema_guard)); + } else if (OB_FAIL(schema_guard->get_database_id(session_info_->get_effective_tenant_id(), udf_expr->get_database_name(), database_id))) { + LOG_WARN("failed to get database id", K(ret)); } else if (udf_expr->need_add_dependency()) { ObSchemaObjVersion udf_version; + uint64_t dep_obj_id = view_ref_id_; + uint64_t dep_db_id = database_id; OZ (udf_expr->get_schema_object_version(udf_version)); OZ (stmt->add_global_dependency_table(udf_version)); + OZ (stmt->add_ref_obj_version(dep_obj_id, dep_db_id, ObObjectType::VIEW, udf_version, *allocator_)); } } } @@ -1409,7 +1419,8 @@ int ObDMLResolver::resolve_table_relation_factor_wrapper(const ParseNode *table_ ObString &db_name, ObString &dblink_name, bool &is_db_explicit, - bool &use_sys_tenant) + bool &use_sys_tenant, + ObIArray &ref_obj_ids) { int ret = OB_SUCCESS; @@ -1427,7 +1438,8 @@ int ObDMLResolver::resolve_table_relation_factor_wrapper(const ParseNode *table_ synonym_db_name, db_name, dblink_name, - is_db_explicit))) { + is_db_explicit, + ref_obj_ids))) { if (ret != OB_TABLE_NOT_EXIST) { // 只关心找不到表的情况,因此这里直接跳过 } else { @@ -1485,6 +1497,7 @@ int ObDMLResolver::resolve_basic_table(const ParseNode &parse_tree, TableItem *& bool use_sys_tenant = false; uint64_t database_id = OB_INVALID_ID; const ObTableSchema *table_schema = NULL; + ObArray ref_obj_ids; if (T_ORG == parse_tree.type_) { table_node = parse_tree.children_[0]; @@ -1523,7 +1536,8 @@ int ObDMLResolver::resolve_basic_table(const ParseNode &parse_tree, TableItem *& database_name, dblink_name, is_db_explicit, - use_sys_tenant))) { + use_sys_tenant, + ref_obj_ids))) { if (OB_TABLE_NOT_EXIST == ret || OB_ERR_BAD_DATABASE == ret) { if (is_information_schema_database_id(database_id)) { ret = OB_ERR_UNKNOWN_TABLE; @@ -1548,6 +1562,7 @@ int ObDMLResolver::resolve_basic_table(const ParseNode &parse_tree, TableItem *& } tenant_id = use_sys_tenant ? OB_SYS_TENANT_ID : session_info_->get_effective_tenant_id(); bool cte_table_fisrt = (table_node->children_[0] == NULL); + uint64_t real_dep_obj_id = (ref_obj_ids.empty() ? view_ref_id_ : ref_obj_ids.at(ref_obj_ids.count() - 1)); if (OB_FAIL(resolve_base_or_alias_table_item_normal(tenant_id, database_name, is_db_explicit, @@ -1556,7 +1571,8 @@ int ObDMLResolver::resolve_basic_table(const ParseNode &parse_tree, TableItem *& synonym_name, synonym_db_name, table_item, - cte_table_fisrt))) { + cte_table_fisrt, + real_dep_obj_id))) { LOG_WARN("resolve base or alias table item failed", K(ret)); } else { //如果当前解析的表属于oracle租户,在线程局部设置上mode. @@ -2725,10 +2741,21 @@ int ObDMLResolver::resolve_function_table_item(const ParseNode &parse_tree, if (OB_SUCC(ret) && function_table_expr->is_udf_expr()) { ObUDFRawExpr *udf = static_cast(function_table_expr); ObSchemaObjVersion table_version; + share::schema::ObSchemaGetterGuard *schema_guard = NULL; + uint64_t database_id = OB_INVALID_ID; CK (OB_NOT_NULL(udf)); - if (OB_SUCC(ret) && udf->need_add_dependency()) { + if (OB_FAIL(ret)) { + } else if (OB_ISNULL(schema_guard = params_.schema_checker_->get_schema_guard())) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("table schema is null", K(ret), K(schema_guard)); + } else if (OB_FAIL(schema_guard->get_database_id(session_info_->get_effective_tenant_id(), udf->get_database_name(), database_id))) { + LOG_WARN("failed to get database id", K(ret)); + } else if (udf->need_add_dependency()) { + uint64_t dep_obj_id = view_ref_id_; + uint64_t dep_db_id = database_id; OZ (udf->get_schema_object_version(table_version)); OZ (stmt->add_global_dependency_table(table_version)); + OZ (stmt->add_ref_obj_version(dep_obj_id, dep_db_id, ObObjectType::VIEW, table_version, *allocator_)); } } } @@ -2752,7 +2779,8 @@ int ObDMLResolver::resolve_base_or_alias_table_item_normal(uint64_t tenant_id, const ObString &synonym_name, const ObString &synonym_db_name, TableItem *&tbl_item, - bool cte_table_fisrt) + bool cte_table_fisrt, + uint64_t dep_obj_id) { int ret = OB_SUCCESS; ObDMLStmt *stmt = get_stmt(); @@ -2900,10 +2928,13 @@ int ObDMLResolver::resolve_base_or_alias_table_item_normal(uint64_t tenant_id, table_version.object_type_ = DEPENDENCY_TABLE; table_version.version_ = tab_schema->get_schema_version(); table_version.is_db_explicit_ = is_db_explicit; + uint64_t dep_db_id = tab_schema->get_database_id(); if (common::is_cte_table(table_version.object_id_)) { // do nothing } else if (OB_FAIL(stmt->add_global_dependency_table(table_version))) { LOG_WARN("add global dependency table failed", K(ret)); + } else if (OB_FAIL(stmt->add_ref_obj_version(dep_obj_id, dep_db_id, ObObjectType::VIEW, table_version, *allocator_))) { + LOG_WARN("failed to add ref obj version", K(ret)); } } } else { @@ -2947,11 +2978,14 @@ int ObDMLResolver::resolve_base_or_alias_table_item_normal(uint64_t tenant_id, table_version.object_type_ = tschema->is_view_table() ? DEPENDENCY_VIEW : DEPENDENCY_TABLE; table_version.version_ = tschema->get_schema_version(); table_version.is_db_explicit_ = is_db_explicit; + uint64_t dep_db_id = tschema->get_database_id(); if (common::is_cte_table(table_version.object_id_)) { // do nothing } else if (OB_FAIL(stmt->add_global_dependency_table(table_version))) { LOG_WARN("add global dependency table failed", K(ret)); - } else { /*do nothing*/ } + } else if (OB_FAIL(stmt->add_ref_obj_version(dep_obj_id, dep_db_id, ObObjectType::VIEW, table_version, *allocator_))) { + LOG_WARN("failed to add ref obj version", K(ret)); + } } if (OB_SUCC(ret)) { if (OB_FAIL(stmt->add_table_item(session_info_, item, params_.have_same_table_name_))) { @@ -3094,11 +3128,10 @@ int ObDMLResolver::do_expand_view(TableItem &view_item, ObChildStmtResolver &vie } else if (OB_ISNULL(ref_obj_tbl = stmt->get_ref_obj_table())) { ret = OB_ERR_UNEXPECTED; LOG_WARN("reference obj table is null", K(ret)); - } else if (0 == current_view_level_ - && OB_FAIL(ref_obj_tbl->set_obj_schema_version(view_item.ref_id_, - view_schema->get_database_id(), ObObjectType::VIEW, - view_schema->get_max_dependency_version(), - view_schema->get_schema_version(), *allocator_))) { + } else if (OB_FAIL(ref_obj_tbl->set_obj_schema_version(view_item.ref_id_, + view_schema->get_database_id(), ObObjectType::VIEW, + view_schema->get_max_dependency_version(), + view_schema->get_schema_version(), *allocator_))) { LOG_WARN("failed to set max dependency version", K(ret)); } else { // use alias to make all columns number continued @@ -3132,6 +3165,20 @@ int ObDMLResolver::do_expand_view(TableItem &view_item, ObChildStmtResolver &vie view_item.ref_query_ = view_stmt; view_item.is_view_table_ = true; } + + int tmp_ret = OB_SUCCESS; + bool reset_column_infos = (OB_SUCCESS == ret) ? false : (lib::is_oracle_mode() ? true : false); + if (OB_UNLIKELY(OB_SUCCESS != ret && OB_ERR_VIEW_INVALID != ret)) { + LOG_WARN("failed to resolve view", K(ret)); + } else if (OB_SUCCESS != (tmp_ret = ObSQLUtils::async_recompile_view(*view_schema, view_stmt,reset_column_infos))) { + LOG_WARN("failed to add recompile view task", K(tmp_ret)); + if (OB_ERR_TOO_LONG_COLUMN_LENGTH == tmp_ret) { + tmp_ret = OB_SUCCESS; //ignore + } + } + if (OB_SUCCESS == ret) { + ret = tmp_ret; + } } } @@ -5483,7 +5530,8 @@ int ObDMLResolver::add_synonym_obj_id(const ObSynonymChecker &synonym_checker, b if (synonym_checker.has_synonym()) { if (OB_FAIL(add_object_versions_to_dependency(DEPENDENCY_SYNONYM, SYNONYM_SCHEMA, - synonym_checker.get_synonym_ids()))) { + synonym_checker.get_synonym_ids(), + synonym_checker.get_database_ids()))) { LOG_WARN("add synonym version failed", K(ret)); } } @@ -5497,7 +5545,8 @@ int ObDMLResolver::resolve_table_relation_factor(const ParseNode *node, ObString &synonym_name, ObString &synonym_db_name, ObString &db_name, - ObString &dblink_name) + ObString &dblink_name, + ObIArray &ref_obj_ids) { bool is_db_explicit = false; UNUSED(is_db_explicit); @@ -5509,7 +5558,8 @@ int ObDMLResolver::resolve_table_relation_factor(const ParseNode *node, synonym_db_name, db_name, dblink_name, - is_db_explicit); + is_db_explicit, + ref_obj_ids); } int ObDMLResolver::resolve_table_relation_factor(const ParseNode *node, @@ -5521,7 +5571,8 @@ int ObDMLResolver::resolve_table_relation_factor(const ParseNode *node, common::ObString &synonym_db_name, common::ObString &db_name, common::ObString &dblink_name, - ObSynonymChecker &synonym_checker) + ObSynonymChecker &synonym_checker, + ObIArray &ref_obj_ids) { bool is_db_explicit = false; return resolve_table_relation_factor(node, @@ -5534,7 +5585,8 @@ int ObDMLResolver::resolve_table_relation_factor(const ParseNode *node, db_name, dblink_name, is_db_explicit, - synonym_checker); + synonym_checker, + ref_obj_ids); } int ObDMLResolver::resolve_table_relation_factor(const ParseNode *node, @@ -5545,7 +5597,8 @@ int ObDMLResolver::resolve_table_relation_factor(const ParseNode *node, common::ObString &synonym_name, common::ObString &synonym_db_name, common::ObString &dblink_name, - common::ObString &db_name) + common::ObString &db_name, + ObIArray &ref_obj_ids) { bool is_db_explicit = false; UNUSED(is_db_explicit); @@ -5558,7 +5611,8 @@ int ObDMLResolver::resolve_table_relation_factor(const ParseNode *node, synonym_db_name, db_name, dblink_name, - is_db_explicit); + is_db_explicit, + ref_obj_ids); } int ObDMLResolver::resolve_table_relation_factor(const ParseNode *node, @@ -5569,17 +5623,20 @@ int ObDMLResolver::resolve_table_relation_factor(const ParseNode *node, ObString &synonym_db_name, ObString &db_name, ObString &dblink_name, - bool &is_db_explicit) + bool &is_db_explicit, + ObIArray &ref_obj_ids) { return resolve_table_relation_factor(node, session_info_->get_effective_tenant_id(), dblink_id, database_id, table_name, synonym_name, synonym_db_name, - db_name, dblink_name, is_db_explicit); + db_name, dblink_name, is_db_explicit, ref_obj_ids); } int ObDMLResolver::add_object_version_to_dependency(share::schema::ObDependencyTableType table_type, share::schema::ObSchemaType schema_type, - uint64_t object_id) + uint64_t object_id, + uint64_t database_id, + uint64_t dep_obj_id) { int ret = OB_SUCCESS; if (OB_ISNULL(get_stmt()) || OB_ISNULL(schema_checker_)) { @@ -5611,9 +5668,12 @@ int ObDMLResolver::add_object_version_to_dependency(share::schema::ObDependencyT obj_version.object_id_ = object_id; obj_version.object_type_ = table_type, obj_version.version_ = schema_version; + uint64_t dep_db_id = database_id; if (OB_FAIL(get_stmt()->add_global_dependency_table(obj_version))) { LOG_WARN("add global dependency table failed", K(ret), K(table_type), K(schema_type)); + } else if (OB_FAIL(get_stmt()->add_ref_obj_version(dep_obj_id, dep_db_id, ObObjectType::VIEW, obj_version, *allocator_))) { + LOG_WARN("failed to add ref obj version", K(ret)); } } } @@ -5624,11 +5684,13 @@ int ObDMLResolver::add_object_version_to_dependency(share::schema::ObDependencyT // 当对象 schema 版本变更时,通过依赖检查对象是否需要重新生成 int ObDMLResolver::add_object_versions_to_dependency(ObDependencyTableType table_type, ObSchemaType schema_type, - const ObIArray &object_ids) + const ObIArray &object_ids, + const ObIArray &db_ids) { int ret = OB_SUCCESS; for (int64_t i = 0; OB_SUCC(ret) && i < object_ids.count(); ++i) { - if (OB_FAIL(add_object_version_to_dependency(table_type, schema_type, object_ids.at(i)))) { + uint64_t real_dep_obj_id = (0 == i) ? view_ref_id_ : object_ids.at(i - 1); + if (OB_FAIL(add_object_version_to_dependency(table_type, schema_type, object_ids.at(i), db_ids.at(i), real_dep_obj_id))) { LOG_WARN("add object versions to dependency failed"); } } @@ -5644,12 +5706,13 @@ int ObDMLResolver::resolve_table_relation_factor(const ParseNode *node, ObString &synonym_db_name, ObString &db_name, ObString &dblink_name, - bool &is_db_explicit) + bool &is_db_explicit, + ObIArray &ref_obj_ids) { ObSynonymChecker synonym_checker; return resolve_table_relation_factor(node, tenant_id, dblink_id, database_id, table_name, synonym_name, synonym_db_name, - db_name, dblink_name, is_db_explicit, synonym_checker); + db_name, dblink_name, is_db_explicit, synonym_checker, ref_obj_ids); } int ObDMLResolver::resolve_table_relation_factor(const ParseNode *node, @@ -5662,7 +5725,8 @@ int ObDMLResolver::resolve_table_relation_factor(const ParseNode *node, ObString &db_name, ObString &dblink_name, bool &is_db_explicit, - ObSynonymChecker &synonym_checker) + ObSynonymChecker &synonym_checker, + ObIArray &ref_obj_ids) { int ret = OB_SUCCESS; if (OB_ISNULL(session_info_)) { @@ -5705,6 +5769,9 @@ int ObDMLResolver::resolve_table_relation_factor(const ParseNode *node, LOG_WARN("resolve table relation factor from dblink failed", K(ret)); } } + if (OB_SUCC(ret)) { + OZ (ref_obj_ids.assign(synonym_checker.get_synonym_ids())); + } } return ret; } @@ -5944,53 +6011,6 @@ int ObDMLResolver::resolve_table_relation_factor_dblink(const ParseNode *table_n return ret; } -int ObDMLResolver::add_reference_obj_table(const uint64_t dep_obj_id, - const uint64_t dep_db_id, - const ObObjectType dep_obj_type, - const ObDependencyTableType ref_table_type, - const ObSchemaType ref_schema_type, - const uint64_t ref_obj_id) -{ - int ret = OB_SUCCESS; - if (OB_ISNULL(get_stmt()) || OB_ISNULL(schema_checker_)) { - ret = OB_NOT_INIT; - LOG_WARN("stmt or schema_checker is null", K(get_stmt()), K_(schema_checker)); - } else if (OB_ISNULL(params_.session_info_)) { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("params_.session_info_ is null", K(ret)); - } else { - int64_t schema_version = OB_INVALID_VERSION; - ObSchemaObjVersion obj_version; - bool is_pl_schema_type = - PACKAGE_SCHEMA == ref_schema_type - || ROUTINE_SCHEMA == ref_schema_type - || UDT_SCHEMA == ref_schema_type - || TRIGGER_SCHEMA == ref_schema_type; - if (OB_FAIL(schema_checker_->get_schema_version( - is_pl_schema_type && (OB_SYS_TENANT_ID == pl::get_tenant_id_by_object_id(ref_obj_id)) ? OB_SYS_TENANT_ID : params_.session_info_->get_effective_tenant_id(), - ref_obj_id, - ref_schema_type, - schema_version))) { - LOG_WARN("get schema version failed", K(params_.session_info_->get_effective_tenant_id()), - K(ref_obj_id), K(ref_table_type), K(ref_schema_type), K(ret)); - } else if (OB_UNLIKELY(OB_INVALID_VERSION == schema_version)) { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("object schema is unknown", - K(ref_obj_id), K(ref_table_type), K(ref_schema_type), K(ret)); - } else { - obj_version.object_id_ = ref_obj_id; - obj_version.object_type_ = ref_table_type, - obj_version.version_ = schema_version; - if (OB_FAIL(get_stmt()->add_ref_obj_version( - dep_obj_id, dep_db_id, dep_obj_type, obj_version, *allocator_))) { - LOG_WARN("add reference obj table failed", K(ret), K(dep_obj_id), K(dep_obj_type), - K(ref_table_type), K(ref_schema_type)); - } - } - } - return ret; -} - int ObDMLResolver::resolve_table_relation_recursively(uint64_t tenant_id, uint64_t &database_id, ObString &table_name, @@ -6023,7 +6043,7 @@ int ObDMLResolver::resolve_table_relation_recursively(uint64_t tenant_id, LOG_WARN("get synonym schema failed", K(tenant_id), K(database_id), K(table_name), K(ret)); } else if (exist_with_synonym) { synonym_checker.set_synonym(true); - if (OB_FAIL(synonym_checker.add_synonym_id(synonym_id))) { + if (OB_FAIL(synonym_checker.add_synonym_id(synonym_id, database_id))) { LOG_WARN("fail to add synonym id", K(synonym_id), K(database_id), K(table_name), K(object_table_name), K(ret)); } else if (OB_FAIL(schema_checker_->get_database_schema(tenant_id, object_db_id, database_schema))) { LOG_WARN("get db schema failed", K(tenant_id), K(object_db_id), K(ret)); @@ -6041,14 +6061,6 @@ int ObDMLResolver::resolve_table_relation_recursively(uint64_t tenant_id, synonym_checker, is_db_explicit)))) { LOG_WARN("fail to resolve table relation", K(tenant_id), K(database_id), K(table_name), K(ret)); - } else if (is_resolving_view_ && 1 == current_view_level_ - && !params_.is_from_show_resolver_) { - uint64_t dep_obj_id = params_.is_from_create_view_ ? OB_INVALID_ID : view_ref_id_; - uint64_t dep_db_id = params_.is_from_create_view_ ? OB_INVALID_ID : database_id; - if (OB_FAIL(add_reference_obj_table(dep_obj_id, dep_db_id, ObObjectType::VIEW, - DEPENDENCY_SYNONYM, SYNONYM_SCHEMA, synonym_id))) { - LOG_WARN("failed to add reference obj table", K(ret), K(dep_obj_id), K(dep_db_id)); - } } } } else { @@ -6063,19 +6075,6 @@ int ObDMLResolver::resolve_table_relation_recursively(uint64_t tenant_id, LOG_WARN("synonym not exist", K(tenant_id), K(database_id), K(table_name), K(ret)); } } - } else if (is_resolving_view_ && !params_.is_from_show_resolver_ - && !synonym_checker.has_synonym()) { - uint64_t dep_obj_id = params_.is_from_create_view_ ? OB_INVALID_ID : view_ref_id_; - uint64_t dep_db_id = params_.is_from_create_view_ ? OB_INVALID_ID : database_id; - OZ (schema_guard->get_simple_table_schema(tenant_id, database_id, table_name, - false/*is_index*/, table_schema)); - CK (OB_NOT_NULL(table_schema)); - if (OB_SUCC(ret) && 1 == current_view_level_ - && OB_FAIL(add_reference_obj_table(dep_obj_id, dep_db_id, ObObjectType::VIEW, - table_schema->is_view_table() ? DEPENDENCY_VIEW : DEPENDENCY_TABLE, - TABLE_SCHEMA, table_schema->get_table_id()))) { - LOG_WARN("failed to add reference obj table", K(ret), K(dep_obj_id), K(dep_db_id)); - } } return ret; } @@ -7658,7 +7657,16 @@ int ObDMLResolver::add_sequence_id_to_stmt(uint64_t sequence_id, bool is_currval // 如果是 NEXTVAL 表达式,则添加到 STMT 中,提示 SEQUENCE 算子为它计算 NEXTVALUE // note: 按照 Oracle 语义,一个语句中即使出现多次相同对象的 nextval // 也只计算一次。所以这里只需要保存唯一的 sequence_id 即可 - if (is_currval) { + const ObSequenceSchema *seq_schema = nullptr; + if (OB_ISNULL(params_.schema_checker_->get_schema_guard())) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("schema guard ptr is null ptr", K(ret), KP(params_.schema_checker_)); + } else if (OB_FAIL(params_.schema_checker_->get_schema_guard()->get_sequence_schema(session_info_->get_effective_tenant_id(), sequence_id, seq_schema))) { + LOG_WARN("get seq schema failed", K(ret)); + } else if (OB_ISNULL(seq_schema)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("database_schema is null", K(ret)); + } else if (is_currval) { if (OB_FAIL(stmt->add_currval_sequence_id(sequence_id))) { LOG_WARN("failed to push back sequence id",K(ret)); } else { @@ -7667,12 +7675,12 @@ int ObDMLResolver::add_sequence_id_to_stmt(uint64_t sequence_id, bool is_currval } else if (OB_FAIL(stmt->add_nextval_sequence_id(sequence_id))) { LOG_WARN("fail push back sequence id", K(sequence_id), K(ids), K(ret)); - } else { - // do nothing } if (OB_SUCC(ret) && OB_FAIL(add_object_version_to_dependency(DEPENDENCY_SEQUENCE, - SEQUENCE_SCHEMA, - sequence_id))) { + SEQUENCE_SCHEMA, + sequence_id, + seq_schema->get_database_id(), + OB_INVALID_ID))) { LOG_WARN("add object version to dependency failed", K(ret)); } } @@ -7819,16 +7827,27 @@ int ObDMLResolver::resolve_external_name(ObQualifiedName &q_name, ObUDFRawExpr *udf_expr = static_cast(expr); ObDMLStmt *stmt = get_stmt(); ObSchemaObjVersion udf_version; + share::schema::ObSchemaGetterGuard *schema_guard = NULL; + uint64_t database_id = OB_INVALID_ID; CK (OB_NOT_NULL(udf_expr)); - if (OB_SUCC(ret) && udf_expr->need_add_dependency()) { + if (OB_FAIL(ret)) { + } else if (OB_ISNULL(schema_guard = params_.schema_checker_->get_schema_guard())) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("table schema is null", K(ret), K(schema_guard)); + } else if (OB_FAIL(schema_guard->get_database_id(session_info_->get_effective_tenant_id(), udf_expr->get_database_name(), database_id))) { + LOG_WARN("failed to get database id", K(ret)); + } else if (udf_expr->need_add_dependency()) { + uint64_t dep_obj_id = view_ref_id_; + uint64_t dep_db_id = database_id; OZ (udf_expr->get_schema_object_version(udf_version)); CK (OB_NOT_NULL(stmt)); OZ (stmt->add_global_dependency_table(udf_version)); + OZ (stmt->add_ref_obj_version(dep_obj_id, dep_db_id, ObObjectType::VIEW, udf_version, *allocator_)); + //for udf without params, we just set called_in_sql = true, + //if this expr go through pl :: build_raw_expr later, + //the flag will change to false; + OX (expr->set_is_called_in_sql(true)); } - //for udf without params, we just set called_in_sql = true, - //if this expr go through pl :: build_raw_expr later, - //the flag will change to false; - OX (expr->set_is_called_in_sql(true)); } } if (OB_ERR_SP_UNDECLARED_VAR == ret) { diff --git a/src/sql/resolver/dml/ob_dml_resolver.h b/src/sql/resolver/dml/ob_dml_resolver.h index cd877d621f..7e849a048f 100644 --- a/src/sql/resolver/dml/ob_dml_resolver.h +++ b/src/sql/resolver/dml/ob_dml_resolver.h @@ -165,10 +165,13 @@ public: int add_sequence_id_to_stmt(uint64_t sequence_id, bool is_currval = false); int add_object_version_to_dependency(share::schema::ObDependencyTableType table_type, share::schema::ObSchemaType schema_type, - uint64_t object_id); + uint64_t object_id, + uint64_t database_id, + uint64_t dep_obj_id); int add_object_versions_to_dependency(share::schema::ObDependencyTableType table_type, share::schema::ObSchemaType schema_type, - const ObIArray &object_ids); + const ObIArray &object_ids, + const ObIArray &db_ids); ObDMLStmt *get_stmt(); protected: int resolve_into_variables(const ParseNode *node, @@ -189,7 +192,9 @@ protected: bool include_hidden, ColumnItem *&col_item, ObDMLStmt *stmt = NULL); +public: virtual int resolve_table(const ParseNode &parse_tree, TableItem *&table_item); +protected: virtual int resolve_generate_table(const ParseNode &table_node, const ObString &alias_name, TableItem *&tbl_item); @@ -207,7 +212,8 @@ protected: const common::ObString &synonym_name, const common::ObString &synonym_db_name, TableItem *&tbl_item, - bool cte_table_fisrt); + bool cte_table_fisrt, + uint64_t real_dep_obj_id); int resolve_base_or_alias_table_item_dblink(uint64_t dblink_id, const common::ObString &dblink_name, const common::ObString &database_name, @@ -317,6 +323,7 @@ protected: virtual int check_need_use_sys_tenant(bool &use_sys_tenant) const; // check in sys view or show statement virtual int check_in_sysview(bool &in_sysview) const; +public: int resolve_table_relation_factor_wrapper(const ParseNode *table_node, uint64_t &dblink_id, uint64_t &database_id, @@ -326,7 +333,9 @@ protected: common::ObString &synonym_db_name, common::ObString &dblink_name, bool &is_db_explicit, - bool &use_sys_tenant); + bool &use_sys_tenant, + common::ObIArray &ref_obj_ids); +protected: int check_resolve_oracle_sys_view(const ParseNode *node, bool &is_oracle_sys_view); bool is_oracle_sys_view(const ObString &table_name); int inner_resolve_sys_view(const ParseNode *table_node, @@ -349,7 +358,8 @@ protected: common::ObString &synonym_db_name, common::ObString &db_name, common::ObString &dblink_name, - bool &is_db_explicit); + bool &is_db_explicit, + common::ObIArray &ref_obj_ids); int resolve_table_relation_factor(const ParseNode *node, uint64_t &dblink_id, uint64_t &database_id, @@ -358,24 +368,8 @@ protected: common::ObString &synonym_db_name, common::ObString &db_name, common::ObString &dblink_name, - bool &is_db_explicit); - int resolve_table_relation_factor(const ParseNode *node, - uint64_t tenant_id, - uint64_t &dblink_id, - uint64_t &database_id, - common::ObString &table_name, - common::ObString &synonym_name, - common::ObString &synonym_db_name, - common::ObString &db_name, - common::ObString &dblink_name); - int resolve_table_relation_factor(const ParseNode *node, - uint64_t &dblink_id, - uint64_t &database_id, - common::ObString &table_name, - common::ObString &synonym_name, - common::ObString &synonym_db_name, - common::ObString &db_name, - common::ObString &dblink_name); + bool &is_db_explicit, + common::ObIArray &ref_obj_ids); int resolve_table_relation_factor(const ParseNode *node, uint64_t tenant_id, uint64_t &dblink_id, @@ -385,7 +379,27 @@ protected: common::ObString &synonym_db_name, common::ObString &db_name, common::ObString &dblink_name, - ObSynonymChecker &synonym_checker); + common::ObIArray &ref_obj_ids); + int resolve_table_relation_factor(const ParseNode *node, + uint64_t &dblink_id, + uint64_t &database_id, + common::ObString &table_name, + common::ObString &synonym_name, + common::ObString &synonym_db_name, + common::ObString &db_name, + common::ObString &dblink_name, + common::ObIArray &ref_obj_ids); + int resolve_table_relation_factor(const ParseNode *node, + uint64_t tenant_id, + uint64_t &dblink_id, + uint64_t &database_id, + common::ObString &table_name, + common::ObString &synonym_name, + common::ObString &synonym_db_name, + common::ObString &db_name, + common::ObString &dblink_name, + ObSynonymChecker &synonym_checker, + common::ObIArray &ref_obj_ids); int resolve_table_relation_factor(const ParseNode *node, uint64_t tenant_id, uint64_t &dblink_id, @@ -396,7 +410,8 @@ protected: common::ObString &db_name, common::ObString &dblink_name, bool &is_db_expilicit, - ObSynonymChecker &synonym_checker); + ObSynonymChecker &synonym_checker, + common::ObIArray &ref_obj_ids); int resolve_table_relation_factor_normal(const ParseNode *node, uint64_t tenant_id, uint64_t &database_id, @@ -605,13 +620,6 @@ private: const ObPartitionKeyInfo &partition_keys, bool &has_part_key); - int add_reference_obj_table(const uint64_t dep_obj_id, - const uint64_t dep_db_id, - const share::schema::ObObjectType dep_obj_type, - const share::schema::ObDependencyTableType ref_table_type, - const share::schema::ObSchemaType ref_schema_type, - const uint64_t ref_obj_id); - ///////////functions for sql hint///////////// int resolve_global_hint(const ParseNode &hint_node, ObGlobalHint &global_hint, diff --git a/src/sql/resolver/dml/ob_sequence_namespace_checker.cpp b/src/sql/resolver/dml/ob_sequence_namespace_checker.cpp index a507bd4c1a..ab7c134587 100644 --- a/src/sql/resolver/dml/ob_sequence_namespace_checker.cpp +++ b/src/sql/resolver/dml/ob_sequence_namespace_checker.cpp @@ -107,7 +107,7 @@ int ObSequenceNamespaceChecker::check_sequence_with_synonym_recursively(const ui LOG_WARN("get synonym failed", K(ret), K(tenant_id), K(database_id), K(sequence_name)); } else if (exist_with_synonym) { syn_checker.set_synonym(true); - if (OB_FAIL(syn_checker.add_synonym_id(synonym_id))) { + if (OB_FAIL(syn_checker.add_synonym_id(synonym_id, database_id))) { LOG_WARN("failed to add synonym id", K(ret)); } else { if (OB_FAIL(check_sequence_with_synonym_recursively(tenant_id, object_db_id, object_seq_name, syn_checker, diff --git a/src/sql/resolver/expr/ob_raw_expr.cpp b/src/sql/resolver/expr/ob_raw_expr.cpp index f70a5aea85..94ee71b75d 100644 --- a/src/sql/resolver/expr/ob_raw_expr.cpp +++ b/src/sql/resolver/expr/ob_raw_expr.cpp @@ -678,7 +678,8 @@ int ObRawExpr::is_non_pure_sys_func_expr(bool &is_non_pure) const || T_FUN_SYS_GUID == type_ || T_FUN_SYS_CUR_DATE == type_ || T_FUN_SYS_USERENV == type_ - || T_FUN_SYS_REGEXP_REPLACE == type_) { + || T_FUN_SYS_REGEXP_REPLACE == type_ + || T_FUN_SYS_USER_CAN_ACCESS_OBJ == type_) { is_non_pure = true; } else if (T_FUN_SYS_TO_DATE == type_ || T_FUN_SYS_TO_TIMESTAMP == type_ || T_FUN_SYS_TO_TIMESTAMP_TZ == type_) { @@ -731,7 +732,8 @@ int ObRawExpr::is_non_pure_sys_func_expr(bool &is_non_pure) const // TODO:@sean.yyj#273971, will sort out exprs not deterministic in mysql mode later, https://code.aone.alibaba-inc.com/oceanbase/oceanbase/codereview/4961352 // || T_FUN_SYS_REGEXP_LIKE == type_ // create table t1(c1 int, c2 int generated always as(regexp_like(1, 2))); success in mysql || T_FUN_SYS_REGEXP_REPLACE == type_ - || T_FUN_SYS_REGEXP_SUBSTR == type_) { + || T_FUN_SYS_REGEXP_SUBSTR == type_ + || T_FUN_SYS_CURRENT_USER_PRIV == type_) { is_non_pure = true; } } diff --git a/src/sql/resolver/expr/ob_raw_expr_util.cpp b/src/sql/resolver/expr/ob_raw_expr_util.cpp index 6ef1696520..2788d31ea1 100644 --- a/src/sql/resolver/expr/ob_raw_expr_util.cpp +++ b/src/sql/resolver/expr/ob_raw_expr_util.cpp @@ -1857,7 +1857,8 @@ int ObRawExprUtils::resolve_sequence_object(const ObQualifiedName &q_name, // add synonym depedency schemas if (OB_FAIL(dml_resolver->add_object_versions_to_dependency(DEPENDENCY_SYNONYM, SYNONYM_SCHEMA, - syn_checker.get_synonym_ids()))) { + syn_checker.get_synonym_ids(), + syn_checker.get_database_ids()))) { LOG_WARN("add synonym version failed", K(ret)); } else { // do nothing diff --git a/src/sql/resolver/ob_resolver_utils.cpp b/src/sql/resolver/ob_resolver_utils.cpp index 83cc0df16f..921852eb94 100644 --- a/src/sql/resolver/ob_resolver_utils.cpp +++ b/src/sql/resolver/ob_resolver_utils.cpp @@ -1387,7 +1387,7 @@ int ObResolverUtils::resolve_synonym_object_recursively(ObSchemaChecker &schema_ } else if (exist_with_synonym) { exist = true; synonym_checker.set_synonym(true); - if (OB_FAIL(synonym_checker.add_synonym_id(synonym_id))) { + if (OB_FAIL(synonym_checker.add_synonym_id(synonym_id, database_id))) { if (OB_ERR_LOOP_OF_SYNONYM == ret) { ret = OB_SUCCESS; } else { diff --git a/src/sql/resolver/ob_schema_checker.cpp b/src/sql/resolver/ob_schema_checker.cpp index 52b6ddaefe..f5481ba67c 100644 --- a/src/sql/resolver/ob_schema_checker.cpp +++ b/src/sql/resolver/ob_schema_checker.cpp @@ -1452,21 +1452,21 @@ int ObSchemaChecker::get_syn_info(const uint64_t tenant_id, ObString &obj_dbname, ObString &obj_name, uint64_t &synonym_id, + uint64_t &database_id, bool &exists) { int ret = OB_SUCCESS; - uint64_t db_id = OB_INVALID_ID; + database_id = OB_INVALID_ID; const ObSimpleSynonymSchema *synonym_schema = NULL; exists = false; if (IS_NOT_INIT) { ret = OB_NOT_INIT; LOG_WARN("schema checker is not inited", K_(is_inited)); - } else if (OB_FAIL(get_database_id(tenant_id, database_name, db_id))) { + } else if (OB_FAIL(get_database_id(tenant_id, database_name, database_id))) { LOG_WARN("get database id failed", K(ret)); } else if (OB_FAIL(schema_mgr_->get_synonym_info( - tenant_id, db_id, sym_name, synonym_schema))) { - + tenant_id, database_id, sym_name, synonym_schema))) { LOG_WARN("get_synonym_schema_with_name failed", K(ret)); } else if (synonym_schema == NULL) { ret = OB_TABLE_NOT_EXIST; @@ -2249,13 +2249,14 @@ int ObSchemaChecker::get_object_type_with_view_info(ObIAllocator* allocator, ObString obj_db_name; ObString obj_name; uint64_t synonym_id = OB_INVALID_ID; + uint64_t database_id = OB_INVALID_ID; bool exists = false; ret = OB_SUCCESS; - OZ (get_syn_info(tenant_id, database_name, table_name, obj_db_name, obj_name, synonym_id, exists)); + OZ (get_syn_info(tenant_id, database_name, table_name, obj_db_name, obj_name, synonym_id, database_id, exists)); if (OB_SUCC(ret) && exists) { object_db_name = obj_db_name; synonym_checker.set_synonym(true); - OZ (synonym_checker.add_synonym_id(synonym_id)); + OZ (synonym_checker.add_synonym_id(synonym_id, database_id)); OZ (SMART_CALL(get_object_type_with_view_info(allocator, param_org, tenant_id, @@ -2282,7 +2283,8 @@ int ObSchemaChecker::get_object_type_with_view_info(ObIAllocator* allocator, ret = OB_TABLE_NOT_EXIST; } else { uint64_t synonym_id = OB_INVALID_ID; - OZ (get_syn_info(tenant_id, OB_PUBLIC_SCHEMA_NAME, table_name, obj_db_name, obj_name, synonym_id, exists)); + uint64_t database_id = OB_INVALID_ID; + OZ (get_syn_info(tenant_id, OB_PUBLIC_SCHEMA_NAME, table_name, obj_db_name, obj_name, synonym_id, database_id, exists)); if (OB_SUCC(ret) && exists) { /* 如果上次同义词和这次的一样,说明一直没找到对应的数据库对象 */ if (prev_table_name == obj_name) { @@ -2290,7 +2292,7 @@ int ObSchemaChecker::get_object_type_with_view_info(ObIAllocator* allocator, } else { object_db_name = obj_db_name; synonym_checker.set_synonym(true); - OZ (synonym_checker.add_synonym_id(synonym_id)); + OZ (synonym_checker.add_synonym_id(synonym_id, database_id)); OZ (SMART_CALL(get_object_type_with_view_info(allocator, param_org, tenant_id, @@ -2439,13 +2441,14 @@ int ObSchemaChecker::get_object_type(const uint64_t tenant_id, ObString obj_db_name; ObString obj_name; uint64_t synonym_id = OB_INVALID_ID; + uint64_t database_id = OB_INVALID_ID; bool exists = false; ret = OB_SUCCESS; - OZ (get_syn_info(tenant_id, database_name, table_name, obj_db_name, obj_name, synonym_id, exists)); + OZ (get_syn_info(tenant_id, database_name, table_name, obj_db_name, obj_name, synonym_id, database_id, exists)); if (OB_SUCC(ret) && exists) { object_db_name = obj_db_name; synonym_checker.set_synonym(true); - OZ (synonym_checker.add_synonym_id(synonym_id)); + OZ (synonym_checker.add_synonym_id(synonym_id, database_id)); OZ (SMART_CALL(get_object_type(tenant_id, obj_db_name, obj_name, @@ -2463,18 +2466,19 @@ int ObSchemaChecker::get_object_type(const uint64_t tenant_id, ObString obj_db_name; ObString obj_name; uint64_t synonym_id = OB_INVALID_ID; + uint64_t database_id = OB_INVALID_ID; bool exists = false; ret = OB_SUCCESS; if (explicit_db) { ret = OB_TABLE_NOT_EXIST; } else { - OZ (get_syn_info(tenant_id, OB_PUBLIC_SCHEMA_NAME, table_name, obj_db_name, obj_name, synonym_id, exists)); + OZ (get_syn_info(tenant_id, OB_PUBLIC_SCHEMA_NAME, table_name, obj_db_name, obj_name, synonym_id, database_id, exists)); if (OB_SUCC(ret) && exists) { if (prev_table_name == obj_name) { ret = OB_TABLE_NOT_EXIST; } else { synonym_checker.set_synonym(true); - OZ (synonym_checker.add_synonym_id(synonym_id)); + OZ (synonym_checker.add_synonym_id(synonym_id, database_id)); object_db_name = obj_db_name; OZ (SMART_CALL(get_object_type(tenant_id, obj_db_name, diff --git a/src/sql/resolver/ob_schema_checker.h b/src/sql/resolver/ob_schema_checker.h index 11563f5125..32ebd9e8c1 100644 --- a/src/sql/resolver/ob_schema_checker.h +++ b/src/sql/resolver/ob_schema_checker.h @@ -330,6 +330,7 @@ public: ObString &obj_dbname, ObString &obj_name, uint64_t &synonym_id, + uint64_t &database_id, bool &exists); int get_package_id(const uint64_t tenant_id, const uint64_t database_id, diff --git a/src/sql/resolver/ob_stmt_resolver.cpp b/src/sql/resolver/ob_stmt_resolver.cpp index 81421823a8..97f61694f6 100644 --- a/src/sql/resolver/ob_stmt_resolver.cpp +++ b/src/sql/resolver/ob_stmt_resolver.cpp @@ -247,7 +247,7 @@ int ObStmtResolver::normalize_table_or_database_names(ObString &name) return ret; } -int ObSynonymChecker::add_synonym_id(uint64_t synonym_id) +int ObSynonymChecker::add_synonym_id(uint64_t synonym_id, uint64_t database_id) { int ret = OB_SUCCESS; for (int64_t i = 0; OB_SUCC(ret) && i < synonym_ids_.count(); ++i) { @@ -260,6 +260,8 @@ int ObSynonymChecker::add_synonym_id(uint64_t synonym_id) if (OB_FAIL(ret)) { } else if (OB_FAIL(synonym_ids_.push_back(synonym_id))) { LOG_WARN("fail to add synonym_id", K(synonym_id), K(ret)); + } else if (OB_FAIL(database_ids_.push_back(database_id))) { + LOG_WARN("fail to add database id", K(database_id), K(ret)); } return ret; } diff --git a/src/sql/resolver/ob_stmt_resolver.h b/src/sql/resolver/ob_stmt_resolver.h index c7bb339a5b..7d3dbf55d9 100644 --- a/src/sql/resolver/ob_stmt_resolver.h +++ b/src/sql/resolver/ob_stmt_resolver.h @@ -175,13 +175,15 @@ public: ~ObSynonymChecker() { } - int add_synonym_id(uint64_t synonym_id); + int add_synonym_id(uint64_t synonym_id, uint64_t database_id); const common::ObIArray &get_synonym_ids() const { return synonym_ids_; } + const common::ObIArray &get_database_ids() const { return database_ids_; } void set_synonym(bool has_synonym) { has_synonym_ = has_synonym; } bool has_synonym() const { return has_synonym_; } private: bool has_synonym_; common::ObSEArray synonym_ids_; + common::ObSEArray database_ids_; DISALLOW_COPY_AND_ASSIGN(ObSynonymChecker); }; diff --git a/tools/deploy/mysql_test/test_suite/information_schema/r/mysql/information_schema_desc.result b/tools/deploy/mysql_test/test_suite/information_schema/r/mysql/information_schema_desc.result index 14bf89d325..84ffeb835a 100644 --- a/tools/deploy/mysql_test/test_suite/information_schema/r/mysql/information_schema_desc.result +++ b/tools/deploy/mysql_test/test_suite/information_schema/r/mysql/information_schema_desc.result @@ -64,31 +64,32 @@ REFERENCED_TABLE_NAME varchar(256) NO REFERENCED_COLUMN_NAME varchar(128) NO desc partitions; Field Type Null Key Default Extra -TABLE_CATALOG varchar(4096) NO +TABLE_CATALOG text NO TABLE_SCHEMA varchar(128) NO TABLE_NAME varchar(256) NO -PARTITION_NAME varchar(64) YES NULL -SUBPARTITION_NAME varchar(64) YES NULL -PARTITION_ORDINAL_POSITION bigint(20) unsigned YES NULL -SUBPARTITION_ORDINAL_POSITION bigint(20) unsigned YES NULL -PARTITION_METHOD varchar(18) YES NULL -SUBPARTITION_METHOD varchar(18) YES NULL -PARTITION_EXPRESSION varchar(4096) YES NULL -SUBPARTITION_EXPRESSION varchar(4096) YES NULL -PARTITION_DESCRIPTION varchar(1024) YES NULL -TABLE_ROWS bigint(20) unsigned NO 0 -AVG_ROW_LENGTH bigint(20) unsigned NO 0 -DATA_LENGTH bigint(20) unsigned NO 0 -MAX_DATA_LENGTH bigint(20) unsigned YES NULL -INDEX_LENGTH bigint(20) unsigned NO 0 -DATA_FREE bigint(20) unsigned NO 0 +PARTITION_NAME varchar(64) NO +SUBPARTITION_NAME varchar(64) NO +PARTITION_ORDINAL_POSITION bigint(20) unsigned NO +SUBPARTITION_ORDINAL_POSITION bigint(20) unsigned NO +PARTITION_METHOD varchar(13) NO +SUBPARTITION_METHOD varchar(13) NO +PARTITION_EXPRESSION text NO +SUBPARTITION_EXPRESSION text NO +PARTITION_DESCRIPTION text NO +SUBPARTITION_DESCRIPTION text NO +TABLE_ROWS bigint(20) unsigned NO NULL +AVG_ROW_LENGTH bigint(21) unsigned NO NULL +DATA_LENGTH bigint(0) unsigned NO +MAX_DATA_LENGTH bigint(0) unsigned NO +INDEX_LENGTH bigint(0) unsigned NO +DATA_FREE bigint(0) unsigned NO CREATE_TIME timestamp(6) YES NULL -UPDATE_TIME timestamp(6) YES NULL -CHECK_TIME timestamp(6) YES NULL -CHECKSUM bigint(20) YES NULL -PARTITION_COMMENT varchar(1024) NO -NODEGROUP varchar(12) NO -TABLESPACE_NAME varchar(128) YES NULL +UPDATE_TIME datetime NO +CHECK_TIME datetime NO +CHECKSUM bigint(0) NO +PARTITION_COMMENT text NO +NODEGROUP varchar(256) NO +TABLESPACE_NAME varchar(268) NO NULL desc processlist; Field Type Null Key Default Extra ID bigint(20) unsigned NO @@ -102,7 +103,7 @@ INFO varchar(262143) YES NULL desc schema_privileges; Field Type Null Key Default Extra GRANTEE varchar(81) NO -TABLE_CATALOG varchar(4096) NO +TABLE_CATALOG varchar(512) NO TABLE_SCHEMA varchar(128) NO PRIVILEGE_TYPE varchar(64) NO IS_GRANTABLE varchar(3) NO @@ -124,81 +125,81 @@ VARIABLE_NAME varchar(128) NO VARIABLE_VALUE varchar(1024) YES NULL desc statistics; Field Type Null Key Default Extra -TABLE_CATALOG varchar(3) NO +TABLE_CATALOG varchar(512) NO TABLE_SCHEMA varchar(128) NO TABLE_NAME varchar(256) NO NON_UNIQUE bigint(20) NO INDEX_SCHEMA varchar(128) NO -INDEX_NAME varchar(128) NO -SEQ_IN_INDEX bigint(20) NO +INDEX_NAME varchar(256) NO +SEQ_IN_INDEX bigint(20) unsigned NO COLUMN_NAME varchar(128) NO -COLLATION varchar(128) YES NULL -CARDINALITY bigint(20) YES NULL -SUB_PART varchar(256) YES NULL -PACKED varchar(256) YES NULL -NULLABLE varchar(128) NO -INDEX_TYPE varchar(128) NO -COMMENT varchar(4096) YES NULL -INDEX_COMMENT varchar(4096) NO +COLLATION varchar(1) NO +CARDINALITY bigint(0) NO +SUB_PART bigint(20) NO +PACKED varchar(10) NO +NULLABLE varchar(3) NO +INDEX_TYPE varchar(16) NO +COMMENT varchar(16) NO +INDEX_COMMENT text NO IS_VISIBLE varchar(3) NO desc table_constraints; Field Type Null Key Default Extra -CONSTRAINT_CATALOG varchar(4096) NO +CONSTRAINT_CATALOG varchar(64) NO CONSTRAINT_SCHEMA varchar(128) NO -CONSTRAINT_NAME varchar(128) NO +CONSTRAINT_NAME varchar(256) NO TABLE_SCHEMA varchar(128) NO TABLE_NAME varchar(256) NO -CONSTRAINT_TYPE varchar(128) NO -ENFORCED varchar(4) NO +CONSTRAINT_TYPE varchar(11) NO +ENFORCED varchar(3) NO desc table_privileges; Field Type Null Key Default Extra GRANTEE varchar(81) NO -TABLE_CATALOG varchar(4096) NO +TABLE_CATALOG varchar(512) NO TABLE_SCHEMA varchar(128) NO TABLE_NAME varchar(64) NO PRIVILEGE_TYPE varchar(64) NO IS_GRANTABLE varchar(3) NO desc tables; Field Type Null Key Default Extra -TABLE_CATALOG varchar(3) NO -TABLE_SCHEMA varchar(128) NO -TABLE_NAME varchar(256) NO -TABLE_TYPE varchar(12) NO -ENGINE null NO -VERSION null NO -ROW_FORMAT null NO +TABLE_CATALOG varchar(512) NO +TABLE_SCHEMA varchar(64) NO +TABLE_NAME varchar(64) NO +TABLE_TYPE varchar(64) NO +ENGINE varchar(64) NO +VERSION bigint(0) unsigned NO +ROW_FORMAT varchar(10) NO TABLE_ROWS bigint(21) unsigned NO AVG_ROW_LENGTH bigint(21) unsigned NO DATA_LENGTH bigint(21) unsigned NO -MAX_DATA_LENGTH null NO -INDEX_LENGTH null NO -DATA_FREE null NO -AUTO_INCREMENT null NO -CREATE_TIME timestamp(6) NO -UPDATE_TIME timestamp(6) NO -CHECK_TIME null NO -TABLE_COLLATION varchar(128) NO +MAX_DATA_LENGTH bigint(0) unsigned NO +INDEX_LENGTH bigint(0) unsigned NO +DATA_FREE bigint(0) unsigned NO +AUTO_INCREMENT bigint(0) unsigned NO +CREATE_TIME datetime NO +UPDATE_TIME datetime NO +CHECK_TIME datetime NO +TABLE_COLLATION varchar(32) NO CHECKSUM bigint(0) unsigned NO -CREATE_OPTIONS null NO -TABLE_COMMENT varchar(4096) NO +CREATE_OPTIONS varchar(255) NO +TABLE_COMMENT text NO desc user_privileges; Field Type Null Key Default Extra GRANTEE varchar(81) NO -TABLE_CATALOG varchar(4096) NO +TABLE_CATALOG varchar(512) NO PRIVILEGE_TYPE varchar(64) NO IS_GRANTABLE varchar(3) NO desc views; Field Type Null Key Default Extra -TABLE_CATALOG varchar(3) NO +TABLE_CATALOG varchar(64) NO TABLE_SCHEMA varchar(128) NO TABLE_NAME varchar(256) NO VIEW_DEFINITION longtext NO NULL CHECK_OPTION varchar(8) NO NULL IS_UPDATABLE varchar(3) NO NULL -DEFINER varchar(257) NO -SECURITY_TYPE varchar(4) NO -CHARACTER_SET_CLIENT varchar(7) NO NULL -COLLATION_CONNECTION varchar(18) NO NULL +DEFINER varchar(288) NO +SECURITY_TYPE varchar(7) NO +CHARACTER_SET_CLIENT varchar(64) NO +COLLATION_CONNECTION varchar(64) NO show create table character_sets; View Create View character_set_client collation_connection CHARACTER_SETS CREATE VIEW `CHARACTER_SETS` AS SELECT CHARSET AS CHARACTER_SET_NAME, DEFAULT_COLLATION AS DEFAULT_COLLATE_NAME, DESCRIPTION, max_length AS MAXLEN FROM oceanbase.__tenant_virtual_charset utf8mb4 utf8mb4_general_ci @@ -245,46 +246,14 @@ show create table key_column_usage; View Create View character_set_client collation_connection KEY_COLUMN_USAGE CREATE VIEW `KEY_COLUMN_USAGE` AS (select 'def' as CONSTRAINT_CATALOG, c.database_name as CONSTRAINT_SCHEMA, 'PRIMARY' as CONSTRAINT_NAME, 'def' as TABLE_CATALOG, c.database_name as TABLE_SCHEMA, a.table_name as TABLE_NAME, b.column_name as COLUMN_NAME, b.rowkey_position as ORDINAL_POSITION, NULL as POSITION_IN_UNIQUE_CONSTRAINT, NULL as REFERENCED_TABLE_SCHEMA, NULL as REFERENCED_TABLE_NAME, NULL as REFERENCED_COLUMN_NAME from oceanbase.__all_table a join oceanbase.__all_column b on a.tenant_id = b.tenant_id and a.table_id = b.table_id join oceanbase.__all_database c on a.tenant_id = c.tenant_id and a.database_id = c.database_id where a.tenant_id = 0 and c.in_recyclebin = 0 and c.database_name != '__recyclebin' and b.rowkey_position > 0 and b.column_id >= 16 and a.table_type != 5 and a.table_type != 12 and a.table_type != 13 and b.column_flags & (0x1 << 8) = 0) union all (select 'def' as CONSTRAINT_CATALOG, d.database_name as CONSTRAINT_SCHEMA, substr(a.table_name, 2 + length(substring_index(a.table_name,'_',4))) as CONSTRAINT_NAME, 'def' as TABLE_CATALOG, d.database_name as TABLE_SCHEMA, c.table_name as TABLE_NAME, b.column_name as COLUMN_NAME, b.index_position as ORDINAL_POSITION, NULL as POSITION_IN_UNIQUE_CONSTRAINT, NULL as REFERENCED_TABLE_SCHEMA, NULL as REFERENCED_TABLE_NAME, NULL as REFERENCED_COLUMN_NAME from oceanbase.__all_table a join oceanbase.__all_column b on a.tenant_id = b.tenant_id and a.table_id = b.table_id join oceanbase.__all_table c on a.tenant_id = c.tenant_id and a.data_table_id = c.table_id join oceanbase.__all_database d on a.tenant_id = d.tenant_id and c.database_id = d.database_id where a.tenant_id = 0 and d.in_recyclebin = 0 and d.database_name != '__recyclebin' and a.table_type = 5 and a.index_type in (2, 4, 8) and b.index_position > 0) union all (select 'def' as CONSTRAINT_CATALOG, d.database_name as CONSTRAINT_SCHEMA, f.foreign_key_name as CONSTRAINT_NAME, 'def' as TABLE_CATALOG, d.database_name as TABLE_SCHEMA, t.table_name as TABLE_NAME, c.column_name as COLUMN_NAME, fc.position as ORDINAL_POSITION, NULL as POSITION_IN_UNIQUE_CONSTRAINT, /* POSITION_IN_UNIQUE_CONSTRAINT is not supported now */ d2.database_name as REFERENCED_TABLE_SCHEMA, t2.table_name as REFERENCED_TABLE_NAME, c2.column_name as REFERENCED_COLUMN_NAME from oceanbase.__all_foreign_key f join oceanbase.__all_table t on f.tenant_id = t.tenant_id and f.child_table_id = t.table_id join oceanbase.__all_database d on f.tenant_id = d.tenant_id and t.database_id = d.database_id join oceanbase.__all_foreign_key_column fc on f.tenant_id = fc.tenant_id and f.foreign_key_id = fc.foreign_key_id join oceanbase.__all_column c on f.tenant_id = c.tenant_id and fc.child_column_id = c.column_id and t.table_id = c.table_id join oceanbase.__all_table t2 on f.tenant_id = t2.tenant_id and f.parent_table_id = t2.table_id join oceanbase.__all_database d2 on f.tenant_id = d2.tenant_id and t2.database_id = d2.database_id join oceanbase.__all_column c2 on f.tenant_id = c2.tenant_id and fc.parent_column_id = c2.column_id and t2.table_id = c2.table_id where f.tenant_id = 0) union all (select 'def' as CONSTRAINT_CATALOG, d.database_name as CONSTRAINT_SCHEMA, f.foreign_key_name as CONSTRAINT_NAME, 'def' as TABLE_CATALOG, d.database_name as TABLE_SCHEMA, t.table_name as TABLE_NAME, c.column_name as COLUMN_NAME, fc.position as ORDINAL_POSITION, NULL as POSITION_IN_UNIQUE_CONSTRAINT, /* POSITION_IN_UNIQUE_CONSTRAINT is not supported now */ d.database_name as REFERENCED_TABLE_SCHEMA, t2.mock_fk_parent_table_name as REFERENCED_TABLE_NAME, c2.parent_column_name as REFERENCED_COLUMN_NAME from oceanbase.__all_foreign_key f join oceanbase.__all_table t on f.tenant_id = t.tenant_id and f.child_table_id = t.table_id join oceanbase.__all_database d on f.tenant_id = d.tenant_id and t.database_id = d.database_id join oceanbase.__all_foreign_key_column fc on f.tenant_id = fc.tenant_id and f.foreign_key_id = fc.foreign_key_id join oceanbase.__all_column c on f.tenant_id = c.tenant_id and fc.child_column_id = c.column_id and t.table_id = c.table_id join oceanbase.__all_mock_fk_parent_table t2 on f.tenant_id = t2.tenant_id and f.parent_table_id = t2.mock_fk_parent_table_id join oceanbase.__all_mock_fk_parent_table_column c2 on f.tenant_id = c2.tenant_id and fc.parent_column_id = c2.parent_column_id and t2.mock_fk_parent_table_id = c2.mock_fk_parent_table_id where f.tenant_id = 0) utf8mb4 utf8mb4_general_ci show create table partitions; -Table Create Table -PARTITIONS CREATE TABLE `PARTITIONS` ( - `TABLE_CATALOG` varchar(4096) NOT NULL DEFAULT '', - `TABLE_SCHEMA` varchar(128) NOT NULL DEFAULT '', - `TABLE_NAME` varchar(256) NOT NULL DEFAULT '', - `PARTITION_NAME` varchar(64) DEFAULT NULL, - `SUBPARTITION_NAME` varchar(64) DEFAULT NULL, - `PARTITION_ORDINAL_POSITION` bigint(20) unsigned DEFAULT NULL, - `SUBPARTITION_ORDINAL_POSITION` bigint(20) unsigned DEFAULT NULL, - `PARTITION_METHOD` varchar(18) DEFAULT NULL, - `SUBPARTITION_METHOD` varchar(18) DEFAULT NULL, - `PARTITION_EXPRESSION` varchar(4096) DEFAULT NULL, - `SUBPARTITION_EXPRESSION` varchar(4096) DEFAULT NULL, - `PARTITION_DESCRIPTION` varchar(1024) DEFAULT NULL, - `TABLE_ROWS` bigint(20) unsigned NOT NULL DEFAULT '0', - `AVG_ROW_LENGTH` bigint(20) unsigned NOT NULL DEFAULT '0', - `DATA_LENGTH` bigint(20) unsigned NOT NULL DEFAULT '0', - `MAX_DATA_LENGTH` bigint(20) unsigned DEFAULT NULL, - `INDEX_LENGTH` bigint(20) unsigned NOT NULL DEFAULT '0', - `DATA_FREE` bigint(20) unsigned NOT NULL DEFAULT '0', - `CREATE_TIME` timestamp(6) NULL DEFAULT NULL, - `UPDATE_TIME` timestamp(6) NULL DEFAULT NULL, - `CHECK_TIME` timestamp(6) NULL DEFAULT NULL, - `CHECKSUM` bigint(20) DEFAULT NULL, - `PARTITION_COMMENT` varchar(1024) NOT NULL DEFAULT '', - `NODEGROUP` varchar(12) NOT NULL DEFAULT '', - `TABLESPACE_NAME` varchar(128) DEFAULT NULL -) DEFAULT CHARSET = utf8mb4 COMPRESSION = 'none' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 10 +View Create View character_set_client collation_connection +PARTITIONS CREATE VIEW `PARTITIONS` AS SELECT CAST('def' as CHAR(4096)) AS TABLE_CATALOG, DB.DATABASE_NAME AS TABLE_SCHEMA, T.TABLE_NAME AS TABLE_NAME, P.PART_NAME AS PARTITION_NAME, SP.SUB_PART_NAME AS SUBPARTITION_NAME, CAST(PART_POSITION AS UNSIGNED) AS PARTITION_ORDINAL_POSITION, CAST(SUB_PART_POSITION AS UNSIGNED) AS SUBPARTITION_ORDINAL_POSITION, CAST(CASE WHEN T.PART_LEVEL = 0 THEN NULL ELSE (CASE T.PART_FUNC_TYPE WHEN 0 THEN 'HASH' WHEN 1 THEN 'KEY' WHEN 2 THEN 'KEY' WHEN 3 THEN 'RANGE' WHEN 4 THEN 'RANGE COLUMNS' WHEN 5 THEN 'LIST' WHEN 6 THEN 'LIST COLUMNS' WHEN 7 THEN 'RANGE' END) END AS CHAR(13)) PARTITION_METHOD, CAST(CASE WHEN (T.PART_LEVEL = 0 OR T.PART_LEVEL = 1) THEN NULL ELSE (CASE T.SUB_PART_FUNC_TYPE WHEN 0 THEN 'HASH' WHEN 1 THEN 'KEY' WHEN 2 THEN 'KEY' WHEN 3 THEN 'RANGE' WHEN 4 THEN 'RANGE COLUMNS' WHEN 5 THEN 'LIST' WHEN 6 THEN 'LIST COLUMNS' WHEN 7 THEN 'RANGE' END) END AS CHAR(13)) SUBPARTITION_METHOD, CAST(CASE WHEN (T.PART_LEVEL = 0) THEN NULL ELSE T.PART_FUNC_EXPR END AS CHAR(2048)) PARTITION_EXPRESSION, CAST(CASE WHEN (T.PART_LEVEL = 0 OR T.PART_LEVEL = 1) THEN NULL ELSE T.SUB_PART_FUNC_EXPR END AS CHAR(2048)) SUBPARTITION_EXPRESSION, CAST(CASE WHEN (T.PART_LEVEL = 0) THEN NULL ELSE (CASE WHEN LENGTH(P.HIGH_BOUND_VAL) > 0 THEN P.HIGH_BOUND_VAL ELSE P.LIST_VAL END) END AS CHAR(4096)) AS PARTITION_DESCRIPTION, CAST(CASE WHEN (T.PART_LEVEL = 0 OR T.PART_LEVEL = 1) THEN NULL ELSE (CASE WHEN LENGTH(SP.HIGH_BOUND_VAL) > 0 THEN SP.HIGH_BOUND_VAL ELSE SP.LIST_VAL END) END AS CHAR(4096)) AS SUBPARTITION_DESCRIPTION, CAST(TS.ROW_CNT AS UNSIGNED) AS TABLE_ROWS, CAST(TS.AVG_ROW_LEN AS UNSIGNED) AS AVG_ROW_LENGTH, CAST(NULL AS UNSIGNED) AS DATA_LENGTH, CAST(NULL AS UNSIGNED) AS MAX_DATA_LENGTH, CAST(NULL AS UNSIGNED) AS INDEX_LENGTH, CAST(NULL AS UNSIGNED) AS DATA_FREE, CASE T.PART_LEVEL WHEN 0 THEN T.GMT_CREATE WHEN 1 THEN P.GMT_CREATE WHEN 2 THEN SP.GMT_CREATE END AS CREATE_TIME, CAST(NULL AS DATETIME) AS UPDATE_TIME, CAST(NULL AS DATETIME) AS CHECK_TIME, CAST(NULL AS SIGNED) AS CHECKSUM, CAST(CASE T.PART_LEVEL WHEN 0 THEN NULL WHEN 1 THEN P.COMMENT WHEN 2 THEN SP.COMMENT END AS CHAR(1024)) AS PARTITION_COMMENT, CAST('default' AS CHAR(256)) NODEGROUP, CAST(TP.TABLESPACE_NAME AS CHAR(268)) AS TABLESPACE_NAME FROM OCEANBASE.__ALL_TABLE T JOIN OCEANBASE.__ALL_DATABASE DB ON T.DATABASE_ID = DB.DATABASE_ID AND T.TENANT_ID = DB.TENANT_ID LEFT JOIN ( SELECT TENANT_ID, TABLE_ID, PART_ID, PART_NAME, HIGH_BOUND_VAL, LIST_VAL, TABLESPACE_ID, GMT_CREATE, COMMENT, ROW_NUMBER() OVER(PARTITION BY TENANT_ID,TABLE_ID ORDER BY PART_IDX) AS PART_POSITION FROM OCEANBASE.__ALL_PART ) P ON T.TABLE_ID = P.TABLE_ID AND T.TENANT_ID = P.TENANT_ID LEFT JOIN ( SELECT TENANT_ID, TABLE_ID, PART_ID, SUB_PART_ID, SUB_PART_NAME, HIGH_BOUND_VAL, LIST_VAL, TABLESPACE_ID, GMT_CREATE, COMMENT, ROW_NUMBER() OVER(PARTITION BY TENANT_ID,TABLE_ID,PART_ID ORDER BY SUB_PART_IDX) AS SUB_PART_POSITION FROM OCEANBASE.__ALL_SUB_PART ) SP ON T.TABLE_ID = SP.TABLE_ID AND P.PART_ID = SP.PART_ID AND T.TENANT_ID = SP.TENANT_ID LEFT JOIN OCEANBASE.__ALL_TENANT_TABLESPACE TP ON TP.TABLESPACE_ID = IFNULL(SP.TABLESPACE_ID, P.TABLESPACE_ID) AND TP.TENANT_ID = T.TENANT_ID LEFT JOIN OCEANBASE.__ALL_TABLE_STAT TS ON T.TENANT_ID = TS.TENANT_ID AND TS.TABLE_ID = T.TABLE_ID AND TS.PARTITION_ID = CASE T.PART_LEVEL WHEN 0 THEN T.TABLE_ID WHEN 1 THEN P.PART_ID WHEN 2 THEN SP.SUB_PART_ID END WHERE T.TABLE_TYPE IN (3,6,8,9) utf8mb4 utf8mb4_general_ci show create table processlist; View Create View character_set_client collation_connection PROCESSLIST CREATE VIEW `PROCESSLIST` AS SELECT id AS ID, user AS USER, host AS HOST, db AS DB, command AS COMMAND, time AS TIME, state AS STATE, info AS INFO FROM oceanbase.__all_virtual_processlist WHERE is_serving_tenant(svr_ip, svr_port, effective_tenant_id()) utf8mb4 utf8mb4_general_ci show create table schema_privileges; -Table Create Table -SCHEMA_PRIVILEGES CREATE TABLE `SCHEMA_PRIVILEGES` ( - `GRANTEE` varchar(81) NOT NULL DEFAULT '', - `TABLE_CATALOG` varchar(4096) NOT NULL DEFAULT '', - `TABLE_SCHEMA` varchar(128) NOT NULL DEFAULT '', - `PRIVILEGE_TYPE` varchar(64) NOT NULL DEFAULT '', - `IS_GRANTABLE` varchar(3) NOT NULL DEFAULT '' -) DEFAULT CHARSET = utf8mb4 COMPRESSION = 'none' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 10 +View Create View character_set_client collation_connection +SCHEMA_PRIVILEGES CREATE VIEW `SCHEMA_PRIVILEGES` AS SELECT CAST(CONCAT('''', V.USER_NAME, '''', '@', '''', V.HOST, '''') AS CHAR(81)) AS GRANTEE , CAST('def' AS CHAR(512)) AS TABLE_CATALOG , CAST(V.DATABASE_NAME AS CHAR(128)) AS TABLE_SCHEMA , CAST(V.PRIVILEGE_TYPE AS CHAR(64)) AS PRIVILEGE_TYPE , CAST(V.IS_GRANTABLE AS CHAR(3)) AS IS_GRANTABLE FROM (SELECT DP.DATABASE_NAME DATABASE_NAME, U.USER_NAME AS USER_NAME, U.HOST AS HOST, CASE WHEN V1.C1 = 1 AND DP.PRIV_ALTER = 1 THEN 'ALTER' WHEN V1.C1 = 2 AND DP.PRIV_CREATE = 1 THEN 'CREATE' WHEN V1.C1 = 4 AND DP.PRIV_DELETE = 1 THEN 'DELETE' WHEN V1.C1 = 5 AND DP.PRIV_DROP = 1 THEN 'DROP' WHEN V1.C1 = 7 AND DP.PRIV_INSERT = 1 THEN 'INSERT' WHEN V1.C1 = 8 AND DP.PRIV_UPDATE = 1 THEN 'UPDATE' WHEN V1.C1 = 9 AND DP.PRIV_SELECT = 1 THEN 'SELECT' WHEN V1.C1 = 10 AND DP.PRIV_INDEX = 1 THEN 'INDEX' WHEN V1.C1 = 11 AND DP.PRIV_CREATE_VIEW = 1 THEN 'CREATE VIEW' WHEN V1.C1 = 12 AND DP.PRIV_SHOW_VIEW = 1 THEN 'SHOW VIEW' ELSE NULL END PRIVILEGE_TYPE , CASE WHEN DP.PRIV_GRANT_OPTION = 1 THEN 'YES' WHEN DP.PRIV_GRANT_OPTION = 0 THEN 'NO' END IS_GRANTABLE FROM oceanbase.__all_database_privilege DP, oceanbase.__all_user U, (SELECT 1 AS C1 UNION ALL SELECT 2 AS C1 UNION ALL SELECT 4 AS C1 UNION ALL SELECT 5 AS C1 UNION ALL SELECT 7 AS C1 UNION ALL SELECT 8 AS C1 UNION ALL SELECT 9 AS C1 UNION ALL SELECT 10 AS C1 UNION ALL SELECT 11 AS C1 UNION ALL SELECT 12 AS C1) V1, (SELECT USER_ID FROM oceanbase.__all_user WHERE TENANT_ID= 0 AND CONCAT(USER_NAME, '@', HOST) = CURRENT_USER()) CURR LEFT JOIN (SELECT USER_ID FROM oceanbase.__all_database_privilege WHERE TENANT_ID = 0 AND DATABASE_NAME = 'mysql' AND PRIV_SELECT = 1) DB ON CURR.USER_ID = DB.USER_ID WHERE DP.TENANT_ID = 0 AND DP.TENANT_ID = U.TENANT_ID AND DP.USER_ID = U.USER_ID AND DP.DATABASE_NAME != '__recyclebin' AND DP.DATABASE_NAME != '__public' AND DP.DATABASE_NAME != 'SYS' AND DP.DATABASE_NAME != 'LBACSYS' AND DP.DATABASE_NAME != 'ORAAUDITOR' AND (DB.USER_ID IS NOT NULL OR 512 & CURRENT_USER_PRIV() = 512 OR DP.USER_ID = CURR.USER_ID)) V WHERE V.PRIVILEGE_TYPE IS NOT NULL utf8mb4 utf8mb4_general_ci show create table schemata; View Create View character_set_client collation_connection SCHEMATA CREATE VIEW `SCHEMATA` AS SELECT 'def' AS CATALOG_NAME, DATABASE_NAME AS SCHEMA_NAME, 'utf8mb4' AS DEFAULT_CHARACTER_SET_NAME, 'utf8mb4_general_ci' AS DEFAULT_COLLATION_NAME, NULL AS SQL_PATH, 'NO' as DEFAULT_ENCRYPTION FROM oceanbase.__all_database a WHERE a.tenant_id = 0 and in_recyclebin = 0 and database_name != '__recyclebin' utf8mb4 utf8mb4_general_ci @@ -302,39 +271,19 @@ SESSION_VARIABLES CREATE TABLE `SESSION_VARIABLES` ( ) DEFAULT CHARSET = utf8mb4 COMPRESSION = 'none' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 10 show create table statistics; View Create View character_set_client collation_connection -STATISTICS CREATE VIEW `STATISTICS` AS SELECT 'def' as TABLE_CATALOG, table_schema AS TABLE_SCHEMA, `table` as TABLE_NAME, non_unique AS NON_UNIQUE, index_schema as INDEX_SCHEMA, key_name as INDEX_NAME, seq_in_index as SEQ_IN_INDEX, column_name as COLUMN_NAME, collation as COLLATION, cardinality as CARDINALITY, sub_part as SUB_PART, packed as PACKED, `null` as NULLABLE, index_type as INDEX_TYPE, COMMENT, index_comment as INDEX_COMMENT, is_visible as IS_VISIBLE FROM oceanbase.__tenant_virtual_table_index utf8mb4 utf8mb4_general_ci +STATISTICS CREATE VIEW `STATISTICS` AS SELECT CAST('def' AS CHAR(512)) AS TABLE_CATALOG, V.TABLE_SCHEMA AS TABLE_SCHEMA, V.TABLE_NAME AS TABLE_NAME, CAST(V.NON_UNIQUE AS SIGNED) AS NON_UNIQUE, V.INDEX_SCHEMA AS INDEX_SCHEMA, V.INDEX_NAME AS INDEX_NAME, CAST(V.SEQ_IN_INDEX AS UNSIGNED) AS SEQ_IN_INDEX, V.COLUMN_NAME AS COLUMN_NAME, CAST('A' AS CHAR(1)) AS COLLATION, CAST(NULL AS SIGNED) AS CARDINALITY, CAST(V.SUB_PART AS SIGNED) AS SUB_PART, CAST(NULL AS CHAR(10)) AS PACKED, CAST(V.NULLABLE AS CHAR(3)) AS NULLABLE, CAST(V.INDEX_TYPE AS CHAR(16)) AS INDEX_TYPE, CAST(V.COMMENT AS CHAR(16)) AS COMMENT, CAST(V.INDEX_COMMENT AS CHAR(1024)) AS INDEX_COMMENT, CAST('YES' AS CHAR(3)) AS IS_VISIBLE FROM (SELECT db.database_name AS TABLE_SCHEMA, t.table_name AS TABLE_NAME, CASE WHEN i.index_type IN (2,4,8) THEN 0 ELSE 1 END AS NON_UNIQUE, db.database_name AS INDEX_SCHEMA, substr(i.table_name, 7 + instr(substr(i.table_name, 7), '_')) AS INDEX_NAME, c.index_position AS SEQ_IN_INDEX, CASE WHEN d_col.column_name IS NOT NULL THEN d_col.column_name ELSE c.column_name END AS COLUMN_NAME, CASE WHEN d_col.column_name IS NOT NULL THEN c.data_length ELSE NULL END AS SUB_PART, CASE WHEN c.nullable = 1 THEN 'YES' ELSE NULL END AS NULLABLE, CASE WHEN i.index_using_type = 0 THEN 'BTREE' ELSE (CASE WHEN i.index_using_type = 1 THEN 'HASH' ELSE 'UNKOWN' END)END AS INDEX_TYPE, t.comment AS COMMENT, i.comment AS INDEX_COMMENT FROM oceanbase.__all_table i JOIN oceanbase.__all_table t ON i.data_table_id=t.table_id AND i.tenant_id = t.tenant_id AND i.database_id = t.database_id AND i.table_type = 5 AND t.table_type in (0,3) JOIN oceanbase.__all_column c ON i.table_id=c.table_id AND i.tenant_id = c.tenant_id AND c.index_position > 0 JOIN oceanbase.__all_database db ON i.tenant_id = db.tenant_id AND i.database_id = db.database_id AND db.in_recyclebin = 0 AND db.database_name != '__recyclebin' LEFT JOIN oceanbase.__all_column d_col ON c.is_hidden = 1 AND substr(c.column_name, 1, 8) = '__substr' AND i.data_table_id = d_col.table_id AND i.tenant_id = d_col.tenant_id AND substr(c.column_name, 8 + instr(substr(c.column_name, 8), '_')) = d_col.column_id UNION ALL SELECT db.database_name AS TABLE_SCHEMA, t.table_name AS TABLE_NAME, 0 AS NON_UNIQUE, db.database_name AS INDEX_SCHEMA, 'PRIMARY' AS INDEX_NAME, c.rowkey_position AS SEQ_IN_INDEX, c.column_name AS COLUMN_NAME, NULL AS SUB_PART, NULL AS NULLABLE, CASE WHEN t.index_using_type = 0 THEN 'BTREE' ELSE ( CASE WHEN t.index_using_type = 1 THEN 'HASH' ELSE 'UNKOWN' END) END AS INDEX_TYPE, t.comment AS COMMENT, t.comment AS INDEX_COMMENT FROM oceanbase.__all_table t JOIN oceanbase.__all_column c ON t.table_id=c.table_id AND t.tenant_id = c.tenant_id AND c.rowkey_position > 0 AND c.is_hidden = 0 AND t.table_type in (0,3) JOIN oceanbase.__all_database db ON t.tenant_id = db.tenant_id AND t.database_id = db.database_id AND db.in_recyclebin = 0 AND db.database_name != '__recyclebin' UNION ALL SELECT db.database_name AS TABLE_SCHEMA, t.table_name AS TABLE_NAME, CASE WHEN i.index_type IN (2,4,8) THEN 0 ELSE 1 END AS NON_UNIQUE, db.database_name AS INDEX_SCHEMA, substr(i.table_name, 7 + instr(substr(i.table_name, 7), '_')) AS INDEX_NAME, c.index_position AS SEQ_IN_INDEX, CASE WHEN d_col.column_name IS NOT NULL THEN d_col.column_name ELSE c.column_name END AS COLUMN_NAME, CASE WHEN d_col.column_name IS NOT NULL THEN c.data_length ELSE NULL END AS SUB_PART, CASE WHEN c.nullable = 1 THEN 'YES' ELSE NULL END AS NULLABLE, CASE WHEN i.index_using_type = 0 THEN 'BTREE' ELSE (CASE WHEN i.index_using_type = 1 THEN 'HASH' ELSE 'UNKOWN' END)END AS INDEX_TYPE, t.comment AS COMMENT, i.comment AS INDEX_COMMENT FROM oceanbase.__ALL_VIRTUAL_CORE_ALL_TABLE i JOIN oceanbase.__ALL_VIRTUAL_CORE_ALL_TABLE t ON i.data_table_id=t.table_id AND i.tenant_id = t.tenant_id AND i.database_id = t.database_id AND i.table_type = 5 AND t.table_type in (0,3) AND t.tenant_id = EFFECTIVE_TENANT_ID() JOIN oceanbase.__ALL_VIRTUAL_CORE_COLUMN_TABLE c ON i.table_id=c.table_id AND i.tenant_id = c.tenant_id AND c.index_position > 0 JOIN oceanbase.__all_database db ON i.database_id = db.database_id LEFT JOIN oceanbase.__ALL_VIRTUAL_CORE_COLUMN_TABLE d_col ON c.is_hidden = 1 AND substr(c.column_name, 1, 8) = '__substr' AND i.data_table_id = d_col.table_id AND i.tenant_id = d_col.tenant_id AND substr(c.column_name, 8 + instr(substr(c.column_name, 8), '_')) = d_col.column_id UNION ALL SELECT db.database_name AS TABLE_SCHEMA, t.table_name AS TABLE_NAME, 0 AS NON_UNIQUE, db.database_name AS INDEX_SCHEMA, 'PRIMARY' AS INDEX_NAME, c.rowkey_position AS SEQ_IN_INDEX, c.column_name AS COLUMN_NAME, NULL AS SUB_PART, NULL AS NULLABLE, CASE WHEN t.index_using_type = 0 THEN 'BTREE' ELSE ( CASE WHEN t.index_using_type = 1 THEN 'HASH' ELSE 'UNKOWN' END) END AS INDEX_TYPE, t.comment AS COMMENT, t.comment AS INDEX_COMMENT FROM oceanbase.__ALL_VIRTUAL_CORE_ALL_TABLE t JOIN oceanbase.__ALL_VIRTUAL_CORE_COLUMN_TABLE c ON t.table_id=c.table_id AND t.tenant_id = c.tenant_id AND t.tenant_id = EFFECTIVE_TENANT_ID() AND c.rowkey_position > 0 AND c.is_hidden = 0 AND t.table_type in (0,3) JOIN oceanbase.__all_database db ON t.database_id = db.database_id)V utf8mb4 utf8mb4_general_ci show create table table_constraints; -Table Create Table -TABLE_CONSTRAINTS CREATE TABLE `TABLE_CONSTRAINTS` ( - `CONSTRAINT_CATALOG` varchar(4096) NOT NULL DEFAULT '', - `CONSTRAINT_SCHEMA` varchar(128) NOT NULL DEFAULT '', - `CONSTRAINT_NAME` varchar(128) NOT NULL DEFAULT '', - `TABLE_SCHEMA` varchar(128) NOT NULL DEFAULT '', - `TABLE_NAME` varchar(256) NOT NULL DEFAULT '', - `CONSTRAINT_TYPE` varchar(128) NOT NULL DEFAULT '', - `ENFORCED` varchar(4) NOT NULL DEFAULT '' -) DEFAULT CHARSET = utf8mb4 COMPRESSION = 'none' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 10 +View Create View character_set_client collation_connection +TABLE_CONSTRAINTS CREATE VIEW `TABLE_CONSTRAINTS` AS SELECT CAST('def' AS CHAR(64)) AS CONSTRAINT_CATALOG, CAST(d.database_name AS CHAR(128)) AS CONSTRAINT_SCHEMA, CAST('PRIMARY' AS CHAR(256)) AS CONSTRAINT_NAME, CAST(d.database_name AS CHAR(128)) AS TABLE_SCHEMA, CAST(t.table_name AS CHAR(256)) AS TABLE_NAME, CAST('PRIMARY KEY' AS CHAR(11)) AS CONSTRAINT_TYPE, CAST('YES' AS CHAR(3)) AS ENFORCED FROM oceanbase.__all_database d JOIN oceanbase.__all_table t ON d.database_id = t.database_id WHERE (d.database_id = 201003 OR d.database_id > 500000) AND d.in_recyclebin = 0 AND t.table_type = 3 AND t.table_mode >> 16 & 1 = 0 union all SELECT CAST('def' AS CHAR(64)) AS CONSTRAINT_CATALOG, CAST(d.database_name AS CHAR(128)) AS CONSTRAINT_SCHEMA, CAST(SUBSTR(it.table_name, 7 + INSTR(SUBSTR(it.table_name, 7), '_')) AS CHAR(256)) AS CONSTRAINT_NAME, CAST(d.database_name AS CHAR(128)) AS TABLE_SCHEMA, CAST(ut.table_name AS CHAR(256)) AS TABLE_NAME, CAST('UNIQUE' AS CHAR(11)) AS CONSTRAINT_TYPE, CAST('YES' AS CHAR(3)) AS ENFORCED FROM oceanbase.__all_database d JOIN oceanbase.__all_table it ON d.database_id = it.database_id JOIN oceanbase.__all_table ut ON it.data_table_id = ut.table_id WHERE d.database_id > 500000 AND d.in_recyclebin = 0 AND it.table_type = 5 AND it.index_type IN (2, 4, 8) union all SELECT CAST('def' AS CHAR(64)) AS CONSTRAINT_CATALOG, CAST(d.database_name AS CHAR(128)) AS CONSTRAINT_SCHEMA, CAST(c.constraint_name AS CHAR(256)) AS CONSTRAINT_NAME, CAST(d.database_name AS CHAR(128)) AS TABLE_SCHEMA, CAST(t.table_name AS CHAR(256)) AS TABLE_NAME, CAST('CHECK' AS CHAR(11)) AS CONSTRAINT_TYPE, CAST(CASE WHEN c.enable_flag = 1 THEN 'YES' ELSE 'NO' END AS CHAR(3)) AS ENFORCED FROM oceanbase.__all_database d JOIN oceanbase.__all_table t ON d.database_id = t.database_id JOIN oceanbase.__all_constraint c ON t.table_id = c.table_id WHERE d.database_id > 500000 AND d.in_recyclebin = 0 AND t.table_type = 3 AND c.constraint_type = 3 union all SELECT CAST('def' AS CHAR(64)) AS CONSTRAINT_CATALOG, CAST(f.constraint_schema AS CHAR(128)) AS CONSTRAINT_SCHEMA, CAST(f.constraint_name AS CHAR(256)) AS CONSTRAINT_NAME, CAST(f.constraint_schema AS CHAR(128)) AS TABLE_SCHEMA, CAST(f.table_name AS CHAR(256)) AS TABLE_NAME, CAST('FOREIGN KEY' AS CHAR(11)) AS CONSTRAINT_TYPE, CAST('YES' AS CHAR(3)) AS ENFORCED FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS f utf8mb4 utf8mb4_general_ci show create table table_privileges; -Table Create Table -TABLE_PRIVILEGES CREATE TABLE `TABLE_PRIVILEGES` ( - `GRANTEE` varchar(81) NOT NULL DEFAULT '', - `TABLE_CATALOG` varchar(4096) NOT NULL DEFAULT '', - `TABLE_SCHEMA` varchar(128) NOT NULL DEFAULT '', - `TABLE_NAME` varchar(64) NOT NULL DEFAULT '', - `PRIVILEGE_TYPE` varchar(64) NOT NULL DEFAULT '', - `IS_GRANTABLE` varchar(3) NOT NULL DEFAULT '' -) DEFAULT CHARSET = utf8mb4 COMPRESSION = 'none' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 10 +View Create View character_set_client collation_connection +TABLE_PRIVILEGES CREATE VIEW `TABLE_PRIVILEGES` AS SELECT CAST(CONCAT('''', V.USER_NAME, '''', '@', '''', V.HOST, '''') AS CHAR(81)) AS GRANTEE , CAST('def' AS CHAR(512)) AS TABLE_CATALOG , CAST(V.DATABASE_NAME AS CHAR(128)) AS TABLE_SCHEMA , CAST(V.TABLE_NAME AS CHAR(64)) AS TABLE_NAME, CAST(V.PRIVILEGE_TYPE AS CHAR(64)) AS PRIVILEGE_TYPE , CAST(V.IS_GRANTABLE AS CHAR(3)) AS IS_GRANTABLE FROM (SELECT TP.DATABASE_NAME AS DATABASE_NAME, TP.TABLE_NAME AS TABLE_NAME, U.USER_NAME AS USER_NAME, U.HOST AS HOST, CASE WHEN V1.C1 = 1 AND TP.PRIV_ALTER = 1 THEN 'ALTER' WHEN V1.C1 = 2 AND TP.PRIV_CREATE = 1 THEN 'CREATE' WHEN V1.C1 = 4 AND TP.PRIV_DELETE = 1 THEN 'DELETE' WHEN V1.C1 = 5 AND TP.PRIV_DROP = 1 THEN 'DROP' WHEN V1.C1 = 7 AND TP.PRIV_INSERT = 1 THEN 'INSERT' WHEN V1.C1 = 8 AND TP.PRIV_UPDATE = 1 THEN 'UPDATE' WHEN V1.C1 = 9 AND TP.PRIV_SELECT = 1 THEN 'SELECT' WHEN V1.C1 = 10 AND TP.PRIV_INDEX = 1 THEN 'INDEX' WHEN V1.C1 = 11 AND TP.PRIV_CREATE_VIEW = 1 THEN 'CREATE VIEW' WHEN V1.C1 = 12 AND TP.PRIV_SHOW_VIEW = 1 THEN 'SHOW VIEW' ELSE NULL END PRIVILEGE_TYPE , CASE WHEN TP.PRIV_GRANT_OPTION = 1 THEN 'YES' WHEN TP.PRIV_GRANT_OPTION = 0 THEN 'NO' END IS_GRANTABLE FROM oceanbase.__all_table_privilege TP, oceanbase.__all_user U, (SELECT 1 AS C1 UNION ALL SELECT 2 AS C1 UNION ALL SELECT 4 AS C1 UNION ALL SELECT 5 AS C1 UNION ALL SELECT 7 AS C1 UNION ALL SELECT 8 AS C1 UNION ALL SELECT 9 AS C1 UNION ALL SELECT 10 AS C1 UNION ALL SELECT 11 AS C1 UNION ALL SELECT 12 AS C1) V1, (SELECT USER_ID FROM oceanbase.__all_user WHERE TENANT_ID = 0 AND CONCAT(USER_NAME, '@', HOST) = CURRENT_USER()) CURR LEFT JOIN (SELECT USER_ID FROM oceanbase.__all_database_privilege WHERE TENANT_ID = 0 AND DATABASE_NAME = 'mysql' AND PRIV_SELECT = 1) DB ON CURR.USER_ID = DB.USER_ID WHERE TP.TENANT_ID = 0 AND TP.TENANT_ID = U.TENANT_ID AND TP.USER_ID = U.USER_ID AND (DB.USER_ID IS NOT NULL OR 512 & CURRENT_USER_PRIV() = 512 OR TP.USER_ID = CURR.USER_ID)) V WHERE V.PRIVILEGE_TYPE IS NOT NULL utf8mb4 utf8mb4_general_ci show create table tables; View Create View character_set_client collation_connection -TABLES CREATE VIEW `TABLES` AS select /*+ leading(a) no_use_nl(ts)*/ 'def' as TABLE_CATALOG, b.database_name as TABLE_SCHEMA, a.table_name as TABLE_NAME, case when (a.database_id = 201002 or a.table_type = 1) then 'SYSTEM VIEW' when a.table_type in (0, 2) then 'SYSTEM TABLE' when a.table_type = 4 then 'VIEW' else 'BASE TABLE' end as TABLE_TYPE, NULL as ENGINE, NULL as VERSION, NULL as ROW_FORMAT, cast(ts.row_cnt as unsigned) as TABLE_ROWS, cast(ts.avg_row_len as unsigned) as AVG_ROW_LENGTH, cast(ts.data_size as unsigned) as DATA_LENGTH, NULL as MAX_DATA_LENGTH, NULL as INDEX_LENGTH, NULL as DATA_FREE, NULL as AUTO_INCREMENT, a.gmt_create as CREATE_TIME, a.gmt_modified as UPDATE_TIME, NULL as CHECK_TIME, d.collation as TABLE_COLLATION, cast(NULL as unsigned) as CHECKSUM, NULL as CREATE_OPTIONS, a.comment as TABLE_COMMENT from ( select cast(0 as signed) as tenant_id, c.database_id, c.table_id, c.table_name, c.collation_type, c.table_type, usec_to_time(d.schema_version) as gmt_create, usec_to_time(c.schema_version) as gmt_modified, c.comment from oceanbase.__all_virtual_core_all_table c join oceanbase.__all_virtual_core_all_table d on c.tenant_id = d.tenant_id and d.table_name = '__all_core_table' where c.tenant_id = effective_tenant_id() union all select tenant_id, database_id, table_id, table_name, collation_type, table_type, gmt_create, gmt_modified, comment from oceanbase.__all_table) a join oceanbase.__all_database b on a.database_id = b.database_id and a.tenant_id = b.tenant_id join oceanbase.__tenant_virtual_collation d on a.collation_type = d.collation_type left join ( select tenant_id, table_id, sum(row_cnt) as row_cnt, sum(row_cnt * avg_row_len) / sum(row_cnt) as avg_row_len, sum(row_cnt * avg_row_len) as data_size from oceanbase.__all_table_stat group by tenant_id, table_id) ts on a.table_id = ts.table_id and a.tenant_id = ts.tenant_id where a.tenant_id = 0 and a.table_type in (0, 1, 2, 3, 4) and b.database_name != '__recyclebin' and b.in_recyclebin = 0 and 0 = sys_privilege_check('table_acc', effective_tenant_id(), b.database_name, a.table_name) utf8mb4 utf8mb4_general_ci +TABLES CREATE VIEW `TABLES` AS select /*+ leading(a) no_use_nl(ts)*/ cast('def' as char(512)) as TABLE_CATALOG, cast(b.database_name as char(64)) as TABLE_SCHEMA, cast(a.table_name as char(64)) as TABLE_NAME, cast(case when (a.database_id = 201002 or a.table_type = 1) then 'SYSTEM VIEW' when a.table_type in (0, 2) then 'SYSTEM TABLE' when a.table_type = 4 then 'VIEW' else 'BASE TABLE' end as char(64)) as TABLE_TYPE, cast(NULL as char(64)) as ENGINE, cast(NULL as unsigned) as VERSION, cast(NULL as char(10)) as ROW_FORMAT, cast( coalesce(ts.row_cnt,0) as unsigned) as TABLE_ROWS, cast( coalesce(ts.avg_row_len,0) as unsigned) as AVG_ROW_LENGTH, cast( coalesce(ts.data_size,0) as unsigned) as DATA_LENGTH, cast(NULL as unsigned) as MAX_DATA_LENGTH, cast(NULL as unsigned) as INDEX_LENGTH, cast(NULL as unsigned) as DATA_FREE, cast(NULL as unsigned) as AUTO_INCREMENT, cast(a.gmt_create as datetime) as CREATE_TIME, cast(a.gmt_modified as datetime) as UPDATE_TIME, cast(NULL as datetime) as CHECK_TIME, cast(d.collation as char(32)) as TABLE_COLLATION, cast(NULL as unsigned) as CHECKSUM, cast(NULL as char(255)) as CREATE_OPTIONS, cast(case when a.table_type = 4 then 'VIEW' else a.comment end as char(2048)) as TABLE_COMMENT from ( select cast(0 as signed) as tenant_id, c.database_id, c.table_id, c.table_name, c.collation_type, c.table_type, usec_to_time(d.schema_version) as gmt_create, usec_to_time(c.schema_version) as gmt_modified, c.comment from oceanbase.__all_virtual_core_all_table c join oceanbase.__all_virtual_core_all_table d on c.tenant_id = d.tenant_id and d.table_name = '__all_core_table' where c.tenant_id = effective_tenant_id() union all select tenant_id, database_id, table_id, table_name, collation_type, table_type, gmt_create, gmt_modified, comment from oceanbase.__all_table) a join oceanbase.__all_database b on a.database_id = b.database_id and a.tenant_id = b.tenant_id join oceanbase.__tenant_virtual_collation d on a.collation_type = d.collation_type left join ( select tenant_id, table_id, sum(row_cnt) as row_cnt, sum(row_cnt * avg_row_len) / sum(row_cnt) as avg_row_len, sum(row_cnt * avg_row_len) as data_size from oceanbase.__all_table_stat group by tenant_id, table_id) ts on a.table_id = ts.table_id and a.tenant_id = ts.tenant_id where a.tenant_id = 0 and a.table_type in (0, 1, 2, 3, 4) and b.database_name != '__recyclebin' and b.in_recyclebin = 0 and 0 = sys_privilege_check('table_acc', effective_tenant_id(), b.database_name, a.table_name) utf8mb4 utf8mb4_general_ci show create table user_privileges; -Table Create Table -USER_PRIVILEGES CREATE TABLE `USER_PRIVILEGES` ( - `GRANTEE` varchar(81) NOT NULL DEFAULT '', - `TABLE_CATALOG` varchar(4096) NOT NULL DEFAULT '', - `PRIVILEGE_TYPE` varchar(64) NOT NULL DEFAULT '', - `IS_GRANTABLE` varchar(3) NOT NULL DEFAULT '' -) DEFAULT CHARSET = utf8mb4 COMPRESSION = 'none' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 10 +View Create View character_set_client collation_connection +USER_PRIVILEGES CREATE VIEW `USER_PRIVILEGES` AS SELECT CAST(CONCAT('''', V.USER_NAME, '''', '@', '''', V.HOST, '''') AS CHAR(81)) AS GRANTEE , CAST('def' AS CHAR(512)) AS TABLE_CATALOG , CAST(V.PRIVILEGE_TYPE AS CHAR(64)) AS PRIVILEGE_TYPE , CAST(V.IS_GRANTABLE AS CHAR(3)) AS IS_GRANTABLE FROM (SELECT U.USER_NAME AS USER_NAME, U.HOST AS HOST, CASE WHEN V1.C1 = 1 AND U.PRIV_ALTER = 1 THEN 'ALTER' WHEN V1.C1 = 2 AND U.PRIV_CREATE = 1 THEN 'CREATE' WHEN V1.C1 = 3 AND U.PRIV_CREATE_USER = 1 THEN 'CREATE USER' WHEN V1.C1 = 4 AND U.PRIV_DELETE = 1 THEN 'DELETE' WHEN V1.C1 = 5 AND U.PRIV_DROP = 1 THEN 'DROP' WHEN V1.C1 = 7 AND U.PRIV_INSERT = 1 THEN 'INSERT' WHEN V1.C1 = 8 AND U.PRIV_UPDATE = 1 THEN 'UPDATE' WHEN V1.C1 = 9 AND U.PRIV_SELECT = 1 THEN 'SELECT' WHEN V1.C1 = 10 AND U.PRIV_INDEX = 1 THEN 'INDEX' WHEN V1.C1 = 11 AND U.PRIV_CREATE_VIEW = 1 THEN 'CREATE VIEW' WHEN V1.C1 = 12 AND U.PRIV_SHOW_VIEW = 1 THEN 'SHOW VIEW' WHEN V1.C1 = 13 AND U.PRIV_SHOW_DB = 1 THEN 'SHOW DB' WHEN V1.C1 = 14 AND U.PRIV_SUPER = 1 THEN 'SUPER' WHEN V1.C1 = 15 AND U.PRIV_PROCESS = 1 THEN 'PROCESS' WHEN V1.C1 = 17 AND U.PRIV_CREATE_SYNONYM = 1 THEN 'CREATE SYNONYM' WHEN V1.C1 = 27 AND U.PRIV_FILE = 1 THEN 'FILE' WHEN V1.C1 = 28 AND U.PRIV_ALTER_TENANT = 1 THEN 'ALTER TENANT' WHEN V1.C1 = 29 AND U.PRIV_ALTER_SYSTEM = 1 THEN 'ALTER SYSTEM' WHEN V1.C1 = 30 AND U.PRIV_CREATE_RESOURCE_POOL = 1 THEN 'CREATE RESOURCE POOL' WHEN V1.C1 = 31 AND U.PRIV_CREATE_RESOURCE_UNIT = 1 THEN 'CREATE RESOURCE UNIT' WHEN V1.C1 = 33 AND U.PRIV_REPL_SLAVE = 1 THEN 'REPLICATION SLAVE' WHEN V1.C1 = 34 AND U.PRIV_REPL_CLIENT = 1 THEN 'REPLICATION CLIENT' WHEN V1.C1 = 0 AND U.PRIV_ALTER = 0 AND U.PRIV_CREATE = 0 AND U.PRIV_CREATE_USER = 0 AND U.PRIV_DELETE = 0 AND U.PRIV_DROP = 0 AND U.PRIV_INSERT = 0 AND U.PRIV_UPDATE = 0 AND U.PRIV_SELECT = 0 AND U.PRIV_INDEX = 0 AND U.PRIV_CREATE_VIEW = 0 AND U.PRIV_SHOW_VIEW = 0 AND U.PRIV_SHOW_DB = 0 AND U.PRIV_SUPER = 0 AND U.PRIV_PROCESS = 0 AND U.PRIV_CREATE_SYNONYM = 0 AND U.PRIV_FILE = 0 AND U.PRIV_ALTER_TENANT = 0 AND U.PRIV_ALTER_SYSTEM = 0 AND U.PRIV_CREATE_RESOURCE_POOL = 0 AND U.PRIV_CREATE_RESOURCE_UNIT = 0 AND U.PRIV_REPL_SLAVE = 0 AND U.PRIV_REPL_CLIENT = 0 THEN 'USAGE' END PRIVILEGE_TYPE , CASE WHEN U.PRIV_GRANT_OPTION = 0 THEN 'NO' WHEN U.PRIV_ALTER = 0 AND U.PRIV_CREATE = 0 AND U.PRIV_CREATE_USER = 0 AND U.PRIV_DELETE = 0 AND U.PRIV_DROP = 0 AND U.PRIV_INSERT = 0 AND U.PRIV_UPDATE = 0 AND U.PRIV_SELECT = 0 AND U.PRIV_INDEX = 0 AND U.PRIV_CREATE_VIEW = 0 AND U.PRIV_SHOW_VIEW = 0 AND U.PRIV_SHOW_DB = 0 AND U.PRIV_SUPER = 0 AND U.PRIV_PROCESS = 0 AND U.PRIV_CREATE_SYNONYM = 0 AND U.PRIV_FILE = 0 AND U.PRIV_ALTER_TENANT = 0 AND U.PRIV_ALTER_SYSTEM = 0 AND U.PRIV_CREATE_RESOURCE_POOL = 0 AND U.PRIV_CREATE_RESOURCE_UNIT = 0 AND U.PRIV_REPL_SLAVE = 0 AND U.PRIV_REPL_CLIENT = 0 THEN 'NO' WHEN U.PRIV_GRANT_OPTION = 1 THEN 'YES' END IS_GRANTABLE FROM oceanbase.__all_user U, (SELECT 0 AS C1 UNION ALL SELECT 1 AS C1 UNION ALL SELECT 2 AS C1 UNION ALL SELECT 3 AS C1 UNION ALL SELECT 4 AS C1 UNION ALL SELECT 5 AS C1 UNION ALL SELECT 7 AS C1 UNION ALL SELECT 8 AS C1 UNION ALL SELECT 9 AS C1 UNION ALL SELECT 10 AS C1 UNION ALL SELECT 11 AS C1 UNION ALL SELECT 12 AS C1 UNION ALL SELECT 13 AS C1 UNION ALL SELECT 14 AS C1 UNION ALL SELECT 15 AS C1 UNION ALL SELECT 17 AS C1 UNION ALL SELECT 27 AS C1 UNION ALL SELECT 28 AS C1 UNION ALL SELECT 29 AS C1 UNION ALL SELECT 30 AS C1 UNION ALL SELECT 31 AS C1 UNION ALL SELECT 33 AS C1 UNION ALL SELECT 34 AS C1) V1, (SELECT USER_ID FROM oceanbase.__all_user WHERE TENANT_ID = 0 AND CONCAT(USER_NAME, '@', HOST) = CURRENT_USER()) CURR LEFT JOIN (SELECT USER_ID FROM oceanbase.__all_database_privilege WHERE TENANT_ID = 0 AND DATABASE_NAME = 'mysql' AND PRIV_SELECT = 1) DB ON CURR.USER_ID = DB.USER_ID WHERE U.TENANT_ID = 0 AND (DB.USER_ID IS NOT NULL OR 512 & CURRENT_USER_PRIV() = 512 OR U.USER_ID = CURR.USER_ID)) V WHERE V.PRIVILEGE_TYPE IS NOT NULL utf8mb4 utf8mb4_general_ci show create table views; View Create View character_set_client collation_connection -VIEWS CREATE VIEW `VIEWS` AS select 'def' AS TABLE_CATALOG, d.database_name as TABLE_SCHEMA, t.table_name as TABLE_NAME, t.view_definition as VIEW_DEFINITION, case t.view_check_option when 1 then 'LOCAL' when 2 then 'CASCADED' else 'NONE' end as CHECK_OPTION, case t.view_is_updatable when 1 then 'YES' else 'NO' end as IS_UPDATABLE, case t.define_user_id when -1 then 'NONE' else concat(u.user_name, '@', u.host) end as DEFINER, 'NONE' AS SECURITY_TYPE, case t.collation_type when 45 then 'utf8mb4' else 'NONE' end AS CHARACTER_SET_CLIENT, case t.collation_type when 45 then 'utf8mb4_general_ci' else 'NONE' end AS COLLATION_CONNECTION from oceanbase.__all_table as t join oceanbase.__all_database as d on t.tenant_id = d.tenant_id and t.database_id = d.database_id left join oceanbase.__all_user as u on t.tenant_id = u.tenant_id and t.define_user_id = u.user_id and t.define_user_id != -1 where t.tenant_id = 0 and t.table_type in (1, 4) and d.in_recyclebin = 0 and d.database_name != '__recyclebin' and d.database_name != 'information_schema' and d.database_name != 'oceanbase' and 0 = sys_privilege_check('table_acc', effective_tenant_id(), d.database_name, t.table_name) utf8mb4 utf8mb4_general_ci +VIEWS CREATE VIEW `VIEWS` AS select cast('def' as CHAR(64)) AS TABLE_CATALOG, d.database_name as TABLE_SCHEMA, t.table_name as TABLE_NAME, t.view_definition as VIEW_DEFINITION, case t.view_check_option when 1 then 'LOCAL' when 2 then 'CASCADED' else 'NONE' end as CHECK_OPTION, case t.view_is_updatable when 1 then 'YES' else 'NO' end as IS_UPDATABLE, cast((case t.define_user_id when -1 then 'NONE' else concat(u.user_name, '@', u.host) end) as CHAR(288)) as DEFINER, cast('NONE' as CHAR(7)) AS SECURITY_TYPE, cast((case t.collation_type when 45 then 'utf8mb4' else 'NONE' end) as CHAR(64)) AS CHARACTER_SET_CLIENT, cast((case t.collation_type when 45 then 'utf8mb4_general_ci' else 'NONE' end) as CHAR(64)) AS COLLATION_CONNECTION from oceanbase.__all_table as t join oceanbase.__all_database as d on t.tenant_id = d.tenant_id and t.database_id = d.database_id left join oceanbase.__all_user as u on t.tenant_id = u.tenant_id and t.define_user_id = u.user_id and t.define_user_id != -1 where t.tenant_id = 0 and t.table_type in (1, 4) and d.in_recyclebin = 0 and d.database_name != '__recyclebin' and d.database_name != 'information_schema' and d.database_name != 'oceanbase' and 0 = sys_privilege_check('table_acc', effective_tenant_id(), d.database_name, t.table_name) utf8mb4 utf8mb4_general_ci diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/inner_table_overall.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/inner_table_overall.result index 32d11143fb..036cb1aec2 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/inner_table_overall.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/inner_table_overall.result @@ -306,12 +306,7 @@ select 0xffffffffff & table_id, table_name, table_type, database_id, part_num fr 11115 __all_virtual_io_quota 2 201001 1 11116 __all_virtual_server_compaction_event_history 2 201001 1 12001 SESSION_VARIABLES 2 201002 1 -12002 TABLE_PRIVILEGES 2 201002 1 -12003 USER_PRIVILEGES 2 201002 1 -12004 SCHEMA_PRIVILEGES 2 201002 1 -12005 TABLE_CONSTRAINTS 2 201002 1 12006 GLOBAL_STATUS 2 201002 1 -12007 PARTITIONS 2 201002 1 12008 SESSION_STATUS 2 201002 1 12009 user 2 201003 1 12010 db 2 201003 1 @@ -322,7 +317,6 @@ select 0xffffffffff & table_id, table_name, table_type, database_id, part_num fr 12033 __all_virtual_tenant_memstore_allocator_info 2 201001 1 12034 __all_virtual_table_mgr 2 201001 1 12036 __all_virtual_freeze_info 2 201001 1 -12037 PARAMETERS 2 201002 1 12038 __all_virtual_bad_block_table 2 201001 1 12039 __all_virtual_px_worker_stat 2 201001 1 12055 __all_virtual_auto_increment 2 201001 1 @@ -425,7 +419,6 @@ select 0xffffffffff & table_id, table_name, table_type, database_id, part_num fr 12167 __all_virtual_backup_info 2 201001 1 12175 __all_virtual_error 2 201001 1 12176 __all_virtual_id_service 2 201001 1 -12177 REFERENTIAL_CONSTRAINTS 2 201002 1 12182 __all_virtual_object_type 2 201001 1 12185 __all_virtual_sql_plan_monitor 2 201001 1 12186 __all_virtual_sql_monitor_statname 2 201001 1 @@ -452,7 +445,6 @@ select 0xffffffffff & table_id, table_name, table_type, database_id, part_num fr 12218 __all_virtual_column_stat 2 201001 1 12219 __all_virtual_histogram_stat 2 201001 1 12220 __all_virtual_tenant_memory_info 2 201001 1 -12221 TRIGGERS 2 201002 1 12222 __tenant_virtual_show_create_trigger 2 201001 1 12223 __all_virtual_px_target_monitor 2 201001 1 12224 __all_virtual_monitor_modified 2 201001 1 @@ -466,7 +458,6 @@ select 0xffffffffff & table_id, table_name, table_type, database_id, part_num fr 12232 __all_virtual_log_archive_history 2 201001 1 12233 __all_virtual_log_archive_piece_files 2 201001 1 12234 __all_virtual_ls_log_archive_progress 2 201001 1 -12235 CHECK_CONSTRAINTS 2 201002 1 12236 __all_virtual_backup_storage_info 2 201001 1 12237 __all_virtual_ls_status 2 201001 1 12238 __all_virtual_ls 2 201001 1 @@ -828,6 +819,15 @@ select 0xffffffffff & table_id, table_name, table_type, database_id, part_num fr 21339 CDB_OB_DATABASE_PRIVILEGE 1 201001 1 21340 DBA_OB_USER_DEFINED_RULES 1 201001 1 21345 DBA_OB_CLUSTER_EVENT_HISTORY 1 201001 1 +21346 PARAMETERS 1 201002 1 +21347 TABLE_PRIVILEGES 1 201002 1 +21348 USER_PRIVILEGES 1 201002 1 +21349 SCHEMA_PRIVILEGES 1 201002 1 +21350 CHECK_CONSTRAINTS 1 201002 1 +21351 REFERENTIAL_CONSTRAINTS 1 201002 1 +21352 TABLE_CONSTRAINTS 1 201002 1 +21355 TRIGGERS 1 201002 1 +21356 PARTITIONS 1 201002 1 check sys table count and table_id range success check count and table_id range for virtual table success select * from information_schema.CHARACTER_SETS limit 1; diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/partitions.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/partitions.result index 7b50cafea3..451514bc33 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/partitions.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/partitions.result @@ -1,10 +1,10 @@ drop table if exists pt1; create table pt1 (c1 int primary key, c2 int) partition by key(c1) partitions 3; select * from information_schema.partitions where table_name = 'pt1'; -TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME -def test pt1 p0 NULL 1 NULL KEY NULL c1 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL default NULL -def test pt1 p1 NULL 2 NULL KEY NULL c1 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL default NULL -def test pt1 p2 NULL 3 NULL KEY NULL c1 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL default NULL +TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION SUBPARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME +def test pt1 p0 NULL 1 NULL KEY NULL c1 NULL NULL NULL NULL NULL NULL NULL NULL NULL YYYY-MM-DD hh:mm:ss NULL NULL NULL default NULL +def test pt1 p1 NULL 2 NULL KEY NULL c1 NULL NULL NULL NULL NULL NULL NULL NULL NULL YYYY-MM-DD hh:mm:ss NULL NULL NULL default NULL +def test pt1 p2 NULL 3 NULL KEY NULL c1 NULL NULL NULL NULL NULL NULL NULL NULL NULL YYYY-MM-DD hh:mm:ss NULL NULL NULL default NULL select table_schema, table_name from information_schema.partitions where table_name = 'pt1'; table_schema table_name test pt1 @@ -12,29 +12,30 @@ test pt1 test pt1 desc information_schema.partitions; Field Type Null Key Default Extra -TABLE_CATALOG varchar(4096) NO +TABLE_CATALOG text NO TABLE_SCHEMA varchar(128) NO TABLE_NAME varchar(256) NO -PARTITION_NAME varchar(64) YES NULL -SUBPARTITION_NAME varchar(64) YES NULL -PARTITION_ORDINAL_POSITION bigint(20) unsigned YES NULL -SUBPARTITION_ORDINAL_POSITION bigint(20) unsigned YES NULL -PARTITION_METHOD varchar(18) YES NULL -SUBPARTITION_METHOD varchar(18) YES NULL -PARTITION_EXPRESSION varchar(4096) YES NULL -SUBPARTITION_EXPRESSION varchar(4096) YES NULL -PARTITION_DESCRIPTION varchar(1024) YES NULL -TABLE_ROWS bigint(20) unsigned NO 0 -AVG_ROW_LENGTH bigint(20) unsigned NO 0 -DATA_LENGTH bigint(20) unsigned NO 0 -MAX_DATA_LENGTH bigint(20) unsigned YES NULL -INDEX_LENGTH bigint(20) unsigned NO 0 -DATA_FREE bigint(20) unsigned NO 0 +PARTITION_NAME varchar(64) NO +SUBPARTITION_NAME varchar(64) NO +PARTITION_ORDINAL_POSITION bigint(20) unsigned NO +SUBPARTITION_ORDINAL_POSITION bigint(20) unsigned NO +PARTITION_METHOD varchar(13) NO +SUBPARTITION_METHOD varchar(13) NO +PARTITION_EXPRESSION text NO +SUBPARTITION_EXPRESSION text NO +PARTITION_DESCRIPTION text NO +SUBPARTITION_DESCRIPTION text NO +TABLE_ROWS bigint(20) unsigned NO NULL +AVG_ROW_LENGTH bigint(21) unsigned NO NULL +DATA_LENGTH bigint(0) unsigned NO +MAX_DATA_LENGTH bigint(0) unsigned NO +INDEX_LENGTH bigint(0) unsigned NO +DATA_FREE bigint(0) unsigned NO CREATE_TIME timestamp(6) YES NULL -UPDATE_TIME timestamp(6) YES NULL -CHECK_TIME timestamp(6) YES NULL -CHECKSUM bigint(20) YES NULL -PARTITION_COMMENT varchar(1024) NO -NODEGROUP varchar(12) NO -TABLESPACE_NAME varchar(128) YES NULL +UPDATE_TIME datetime NO +CHECK_TIME datetime NO +CHECKSUM bigint(0) NO +PARTITION_COMMENT text NO +NODEGROUP varchar(256) NO +TABLESPACE_NAME varchar(268) NO NULL drop table pt1; diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/table_constraints.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/table_constraints.result index 89fd719bd9..2e82bc87a0 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/table_constraints.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/table_constraints.result @@ -13,7 +13,7 @@ select * from information_schema.table_constraints where CONSTRAINT_SCHEMA = 'xi | def | xiaofeng_db | PRIMARY | xiaofeng_db | t1 | PRIMARY KEY | YES | | def | xiaofeng_db | c1 | xiaofeng_db | t2 | UNIQUE | YES | | def | xiaofeng_db | test_for_table_constraints_check_name | xiaofeng_db | t2 | CHECK | YES | -| def | xiaofeng_db | test_for_table_constraints_fk_name_2 | xiaofeng_db | t2 | FOREIGN KEY | YES | | def | xiaofeng_db | test_for_table_constraints_fk_name_1 | xiaofeng_db | t2 | FOREIGN KEY | YES | +| def | xiaofeng_db | test_for_table_constraints_fk_name_2 | xiaofeng_db | t2 | FOREIGN KEY | YES | +--------------------+-------------------+---------------------------------------+--------------+------------+-----------------+----------+ drop database xiaofeng_db; diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/table_privileges.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/table_privileges.result index 950957de40..fc0c23e241 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/table_privileges.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/table_privileges.result @@ -3,19 +3,12 @@ create database test_user_priv_db; use test_user_priv_db; create table zhan_t1 (a int primary key, b int); show create table information_schema.table_privileges; -Table Create Table -TABLE_PRIVILEGES CREATE TABLE `TABLE_PRIVILEGES` ( - `GRANTEE` varchar(81) NOT NULL DEFAULT '', - `TABLE_CATALOG` varchar(4096) NOT NULL DEFAULT '', - `TABLE_SCHEMA` varchar(128) NOT NULL DEFAULT '', - `TABLE_NAME` varchar(64) NOT NULL DEFAULT '', - `PRIVILEGE_TYPE` varchar(64) NOT NULL DEFAULT '', - `IS_GRANTABLE` varchar(3) NOT NULL DEFAULT '' -) DEFAULT CHARSET = utf8mb4 COMPRESSION = 'none' REPLICA_NUM = NUM BLOCK_SIZE = SIZE USE_BLOOM_FILTER = FALSE TABLET_SIZE = SIZE PCTFREE = 10 +View Create View character_set_client collation_connection +TABLE_PRIVILEGES CREATE VIEW `TABLE_PRIVILEGES` AS SELECT CAST(CONCAT('''', V.USER_NAME, '''', '@', '''', V.HOST, '''') AS CHAR(81)) AS GRANTEE , CAST('def' AS CHAR(512)) AS TABLE_CATALOG , CAST(V.DATABASE_NAME AS CHAR(128)) AS TABLE_SCHEMA , CAST(V.TABLE_NAME AS CHAR(64)) AS TABLE_NAME, CAST(V.PRIVILEGE_TYPE AS CHAR(64)) AS PRIVILEGE_TYPE , CAST(V.IS_GRANTABLE AS CHAR(3)) AS IS_GRANTABLE FROM (SELECT TP.DATABASE_NAME AS DATABASE_NAME, TP.TABLE_NAME AS TABLE_NAME, U.USER_NAME AS USER_NAME, U.HOST AS HOST, CASE WHEN V1.C1 = 1 AND TP.PRIV_ALTER = 1 THEN 'ALTER' WHEN V1.C1 = 2 AND TP.PRIV_CREATE = 1 THEN 'CREATE' WHEN V1.C1 = 4 AND TP.PRIV_DELETE = 1 THEN 'DELETE' WHEN V1.C1 = 5 AND TP.PRIV_DROP = 1 THEN 'DROP' WHEN V1.C1 = 7 AND TP.PRIV_INSERT = 1 THEN 'INSERT' WHEN V1.C1 = 8 AND TP.PRIV_UPDATE = 1 THEN 'UPDATE' WHEN V1.C1 = 9 AND TP.PRIV_SELECT = 1 THEN 'SELECT' WHEN V1.C1 = 10 AND TP.PRIV_INDEX = 1 THEN 'INDEX' WHEN V1.C1 = 11 AND TP.PRIV_CREATE_VIEW = 1 THEN 'CREATE VIEW' WHEN V1.C1 = 12 AND TP.PRIV_SHOW_VIEW = 1 THEN 'SHOW VIEW' ELSE NULL END PRIVILEGE_TYPE , CASE WHEN TP.PRIV_GRANT_OPTION = 1 THEN 'YES' WHEN TP.PRIV_GRANT_OPTION = 0 THEN 'NO' END IS_GRANTABLE FROM oceanbase.__all_table_privilege TP, oceanbase.__all_user U, (SELECT 1 AS C1 UNION ALL SELECT 2 AS C1 UNION ALL SELECT 4 AS C1 UNION ALL SELECT 5 AS C1 UNION ALL SELECT 7 AS C1 UNION ALL SELECT 8 AS C1 UNION ALL SELECT 9 AS C1 UNION ALL SELECT 10 AS C1 UNION ALL SELECT 11 AS C1 UNION ALL SELECT 12 AS C1) V1, (SELECT USER_ID FROM oceanbase.__all_user WHERE TENANT_ID = 0 AND CONCAT(USER_NAME, '@', HOST) = CURRENT_USER()) CURR LEFT JOIN (SELECT USER_ID FROM oceanbase.__all_database_privilege WHERE TENANT_ID = 0 AND DATABASE_NAME = 'mysql' AND PRIV_SELECT = 1) DB ON CURR.USER_ID = DB.USER_ID WHERE TP.TENANT_ID = 0 AND TP.TENANT_ID = U.TENANT_ID AND TP.USER_ID = U.USER_ID AND (DB.USER_ID IS NOT NULL OR 512 & CURRENT_USER_PRIV() = 512 OR TP.USER_ID = CURR.USER_ID)) V WHERE V.PRIVILEGE_TYPE IS NOT NULL utf8mb4 utf8mb4_general_ci desc information_schema.table_privileges; Field Type Null Key Default Extra GRANTEE varchar(81) NO -TABLE_CATALOG varchar(4096) NO +TABLE_CATALOG varchar(512) NO TABLE_SCHEMA varchar(128) NO TABLE_NAME varchar(64) NO PRIVILEGE_TYPE varchar(64) NO diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/user_privileges.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/user_privileges.result index 4435b79fa8..4f499074e0 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/user_privileges.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/user_privileges.result @@ -1,15 +1,10 @@ show create table information_schema.user_privileges; -Table Create Table -USER_PRIVILEGES CREATE TABLE `USER_PRIVILEGES` ( - `GRANTEE` varchar(81) NOT NULL DEFAULT '', - `TABLE_CATALOG` varchar(4096) NOT NULL DEFAULT '', - `PRIVILEGE_TYPE` varchar(64) NOT NULL DEFAULT '', - `IS_GRANTABLE` varchar(3) NOT NULL DEFAULT '' -) DEFAULT CHARSET = utf8mb4 COMPRESSION = 'none' REPLICA_NUM = NUM BLOCK_SIZE = SIZE USE_BLOOM_FILTER = FALSE TABLET_SIZE = SIZE PCTFREE = 10 +View Create View character_set_client collation_connection +USER_PRIVILEGES CREATE VIEW `USER_PRIVILEGES` AS SELECT CAST(CONCAT('''', V.USER_NAME, '''', '@', '''', V.HOST, '''') AS CHAR(81)) AS GRANTEE , CAST('def' AS CHAR(512)) AS TABLE_CATALOG , CAST(V.PRIVILEGE_TYPE AS CHAR(64)) AS PRIVILEGE_TYPE , CAST(V.IS_GRANTABLE AS CHAR(3)) AS IS_GRANTABLE FROM (SELECT U.USER_NAME AS USER_NAME, U.HOST AS HOST, CASE WHEN V1.C1 = 1 AND U.PRIV_ALTER = 1 THEN 'ALTER' WHEN V1.C1 = 2 AND U.PRIV_CREATE = 1 THEN 'CREATE' WHEN V1.C1 = 3 AND U.PRIV_CREATE_USER = 1 THEN 'CREATE USER' WHEN V1.C1 = 4 AND U.PRIV_DELETE = 1 THEN 'DELETE' WHEN V1.C1 = 5 AND U.PRIV_DROP = 1 THEN 'DROP' WHEN V1.C1 = 7 AND U.PRIV_INSERT = 1 THEN 'INSERT' WHEN V1.C1 = 8 AND U.PRIV_UPDATE = 1 THEN 'UPDATE' WHEN V1.C1 = 9 AND U.PRIV_SELECT = 1 THEN 'SELECT' WHEN V1.C1 = 10 AND U.PRIV_INDEX = 1 THEN 'INDEX' WHEN V1.C1 = 11 AND U.PRIV_CREATE_VIEW = 1 THEN 'CREATE VIEW' WHEN V1.C1 = 12 AND U.PRIV_SHOW_VIEW = 1 THEN 'SHOW VIEW' WHEN V1.C1 = 13 AND U.PRIV_SHOW_DB = 1 THEN 'SHOW DB' WHEN V1.C1 = 14 AND U.PRIV_SUPER = 1 THEN 'SUPER' WHEN V1.C1 = 15 AND U.PRIV_PROCESS = 1 THEN 'PROCESS' WHEN V1.C1 = 17 AND U.PRIV_CREATE_SYNONYM = 1 THEN 'CREATE SYNONYM' WHEN V1.C1 = 27 AND U.PRIV_FILE = 1 THEN 'FILE' WHEN V1.C1 = 28 AND U.PRIV_ALTER_TENANT = 1 THEN 'ALTER TENANT' WHEN V1.C1 = 29 AND U.PRIV_ALTER_SYSTEM = 1 THEN 'ALTER SYSTEM' WHEN V1.C1 = 30 AND U.PRIV_CREATE_RESOURCE_POOL = 1 THEN 'CREATE RESOURCE POOL' WHEN V1.C1 = 31 AND U.PRIV_CREATE_RESOURCE_UNIT = 1 THEN 'CREATE RESOURCE UNIT' WHEN V1.C1 = 33 AND U.PRIV_REPL_SLAVE = 1 THEN 'REPLICATION SLAVE' WHEN V1.C1 = 34 AND U.PRIV_REPL_CLIENT = 1 THEN 'REPLICATION CLIENT' WHEN V1.C1 = 0 AND U.PRIV_ALTER = 0 AND U.PRIV_CREATE = 0 AND U.PRIV_CREATE_USER = 0 AND U.PRIV_DELETE = 0 AND U.PRIV_DROP = 0 AND U.PRIV_INSERT = 0 AND U.PRIV_UPDATE = 0 AND U.PRIV_SELECT = 0 AND U.PRIV_INDEX = 0 AND U.PRIV_CREATE_VIEW = 0 AND U.PRIV_SHOW_VIEW = 0 AND U.PRIV_SHOW_DB = 0 AND U.PRIV_SUPER = 0 AND U.PRIV_PROCESS = 0 AND U.PRIV_CREATE_SYNONYM = 0 AND U.PRIV_FILE = 0 AND U.PRIV_ALTER_TENANT = 0 AND U.PRIV_ALTER_SYSTEM = 0 AND U.PRIV_CREATE_RESOURCE_POOL = 0 AND U.PRIV_CREATE_RESOURCE_UNIT = 0 AND U.PRIV_REPL_SLAVE = 0 AND U.PRIV_REPL_CLIENT = 0 THEN 'USAGE' END PRIVILEGE_TYPE , CASE WHEN U.PRIV_GRANT_OPTION = 0 THEN 'NO' WHEN U.PRIV_ALTER = 0 AND U.PRIV_CREATE = 0 AND U.PRIV_CREATE_USER = 0 AND U.PRIV_DELETE = 0 AND U.PRIV_DROP = 0 AND U.PRIV_INSERT = 0 AND U.PRIV_UPDATE = 0 AND U.PRIV_SELECT = 0 AND U.PRIV_INDEX = 0 AND U.PRIV_CREATE_VIEW = 0 AND U.PRIV_SHOW_VIEW = 0 AND U.PRIV_SHOW_DB = 0 AND U.PRIV_SUPER = 0 AND U.PRIV_PROCESS = 0 AND U.PRIV_CREATE_SYNONYM = 0 AND U.PRIV_FILE = 0 AND U.PRIV_ALTER_TENANT = 0 AND U.PRIV_ALTER_SYSTEM = 0 AND U.PRIV_CREATE_RESOURCE_POOL = 0 AND U.PRIV_CREATE_RESOURCE_UNIT = 0 AND U.PRIV_REPL_SLAVE = 0 AND U.PRIV_REPL_CLIENT = 0 THEN 'NO' WHEN U.PRIV_GRANT_OPTION = 1 THEN 'YES' END IS_GRANTABLE FROM oceanbase.__all_user U, (SELECT 0 AS C1 UNION ALL SELECT 1 AS C1 UNION ALL SELECT 2 AS C1 UNION ALL SELECT 3 AS C1 UNION ALL SELECT 4 AS C1 UNION ALL SELECT 5 AS C1 UNION ALL SELECT 7 AS C1 UNION ALL SELECT 8 AS C1 UNION ALL SELECT 9 AS C1 UNION ALL SELECT 10 AS C1 UNION ALL SELECT 11 AS C1 UNION ALL SELECT 12 AS C1 UNION ALL SELECT 13 AS C1 UNION ALL SELECT 14 AS C1 UNION ALL SELECT 15 AS C1 UNION ALL SELECT 17 AS C1 UNION ALL SELECT 27 AS C1 UNION ALL SELECT 28 AS C1 UNION ALL SELECT 29 AS C1 UNION ALL SELECT 30 AS C1 UNION ALL SELECT 31 AS C1 UNION ALL SELECT 33 AS C1 UNION ALL SELECT 34 AS C1) V1, (SELECT USER_ID FROM oceanbase.__all_user WHERE TENANT_ID = 0 AND CONCAT(USER_NAME, '@', HOST) = CURRENT_USER()) CURR LEFT JOIN (SELECT USER_ID FROM oceanbase.__all_database_privilege WHERE TENANT_ID = 0 AND DATABASE_NAME = 'mysql' AND PRIV_SELECT = 1) DB ON CURR.USER_ID = DB.USER_ID WHERE U.TENANT_ID = 0 AND (DB.USER_ID IS NOT NULL OR 512 & CURRENT_USER_PRIV() = 512 OR U.USER_ID = CURR.USER_ID)) V WHERE V.PRIVILEGE_TYPE IS NOT NULL utf8mb4 utf8mb4_general_ci desc information_schema.user_privileges; Field Type Null Key Default Extra GRANTEE varchar(81) NO -TABLE_CATALOG varchar(4096) NO +TABLE_CATALOG varchar(512) NO PRIVILEGE_TYPE varchar(64) NO IS_GRANTABLE varchar(3) NO select * from information_schema.user_privileges where grantee like '%tmp_user_user_privileges%'; diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/views.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/views.result index 8952b1bf4f..8e2b64c6ce 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/views.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/views.result @@ -13,16 +13,16 @@ mysql time_zone_name mysql time_zone show create view views; View Create View character_set_client collation_connection -VIEWS CREATE VIEW `VIEWS` AS select 'def' AS TABLE_CATALOG, d.database_name as TABLE_SCHEMA, t.table_name as TABLE_NAME, t.view_definition as VIEW_DEFINITION, case t.view_check_option when 1 then 'LOCAL' when 2 then 'CASCADED' else 'NONE' end as CHECK_OPTION, case t.view_is_updatable when 1 then 'YES' else 'NO' end as IS_UPDATABLE, case t.define_user_id when -1 then 'NONE' else concat(u.user_name, '@', u.host) end as DEFINER, 'NONE' AS SECURITY_TYPE, case t.collation_type when 45 then 'utf8mb4' else 'NONE' end AS CHARACTER_SET_CLIENT, case t.collation_type when 45 then 'utf8mb4_general_ci' else 'NONE' end AS COLLATION_CONNECTION from oceanbase.__all_table as t join oceanbase.__all_database as d on t.tenant_id = d.tenant_id and t.database_id = d.database_id left join oceanbase.__all_user as u on t.tenant_id = u.tenant_id and t.define_user_id = u.user_id and t.define_user_id != -1 where t.tenant_id = 0 and t.table_type in (1, 4) and d.in_recyclebin = 0 and d.database_name != '__recyclebin' and d.database_name != 'information_schema' and d.database_name != 'oceanbase' and 0 = sys_privilege_check('table_acc', effective_tenant_id(), d.database_name, t.table_name) utf8mb4 utf8mb4_general_ci +VIEWS CREATE VIEW `VIEWS` AS select cast('def' as CHAR(64)) AS TABLE_CATALOG, d.database_name as TABLE_SCHEMA, t.table_name as TABLE_NAME, t.view_definition as VIEW_DEFINITION, case t.view_check_option when 1 then 'LOCAL' when 2 then 'CASCADED' else 'NONE' end as CHECK_OPTION, case t.view_is_updatable when 1 then 'YES' else 'NO' end as IS_UPDATABLE, cast((case t.define_user_id when -1 then 'NONE' else concat(u.user_name, '@', u.host) end) as CHAR(288)) as DEFINER, cast('NONE' as CHAR(7)) AS SECURITY_TYPE, cast((case t.collation_type when 45 then 'utf8mb4' else 'NONE' end) as CHAR(64)) AS CHARACTER_SET_CLIENT, cast((case t.collation_type when 45 then 'utf8mb4_general_ci' else 'NONE' end) as CHAR(64)) AS COLLATION_CONNECTION from oceanbase.__all_table as t join oceanbase.__all_database as d on t.tenant_id = d.tenant_id and t.database_id = d.database_id left join oceanbase.__all_user as u on t.tenant_id = u.tenant_id and t.define_user_id = u.user_id and t.define_user_id != -1 where t.tenant_id = 0 and t.table_type in (1, 4) and d.in_recyclebin = 0 and d.database_name != '__recyclebin' and d.database_name != 'information_schema' and d.database_name != 'oceanbase' and 0 = sys_privilege_check('table_acc', effective_tenant_id(), d.database_name, t.table_name) utf8mb4 utf8mb4_general_ci desc views; Field Type Null Key Default Extra -TABLE_CATALOG varchar(3) NO +TABLE_CATALOG varchar(64) NO TABLE_SCHEMA varchar(128) NO TABLE_NAME varchar(256) NO VIEW_DEFINITION longtext NO NULL CHECK_OPTION varchar(8) NO NULL IS_UPDATABLE varchar(3) NO NULL -DEFINER varchar(257) NO -SECURITY_TYPE varchar(4) NO -CHARACTER_SET_CLIENT varchar(7) NO NULL -COLLATION_CONNECTION varchar(18) NO NULL +DEFINER varchar(288) NO +SECURITY_TYPE varchar(7) NO +CHARACTER_SET_CLIENT varchar(64) NO +COLLATION_CONNECTION varchar(64) NO diff --git a/tools/deploy/mysql_test/test_suite/inner_table/t/partitions.test b/tools/deploy/mysql_test/test_suite/inner_table/t/partitions.test index 68289860fe..f14b4ce5cb 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/t/partitions.test +++ b/tools/deploy/mysql_test/test_suite/inner_table/t/partitions.test @@ -9,6 +9,7 @@ set @@session.explicit_defaults_for_timestamp=off; drop table if exists pt1; --enable_warnings create table pt1 (c1 int primary key, c2 int) partition by key(c1) partitions 3; +--replace_column 20 "YYYY-MM-DD hh:mm:ss" select * from information_schema.partitions where table_name = 'pt1'; select table_schema, table_name from information_schema.partitions where table_name = 'pt1'; desc information_schema.partitions; diff --git a/tools/deploy/mysql_test/test_suite/meta_info/r/mysql/meta_build_in_func_test.result b/tools/deploy/mysql_test/test_suite/meta_info/r/mysql/meta_build_in_func_test.result index 53ed1567a1..625dbc43fc 100644 --- a/tools/deploy/mysql_test/test_suite/meta_info/r/mysql/meta_build_in_func_test.result +++ b/tools/deploy/mysql_test/test_suite/meta_info/r/mysql/meta_build_in_func_test.result @@ -264,7 +264,7 @@ def substr(v,1) 253 512 0 Y 0 0 45 ##cast test select substr(cast(date_c as char(1024)), 0) from build_in_func_test_table; Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr -def substr(cast(date_c as char(1024)), 0) 253 4096 0 Y 0 0 45 +def substr(cast(date_c as char(1024)), 0) 251 536870908 0 Y 16 0 45 +---------------------------------------+ | substr(cast(date_c as char(1024)), 0) | +---------------------------------------+ @@ -272,7 +272,7 @@ def substr(cast(date_c as char(1024)), 0) 253 4096 0 Y 0 0 45 +---------------------------------------+ select substr(cast(date_c as char(1024)), 10) from build_in_func_test_table; Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr -def substr(cast(date_c as char(1024)), 10) 253 4060 17 Y 0 0 45 +def substr(cast(date_c as char(1024)), 10) 251 536870908 17 Y 16 0 45 +----------------------------------------+ | substr(cast(date_c as char(1024)), 10) | +----------------------------------------+ @@ -280,7 +280,7 @@ def substr(cast(date_c as char(1024)), 10) 253 4060 17 Y 0 0 45 +----------------------------------------+ select substr(cast(1024 as char(1024)), 1, 2) from build_in_func_test_table; Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr -def substr(cast(1024 as char(1024)), 1, 2) 253 8 2 Y 0 0 45 +def substr(cast(1024 as char(1024)), 1, 2) 251 536870908 2 Y 16 0 45 +----------------------------------------+ | substr(cast(1024 as char(1024)), 1, 2) | +----------------------------------------+ @@ -288,7 +288,7 @@ def substr(cast(1024 as char(1024)), 1, 2) 253 8 2 Y 0 0 45 +----------------------------------------+ select substr(cast(date_c as char(1024)) from 10) from build_in_func_test_table; Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr -def substr(cast(date_c as char(1024)) from 10) 253 4060 17 Y 0 0 45 +def substr(cast(date_c as char(1024)) from 10) 251 536870908 17 Y 16 0 45 +--------------------------------------------+ | substr(cast(date_c as char(1024)) from 10) | +--------------------------------------------+ @@ -296,7 +296,7 @@ def substr(cast(date_c as char(1024)) from 10) 253 4060 17 Y 0 0 45 +--------------------------------------------+ select substr(cast(date_c as char(1024)) from 10 for 10) from build_in_func_test_table; Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr -def substr(cast(date_c as char(1024)) from 10 for 10) 253 40 10 Y 0 0 45 +def substr(cast(date_c as char(1024)) from 10 for 10) 251 536870908 10 Y 16 0 45 +---------------------------------------------------+ | substr(cast(date_c as char(1024)) from 10 for 10) | +---------------------------------------------------+ @@ -572,7 +572,7 @@ def trim(1) 253 4 1 Y 0 0 45 +---------+ select trim(cast(111 as char(1024))) from build_in_func_test_table; Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr -def trim(cast(111 as char(1024))) 253 4096 3 Y 0 0 45 +def trim(cast(111 as char(1024))) 252 65532 3 Y 16 0 45 +-------------------------------+ | trim(cast(111 as char(1024))) | +-------------------------------+ @@ -580,7 +580,7 @@ def trim(cast(111 as char(1024))) 253 4096 3 Y 0 0 45 +-------------------------------+ select trim(LEADING '1' from cast(111 as char(1024))) from build_in_func_test_table; Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr -def trim(LEADING '1' from cast(111 as char(1024))) 253 4096 0 Y 0 0 45 +def trim(LEADING '1' from cast(111 as char(1024))) 252 65532 0 Y 16 0 45 +------------------------------------------------+ | trim(LEADING '1' from cast(111 as char(1024))) | +------------------------------------------------+ @@ -588,7 +588,7 @@ def trim(LEADING '1' from cast(111 as char(1024))) 253 4096 0 Y 0 0 45 +------------------------------------------------+ select trim(TRAILING '1' from cast(111 as char(1024))) from build_in_func_test_table; Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr -def trim(TRAILING '1' from cast(111 as char(1024))) 253 4096 0 Y 0 0 45 +def trim(TRAILING '1' from cast(111 as char(1024))) 252 65532 0 Y 16 0 45 +-------------------------------------------------+ | trim(TRAILING '1' from cast(111 as char(1024))) | +-------------------------------------------------+ @@ -2770,7 +2770,7 @@ def unhex('123') 253 3 2 Y 128 0 63 +--------------+ select unhex(cast(repeat('123',5) as char(1024))); Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr -def unhex(cast(repeat('123',5) as char(1024))) 253 512 8 Y 128 0 63 +def unhex(cast(repeat('123',5) as char(1024))) 251 536870911 8 Y 144 0 63 +--------------------------------------------+ | unhex(cast(repeat('123',5) as char(1024))) | +--------------------------------------------+