
    (ph                        S r SSKJr  SSKrSSKrSSKJrJr  SSK	J
r
Jr  \R                  " S5      r\
" SS9 " S	 S
5      5       rS\l        g)z"
psycopg two-phase commit support
    )annotationsN)	b64encode	b64decode)	dataclassreplacez^(\d+)_([^_]*)_([^_]*)$T)frozenc                     \ rS rSr% SrS\S'   S\S'   S\S'   S	rS
\S'   S	rS\S'   S	rS\S'   \	SS j5       r
SS jrSS jrSS jr\	SS j5       r\	SS j5       rSS jr\	SS j5       r\	          SS j5       rSrg	)Xid   zA two-phase commit transaction identifier.

The object can also be unpacked as a 3-item tuple (`format_id`, `gtrid`,
`bqual`).


int | None	format_idstrgtrid
str | NonebqualNzdt.datetime | Nonepreparedownerdatabasec                `     U R                  U5      $ ! [         a    [        SUS5      s $ f = f)ztTry to parse an XA triple from the string.

This may fail for several reasons. In such case return an unparsed Xid.
N)_parse_string	Exceptionr
   )clsss     ?/var/www/html/venv/lib/python3.13/site-packages/psycopg/_tpc.pyfrom_stringXid.from_string!   s6    	&$$Q'' 	&tQ%%	&s    --c                "    U R                  5       $ N)_as_tidselfs    r   __str__Xid.__str__,   s    ||~    c                    g)N    r    s    r   __len__Xid.__len__/   s    r$   c                N    U R                   U R                  U R                  4U   $ r   )r   r   r   )r!   indexs     r   __getitem__Xid.__getitem__2   s     

DJJ7>>r$   c                H   [         R                  U5      nU(       d  [        S5      e[        UR	                  S5      5      n[        UR	                  S5      5      R                  5       n[        UR	                  S5      5      R                  5       nU R                  X4U5      $ )Nzbad Xid format      r&   )_re_xidmatch
ValueErrorintgroupr   decode
from_parts)r   r   mr   r   r   s         r   r   Xid._parse_string5   sw    MM!-..
O	!''!*%,,.!''!*%,,.~~i66r$   c                    Ub]  Uc  [        S5      eSUs=::  a  S:  d  O  [        S5      e[        U5      S:  a  [        S5      e[        U5      S:  a  [        S5      eOUc  [        S5      e[        XU5      $ )	Nz,if format_id is specified, bqual must be toor   l        z/format_id must be a non-negative 32-bit integer@   z&bqual must be not longer than 64 charsz&gtrid must be not longer than 64 charsz,if format_id is None, bqual must be None too)	TypeErrorr3   lenr
   )r   r   r   r   s       r   r7   Xid.from_parts@   s     } NOO	.J. !RSS5zB !IJJ5zB !IJJ  ]JKK9U++r$   c                :   U R                   b  U R                  c  U R                  $ [        U R                  R	                  5       5      R                  5       n[        U R                  R	                  5       5      R                  5       nU R                    SU SU 3$ )a  
Return the PostgreSQL transaction_id for this XA xid.

PostgreSQL wants just a string, while the DBAPI supports the XA
standard and thus a triple. We use the same conversion algorithm
implemented by JDBC in order to allow some form of interoperation.

see also: the pgjdbc implementation
  http://cvs.pgfoundry.org/cgi-bin/cvsweb.cgi/jdbc/pgjdbc/org/
    postgresql/xa/RecoveredXid.java?rev=1.2
_)r   r   r   r   encoder6   )r!   egtridebquals      r   r   Xid._as_tidQ   s     >>!TZZ%7:: 4::,,./6684::,,./668..!6(!F844r$   c                    g)Nz<SELECT gid, prepared, owner, database FROM pg_prepared_xactsr'   )r   s    r   _get_recover_queryXid._get_recover_queryg   s    Mr$   c                @    [         R                  U5      n[        XRX4S9$ )N)r   r   r   )r
   r   r   )r   gidr   r   r   xids         r   _from_recordXid._from_recordk   s     ooc"sUNNr$   r'   )r   r   returnr
   )rM   r   )rM   r4   )r+   r4   rM   zint | str | None)r   r   r   r   r   r   rM   r
   )
rI   r   r   zdt.datetimer   r   r   r   rM   r
   )__name__
__module____qualname____firstlineno____doc____annotations__r   r   r   classmethodr   r"   r(   r,   r   r7   r   rF   rK   __static_attributes__r'   r$   r   r
   r
      s     J#'H 'E:Hj& &? 7 7 , , 5, N N OO!,O58ODGO	O Or$   r
   psycopg)rR   
__future__r   redatetimedtbase64r   r   dataclassesr   r   compiler1   r
   rO   r'   r$   r   <module>r^      sX    # 	  ' *
**/
0 $^O ^O ^OB r$   