mirror of
				https://github.com/psycopg/psycopg2.git
				synced 2025-10-31 07:47:30 +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