17db96d56Sopenharmony_ci/* prepare_protocol.c - the protocol for preparing values for SQLite
27db96d56Sopenharmony_ci *
37db96d56Sopenharmony_ci * Copyright (C) 2005-2010 Gerhard Häring <gh@ghaering.de>
47db96d56Sopenharmony_ci *
57db96d56Sopenharmony_ci * This file is part of pysqlite.
67db96d56Sopenharmony_ci *
77db96d56Sopenharmony_ci * This software is provided 'as-is', without any express or implied
87db96d56Sopenharmony_ci * warranty.  In no event will the authors be held liable for any damages
97db96d56Sopenharmony_ci * arising from the use of this software.
107db96d56Sopenharmony_ci *
117db96d56Sopenharmony_ci * Permission is granted to anyone to use this software for any purpose,
127db96d56Sopenharmony_ci * including commercial applications, and to alter it and redistribute it
137db96d56Sopenharmony_ci * freely, subject to the following restrictions:
147db96d56Sopenharmony_ci *
157db96d56Sopenharmony_ci * 1. The origin of this software must not be misrepresented; you must not
167db96d56Sopenharmony_ci *    claim that you wrote the original software. If you use this software
177db96d56Sopenharmony_ci *    in a product, an acknowledgment in the product documentation would be
187db96d56Sopenharmony_ci *    appreciated but is not required.
197db96d56Sopenharmony_ci * 2. Altered source versions must be plainly marked as such, and must not be
207db96d56Sopenharmony_ci *    misrepresented as being the original software.
217db96d56Sopenharmony_ci * 3. This notice may not be removed or altered from any source distribution.
227db96d56Sopenharmony_ci */
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_ci#include "prepare_protocol.h"
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_cistatic int
277db96d56Sopenharmony_cipysqlite_prepare_protocol_init(pysqlite_PrepareProtocol *self, PyObject *args,
287db96d56Sopenharmony_ci                               PyObject *kwargs)
297db96d56Sopenharmony_ci{
307db96d56Sopenharmony_ci    return 0;
317db96d56Sopenharmony_ci}
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_cistatic int
347db96d56Sopenharmony_cipysqlite_prepare_protocol_traverse(PyObject *self, visitproc visit, void *arg)
357db96d56Sopenharmony_ci{
367db96d56Sopenharmony_ci    Py_VISIT(Py_TYPE(self));
377db96d56Sopenharmony_ci    return 0;
387db96d56Sopenharmony_ci}
397db96d56Sopenharmony_ci
407db96d56Sopenharmony_cistatic void
417db96d56Sopenharmony_cipysqlite_prepare_protocol_dealloc(pysqlite_PrepareProtocol *self)
427db96d56Sopenharmony_ci{
437db96d56Sopenharmony_ci    PyTypeObject *tp = Py_TYPE(self);
447db96d56Sopenharmony_ci    PyObject_GC_UnTrack(self);
457db96d56Sopenharmony_ci    tp->tp_free(self);
467db96d56Sopenharmony_ci    Py_DECREF(tp);
477db96d56Sopenharmony_ci}
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_ciPyDoc_STRVAR(doc, "PEP 246 style object adaption protocol type.");
507db96d56Sopenharmony_ci
517db96d56Sopenharmony_cistatic PyType_Slot type_slots[] = {
527db96d56Sopenharmony_ci    {Py_tp_dealloc, pysqlite_prepare_protocol_dealloc},
537db96d56Sopenharmony_ci    {Py_tp_init, pysqlite_prepare_protocol_init},
547db96d56Sopenharmony_ci    {Py_tp_traverse, pysqlite_prepare_protocol_traverse},
557db96d56Sopenharmony_ci    {Py_tp_doc, (void *)doc},
567db96d56Sopenharmony_ci    {0, NULL},
577db96d56Sopenharmony_ci};
587db96d56Sopenharmony_ci
597db96d56Sopenharmony_cistatic PyType_Spec type_spec = {
607db96d56Sopenharmony_ci    .name = MODULE_NAME ".PrepareProtocol",
617db96d56Sopenharmony_ci    .basicsize = sizeof(pysqlite_PrepareProtocol),
627db96d56Sopenharmony_ci    .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
637db96d56Sopenharmony_ci              Py_TPFLAGS_IMMUTABLETYPE),
647db96d56Sopenharmony_ci    .slots = type_slots,
657db96d56Sopenharmony_ci};
667db96d56Sopenharmony_ci
677db96d56Sopenharmony_ciint
687db96d56Sopenharmony_cipysqlite_prepare_protocol_setup_types(PyObject *module)
697db96d56Sopenharmony_ci{
707db96d56Sopenharmony_ci    PyObject *type = PyType_FromModuleAndSpec(module, &type_spec, NULL);
717db96d56Sopenharmony_ci    if (type == NULL) {
727db96d56Sopenharmony_ci        return -1;
737db96d56Sopenharmony_ci    }
747db96d56Sopenharmony_ci    pysqlite_state *state = pysqlite_get_state(module);
757db96d56Sopenharmony_ci    state->PrepareProtocolType = (PyTypeObject *)type;
767db96d56Sopenharmony_ci    return 0;
777db96d56Sopenharmony_ci}
78