fix temporary table create table bug

This commit is contained in:
wjhh2008
2023-06-13 07:18:19 +00:00
committed by ob-robot
parent 80f5a62a49
commit d0cc68809e
2 changed files with 16 additions and 4 deletions

View File

@ -329,7 +329,8 @@ int ObCreateTableResolver::set_temp_table_info(ObTableSchema &table_schema, Pars
// 列定义添加(__session_id bigint, __session_create_time bigint), 如果用户表定义已经出现__session_id等后面解析时会报错... // 列定义添加(__session_id bigint, __session_create_time bigint), 如果用户表定义已经出现__session_id等后面解析时会报错...
int ObCreateTableResolver::add_new_column_for_oracle_temp_table(ObTableSchema &table_schema, int ObCreateTableResolver::add_new_column_for_oracle_temp_table(ObTableSchema &table_schema,
ObArray<ObColumnResolveStat> &stats) ObArray<ObColumnResolveStat> &stats,
bool add_to_schema)
{ {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
ObColumnSchemaV2 column; ObColumnSchemaV2 column;
@ -345,7 +346,7 @@ int ObCreateTableResolver::set_temp_table_info(ObTableSchema &table_schema, Pars
column.set_column_id(OB_HIDDEN_SESSION_ID_COLUMN_ID); column.set_column_id(OB_HIDDEN_SESSION_ID_COLUMN_ID);
column.set_is_hidden(true); column.set_is_hidden(true);
stat.column_id_ = column.get_column_id(); stat.column_id_ = column.get_column_id();
if (OB_FAIL(table_schema.add_column(column))) { if (add_to_schema && OB_FAIL(table_schema.add_column(column))) {
SQL_RESV_LOG(WARN, "fail to add column", K(ret)); SQL_RESV_LOG(WARN, "fail to add column", K(ret));
} else if (OB_FAIL(stats.push_back(stat))) { } else if (OB_FAIL(stats.push_back(stat))) {
SQL_RESV_LOG(WARN, "fail to push back stat", K(ret)); SQL_RESV_LOG(WARN, "fail to push back stat", K(ret));
@ -356,7 +357,7 @@ int ObCreateTableResolver::set_temp_table_info(ObTableSchema &table_schema, Pars
column.set_column_id(OB_HIDDEN_SESS_CREATE_TIME_COLUMN_ID); column.set_column_id(OB_HIDDEN_SESS_CREATE_TIME_COLUMN_ID);
column.set_is_hidden(true); column.set_is_hidden(true);
stat.column_id_ = column.get_column_id(); stat.column_id_ = column.get_column_id();
if (OB_FAIL(table_schema.add_column(column))) { if (add_to_schema && OB_FAIL(table_schema.add_column(column))) {
SQL_RESV_LOG(WARN, "fail to add column", K(ret)); SQL_RESV_LOG(WARN, "fail to add column", K(ret));
} else if (OB_FAIL(stats.push_back(stat))) { } else if (OB_FAIL(stats.push_back(stat))) {
SQL_RESV_LOG(WARN, "fail to push back stat", K(ret)); SQL_RESV_LOG(WARN, "fail to push back stat", K(ret));
@ -717,6 +718,17 @@ int ObCreateTableResolver::resolve(const ParseNode &parse_tree)
if (OB_FAIL(add_hidden_tablet_seq_col())) { if (OB_FAIL(add_hidden_tablet_seq_col())) {
SQL_RESV_LOG(WARN, "failed to add hidden primary key tablet seq", K(ret)); SQL_RESV_LOG(WARN, "failed to add hidden primary key tablet seq", K(ret));
} }
if (OB_SUCC(ret) && is_oracle_temp_table_) {
ObTableSchema &table_schema = create_table_stmt->get_create_table_arg().schema_;
ObArray<ObColumnResolveStat> column_stat;
int64_t pk_data_length = 0;
if (OB_FAIL(add_new_column_for_oracle_temp_table(table_schema, column_stat, false))) {
LOG_WARN("fail to add column stat", K(ret));
} else if (OB_FAIL(add_pk_key_for_oracle_temp_table(column_stat, pk_data_length))) {
LOG_WARN("fail to add pk for oracle temp table", K(ret));
}
}
} }
if (OB_SUCC(ret)) { if (OB_SUCC(ret)) {

View File

@ -118,7 +118,7 @@ private:
ObArray<ObColumnResolveStat> &stats); ObArray<ObColumnResolveStat> &stats);
static int check_same_substr_expr(ObRawExpr &left, ObRawExpr &right, bool &same); static int check_same_substr_expr(ObRawExpr &left, ObRawExpr &right, bool &same);
virtual int get_table_schema_for_check(share::schema::ObTableSchema &table_schema) override; virtual int get_table_schema_for_check(share::schema::ObTableSchema &table_schema) override;
int add_new_column_for_oracle_temp_table(share::schema::ObTableSchema &table_schema, ObArray<ObColumnResolveStat> &stats); int add_new_column_for_oracle_temp_table(share::schema::ObTableSchema &table_schema, ObArray<ObColumnResolveStat> &stats, bool add_to_schema = true);
int add_new_indexkey_for_oracle_temp_table(const int32_t org_key_len); int add_new_indexkey_for_oracle_temp_table(const int32_t org_key_len);
int add_pk_key_for_oracle_temp_table(ObArray<ObColumnResolveStat> &stats, int64_t &pk_data_length); int add_pk_key_for_oracle_temp_table(ObArray<ObColumnResolveStat> &stats, int64_t &pk_data_length);
int set_partition_info_for_oracle_temp_table(share::schema::ObTableSchema &table_schema); int set_partition_info_for_oracle_temp_table(share::schema::ObTableSchema &table_schema);