From: imeevma@tarantool.org To: korablev@tarantool.org, tarantool-patches@freelists.org Cc: v.shpilevoy@tarantool.org Subject: [tarantool-patches] [PATCH v8 3/3] sql: remove psql_txn from Vdbe Date: Mon, 29 Oct 2018 20:33:25 +0300 [thread overview] Message-ID: <ce438a4888b055fa079996319d54dd57adc6eb97.1540832830.git.imeevma@gmail.com> (raw) In-Reply-To: <cover.1540832830.git.imeevma@gmail.com> It makes no sense to store it here, and it has never did. SQL transaction specific things shall be taken from global txn object, as any transaction specific things. --- Issue: https://github.com/tarantool/tarantool/issues/2618 Branch: https://github.com/tarantool/tarantool/tree/imeevma/gh-2618-return-all-generated-ids src/box/sql/vdbe.c | 15 +++++++++------ src/box/sql/vdbeInt.h | 2 -- src/box/sql/vdbeaux.c | 10 +++------- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c index 2571492..1e732a9 100644 --- a/src/box/sql/vdbe.c +++ b/src/box/sql/vdbe.c @@ -2882,7 +2882,8 @@ case OP_Savepoint: { Savepoint *pNew; Savepoint *pSavepoint; Savepoint *pTmp; - struct sql_txn *psql_txn = p->psql_txn; + struct txn *txn = in_txn(); + struct sql_txn *psql_txn = txn != NULL ? txn->psql_txn : NULL; if (psql_txn == NULL) { assert(!box_txn()); @@ -2960,7 +2961,7 @@ case OP_Savepoint: { assert(pSavepoint == psql_txn->pSavepoint); psql_txn->pSavepoint = pSavepoint->pNext; } else { - p->psql_txn->fk_deferred_count = + psql_txn->fk_deferred_count = pSavepoint->tnt_savepoint->fk_deferred_count; } } @@ -4802,8 +4803,9 @@ case OP_Param: { /* out2 */ case OP_FkCounter: { if ((user_session->sql_flags & SQLITE_DeferFKs || pOp->p1 != 0) && !p->auto_commit) { - assert(p->psql_txn != NULL); - p->psql_txn->fk_deferred_count += pOp->p2; + struct txn *txn = in_txn(); + assert(txn != NULL && txn->psql_txn != NULL); + txn->psql_txn->fk_deferred_count += pOp->p2; } else { p->nFkConstraint += pOp->p2; } @@ -4825,8 +4827,9 @@ case OP_FkCounter: { case OP_FkIfZero: { /* jump */ if ((user_session->sql_flags & SQLITE_DeferFKs || pOp->p1) && !p->auto_commit) { - assert(p->psql_txn != NULL); - if (p->psql_txn->fk_deferred_count == 0) + struct txn *txn = in_txn(); + assert(txn != NULL && txn->psql_txn != NULL); + if (txn->psql_txn->fk_deferred_count == 0) goto jump_to_p2; } else { if (p->nFkConstraint == 0) diff --git a/src/box/sql/vdbeInt.h b/src/box/sql/vdbeInt.h index 7a7d3de..19b35b7 100644 --- a/src/box/sql/vdbeInt.h +++ b/src/box/sql/vdbeInt.h @@ -363,8 +363,6 @@ struct Vdbe { * ignoreRaised variable helps to track such situations */ u8 ignoreRaised; /* Flag for ON CONFLICT IGNORE for triggers */ - /** Data related to current transaction. */ - struct sql_txn *psql_txn; /** The auto-commit flag. */ bool auto_commit; /** diff --git a/src/box/sql/vdbeaux.c b/src/box/sql/vdbeaux.c index ae73f25..3efe252 100644 --- a/src/box/sql/vdbeaux.c +++ b/src/box/sql/vdbeaux.c @@ -86,7 +86,6 @@ sql_alloc_txn(struct Vdbe *v) return NULL; } txn->vdbe = v; - v->psql_txn = txn; txn->pSavepoint = NULL; txn->fk_deferred_count = 0; return txn; @@ -109,11 +108,7 @@ sql_vdbe_prepare(struct Vdbe *vdbe) txn->psql_txn = sql_alloc_txn(vdbe); if (txn->psql_txn == NULL) return -1; - } else { - vdbe->psql_txn = txn->psql_txn; } - } else { - vdbe->psql_txn = NULL; } return 0; } @@ -2244,8 +2239,9 @@ sqlite3VdbeCloseStatement(Vdbe * p, int eOp) int sqlite3VdbeCheckFk(Vdbe * p, int deferred) { - if ((deferred && p->psql_txn != NULL && - p->psql_txn->fk_deferred_count > 0) || + struct txn *txn = in_txn(); + if ((deferred && txn != NULL && txn->psql_txn != NULL && + txn->psql_txn->fk_deferred_count > 0) || (!deferred && p->nFkConstraint > 0)) { p->rc = SQLITE_CONSTRAINT_FOREIGNKEY; p->errorAction = ON_CONFLICT_ACTION_ABORT; -- 2.7.4
next prev parent reply other threads:[~2018-10-29 17:33 UTC|newest] Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-10-29 17:33 [tarantool-patches] [PATCH v8 0/3] sql: return all generated ids via IPROTO imeevma 2018-10-29 17:33 ` [tarantool-patches] [PATCH v8 1/3] box: factor fiber_gc out of txn_commit imeevma 2018-10-30 14:30 ` [tarantool-patches] " n.pettik 2018-10-30 19:15 ` Vladislav Shpilevoy 2018-10-30 20:03 ` Vladislav Shpilevoy 2018-10-30 20:06 ` Vladislav Shpilevoy 2018-10-30 21:32 ` Vladislav Shpilevoy 2018-10-30 23:08 ` n.pettik 2018-10-31 9:18 ` Vladislav Shpilevoy 2018-10-31 9:30 ` n.pettik 2018-10-29 17:33 ` [tarantool-patches] [PATCH v8 2/3] sql: return all generated ids via IPROTO imeevma 2018-10-30 14:30 ` [tarantool-patches] " n.pettik 2018-11-02 18:52 ` Imeev Mergen 2018-11-09 7:51 ` n.pettik 2018-10-29 17:33 ` imeevma [this message] 2018-10-30 14:30 ` [tarantool-patches] Re: [PATCH v8 3/3] sql: remove psql_txn from Vdbe n.pettik 2018-10-30 19:41 ` Vladislav Shpilevoy 2018-11-09 8:02 ` [tarantool-patches] Re: [PATCH v8 0/3] sql: return all generated ids via IPROTO 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=ce438a4888b055fa079996319d54dd57adc6eb97.1540832830.git.imeevma@gmail.com \ --to=imeevma@tarantool.org \ --cc=korablev@tarantool.org \ --cc=tarantool-patches@freelists.org \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [tarantool-patches] [PATCH v8 3/3] sql: remove psql_txn from Vdbe' \ /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