1/* prepare_protocol.c - the protocol for preparing values for SQLite 2 * 3 * Copyright (C) 2005-2010 Gerhard Häring <gh@ghaering.de> 4 * 5 * This file is part of pysqlite. 6 * 7 * This software is provided 'as-is', without any express or implied 8 * warranty. In no event will the authors be held liable for any damages 9 * arising from the use of this software. 10 * 11 * Permission is granted to anyone to use this software for any purpose, 12 * including commercial applications, and to alter it and redistribute it 13 * freely, subject to the following restrictions: 14 * 15 * 1. The origin of this software must not be misrepresented; you must not 16 * claim that you wrote the original software. If you use this software 17 * in a product, an acknowledgment in the product documentation would be 18 * appreciated but is not required. 19 * 2. Altered source versions must be plainly marked as such, and must not be 20 * misrepresented as being the original software. 21 * 3. This notice may not be removed or altered from any source distribution. 22 */ 23 24#include "prepare_protocol.h" 25 26static int 27pysqlite_prepare_protocol_init(pysqlite_PrepareProtocol *self, PyObject *args, 28 PyObject *kwargs) 29{ 30 return 0; 31} 32 33static int 34pysqlite_prepare_protocol_traverse(PyObject *self, visitproc visit, void *arg) 35{ 36 Py_VISIT(Py_TYPE(self)); 37 return 0; 38} 39 40static void 41pysqlite_prepare_protocol_dealloc(pysqlite_PrepareProtocol *self) 42{ 43 PyTypeObject *tp = Py_TYPE(self); 44 PyObject_GC_UnTrack(self); 45 tp->tp_free(self); 46 Py_DECREF(tp); 47} 48 49PyDoc_STRVAR(doc, "PEP 246 style object adaption protocol type."); 50 51static PyType_Slot type_slots[] = { 52 {Py_tp_dealloc, pysqlite_prepare_protocol_dealloc}, 53 {Py_tp_init, pysqlite_prepare_protocol_init}, 54 {Py_tp_traverse, pysqlite_prepare_protocol_traverse}, 55 {Py_tp_doc, (void *)doc}, 56 {0, NULL}, 57}; 58 59static PyType_Spec type_spec = { 60 .name = MODULE_NAME ".PrepareProtocol", 61 .basicsize = sizeof(pysqlite_PrepareProtocol), 62 .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | 63 Py_TPFLAGS_IMMUTABLETYPE), 64 .slots = type_slots, 65}; 66 67int 68pysqlite_prepare_protocol_setup_types(PyObject *module) 69{ 70 PyObject *type = PyType_FromModuleAndSpec(module, &type_spec, NULL); 71 if (type == NULL) { 72 return -1; 73 } 74 pysqlite_state *state = pysqlite_get_state(module); 75 state->PrepareProtocolType = (PyTypeObject *)type; 76 return 0; 77} 78