+++ /dev/null
-/* pgcasts_basic.c - basic typecasting functions to python types
- *
- * Copyright (C) 2001-2003 Federico Di Gregorio <fog@debian.org>
- *
- * This file is part of the psycopg module.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2,
- * or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-/** INTEGER - cast normal integers (4 bytes) to python int **/
-
-static PyObject *
-typecast_INTEGER_cast(char *s, int len, PyObject *curs)
-{
- char buffer[12];
-
- if (s == NULL) {Py_INCREF(Py_None); return Py_None;}
- if (s[len] != '\0') {
- strncpy(buffer, s, len); buffer[len] = '\0';
- s = buffer;
- }
- return PyInt_FromString(s, NULL, 0);
-}
-
-/** LONGINTEGER - cast long integers (8 bytes) to python long **/
-
-static PyObject *
-typecast_LONGINTEGER_cast(char *s, int len, PyObject *curs)
-{
- char buffer[24];
-
- if (s == NULL) {Py_INCREF(Py_None); return Py_None;}
- if (s[len] != '\0') {
- strncpy(buffer, s, len); buffer[len] = '\0';
- s = buffer;
- }
- return PyLong_FromString(s, NULL, 0);
-}
-
-/** FLOAT - cast floating point numbers to python float **/
-
-static PyObject *
-typecast_FLOAT_cast(char *s, int len, PyObject *curs)
-{
- PyObject *str = NULL, *flo = NULL;
- char *pend;
-
- if (s == NULL) {Py_INCREF(Py_None); return Py_None;}
- str = PyString_FromStringAndSize(s, len);
- flo = PyFloat_FromString(str, &pend);
- Py_DECREF(str);
- return flo;
-}
-
-/** STRING - cast strings of any type to python string **/
-
-static PyObject *
-typecast_STRING_cast(char *s, int len, PyObject *curs)
-{
- if (s == NULL) {Py_INCREF(Py_None); return Py_None;}
- return PyString_FromStringAndSize(s, len);
-}
-
-/** UNICODE - cast strings of any type to a python unicode object **/
-
-static PyObject *
-typecast_UNICODE_cast(char *s, int len, PyObject *curs)
-{
- PyObject *enc;
-
- if (s == NULL) {Py_INCREF(Py_None); return Py_None;}
-
- enc = PyDict_GetItemString(psycoEncodings,
- ((cursorObject*)curs)->conn->encoding);
- if (enc) {
- return PyUnicode_Decode(s, len, PyString_AsString(enc), NULL);
- }
- else {
- PyErr_Format(InterfaceError,
- "can't decode into unicode string from %s",
- ((cursorObject*)curs)->conn->encoding);
- return NULL;
- }
-}
-
-/** BOOLEAN - cast boolean value into right python object **/
-
-static PyObject *
-typecast_BOOLEAN_cast(char *s, int len, PyObject *curs)
-{
- PyObject *res;
-
- if (s == NULL) {Py_INCREF(Py_None); return Py_None;}
-
- if (s[0] == 't')
- res = Py_True;
- else
- res = Py_False;
-
- Py_INCREF(res);
- return res;
-}
-
-/** DECIMAL - cast any kind of number into a Python Decimal object **/
-
-#ifdef HAVE_DECIMAL
-static PyObject *
-typecast_DECIMAL_cast(char *s, int len, PyObject *curs)
-{
- PyObject *res = NULL;
- char *buffer;
-
- if (s == NULL) {Py_INCREF(Py_None); return Py_None;}
-
- if ((buffer = PyMem_Malloc(len+1)) == NULL)
- PyErr_NoMemory();
- strncpy(buffer, s, len); buffer[len] = '\0';
- res = PyObject_CallFunction(decimalType, "s", buffer);
- PyMem_Free(buffer);
-
- return res;
-}
-#else
-#define typecast_DECIMAL_cast typecast_FLOAT_cast
-#endif
-
-/* some needed aliases */
-#define typecast_NUMBER_cast typecast_FLOAT_cast
-#define typecast_ROWID_cast typecast_INTEGER_cast