static PyObject * search(PyObject *self, PyObject *args){ TCTDB *tdb; int ecode, i, rsiz; const char *rbuf, *name; TCMAP *cols; TDBQRY *qry; TCLIST *res; const char *dbname; const char *sfield; const char *stext; const int *max; PyObject* pDict = PyDict_New(); PyObject* pList = PyList_New(0); if (!PyArg_ParseTuple(args, "sssi", &dbname, &sfield, &stext,&max)) return NULL; tdb = tctdbnew(); if(!tctdbopen(tdb, dbname, TDBONOLCK | TDBOREADER)){ ecode = tctdbecode(tdb); fprintf(stderr, "open error: %s\n", tctdberrmsg(ecode)); } qry = tctdbqrynew(tdb); tctdbqryaddcond(qry, sfield, TDBQCSTREQ, stext); tctdbqrysetorder(qry, "savedate", TDBQOSTRDESC); tctdbqrysetlimit(qry, max, 0); res = tctdbqrysearch(qry); for(i = 0; i < tclistnum(res); i++){ rbuf = tclistval(res, i, &rsiz); cols = tctdbget(tdb, rbuf, rsiz); if(cols){ tcmapiterinit(cols); PyDict_SetItemString(pDict, "kid", Py_BuildValue("s",rbuf)); while((name = tcmapiternext2(cols)) != NULL){ PyDict_SetItemString(pDict, name, Py_BuildValue("s", tcmapget2(cols, name))); } PyList_Append(pList,pDict); pDict = PyDict_New(); tcmapdel(cols); } } tclistdel(res); tctdbqrydel(qry); if(!tctdbclose(tdb)){ ecode = tctdbecode(tdb); fprintf(stderr, "close error: %s\n", tctdberrmsg(ecode)); } tctdbdel(tdb); return Py_BuildValue("O",pList); }
static void _set_tdb_error(TCTDB *db) { log_trace("ENTER"); int ecode = tctdbecode(db); const char *msg = tctdberrmsg(ecode); if (ecode == TCENOREC) { PyErr_SetString(PyExc_KeyError, msg); } else { log_debug("TDB error: %s", msg); tc_Error_SetCodeAndString(ecode, msg); } }
static void raise_table_error(TCTDB *db) { int code = tctdbecode(db); const char *msg = tctdberrmsg(code); if (code == TCENOREC) { PyErr_SetString(PyExc_KeyError, msg); } else { PyErr_SetString(TableError, msg); } }
/* print error information */ static void printerr(TCTDB *tdb){ const char *path = tctdbpath(tdb); int ecode = tctdbecode(tdb); fprintf(stderr, "%s: %s: %d: %s\n", g_progname, path ? path : "-", ecode, tctdberrmsg(ecode)); }
/* print error information */ static void printdberr(TCTDB *tdb){ const char *path = tctdbpath(tdb); int ecode = tctdbecode(tdb); eprintf("%s: %d: %s\n", path ? path : "-", ecode, tctdberrmsg(ecode)); }