This commit is contained in:
Kovid Goyal 2019-02-27 05:44:53 +05:30
commit e3f51686ee
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -52,7 +52,7 @@ static void sort_concat_step(sqlite3_context *context, int argc, sqlite3_value *
list->vals[list->count] = (SortConcatItem*)calloc(1, sizeof(SortConcatItem)); list->vals[list->count] = (SortConcatItem*)calloc(1, sizeof(SortConcatItem));
if (list->vals[list->count] == NULL) return; if (list->vals[list->count] == NULL) return;
idx = sqlite3_value_int(argv[0]); idx = sqlite3_value_int(argv[0]);
val = sqlite3_value_text(argv[1]); val = sqlite3_value_text(argv[1]);
sz = sqlite3_value_bytes(argv[1]); sz = sqlite3_value_bytes(argv[1]);
@ -61,7 +61,7 @@ static void sort_concat_step(sqlite3_context *context, int argc, sqlite3_value *
list->vals[list->count]->val = (unsigned char*)calloc(sz, sizeof(unsigned char)); list->vals[list->count]->val = (unsigned char*)calloc(sz, sizeof(unsigned char));
if (list->vals[list->count]->val == NULL) if (list->vals[list->count]->val == NULL)
{free(list->vals[list->count]); return;} {free(list->vals[list->count]); return;}
list->vals[list->count]->index = idx; list->vals[list->count]->index = idx;
list->vals[list->count]->length = sz; list->vals[list->count]->length = sz;
@ -88,7 +88,7 @@ static unsigned char* sort_concat_do_finalize(SortConcatList *list, const unsign
unsigned char *ans, *pos; unsigned char *ans, *pos;
unsigned int sz = 0, i; unsigned int sz = 0, i;
for (i = 0; i < list->count; i++) { for (i = 0; i < list->count; i++) {
sz += list->vals[i]->length; sz += list->vals[i]->length;
} }
sz += list->count; sz += list->count;
@ -221,7 +221,7 @@ static void identifiers_concat_finalize(sqlite3_context *context) {
list = (IdentifiersConcatList*) sqlite3_aggregate_context(context, sizeof(*list)); list = (IdentifiersConcatList*) sqlite3_aggregate_context(context, sizeof(*list));
if (list == NULL || list->vals == NULL || list->count < 1) return; if (list == NULL || list->vals == NULL || list->count < 1) return;
for (i = 0; i < list->count; i++) { for (i = 0; i < list->count; i++) {
sz += list->vals[i]->length; sz += list->vals[i]->length;
} }
sz += list->count; // Space for commas sz += list->count; // Space for commas
@ -263,6 +263,8 @@ sqlite_custom_init_funcs(PyObject *self, PyObject *args) {
Py_RETURN_NONE; Py_RETURN_NONE;
} }
static char sqlite_custom_doc[] = "Implementation of custom sqlite methods in C for speed.";
static PyMethodDef sqlite_custom_methods[] = { static PyMethodDef sqlite_custom_methods[] = {
{"init_funcs", sqlite_custom_init_funcs, METH_VARARGS, {"init_funcs", sqlite_custom_init_funcs, METH_VARARGS,
"init_funcs()\n\nInitialize module." "init_funcs()\n\nInitialize module."
@ -271,11 +273,33 @@ static PyMethodDef sqlite_custom_methods[] = {
{NULL, NULL, 0, NULL} {NULL, NULL, 0, NULL}
}; };
CALIBRE_MODINIT_FUNC #if PY_MAJOR_VERSION >= 3
initsqlite_custom(void) { #define INITERROR return NULL
#define INITMODULE PyModule_Create(&sqlite_custom_module)
static struct PyModuleDef sqlite_custom_module = {
/* m_base */ PyModuleDef_HEAD_INIT,
/* m_name */ "sqlite_custom",
/* m_doc */ sqlite_custom_doc,
/* m_size */ -1,
/* m_methods */ sqlite_custom_methods,
/* m_slots */ 0,
/* m_traverse */ 0,
/* m_clear */ 0,
/* m_free */ 0,
};
CALIBRE_MODINIT_FUNC PyInit_sqlite_custom(void) {
#else
#define INITERROR return
#define INITMODULE Py_InitModule3("sqlite_custom", sqlite_custom_methods, sqlite_custom_doc)
CALIBRE_MODINIT_FUNC initsqlite_custom(void) {
#endif
PyObject *m; PyObject *m;
m = Py_InitModule3("sqlite_custom", sqlite_custom_methods, m = INITMODULE;
"Implementation of custom sqlite methods in C for speed." if (m == NULL) {
); INITERROR;
if (m == NULL) return; }
#if PY_MAJOR_VERSION >= 3
return m;
#endif
} }