mirror of
				https://github.com/psycopg/psycopg2.git
				synced 2025-11-04 01:37:31 +03:00 
			
		
		
		
	implement sequence behaviour, as required for transaction IDs.
By James Henstridge on 2008-07-24. Merged from lp:~jamesh/psycopg/two-phase-commit/revision/357
This commit is contained in:
		
							parent
							
								
									0021e56d80
								
							
						
					
					
						commit
						22aea9114b
					
				| 
						 | 
				
			
			@ -12,6 +12,11 @@
 | 
			
		|||
 | 
			
		||||
	* Merged James Henstridge work on two-phase commit support.
 | 
			
		||||
 | 
			
		||||
	2008-07-24  James Henstridge  <james@jamesh.id.au>
 | 
			
		||||
 | 
			
		||||
		* psycopg/xid_type.c (xid_len, xid_getitem): implement sequence
 | 
			
		||||
		behaviour, as required for transaction IDs.
 | 
			
		||||
 | 
			
		||||
	2008-07-23  James Henstridge  <james@jamesh.id.au>
 | 
			
		||||
 | 
			
		||||
		* psycopg/connection_type.c (psyco_conn_xid): add a
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,6 +41,8 @@
 | 
			
		|||
  #define PY_FORMAT_SIZE_T ""
 | 
			
		||||
  #define PyInt_FromSsize_t(x) PyInt_FromLong((x))
 | 
			
		||||
 | 
			
		||||
  #define lenfunc inquiry
 | 
			
		||||
  #define ssizeargfunc intargfunc
 | 
			
		||||
  #define readbufferproc getreadbufferproc
 | 
			
		||||
  #define writebufferproc getwritebufferproc
 | 
			
		||||
  #define segcountproc getsegcountproc
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -184,6 +184,47 @@ xid_repr(XidObject *self)
 | 
			
		|||
                               self->pg_xact_id ? self->pg_xact_id : "(null)");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Py_ssize_t
 | 
			
		||||
xid_len(XidObject *self)
 | 
			
		||||
{
 | 
			
		||||
    return 3;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static PyObject *
 | 
			
		||||
xid_getitem(XidObject *self, Py_ssize_t item)
 | 
			
		||||
{
 | 
			
		||||
    if (item < 0)
 | 
			
		||||
        item += 3;
 | 
			
		||||
 | 
			
		||||
    switch (item) {
 | 
			
		||||
    case 0:
 | 
			
		||||
        Py_INCREF(self->format_id);
 | 
			
		||||
        return self->format_id;
 | 
			
		||||
    case 1:
 | 
			
		||||
        Py_INCREF(self->gtrid);
 | 
			
		||||
        return self->gtrid;
 | 
			
		||||
    case 2:
 | 
			
		||||
        Py_INCREF(self->bqual);
 | 
			
		||||
        return self->bqual;
 | 
			
		||||
    default:
 | 
			
		||||
        PyErr_SetString(PyExc_IndexError, "index out of range");
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static PySequenceMethods xid_sequence = {
 | 
			
		||||
    (lenfunc)xid_len,          /* sq_length */
 | 
			
		||||
    0,                         /* sq_concat */
 | 
			
		||||
    0,                         /* sq_repeat */
 | 
			
		||||
    (ssizeargfunc)xid_getitem, /* sq_item */
 | 
			
		||||
    0,                         /* sq_slice */
 | 
			
		||||
    0,                         /* sq_ass_item */
 | 
			
		||||
    0,                         /* sq_ass_slice */
 | 
			
		||||
    0,                         /* sq_contains */
 | 
			
		||||
    0,                         /* sq_inplace_concat */
 | 
			
		||||
    0,                         /* sq_inplace_repeat */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char xid_doc[] =
 | 
			
		||||
    "A transaction identifier used for two phase commit.";
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -203,7 +244,7 @@ PyTypeObject XidType = {
 | 
			
		|||
 | 
			
		||||
    (reprfunc)xid_repr, /*tp_repr*/
 | 
			
		||||
    0,          /*tp_as_number*/
 | 
			
		||||
    0,          /*tp_as_sequence*/
 | 
			
		||||
    &xid_sequence, /*tp_as_sequence*/
 | 
			
		||||
    0,          /*tp_as_mapping*/
 | 
			
		||||
    0,          /*tp_hash */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user