Re: Should we add xid_current() or a int8->xid cast?

btfujiitkp <btfujiitkp@oss.nttdata.com>

From: btfujiitkp <btfujiitkp@oss.nttdata.com>
To: pgsql-hackers@postgresql.org
Cc: andres@anarazel.de, tgl@sss.pgh.pa.us, thomas.munro@gmail.com
Date: 2019-10-29T04:23:07Z
Lists: pgsql-hackers
> 
> Thomas Munro <thomas.munro@gmail.com> writes:
>> On Sun, Sep 1, 2019 at 5:04 PM Thomas Munro <thomas.munro@gmail.com> 
>> wrote:
>>> Adding to CF.
> 
>> Rebased.  An OID clashed so re-roll the dice.  Also spotted a typo.
> 

I have some questions in this code.

First,
"FullTransactionIdPrecedes(xmax, val)" is not equal to "val >= xmax" of 
the previous code.  "FullTransactionIdPrecedes(xmax, val)" expresses 
"val > xmax". Is it all right?

@@ -384,15 +324,17 @@ parse_snapshot(const char *str)
  	while (*str != '\0')
  	{
  		/* read next value */
-		val = str2txid(str, &endp);
+		val = FullTransactionIdFromU64(pg_strtouint64(str, &endp, 10));
  		str = endp;

  		/* require the input to be in order */
-		if (val < xmin || val >= xmax || val < last_val)
+		if (FullTransactionIdPrecedes(val, xmin) ||
+			FullTransactionIdPrecedes(xmax, val) ||
+			FullTransactionIdPrecedes(val, last_val))

In addition to it, as to current TransactionId(not FullTransactionId) 
comparison, when we express ">=" of TransactionId, we use 
"TransactionIdFollowsOrEquals". this method is referred by some methods. 
On the other hand, FullTransactionIdFollowsOrEquals has not implemented 
yet. So, how about implementing this method?

Second,
About naming rule, "8" of xid8 means 8 bytes, but "8" has different 
meaning in each situation. For example, int8 of PostgreSQL means 8 
bytes, int8 of C language means 8 bits. If 64 is used, it just means 64 
bits. how about xid64()?

regards,

Takao Fujii






Commits

  1. Introduce xid8-based functions to replace txid_XXX.

  2. Add SQL type xid8 to expose FullTransactionId to users.

  3. Replace the former method of determining snapshot xmax --- to wit, calling