📄 csqlrelay.c
字号:
// FIXME: lame, python doesn't support building values from uint64_t's return Py_BuildValue("l", (long)rc);}static PyObject *totalRows(PyObject *self, PyObject *args) { long sqlrcur; uint64_t rc; if (!PyArg_ParseTuple(args, "l", &sqlrcur)) return NULL; rc=((sqlrcursor *)sqlrcur)->totalRows(); // FIXME: lame, python doesn't support building values from uint64_t's return Py_BuildValue("l", (long)rc);}static PyObject *affectedRows(PyObject *self, PyObject *args) { long sqlrcur; uint64_t rc; if (!PyArg_ParseTuple(args, "l", &sqlrcur)) return NULL; rc=((sqlrcursor *)sqlrcur)->affectedRows(); // FIXME: lame, python doesn't support building values from uint64_t's return Py_BuildValue("l", (long)rc);}static PyObject *firstRowIndex(PyObject *self, PyObject *args) { long sqlrcur; uint64_t rc; if (!PyArg_ParseTuple(args, "l", &sqlrcur)) return NULL; rc=((sqlrcursor *)sqlrcur)->firstRowIndex(); // FIXME: lame, python doesn't support building values from uint64_t's return Py_BuildValue("l", (long)rc);}static PyObject *endOfResultSet(PyObject *self, PyObject *args) { long sqlrcur; bool rc; if (!PyArg_ParseTuple(args, "l", &sqlrcur)) return NULL; rc=((sqlrcursor *)sqlrcur)->endOfResultSet(); return Py_BuildValue("h", (short)rc);}static PyObject *errorMessage(PyObject *self, PyObject *args) { long sqlrcur; if (!PyArg_ParseTuple(args, "l", &sqlrcur)) return NULL; return Py_BuildValue("s", ((sqlrcursor *)sqlrcur)->errorMessage());}static PyObject *getNullsAsEmptyStrings(PyObject *self, PyObject *args) { long sqlrcur; if (!PyArg_ParseTuple(args, "l", &sqlrcur)) return NULL; ((sqlrcursor *)sqlrcur)->getNullsAsEmptyStrings(); return Py_BuildValue("h", 0);}static PyObject *getNullsAsNone(PyObject *self, PyObject *args) { long sqlrcur; if (!PyArg_ParseTuple(args, "l", &sqlrcur)) return NULL; ((sqlrcursor *)sqlrcur)->getNullsAsNulls(); return Py_BuildValue("h", 0);}static PyObject *getField(PyObject *self, PyObject *args) { long sqlrcur; const char *rc=""; uint32_t rl=0; uint64_t row; PyObject *col; if (!PyArg_ParseTuple(args,#ifdef SUPPORTS_UNSIGNED "lKO",#else "lLO",#endif &sqlrcur, &row, &col)) return NULL; Py_BEGIN_ALLOW_THREADS if (PyString_Check(col)) { rc=((sqlrcursor *)sqlrcur)->getField(row, PyString_AsString(col)); rl=((sqlrcursor *)sqlrcur)->getFieldLength(row, PyString_AsString(col)); } else if (PyInt_Check(col)) { rc=((sqlrcursor *)sqlrcur)->getField(row, PyInt_AsLong(col)); rl=((sqlrcursor *)sqlrcur)->getFieldLength(row, PyInt_AsLong(col)); } Py_END_ALLOW_THREADS if (!rc) { Py_INCREF(Py_None); return Py_None; } return Py_BuildValue("s#", rc, rl);}static PyObject *getFieldAsInteger(PyObject *self, PyObject *args) { long sqlrcur; int64_t rc=0; uint64_t row; PyObject *col; if (!PyArg_ParseTuple(args,#ifdef SUPPORTS_UNSIGNED "lKO",#else "lLO",#endif &sqlrcur, &row, &col)) return NULL; Py_BEGIN_ALLOW_THREADS if (PyString_Check(col)) { rc=((sqlrcursor *)sqlrcur)->getFieldAsInteger(row, PyString_AsString(col)); } else if (PyInt_Check(col)) { rc=((sqlrcursor *)sqlrcur)->getFieldAsInteger(row, PyInt_AsLong(col)); } Py_END_ALLOW_THREADS // FIXME: lame, python doesn't support building values from int64_t's return Py_BuildValue("l", (long)rc);}static PyObject *getFieldAsDouble(PyObject *self, PyObject *args) { long sqlrcur; double rc=0.0; uint64_t row; PyObject *col; if (!PyArg_ParseTuple(args,#ifdef SUPPORTS_UNSIGNED "lKO",#else "lLO",#endif &sqlrcur, &row, &col)) return NULL; Py_BEGIN_ALLOW_THREADS if (PyString_Check(col)) { rc=((sqlrcursor *)sqlrcur)->getFieldAsDouble(row, PyString_AsString(col)); } else if (PyInt_Check(col)) { rc=((sqlrcursor *)sqlrcur)->getFieldAsDouble(row, PyInt_AsLong(col)); } Py_END_ALLOW_THREADS return Py_BuildValue("d", rc);}static PyObject *getFieldLength(PyObject *self, PyObject *args) { long sqlrcur; uint32_t rc=0; uint64_t row; PyObject *col; if (!PyArg_ParseTuple(args,#ifdef SUPPORTS_UNSIGNED "lKO",#else "lLO",#endif &sqlrcur, &row, &col)) return NULL; Py_BEGIN_ALLOW_THREADS if (PyString_Check(col)) { rc=((sqlrcursor *)sqlrcur)->getFieldLength(row, PyString_AsString(col)); } else if (PyInt_Check(col)) { rc=((sqlrcursor *)sqlrcur)->getFieldLength(row, PyInt_AsLong(col)); } Py_END_ALLOW_THREADS // FIXME: lame, python doesn't support building values from uint32_t's return Py_BuildValue("l", (long)rc);}static PyObject *_get_row(sqlrcursor *sqlrcur, uint64_t row){ uint32_t num_cols; uint32_t counter; const char * const *row_data; uint32_t *row_lengths; PyObject *my_list; num_cols=sqlrcur->colCount(); my_list = PyList_New(num_cols); Py_BEGIN_ALLOW_THREADS row_data=sqlrcur->getRow(row); row_lengths=sqlrcur->getRowLengths(row); Py_END_ALLOW_THREADS if (!row_data) { Py_INCREF(Py_None); return Py_None; } for (counter = 0; counter < num_cols; ++counter) { if (!row_data[counter]) { Py_INCREF(Py_None); PyList_SetItem(my_list, counter, Py_None); } else if (isNumberTypeChar(sqlrcur->getColumnType(counter))) { PyObject *obj; if (decimal) { PyObject *tuple=PyTuple_New(1); PyTuple_SetItem(tuple, 0, Py_BuildValue("s#", row_data[counter], row_lengths[counter])); obj=PyObject_CallObject(decimal, tuple); } else { if (!charstring::contains(row_data[counter], '.')) { obj=Py_BuildValue("L", charstring::toInteger(row_data[counter])); } else { obj=Py_BuildValue("f", atof(row_data[counter])); } } PyList_SetItem(my_list, counter, obj); } else { PyList_SetItem(my_list, counter, Py_BuildValue("s#", row_data[counter], row_lengths[counter])); } } return my_list;}static PyObject *getRow(PyObject *self, PyObject *args) { long sqlrcur; uint64_t row; if (!PyArg_ParseTuple(args,#ifdef SUPPORTS_UNSIGNED "lK",#else "lL",#endif &sqlrcur, &row)) return NULL; return _get_row((sqlrcursor *)sqlrcur, row);}static PyObject *getRowDictionary(PyObject *self, PyObject *args) { long sqlrcur; uint64_t row; PyObject *my_dictionary; uint32_t counter; const char *field; const char *name; if (!PyArg_ParseTuple(args,#ifdef SUPPORTS_UNSIGNED "lK",#else "lL",#endif &sqlrcur, &row)) return NULL; my_dictionary=PyDict_New(); for (counter=0; counter<((sqlrcursor *)sqlrcur)->colCount(); counter++) { Py_BEGIN_ALLOW_THREADS field=((sqlrcursor *)sqlrcur)->getField(row,counter); Py_END_ALLOW_THREADS name=((sqlrcursor *)sqlrcur)->getColumnName(counter); if (isNumberTypeChar(((sqlrcursor *)sqlrcur)->getColumnType(counter))) { if (!charstring::contains(field,'.')) { PyDict_SetItem(my_dictionary,Py_BuildValue("s",name),Py_BuildValue("L",charstring::toInteger(field))); } else { PyDict_SetItem(my_dictionary,Py_BuildValue("s",name),Py_BuildValue("f",atof(field))); } } else { if (field) { PyDict_SetItem(my_dictionary,Py_BuildValue("s",name),Py_BuildValue("s#",field,((sqlrcursor *)sqlrcur)->getFieldLength(row,counter))); } else { Py_INCREF(Py_None); PyDict_SetItem(my_dictionary,Py_BuildValue("s",name),Py_None); } } } return my_dictionary;}static PyObject *getRowRange(PyObject *self, PyObject *args) { uint64_t beg_row; uint64_t end_row; long sqlrcur; uint64_t counter; PyObject *my_list; my_list = PyList_New(0); if (!PyArg_ParseTuple(args,#ifdef SUPPORTS_UNSIGNED "lKK",#else "lLL",#endif &sqlrcur, &beg_row, &end_row)) return NULL; uint64_t max_rows=((sqlrcursor *)sqlrcur)->rowCount(); if (end_row>=max_rows) { end_row=max_rows-1; } for (counter = beg_row; counter <= end_row; ++counter) { PyList_Append(my_list, _get_row((sqlrcursor *)sqlrcur, counter)); } return my_list;}static PyObject *_get_row_lengths(sqlrcursor *sqlrcur, uint64_t row){ uint32_t num_cols; uint32_t counter; uint32_t *row_data; PyObject *my_list; num_cols=sqlrcur->colCount(); my_list = PyList_New(num_cols); Py_BEGIN_ALLOW_THREADS row_data=sqlrcur->getRowLengths(row); Py_END_ALLOW_THREADS if (!row_data) { Py_INCREF(Py_None); return Py_None; } for (counter = 0; counter < num_cols; ++counter) { if (!row_data[counter]) { Py_INCREF(Py_None); PyList_SetItem(my_list, counter, Py_None); } else { // FIXME: lame, python doesn't support building values from uint32_t's PyList_SetItem(my_list, counter, Py_BuildValue("l", (long)row_data[counter])); } } return my_list;}static PyObject *getRowLengths(PyObject *self, PyObject *args) { long sqlrcur; uint64_t row; if (!PyArg_ParseTuple(args,#ifdef SUPPORTS_UNSIGNED "lK",#else "lL",#endif &sqlrcur, &row)) return NULL; return _get_row_lengths((sqlrcursor *)sqlrcur, row);}static PyObject *getRowLengthsDictionary(PyObject *self, PyObject *args) { long sqlrcur; uint64_t row; PyObject *my_dictionary; if (!PyArg_ParseTuple(args,#ifdef SUPPORTS_UNSIGNED "lK",#else "lL",#endif &sqlrcur, &row)) return NULL; my_dictionary=PyDict_New(); for (uint32_t counter=0; counter<((sqlrcursor *)sqlrcur)->colCount(); counter++) { Py_BEGIN_ALLOW_THREADS PyDict_SetItem(my_dictionary, Py_BuildValue("s",((sqlrcursor *)sqlrcur)->getColumnName(counter)), // FIXME: lame, python doesn't support building values from uint32_t's Py_BuildValue("l",(long)((sqlrcursor *)sqlrcur)->getFieldLength(row,counter))); Py_END_ALLOW_THREADS } return my_dictionary;}static PyObject *getRowLengthsRange(PyObject *self, PyObject *args) { uint64_t beg_row; uint64_t end_row; long sqlrcur; uint64_t counter; PyObject *my_list; my_list = PyList_New(0); if (!PyArg_ParseTuple(args,#ifdef SUPPORTS_UNSIGNED "lKK",#else "lLL",#endif &sqlrcur, &beg_row, &end_row)) return NULL; uint64_t max_rows=((sqlrcursor *)sqlrcur)->rowCount(); if (end_row>=max_rows) { end_row=max_rows-1; } for (counter = beg_row; counter <= end_row; ++counter) { PyList_Append(my_list, _get_row_lengths((sqlrcursor *)sqlrcur, counter)); } return my_list;}static PyObject *getColumnName(PyObject *self, PyObject *args) { long sqlrcur; const char *rc; uint32_t col; if (!PyArg_ParseTuple(args,#ifdef SUPPORTS_UNSIGNED "lI",#else "li",#endif &sqlrcur, &col)) return NULL; rc=((sqlrcursor *)sqlrcur)->getColumnName(col); return Py_BuildValue("s", rc);}static PyObject *getColumnNames(PyObject *self, PyObject *args) { long sqlrcur; uint32_t counter; uint32_t num_cols; const char * const *rc; PyObject *my_list; my_list = PyList_New(0); if (!PyArg_ParseTuple(args, "l", &sqlrcur)) return NULL; num_cols=((sqlrcursor *)sqlrcur)->colCount(); rc=((sqlrcursor *)sqlrcur)->getColumnNames(); if (rc) { for (counter = 0; counter < num_cols; ++counter) { PyList_Append(my_list, Py_BuildValue("s", rc[counter])); } return my_list; } Py_INCREF(Py_None);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -