[CP] Fix bug for last_insert_id()

This commit is contained in:
2149
2023-06-14 02:48:20 +00:00
committed by ob-robot
parent 435d6eb508
commit 90c2c33118
9 changed files with 274 additions and 40 deletions

View File

@ -13211,5 +13211,58 @@ int ObTransformUtils::create_udt_hidden_columns(ObTransformerCtx *ctx,
return ret;
}
int ObTransformUtils::check_is_index_part_key(ObTransformerCtx &ctx,
ObDMLStmt &stmt,
ObRawExpr *check_expr,
bool &is_valid)
{
int ret = OB_SUCCESS;
is_valid = false;
ObSQLSessionInfo *session_info = ctx.session_info_;
if (OB_ISNULL(check_expr)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("invalid index", K(ret), K(check_expr));
} else if (OB_ISNULL(session_info)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("session_info is null", K(ret));
} else if (OB_FAIL(ObOptimizerUtil::get_expr_without_lossless_cast(check_expr, check_expr))) {
LOG_WARN("failed to get expr without lossless cast", K(ret));
} else if (!check_expr->is_column_ref_expr()) {
// do nothing
} else {
ObColumnRefRawExpr *col = static_cast<ObColumnRefRawExpr *>(check_expr);
const share::schema::ObColumnSchemaV2 *column_schema = NULL;
TableItem *table = stmt.get_table_item_by_id(col->get_table_id());
if (OB_ISNULL(table)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("table is null", K(ret), K(*col));
} else if (!table->is_basic_table()) {
} else if (OB_FAIL(ctx.schema_checker_->get_column_schema(session_info->get_effective_tenant_id(),
table->ref_id_,
col->get_column_id(),
column_schema,
true))) {
LOG_WARN("failed to get column schema", K(ret), K(table->ref_id_), K(col->get_column_id()), K(col->get_table_id()), K(table), K(col), K(lbt()));
} else if (OB_ISNULL(column_schema)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("column schema is null", K(ret));
} else if (column_schema->is_rowkey_column()) {
is_valid = true;
} else if (OB_FAIL(ctx.schema_checker_->check_column_has_index(column_schema->get_tenant_id(),
table->ref_id_,
col->get_column_id(),
is_valid))) {
LOG_WARN("failed to check column is a key", K(ret));
} else if (is_valid) {
// do nothing
} else if (ctx.schema_checker_->check_if_partition_key(session_info->get_effective_tenant_id(),
table->ref_id_, col->get_column_id(), is_valid)) {
LOG_WARN("failed to check if partition key", K(ret));
}
}
return ret;
}
} // namespace sql
} // namespace oceanbase