From 3152996ffb8e9954927268b12f11814902e90166 Mon Sep 17 00:00:00 2001 From: Vadim B. Mikheev Date: Fri, 29 Aug 1997 09:05:25 +0000 Subject: Fix very old bug which made tuples changed/inserted by a commnd visible to command itself (so we had multiple update of updated tuples, etc). --- src/backend/access/transam/xact.c | 42 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) (limited to 'src/backend/access') diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index 903cca41130..5ac4a42c7c7 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.12 1997/08/19 21:30:19 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.13 1997/08/29 09:02:11 vadim Exp $ * * NOTES * Transaction aborts can now occur two ways: @@ -377,6 +377,22 @@ GetCurrentCommandId() return s->commandId; } +CommandId +GetScanCommandId() +{ + TransactionState s = CurrentTransactionState; + + /* ---------------- + * if the transaction system is disabled, we return + * the special "disabled" command id. + * ---------------- + */ + if (s->state == TRANS_DISABLED) + return (CommandId) DisabledCommandId; + + return s->scanCommandId; +} + /* -------------------------------- * GetCurrentTransactionStartTime @@ -432,6 +448,18 @@ CommandIdIsCurrentCommandId(CommandId cid) (cid == s->commandId) ? true : false; } +bool +CommandIdGEScanCommandId(CommandId cid) +{ + TransactionState s = CurrentTransactionState; + + if (AMI_OVERRIDE) + return false; + + return + (cid >= s->scanCommandId) ? true : false; +} + /* -------------------------------- * ClearCommandIdCounterOverflowFlag @@ -458,11 +486,22 @@ CommandCounterIncrement() elog(WARN, "You may only have 65535 commands per transaction"); } + CurrentTransactionStateData.scanCommandId = + CurrentTransactionStateData.commandId; + /* make cache changes visible to me */ AtCommit_Cache(); AtStart_Cache(); } +void +SetScanCommandId (CommandId savedId) +{ + + CurrentTransactionStateData.scanCommandId = savedId; + +} + /* ---------------------------------------------------------------- * initialization stuff * ---------------------------------------------------------------- @@ -757,6 +796,7 @@ StartTransaction() * ---------------- */ s->commandId = FirstCommandId; + s->scanCommandId = FirstCommandId; s->startTime = GetCurrentAbsoluteTime(); /* ---------------- -- cgit v1.2.3