]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Inline TransactionIdFollows/Precedes[OrEquals]()
authorMelanie Plageman <melanieplageman@gmail.com>
Tue, 14 Oct 2025 21:03:48 +0000 (17:03 -0400)
committerMelanie Plageman <melanieplageman@gmail.com>
Tue, 14 Oct 2025 21:03:48 +0000 (17:03 -0400)
These functions appeared prominently in a profile of a patch that sets
the visibility map on-access. Inline them to remove call overhead and
make them cheaper to use in hot paths.

Author: Melanie Plageman <melanieplageman@gmail.com>
Reviewed-by: Kirill Reshke <reshkekirill@gmail.com>
Reviewed-by: Andres Freund <andres@anarazel.de>
Discussion: https://postgr.es/m/2wk7jo4m4qwh5sn33pfgerdjfujebbccsmmlownybddbh6nawl%40mdyyqpqzxjek

src/backend/access/transam/transam.c
src/include/access/transam.h

index 9a39451a29a9688637d52e982d97128821810b57..553d6756cb3820eb060e180bf1ef16eb7155f360 100644 (file)
@@ -273,70 +273,6 @@ TransactionIdAbortTree(TransactionId xid, int nxids, TransactionId *xids)
                                                           TRANSACTION_STATUS_ABORTED, InvalidXLogRecPtr);
 }
 
-/*
- * TransactionIdPrecedes --- is id1 logically < id2?
- */
-bool
-TransactionIdPrecedes(TransactionId id1, TransactionId id2)
-{
-       /*
-        * If either ID is a permanent XID then we can just do unsigned
-        * comparison.  If both are normal, do a modulo-2^32 comparison.
-        */
-       int32           diff;
-
-       if (!TransactionIdIsNormal(id1) || !TransactionIdIsNormal(id2))
-               return (id1 < id2);
-
-       diff = (int32) (id1 - id2);
-       return (diff < 0);
-}
-
-/*
- * TransactionIdPrecedesOrEquals --- is id1 logically <= id2?
- */
-bool
-TransactionIdPrecedesOrEquals(TransactionId id1, TransactionId id2)
-{
-       int32           diff;
-
-       if (!TransactionIdIsNormal(id1) || !TransactionIdIsNormal(id2))
-               return (id1 <= id2);
-
-       diff = (int32) (id1 - id2);
-       return (diff <= 0);
-}
-
-/*
- * TransactionIdFollows --- is id1 logically > id2?
- */
-bool
-TransactionIdFollows(TransactionId id1, TransactionId id2)
-{
-       int32           diff;
-
-       if (!TransactionIdIsNormal(id1) || !TransactionIdIsNormal(id2))
-               return (id1 > id2);
-
-       diff = (int32) (id1 - id2);
-       return (diff > 0);
-}
-
-/*
- * TransactionIdFollowsOrEquals --- is id1 logically >= id2?
- */
-bool
-TransactionIdFollowsOrEquals(TransactionId id1, TransactionId id2)
-{
-       int32           diff;
-
-       if (!TransactionIdIsNormal(id1) || !TransactionIdIsNormal(id2))
-               return (id1 >= id2);
-
-       diff = (int32) (id1 - id2);
-       return (diff >= 0);
-}
-
 
 /*
  * TransactionIdLatest --- get latest XID among a main xact and its children
index 7d82cd2eb5621ef57e7e232ff95dabf5e44d0b44..c9e204182757c3f2e17ae92e364b20af4d738648 100644 (file)
@@ -255,6 +255,72 @@ typedef struct TransamVariablesData
 } TransamVariablesData;
 
 
+
+/*
+ * TransactionIdPrecedes --- is id1 logically < id2?
+ */
+static inline bool
+TransactionIdPrecedes(TransactionId id1, TransactionId id2)
+{
+       /*
+        * If either ID is a permanent XID then we can just do unsigned
+        * comparison.  If both are normal, do a modulo-2^32 comparison.
+        */
+       int32           diff;
+
+       if (!TransactionIdIsNormal(id1) || !TransactionIdIsNormal(id2))
+               return (id1 < id2);
+
+       diff = (int32) (id1 - id2);
+       return (diff < 0);
+}
+
+/*
+ * TransactionIdPrecedesOrEquals --- is id1 logically <= id2?
+ */
+static inline bool
+TransactionIdPrecedesOrEquals(TransactionId id1, TransactionId id2)
+{
+       int32           diff;
+
+       if (!TransactionIdIsNormal(id1) || !TransactionIdIsNormal(id2))
+               return (id1 <= id2);
+
+       diff = (int32) (id1 - id2);
+       return (diff <= 0);
+}
+
+/*
+ * TransactionIdFollows --- is id1 logically > id2?
+ */
+static inline bool
+TransactionIdFollows(TransactionId id1, TransactionId id2)
+{
+       int32           diff;
+
+       if (!TransactionIdIsNormal(id1) || !TransactionIdIsNormal(id2))
+               return (id1 > id2);
+
+       diff = (int32) (id1 - id2);
+       return (diff > 0);
+}
+
+/*
+ * TransactionIdFollowsOrEquals --- is id1 logically >= id2?
+ */
+static inline bool
+TransactionIdFollowsOrEquals(TransactionId id1, TransactionId id2)
+{
+       int32           diff;
+
+       if (!TransactionIdIsNormal(id1) || !TransactionIdIsNormal(id2))
+               return (id1 >= id2);
+
+       diff = (int32) (id1 - id2);
+       return (diff >= 0);
+}
+
+
 /* ----------------
  *             extern declarations
  * ----------------
@@ -274,10 +340,6 @@ extern bool TransactionIdDidAbort(TransactionId transactionId);
 extern void TransactionIdCommitTree(TransactionId xid, int nxids, TransactionId *xids);
 extern void TransactionIdAsyncCommitTree(TransactionId xid, int nxids, TransactionId *xids, XLogRecPtr lsn);
 extern void TransactionIdAbortTree(TransactionId xid, int nxids, TransactionId *xids);
-extern bool TransactionIdPrecedes(TransactionId id1, TransactionId id2);
-extern bool TransactionIdPrecedesOrEquals(TransactionId id1, TransactionId id2);
-extern bool TransactionIdFollows(TransactionId id1, TransactionId id2);
-extern bool TransactionIdFollowsOrEquals(TransactionId id1, TransactionId id2);
 extern TransactionId TransactionIdLatest(TransactionId mainxid,
                                                                                 int nxids, const TransactionId *xids);
 extern XLogRecPtr TransactionIdGetCommitLSN(TransactionId xid);