From: Nikita Pettik <korablev@tarantool.org> To: tarantool-patches@freelists.org Cc: v.shpilevoy@tarantool.org, Nikita Pettik <korablev@tarantool.org> Subject: [tarantool-patches] [PATCH 1/3] txn: move fk_deferred_count from psql_txn to txn Date: Wed, 7 Aug 2019 18:13:12 +0300 [thread overview] Message-ID: <c65e460c8777263f8c75ee9c05826ce6ed479f5b.1565190104.git.korablev@tarantool.org> (raw) In-Reply-To: <cover.1565190104.git.korablev@tarantool.org> In-Reply-To: <cover.1565190104.git.korablev@tarantool.org> We are going to merge struct psql_txn with struct txn as a part of SQL integration into NoSQL, so let's move counter of deferred foreign key violations directly to struct txn. --- src/box/sql/vdbe.c | 6 +++--- src/box/sql/vdbeaux.c | 4 +--- src/box/txn.c | 16 ++++++---------- src/box/txn.h | 6 +----- 4 files changed, 11 insertions(+), 21 deletions(-) diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c index e096e1f65..246654cb7 100644 --- a/src/box/sql/vdbe.c +++ b/src/box/sql/vdbe.c @@ -2900,7 +2900,7 @@ case OP_Savepoint: { assert(pSavepoint == psql_txn->pSavepoint); psql_txn->pSavepoint = pSavepoint->pNext; } else { - psql_txn->fk_deferred_count = + txn->fk_deferred_count = pSavepoint->tnt_savepoint->fk_deferred_count; } } @@ -4844,7 +4844,7 @@ case OP_FkCounter: { !p->auto_commit) { struct txn *txn = in_txn(); assert(txn != NULL && txn->psql_txn != NULL); - txn->psql_txn->fk_deferred_count += pOp->p2; + txn->fk_deferred_count += pOp->p2; } else { p->nFkConstraint += pOp->p2; } @@ -4868,7 +4868,7 @@ case OP_FkIfZero: { /* jump */ !p->auto_commit) { struct txn *txn = in_txn(); assert(txn != NULL && txn->psql_txn != NULL); - if (txn->psql_txn->fk_deferred_count == 0) + if (txn->fk_deferred_count == 0) goto jump_to_p2; } else { if (p->nFkConstraint == 0) diff --git a/src/box/sql/vdbeaux.c b/src/box/sql/vdbeaux.c index e7accc745..bbbb99c70 100644 --- a/src/box/sql/vdbeaux.c +++ b/src/box/sql/vdbeaux.c @@ -87,7 +87,6 @@ sql_alloc_txn() return NULL; } txn->pSavepoint = NULL; - txn->fk_deferred_count = 0; return txn; } @@ -1988,8 +1987,7 @@ int sqlVdbeCheckFk(Vdbe * p, int deferred) { struct txn *txn = in_txn(); - if ((deferred && txn != NULL && txn->psql_txn != NULL && - txn->psql_txn->fk_deferred_count > 0) || + if ((deferred && txn != NULL && txn->fk_deferred_count > 0) || (!deferred && p->nFkConstraint > 0)) { p->is_aborted = true; p->errorAction = ON_CONFLICT_ACTION_ABORT; diff --git a/src/box/txn.c b/src/box/txn.c index 53ebfc053..b57240846 100644 --- a/src/box/txn.c +++ b/src/box/txn.c @@ -222,6 +222,7 @@ txn_begin() txn->engine = NULL; txn->engine_tx = NULL; txn->psql_txn = NULL; + txn->fk_deferred_count = 0; txn->fiber = NULL; fiber_set_txn(fiber(), txn); /* fiber_on_yield is initialized by engine on demand */ @@ -537,12 +538,9 @@ txn_prepare(struct txn *txn) * foreign key constraints must not be violated. * If not so, just rollback transaction. */ - if (txn->psql_txn != NULL) { - struct sql_txn *sql_txn = txn->psql_txn; - if (sql_txn->fk_deferred_count != 0) { - diag_set(ClientError, ER_FOREIGN_KEY_CONSTRAINT); - return -1; - } + if (txn->fk_deferred_count != 0) { + diag_set(ClientError, ER_FOREIGN_KEY_CONSTRAINT); + return -1; } /* * Perform transaction conflict resolution. Engine == NULL when @@ -754,8 +752,7 @@ box_txn_savepoint() } svp->stmt = stailq_last(&txn->stmts); svp->in_sub_stmt = txn->in_sub_stmt; - if (txn->psql_txn != NULL) - svp->fk_deferred_count = txn->psql_txn->fk_deferred_count; + svp->fk_deferred_count = txn->fk_deferred_count; return svp; } @@ -782,8 +779,7 @@ box_txn_rollback_to_savepoint(box_txn_savepoint_t *svp) return -1; } txn_rollback_to_svp(txn, svp->stmt); - if (txn->psql_txn != NULL) - txn->psql_txn->fk_deferred_count = svp->fk_deferred_count; + txn->fk_deferred_count = svp->fk_deferred_count; return 0; } diff --git a/src/box/txn.h b/src/box/txn.h index 37d90932b..87e880a6a 100644 --- a/src/box/txn.h +++ b/src/box/txn.h @@ -135,11 +135,6 @@ extern double too_long_threshold; struct sql_txn { /** List of active SQL savepoints. */ struct Savepoint *pSavepoint; - /** - * This variables transfer deferred constraints from one - * VDBE to the next in the same transaction. - */ - uint32_t fk_deferred_count; }; /** @@ -213,6 +208,7 @@ struct txn { struct trigger fiber_on_stop; /** Commit and rollback triggers. */ struct rlist on_commit, on_rollback; + uint32_t fk_deferred_count; struct sql_txn *psql_txn; }; -- 2.15.1
next prev parent reply other threads:[~2019-08-07 15:13 UTC|newest] Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-08-07 15:13 [tarantool-patches] [PATCH 0/3] Merge struct sql_txn into struct txn/savepoint Nikita Pettik 2019-08-07 15:13 ` Nikita Pettik [this message] 2019-08-09 20:59 ` [tarantool-patches] Re: [PATCH 1/3] txn: move fk_deferred_count from psql_txn to txn Vladislav Shpilevoy 2019-08-15 11:03 ` n.pettik 2019-08-07 15:13 ` [tarantool-patches] [PATCH 2/3] txn: merge struct sql_txn into struct txn Nikita Pettik 2019-08-07 15:26 ` [tarantool-patches] " Konstantin Osipov 2019-08-09 21:02 ` Vladislav Shpilevoy 2019-08-12 21:55 ` Konstantin Osipov 2019-08-15 11:04 ` n.pettik 2019-08-15 22:03 ` Vladislav Shpilevoy 2019-08-16 18:52 ` n.pettik 2019-08-19 20:47 ` Vladislav Shpilevoy 2019-08-21 0:23 ` n.pettik 2019-08-21 20:45 ` Vladislav Shpilevoy 2019-08-07 15:13 ` [tarantool-patches] [PATCH 3/3] sql: use struct txn_savepoint as anonymous savepoint Nikita Pettik 2019-08-07 15:26 ` [tarantool-patches] Re: [PATCH 0/3] Merge struct sql_txn into struct txn/savepoint Konstantin Osipov 2019-08-22 11:56 ` Kirill Yukhin
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=c65e460c8777263f8c75ee9c05826ce6ed479f5b.1565190104.git.korablev@tarantool.org \ --to=korablev@tarantool.org \ --cc=tarantool-patches@freelists.org \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [tarantool-patches] [PATCH 1/3] txn: move fk_deferred_count from psql_txn to txn' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox