Changeset 564


Ignore:
Timestamp:
Nov 20, 2015, 4:18:07 PM (4 years ago)
Author:
cito
Message:

Use py3c compatibility layer for int/long issue

See https://py3c.readthedocs.org for more information about py3c.

Location:
trunk/module
Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/module/pgmodule.c

    r561 r564  
    2929
    3030/* Note: This should be linked against the same C runtime lib as Python */
     31
    3132#include <Python.h>
    32 
    33 #if PY_MAJOR_VERSION >= 3
    34 #define IS_PY3K
    35 #endif
    36 
    37 #ifndef IS_PY3K
    38 #define PyLong_FromLong PyInt_FromLong
    39 #endif
    4033
    4134#include <libpq-fe.h>
     
    4538/* the type definitions from <catalog/pg_type.h> */
    4639#include "pgtypes.h"
     40
     41/* macros for single-source Python 2/3 compatibility */
     42#include "py3c.h"
    4743
    4844static PyObject *Error, *Warning, *InterfaceError,
     
    754750
    755751        /* returns position */
    756         return PyLong_FromLong(ret);
     752        return PyInt_FromLong(ret);
    757753}
    758754
     
    803799
    804800        /* returns size */
    805         return PyLong_FromLong(end);
     801        return PyInt_FromLong(end);
    806802}
    807803
     
    836832
    837833        /* returns size */
    838         return PyLong_FromLong(start);
     834        return PyInt_FromLong(start);
    839835}
    840836
     
    943939        {
    944940                if (check_lo_obj(self, 0))
    945                         return PyLong_FromLong(self->lo_oid);
     941                        return PyInt_FromLong(self->lo_oid);
    946942
    947943                Py_INCREF(Py_None);
     
    12711267                                        /* for a single insert, return the oid */
    12721268                                        PQclear(result);
    1273                                         return PyLong_FromLong(oid);
     1269                                        return PyInt_FromLong(oid);
    12741270                                }
    12751271                        case PGRES_COPY_OUT:            /* no data will be received */
     
    15731569                                }
    15741570                        }
    1575                         else if (PyLong_Check(item) || PyLong_Check(item))
     1571                        else if (PyInt_Check(item) || PyLong_Check(item))
    15761572                        {
    15771573                                PyObject* s = PyObject_Str(item);
     
    16651661        }
    16661662
    1667         return PyLong_FromLong(PQtransactionStatus(self->cnx));
     1663        return PyInt_FromLong(PQtransactionStatus(self->cnx));
    16681664}
    16691665
     
    19541950
    19551951        /* request that the server abandon processing of the current command */
    1956         return PyLong_FromLong((long) PQrequestCancel(self->cnx));
     1952        return PyInt_FromLong((long) PQrequestCancel(self->cnx));
    19571953}
    19581954
     
    19791975
    19801976#ifdef NO_PQSOCKET
    1981         return PyLong_FromLong((long) self->cnx->sock);
     1977        return PyInt_FromLong((long) self->cnx->sock);
    19821978#else
    1983         return PyLong_FromLong((long) PQsocket(self->cnx));
     1979        return PyInt_FromLong((long) PQsocket(self->cnx));
    19841980#endif
    19851981}
     
    21102106                PyTuple_SET_ITEM(notify_result, 0, temp);
    21112107
    2112                 if (!(temp = PyLong_FromLong(notify->be_pid)))
     2108                if (!(temp = PyInt_FromLong(notify->be_pid)))
    21132109                {
    21142110                        Py_DECREF(notify_result);
     
    22112207        /* postmaster port */
    22122208        if (!strcmp(name, "port"))
    2213                 return PyLong_FromLong(atol(PQport(self->cnx)));
     2209                return PyInt_FromLong(atol(PQport(self->cnx)));
    22142210
    22152211        /* selected database */
     
    22312227        /* connection status : 1 - OK, 0 - BAD */
    22322228        if (!strcmp(name, "status"))
    2233                 return PyLong_FromLong(PQstatus(self->cnx) == CONNECTION_OK ? 1 : 0);
     2229                return PyInt_FromLong(PQstatus(self->cnx) == CONNECTION_OK ? 1 : 0);
    22342230
    22352231        /* provided user name */
     
    22392235        /* protocol version */
    22402236        if (!strcmp(name, "protocol_version"))
    2241                 return PyLong_FromLong(PQprotocolVersion(self->cnx));
     2237                return PyInt_FromLong(PQprotocolVersion(self->cnx));
    22422238
    22432239        /* backend version */
    22442240        if (!strcmp(name, "server_version"))
    22452241#if PG_VERSION_NUM < 80000
    2246                 return PyLong_FromLong(PG_VERSION_NUM);
     2242                return PyInt_FromLong(PG_VERSION_NUM);
    22472243#else
    2248                 return PyLong_FromLong(PQserverVersion(self->cnx));
     2244                return PyInt_FromLong(PQserverVersion(self->cnx));
    22492245#endif
    22502246
     
    24552451                                num_rows = atol(temp);
    24562452                        }
    2457                         return PyLong_FromLong(num_rows);
     2453                        return PyInt_FromLong(num_rows);
    24582454
    24592455                /* query failed */
     
    25082504        }
    25092505
    2510         return PyLong_FromLong(oid);
     2506        return PyInt_FromLong(oid);
    25112507}
    25122508
     
    26732669        if (PyUnicode_Check(param))
    26742670                num = PQfnumber(self->result, PyBytes_AsString(param));
    2675         else if (PyLong_Check(param))
    2676                 num = PyLong_AsLong(param);
     2671        else if (PyInt_Check(param))
     2672                num = PyInt_AsLong(param);
    26772673        else
    26782674        {
     
    27032699
    27042700        /* affects field information */
    2705         PyTuple_SET_ITEM(result, 0, PyLong_FromLong(num));
     2701        PyTuple_SET_ITEM(result, 0, PyInt_FromLong(num));
    27062702        PyTuple_SET_ITEM(result, 1,
    27072703                PyUnicode_FromString(PQfname(self->result, num)));
    27082704        PyTuple_SET_ITEM(result, 2,
    2709                 PyLong_FromLong(PQftype(self->result, num)));
     2705                PyInt_FromLong(PQftype(self->result, num)));
    27102706
    27112707        return result;
     
    28572853        /* arraysize */
    28582854        if (!strcmp(name, "arraysize"))
    2859                 return PyLong_FromLong(self->arraysize);
     2855                return PyInt_FromLong(self->arraysize);
    28602856
    28612857        /* resulttype */
    28622858        if (!strcmp(name, "resulttype"))
    2863                 return PyLong_FromLong(self->result_type);
     2859                return PyInt_FromLong(self->result_type);
    28642860
    28652861        /* ntuples */
    28662862        if (!strcmp(name, "ntuples"))
    2867                 return PyLong_FromLong(self->max_row);
     2863                return PyInt_FromLong(self->max_row);
    28682864
    28692865        /* nfields */
    28702866        if (!strcmp(name, "nfields"))
    2871                 return PyLong_FromLong(self->num_fields);
     2867                return PyInt_FromLong(self->num_fields);
    28722868
    28732869        /* attributes list */
     
    29042900        if (!strcmp(name, "arraysize"))
    29052901        {
    2906                 if (!PyLong_Check(v))
     2902                if (!PyInt_Check(v))
    29072903                {
    29082904                        PyErr_SetString(PyExc_TypeError, "arraysize must be integer.");
     
    29102906                }
    29112907
    2912                 self->arraysize = PyLong_AsLong(v);
     2908                self->arraysize = PyInt_AsLong(v);
    29132909                return 0;
    29142910        }
     
    30183014
    30193015        if ((pgport == -1) && (pg_default_port != Py_None))
    3020                 pgport = PyLong_AsLong(pg_default_port);
     3016                pgport = PyInt_AsLong(pg_default_port);
    30213017
    30223018        if ((!pgopt) && (pg_default_opt != Py_None))
     
    30953091        }
    30963092
    3097         return PyLong_FromLong((long) PQntuples(self->result));
     3093        return PyInt_FromLong((long) PQntuples(self->result));
    30983094}
    30993095
     
    31873183        }
    31883184
    3189         return PyLong_FromLong(num);
     3185        return PyInt_FromLong(num);
    31903186}
    31913187
     
    32483244                                {
    32493245                                        case 1:  /* int2/4 */
    3250                                                 val = PyLong_FromString(s, NULL, 10);
     3246                                                val = PyInt_FromString(s, NULL, 10);
    32513247                                                break;
    32523248
     
    32573253                                        case 3:  /* float/double */
    32583254                                                tmp_obj = PyBytes_FromString(s);
    3259 #ifdef IS_PY3K
     3255#if IS_PY3
    32603256                                                val = PyFloat_FromString(tmp_obj);
    32613257#else
     
    32903286                                                {
    32913287                                                        tmp_obj = PyBytes_FromString(s);
    3292 #ifdef IS_PY3K
     3288#if IS_PY3
    32933289                                                        val = PyFloat_FromString(tmp_obj);
    32943290#else
     
    33833379                                {
    33843380                                        case 1:  /* int2/4 */
    3385                                                 val = PyLong_FromString(s, NULL, 10);
     3381                                                val = PyInt_FromString(s, NULL, 10);
    33863382                                                break;
    33873383
     
    33923388                                        case 3:  /* float/double */
    33933389                                                tmp_obj = PyBytes_FromString(s);
    3394 #ifdef IS_PY3K
     3390#if IS_PY3
    33953391                                                val = PyFloat_FromString(tmp_obj);
    33963392#else
     
    34253421                                                {
    34263422                                                        tmp_obj = PyBytes_FromString(s);
    3427 #ifdef IS_PY3K
     3423#if IS_PY3
    34283424                                                        val = PyFloat_FromString(tmp_obj);
    34293425#else
     
    41594155
    41604156        if (port != -1)
    4161                 pg_default_port = PyLong_FromLong(port);
     4157                pg_default_port = PyInt_FromLong(port);
    41624158        else
    41634159        {
     
    42104206static char pg__doc__[] = "Python interface to PostgreSQL DB";
    42114207
    4212 #ifdef IS_PY3K
     4208#if IS_PY3
    42134209static struct PyModuleDef pgType = {
    42144210        PyModuleDef_HEAD_INIT,
     
    42324228
    42334229        /* Create the module and add the functions */
    4234 #ifdef IS_PY3K
     4230#if IS_PY3
    42354231        mod = PyModule_Create(&pgType);
    42364232#else
     
    42894285
    42904286        /* results type for queries */
    4291         PyDict_SetItemString(dict, "RESULT_EMPTY", PyLong_FromLong(RESULT_EMPTY));
    4292         PyDict_SetItemString(dict, "RESULT_DML", PyLong_FromLong(RESULT_DML));
    4293         PyDict_SetItemString(dict, "RESULT_DDL", PyLong_FromLong(RESULT_DDL));
    4294         PyDict_SetItemString(dict, "RESULT_DQL", PyLong_FromLong(RESULT_DQL));
     4287        PyDict_SetItemString(dict, "RESULT_EMPTY", PyInt_FromLong(RESULT_EMPTY));
     4288        PyDict_SetItemString(dict, "RESULT_DML", PyInt_FromLong(RESULT_DML));
     4289        PyDict_SetItemString(dict, "RESULT_DDL", PyInt_FromLong(RESULT_DDL));
     4290        PyDict_SetItemString(dict, "RESULT_DQL", PyInt_FromLong(RESULT_DQL));
    42954291
    42964292        /* transaction states */
    4297         PyDict_SetItemString(dict,"TRANS_IDLE",PyLong_FromLong(PQTRANS_IDLE));
    4298         PyDict_SetItemString(dict,"TRANS_ACTIVE",PyLong_FromLong(PQTRANS_ACTIVE));
    4299         PyDict_SetItemString(dict,"TRANS_INTRANS",PyLong_FromLong(PQTRANS_INTRANS));
    4300         PyDict_SetItemString(dict,"TRANS_INERROR",PyLong_FromLong(PQTRANS_INERROR));
    4301         PyDict_SetItemString(dict,"TRANS_UNKNOWN",PyLong_FromLong(PQTRANS_UNKNOWN));
     4293        PyDict_SetItemString(dict,"TRANS_IDLE",PyInt_FromLong(PQTRANS_IDLE));
     4294        PyDict_SetItemString(dict,"TRANS_ACTIVE",PyInt_FromLong(PQTRANS_ACTIVE));
     4295        PyDict_SetItemString(dict,"TRANS_INTRANS",PyInt_FromLong(PQTRANS_INTRANS));
     4296        PyDict_SetItemString(dict,"TRANS_INERROR",PyInt_FromLong(PQTRANS_INERROR));
     4297        PyDict_SetItemString(dict,"TRANS_UNKNOWN",PyInt_FromLong(PQTRANS_UNKNOWN));
    43024298
    43034299#ifdef LARGE_OBJECTS
    43044300        /* create mode for large objects */
    4305         PyDict_SetItemString(dict, "INV_READ", PyLong_FromLong(INV_READ));
    4306         PyDict_SetItemString(dict, "INV_WRITE", PyLong_FromLong(INV_WRITE));
     4301        PyDict_SetItemString(dict, "INV_READ", PyInt_FromLong(INV_READ));
     4302        PyDict_SetItemString(dict, "INV_WRITE", PyInt_FromLong(INV_WRITE));
    43074303
    43084304        /* position flags for lo_lseek */
    4309         PyDict_SetItemString(dict, "SEEK_SET", PyLong_FromLong(SEEK_SET));
    4310         PyDict_SetItemString(dict, "SEEK_CUR", PyLong_FromLong(SEEK_CUR));
    4311         PyDict_SetItemString(dict, "SEEK_END", PyLong_FromLong(SEEK_END));
     4305        PyDict_SetItemString(dict, "SEEK_SET", PyInt_FromLong(SEEK_SET));
     4306        PyDict_SetItemString(dict, "SEEK_CUR", PyInt_FromLong(SEEK_CUR));
     4307        PyDict_SetItemString(dict, "SEEK_END", PyInt_FromLong(SEEK_END));
    43124308#endif /* LARGE_OBJECTS */
    43134309
     
    43344330                Py_FatalError("can't initialize module _pg");
    43354331
    4336 #ifdef IS_PY3K
     4332#if IS_PY3
    43374333        return mod;
    43384334#endif
Note: See TracChangeset for help on using the changeset viewer.