prepare_protocol.c 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. #include "prepare_protocol.h"
  24. static int
  25. pysqlite_prepare_protocol_init(pysqlite_PrepareProtocol *self, PyObject *args,
  26. PyObject *kwargs)
  27. {
  28. return 0;
  29. }
  30. static int
  31. pysqlite_prepare_protocol_traverse(PyObject *self, visitproc visit, void *arg)
  32. {
  33. Py_VISIT(Py_TYPE(self));
  34. return 0;
  35. }
  36. static void
  37. pysqlite_prepare_protocol_dealloc(pysqlite_PrepareProtocol *self)
  38. {
  39. PyTypeObject *tp = Py_TYPE(self);
  40. PyObject_GC_UnTrack(self);
  41. tp->tp_free(self);
  42. Py_DECREF(tp);
  43. }
  44. PyDoc_STRVAR(doc, "PEP 246 style object adaption protocol type.");
  45. static PyType_Slot type_slots[] = {
  46. {Py_tp_dealloc, pysqlite_prepare_protocol_dealloc},
  47. {Py_tp_init, pysqlite_prepare_protocol_init},
  48. {Py_tp_traverse, pysqlite_prepare_protocol_traverse},
  49. {Py_tp_doc, (void *)doc},
  50. {0, NULL},
  51. };
  52. static PyType_Spec type_spec = {
  53. .name = MODULE_NAME ".PrepareProtocol",
  54. .basicsize = sizeof(pysqlite_PrepareProtocol),
  55. .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
  56. Py_TPFLAGS_IMMUTABLETYPE),
  57. .slots = type_slots,
  58. };
  59. int
  60. pysqlite_prepare_protocol_setup_types(PyObject *module)
  61. {
  62. PyObject *type = PyType_FromModuleAndSpec(module, &type_spec, NULL);
  63. if (type == NULL) {
  64. return -1;
  65. }
  66. pysqlite_state *state = pysqlite_get_state(module);
  67. state->PrepareProtocolType = (PyTypeObject *)type;
  68. return 0;
  69. }