[tarantool-patches] [PATCH v7 2/2] sql: remove psql_txn from Vdbe

  • From: imeevma@xxxxxxxxxxxxx
  • To: korablev@xxxxxxxxxxxxx, tarantool-patches@xxxxxxxxxxxxx
  • Date: Sat, 27 Oct 2018 14:18:13 +0300

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.
---
 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


Other related posts:

  • » [tarantool-patches] [PATCH v7 2/2] sql: remove psql_txn from Vdbe - imeevma