📄 pgmodule.c
字号:
static PyObject *pg_getattr(pgobject * self, char *name){ /* * Although we could check individually, there are only a few * attributes that don't require a live connection and unless someone * has an urgent need, this will have to do */ if (!self->cnx) { PyErr_SetString(PyExc_TypeError, "Connection is not valid"); return NULL; } /* list postgreSQL connection fields */ /* postmaster host */ if (!strcmp(name, "host")) { char *r = PQhost(self->cnx); return r ? PyString_FromString(r) : PyString_FromString("localhost"); } /* postmaster port */ if (!strcmp(name, "port")) return PyInt_FromLong(atol(PQport(self->cnx))); /* selected database */ if (!strcmp(name, "db")) return PyString_FromString(PQdb(self->cnx)); /* selected options */ if (!strcmp(name, "options")) return PyString_FromString(PQoptions(self->cnx)); /* selected postgres tty */ if (!strcmp(name, "tty")) return PyString_FromString(PQtty(self->cnx)); /* error (status) message */ if (!strcmp(name, "error")) return PyString_FromString(PQerrorMessage(self->cnx)); /* connection status : 1 - OK, 0 - BAD */ if (!strcmp(name, "status")) return PyInt_FromLong(PQstatus(self->cnx) == CONNECTION_OK ? 1 : 0); /* provided user name */ if (!strcmp(name, "user")) return PyString_FromString("Deprecated facility"); /* return PyString_FromString(fe_getauthname("<unknown user>")); */ /* attributes list */ if (!strcmp(name, "__members__")) { PyObject *list = PyList_New(8); if (list) { PyList_SetItem(list, 0, PyString_FromString("host")); PyList_SetItem(list, 1, PyString_FromString("port")); PyList_SetItem(list, 2, PyString_FromString("db")); PyList_SetItem(list, 3, PyString_FromString("options")); PyList_SetItem(list, 4, PyString_FromString("tty")); PyList_SetItem(list, 5, PyString_FromString("error")); PyList_SetItem(list, 6, PyString_FromString("status")); PyList_SetItem(list, 7, PyString_FromString("user")); } return list; } return Py_FindMethod(pgobj_methods, (PyObject *) self, name);}/* object type definition */staticforward PyTypeObject PgType = { PyObject_HEAD_INIT(NULL) 0, /* ob_size */ "pgobject", /* tp_name */ sizeof(pgobject), /* tp_basicsize */ 0, /* tp_itemsize */ /* methods */ (destructor) pg_dealloc, /* tp_dealloc */ 0, /* tp_print */ (getattrfunc) pg_getattr, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_compare */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */};/* query object methods */static struct PyMethodDef pgquery_methods[] = { {"getresult", (PyCFunction) pgquery_getresult, 1, pgquery_getresult__doc__}, {"dictresult", (PyCFunction) pgquery_dictresult, 1, pgquery_dictresult__doc__}, {"fieldname", (PyCFunction) pgquery_fieldname, 1, pgquery_fieldname__doc__}, {"fieldnum", (PyCFunction) pgquery_fieldnum, 1, pgquery_fieldnum__doc__}, {"listfields", (PyCFunction) pgquery_listfields, 1, pgquery_listfields__doc__}, {"ntuples", (PyCFunction) pgquery_ntuples, 1, pgquery_ntuples__doc__}, {NULL, NULL}};/* gets query object attributes */static PyObject *pgquery_getattr(pgqueryobject * self, char *name){ /* list postgreSQL connection fields */ return Py_FindMethod(pgquery_methods, (PyObject *) self, name);}/* query type definition */staticforward PyTypeObject PgQueryType = { PyObject_HEAD_INIT(NULL) 0, /* ob_size */ "pgqueryobject", /* tp_name */ sizeof(pgqueryobject), /* tp_basicsize */ 0, /* tp_itemsize */ /* methods */ (destructor) pgquery_dealloc, /* tp_dealloc */ (printfunc) pgquery_print, /* tp_print */ (getattrfunc) pgquery_getattr, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_compare */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */};/* --------------------------------------------------------------------- *//* MODULE FUNCTIONS */#ifdef DEFAULT_VARS/* gets default host */static char getdefhost__doc__[] ="get_defhost() -- return default database host.";static PyObject *pggetdefhost(PyObject * self, PyObject * args){ /* checks args */ if (!PyArg_ParseTuple(args, "")) { PyErr_SetString(PyExc_SyntaxError, "method get_defhost() takes no parameter."); return NULL; } Py_XINCREF(pg_default_host); return pg_default_host;}/* sets default host */static char setdefhost__doc__[] ="set_defhost(string) -- set default database host. Return previous value.";static PyObject *pgsetdefhost(PyObject * self, PyObject * args){ char *temp = NULL; PyObject *old; /* gets arguments */ if (!PyArg_ParseTuple(args, "z", &temp)) { PyErr_SetString(PyExc_TypeError, "set_defhost(name), with name (string/None)."); return NULL; } /* adjusts value */ old = pg_default_host; if (temp) pg_default_host = PyString_FromString(temp); else { Py_INCREF(Py_None); pg_default_host = Py_None; } return old;}/* gets default base */static char getdefbase__doc__[] ="get_defbase() -- return default database name.";static PyObject *pggetdefbase(PyObject * self, PyObject * args){ /* checks args */ if (!PyArg_ParseTuple(args, "")) { PyErr_SetString(PyExc_SyntaxError, "method get_defbase() takes no parameter."); return NULL; } Py_XINCREF(pg_default_base); return pg_default_base;}/* sets default base */static char setdefbase__doc__[] ="set_defbase(string) -- set default database name. Return previous value";static PyObject *pgsetdefbase(PyObject * self, PyObject * args){ char *temp = NULL; PyObject *old; /* gets arguments */ if (!PyArg_ParseTuple(args, "z", &temp)) { PyErr_SetString(PyExc_TypeError, "set_defbase(name), with name (string/None)."); return NULL; } /* adjusts value */ old = pg_default_base; if (temp) pg_default_base = PyString_FromString(temp); else { Py_INCREF(Py_None); pg_default_base = Py_None; } return old;}/* gets default options */static char getdefopt__doc__[] ="get_defopt() -- return default database options.";static PyObject *pggetdefopt(PyObject * self, PyObject * args){ /* checks args */ if (!PyArg_ParseTuple(args, "")) { PyErr_SetString(PyExc_SyntaxError, "method get_defopt() takes no parameter."); return NULL; } Py_XINCREF(pg_default_opt); return pg_default_opt;}/* sets default opt */static char setdefopt__doc__[] ="set_defopt(string) -- set default database options. Return previous value.";static PyObject *pgsetdefopt(PyObject * self, PyObject * args){ char *temp = NULL; PyObject *old; /* gets arguments */ if (!PyArg_ParseTuple(args, "z", &temp)) { PyErr_SetString(PyExc_TypeError, "set_defopt(name), with name (string/None)."); return NULL; } /* adjusts value */ old = pg_default_opt; if (temp) pg_default_opt = PyString_FromString(temp); else { Py_INCREF(Py_None); pg_default_opt = Py_None; } return old;}/* gets default tty */static char getdeftty__doc__[] ="get_deftty() -- return default database debug terminal.";static PyObject *pggetdeftty(PyObject * self, PyObject * args){ /* checks args */ if (!PyArg_ParseTuple(args, "")) { PyErr_SetString(PyExc_SyntaxError, "method get_deftty() takes no parameter."); return NULL; } Py_XINCREF(pg_default_tty); return pg_default_tty;}/* sets default tty */static char setdeftty__doc__[] ="set_deftty(string) -- set default database debug terminal. ""Return previous value.";static PyObject *pgsetdeftty(PyObject * self, PyObject * args){ char *temp = NULL; PyObject *old; /* gets arguments */ if (!PyArg_ParseTuple(args, "z", &temp)) { PyErr_SetString(PyExc_TypeError, "set_deftty(name), with name (string/None)."); return NULL; } /* adjusts value */ old = pg_default_tty; if (temp) pg_default_tty = PyString_FromString(temp); else { Py_INCREF(Py_None); pg_default_tty = Py_None; } return old;}/* gets default username */static char getdefuser__doc__[] ="get_defuser() -- return default database username.";static PyObject *pggetdefuser(PyObject * self, PyObject * args){ /* checks args */ if (!PyArg_ParseTuple(args, "")) { PyErr_SetString(PyExc_SyntaxError, "method get_defuser() takes no parameter."); return NULL; } Py_XINCREF(pg_default_user); return pg_default_user;}/* sets default username */static char setdefuser__doc__[] ="set_defuser() -- set default database username. Return previous value.";static PyObject *pgsetdefuser(PyObject * self, PyObject * args){ char *temp = NULL; PyObject *old; /* gets arguments */ if (!PyArg_ParseTuple(args, "z", &temp)) { PyErr_SetString(PyExc_TypeError, "set_defuser(name), with name (string/None)."); return NULL; } /* adjusts value */ old = pg_default_user; if (temp) pg_default_user = PyString_FromString(temp); else { Py_INCREF(Py_None); pg_default_user = Py_None; } return old;}/* sets default password */static char setdefpasswd__doc__[] ="set_defpasswd() -- set default database password.";static PyObject *pgsetdefpasswd(PyObject * self, PyObject * args){ char *temp = NULL; PyObject *old; /* gets arguments */ if (!PyArg_ParseTuple(args, "z", &temp)) { PyErr_SetString(PyExc_TypeError, "set_defpasswd(password), with password (string/None)."); return NULL; } /* adjusts value */ old = pg_default_passwd; if (temp) pg_default_passwd = PyString_FromString(temp); else { Py_INCREF(Py_None); pg_default_passwd = Py_None; } Py_INCREF(Py_None); return Py_None;}/* gets default port */static char getdefport__doc__[] ="get_defport() -- return default database port.";static PyObject *pggetdefport(PyObject * self, PyObject * args){ /* checks args */ if (!PyArg_ParseTuple(args, "")) { PyErr_SetString(PyExc_SyntaxError, "method get_defport() takes no parameter."); return NULL; } Py_XINCREF(pg_default_port); return pg_default_port;}/* sets default port */static char setdefport__doc__[] ="set_defport(integer) -- set default database port. Return previous value.";static PyObject *pgsetdefport(PyObject * self, PyObject * args){ long int port = -2; PyObject *old; /* gets arguments */ if ((!PyArg_ParseTuple(args, "l", &port)) || (port < -1)) { PyErr_SetString(PyExc_TypeError, "set_defport(port), with port " "(positive integer/-1)."); return NULL; } /* adjusts value */ old = pg_default_port; if (port != -1) pg_default_port = PyLong_FromLong(port); else { Py_INCREF(Py_None); pg_default_port = Py_None; } return old;}#endif /* DEFAULT_VARS *//* List of functions defined in the module */static struct PyMethodDef pg_methods[] = { {"connect", (PyCFunction) pgconnect, 3, connect__doc__},#ifdef DEFAULT_VARS {"get_defhost", pggetdefhost, 1, getdefhost__doc__}, {"set_defhost", pgsetdefhost, 1, setdefhost__doc__}, {"get_defbase", pggetdefbase, 1, getdefbase__doc__}, {"set_defbase", pgsetdefbase, 1, setdefbase__doc__}, {"get_defopt", pggetdefopt, 1, getdefopt__doc__}, {"set_defopt", pgsetdefopt, 1, setdefopt__doc__}, {"get_deftty", pggetdeftty, 1, getdeftty__doc__}, {"set_deftty", pgsetdeftty, 1, setdeftty__doc__}, {"get_defport", pggetdefport, 1, getdefport__doc__}, {"set_defport", pgsetdefport, 1, setdefport__doc__}, {"get_defuser", pggetdefuser, 1, getdefuser__doc__}, {"set_defuser", pgsetdefuser, 1, setdefuser__doc__}, {"set_defpasswd", pgsetdefpasswd, 1, setdefpasswd__doc__},#endif /* DEFAULT_VARS */ {NULL, NULL} /* sentinel */};static char pg__doc__[] = "Python interface to PostgreSQL DB";/* Initialization function for the module */void init_pg(void); /* Python doesn't prototype this */voidinit_pg(void){ PyObject *mod, *dict, *v; /* Initialize here because some WIN platforms get confused otherwise */ PglargeType.ob_type = PgType.ob_type = PgQueryType.ob_type = &PyType_Type; /* Create the module and add the functions */ mod = Py_InitModule4("_pg", pg_methods, pg__doc__, NULL, PYTHON_API_VERSION); dict = PyModule_GetDict(mod); /* Add some symbolic constants to the module */ PGError = PyString_FromString("pg.error"); PyDict_SetItemString(dict, "error", PGError); /* Make the version available */ v = PyString_FromString(PyPgVersion); PyDict_SetItemString(dict, "version", v); PyDict_SetItemString(dict, "__version__", v); Py_DECREF(v);#ifdef LARGE_OBJECTS /* create mode for large objects */ PyDict_SetItemString(dict, "INV_READ", PyInt_FromLong(INV_READ)); PyDict_SetItemString(dict, "INV_WRITE", PyInt_FromLong(INV_WRITE)); /* position flags for lo_lseek */ PyDict_SetItemString(dict, "SEEK_SET", PyInt_FromLong(SEEK_SET)); PyDict_SetItemString(dict, "SEEK_CUR", PyInt_FromLong(SEEK_CUR)); PyDict_SetItemString(dict, "SEEK_END", PyInt_FromLong(SEEK_END));#endif /* LARGE_OBJECTS */#ifdef DEFAULT_VARS /* prepares default values */ Py_INCREF(Py_None); pg_default_host = Py_None; Py_INCREF(Py_None); pg_default_base = Py_None; Py_INCREF(Py_None); pg_default_opt = Py_None; Py_INCREF(Py_None); pg_default_port = Py_None; Py_INCREF(Py_None); pg_default_tty = Py_None; Py_INCREF(Py_None); pg_default_user = Py_None; Py_INCREF(Py_None); pg_default_passwd = Py_None;#endif /* DEFAULT_VARS */ /* Check for errors */ if (PyErr_Occurred()) Py_FatalError("can't initialize module _pg");}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -