[Tarantool-patches] [PATCH v3 1/2] vinyl: rework upsert operation
Nikita Pettik
korablev at tarantool.org
Wed Oct 14 13:42:22 MSK 2020
On 14 Oct 11:58, Aleksandr Lyapunov wrote:
>
> > if (stmt_is_void) {
> > ups_cnt--;
> > mp_next(&ups_ops);
> > + stmt = vy_stmt_new_replace(tuple_format(upsert), result_mp,
> > + result_mp_end);
> Why can't you just use `upsert` tuple itself instead of created tuple by its
> format and data?
>
For sure we can. Sorry it was late night so I didn't pay attention to this fact.
Diff:
diff --git a/src/box/vy_upsert.c b/src/box/vy_upsert.c
index 0b4baf6ff..fdae931f6 100644
--- a/src/box/vy_upsert.c
+++ b/src/box/vy_upsert.c
@@ -102,15 +102,13 @@ vy_apply_upsert_on_terminal_stmt(struct tuple *upsert, struct tuple *stmt,
const char *ups_ops = new_ops;
/*
* In case upsert folds into insert, we must skip first
- * update operations. Moreover, we should create (in case of delete
- * statement - re-create since delete contains only key) tuple with
- * format to use it for PK modification check.
+ * update operations. Moreover, we should use upsert's tuple
+ * to provide PK modification check.
*/
if (stmt_is_void) {
ups_cnt--;
mp_next(&ups_ops);
- stmt = vy_stmt_new_replace(tuple_format(upsert), result_mp,
- result_mp_end);
+ stmt = upsert;
}
for (uint32_t i = 0; i < ups_cnt; ++i) {
assert(mp_typeof(*ups_ops) == MP_ARRAY);
@@ -126,8 +124,6 @@ vy_apply_upsert_on_terminal_stmt(struct tuple *upsert, struct tuple *stmt,
assert(e != NULL);
/* Bail out immediately in case of OOM. */
if (e->type != &type_ClientError) {
- if (stmt_is_void)
- tuple_unref(stmt);
region_truncate(region, region_svp);
return NULL;
}
@@ -169,8 +165,6 @@ vy_apply_upsert_on_terminal_stmt(struct tuple *upsert, struct tuple *stmt,
struct tuple *new_terminal_stmt = vy_stmt_new_replace(format, result_mp,
result_mp_end);
region_truncate(region, region_svp);
- if (stmt_is_void)
- tuple_unref(stmt);
if (new_terminal_stmt == NULL)
return NULL;
vy_stmt_set_lsn(new_terminal_stmt, vy_stmt_lsn(upsert));
More information about the Tarantool-patches
mailing list