[tarantool-patches] [PATCH v8 3/3] sql: remove psql_txn from Vdbe
imeevma at tarantool.org
imeevma at tarantool.org
Mon Oct 29 20:33:25 MSK 2018
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
More information about the Tarantool-patches
mailing list