mirror of
				https://github.com/psycopg/psycopg2.git
				synced 2025-10-31 15:57:31 +03:00 
			
		
		
		
	Fixes to row_factory.
This commit is contained in:
		
							parent
							
								
									091270db2a
								
							
						
					
					
						commit
						818caa5637
					
				|  | @ -1,3 +1,12 @@ | |||
| 2004-11-19  Federico Di Gregorio  <fog@debian.org> | ||||
| 
 | ||||
| 	* psycopg/cursor_type.c (_psyco_curs_buildrow_fill): now standard | ||||
| 	tuples are filled using PyTuple_SET_ITEM while extended types | ||||
| 	(created via row_factory) are filled using PySequence_SetItem. | ||||
| 	 | ||||
| 	* psycopg/cursor_type.c: change cursor attribute name from | ||||
| 	tuple_factory to row_factory. | ||||
| 
 | ||||
| 2004-10-14  Federico Di Gregorio  <fog@debian.org> | ||||
| 
 | ||||
| 	* psycopg/cursor_type.c (_psyco_curs_buildrow_fill): now we use | ||||
|  |  | |||
|  | @ -508,7 +508,8 @@ _psyco_curs_prefetch(cursorObject *self) | |||
| } | ||||
| 
 | ||||
| static PyObject * | ||||
| _psyco_curs_buildrow_fill(cursorObject *self, PyObject *res, int row, int n) | ||||
| _psyco_curs_buildrow_fill(cursorObject *self, PyObject *res, | ||||
|                           int row, int n, int istuple) | ||||
| { | ||||
|     int i; | ||||
|     PyObject *str, *val; | ||||
|  | @ -537,8 +538,13 @@ _psyco_curs_buildrow_fill(cursorObject *self, PyObject *res, int row, int n) | |||
|          | ||||
|         if (val) { | ||||
|             Dprintf("_psyco_curs_buildrow: val->refcnt = %d", val->ob_refcnt); | ||||
|             PySequence_SetItem(res, i, val); | ||||
|             Py_DECREF(val); | ||||
|             if (istuple) { | ||||
|                 PyTuple_SET_ITEM(res, i, val); | ||||
|             } | ||||
|             else { | ||||
|                 PySequence_SetItem(res, i, val); | ||||
|                 Py_DECREF(val); | ||||
|             } | ||||
|         } | ||||
|         else { | ||||
|             /* an error occurred in the type system, we return NULL to raise
 | ||||
|  | @ -559,7 +565,7 @@ _psyco_curs_buildrow(cursorObject *self, int row) | |||
|     int n; | ||||
|      | ||||
|     n = PQnfields(self->pgres); | ||||
|     return _psyco_curs_buildrow_fill(self, PyTuple_New(n), row, n); | ||||
|     return _psyco_curs_buildrow_fill(self, PyTuple_New(n), row, n, 1); | ||||
| } | ||||
| 
 | ||||
| static PyObject * | ||||
|  | @ -572,7 +578,7 @@ _psyco_curs_buildrow_with_factory(cursorObject *self, int row) | |||
|     if ((res = PyObject_CallFunction(self->tuple_factory, "O", self))== NULL) | ||||
|         return NULL; | ||||
| 
 | ||||
|     return _psyco_curs_buildrow_fill(self, res, row, n); | ||||
|     return _psyco_curs_buildrow_fill(self, res, row, n, 0); | ||||
| } | ||||
| 
 | ||||
|                       | ||||
|  | @ -1030,7 +1036,7 @@ static struct PyMemberDef cursorObject_members[] = { | |||
| #ifdef PSYCOPG_EXTENSIONS     | ||||
|     {"statusmessage", T_OBJECT, OFFSETOF(pgstatus), RO}, | ||||
|     {"query", T_STRING, OFFSETOF(query), RO}, | ||||
|     {"tuple_factory", T_OBJECT, OFFSETOF(tuple_factory), 0}, | ||||
|     {"row_factory", T_OBJECT, OFFSETOF(tuple_factory), 0}, | ||||
|     {"tzinfo_factory", T_OBJECT, OFFSETOF(tzinfo_factory), 0}, | ||||
| #endif | ||||
|     {NULL} | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user