⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csqlrelay.c

📁 适合于Unix/Linux下的一个持久数据库连接池
💻 C
📖 第 1 页 / 共 4 页
字号:
  // 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 + -