LCOV - differential code coverage report
Current view: top level - src/pl/plpython - plpy_planobject.c (source / functions) Coverage Total Hit UBC CBC
Current: Differential Code Coverage 16@8cea358b128 vs 17@8cea358b128 Lines: 88.1 % 42 37 5 37
Current Date: 2024-04-14 14:21:10 Functions: 100.0 % 7 7 7
Baseline: 16@8cea358b128 Branches: 50.0 % 16 8 8 8
Baseline Date: 2024-04-14 14:21:09 Line coverage date bins:
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed (240..) days: 88.1 % 42 37 5 37
Function coverage date bins:
(240..) days: 100.0 % 7 7 7
Branch coverage date bins:
(240..) days: 50.0 % 16 8 8 8

 Age         Owner                    Branch data    TLA  Line data    Source code
                                  1                 :                : /*
                                  2                 :                :  * the PLyPlan class
                                  3                 :                :  *
                                  4                 :                :  * src/pl/plpython/plpy_planobject.c
                                  5                 :                :  */
                                  6                 :                : 
                                  7                 :                : #include "postgres.h"
                                  8                 :                : 
                                  9                 :                : #include "plpy_cursorobject.h"
                                 10                 :                : #include "plpy_elog.h"
                                 11                 :                : #include "plpy_planobject.h"
                                 12                 :                : #include "plpy_spi.h"
                                 13                 :                : #include "plpython.h"
                                 14                 :                : #include "utils/memutils.h"
                                 15                 :                : 
                                 16                 :                : static void PLy_plan_dealloc(PyObject *arg);
                                 17                 :                : static PyObject *PLy_plan_cursor(PyObject *self, PyObject *args);
                                 18                 :                : static PyObject *PLy_plan_execute(PyObject *self, PyObject *args);
                                 19                 :                : static PyObject *PLy_plan_status(PyObject *self, PyObject *args);
                                 20                 :                : 
                                 21                 :                : static char PLy_plan_doc[] = "Store a PostgreSQL plan";
                                 22                 :                : 
                                 23                 :                : static PyMethodDef PLy_plan_methods[] = {
                                 24                 :                :     {"cursor", PLy_plan_cursor, METH_VARARGS, NULL},
                                 25                 :                :     {"execute", PLy_plan_execute, METH_VARARGS, NULL},
                                 26                 :                :     {"status", PLy_plan_status, METH_VARARGS, NULL},
                                 27                 :                :     {NULL, NULL, 0, NULL}
                                 28                 :                : };
                                 29                 :                : 
                                 30                 :                : static PyTypeObject PLy_PlanType = {
                                 31                 :                :     PyVarObject_HEAD_INIT(NULL, 0)
                                 32                 :                :     .tp_name = "PLyPlan",
                                 33                 :                :     .tp_basicsize = sizeof(PLyPlanObject),
                                 34                 :                :     .tp_dealloc = PLy_plan_dealloc,
                                 35                 :                :     .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
                                 36                 :                :     .tp_doc = PLy_plan_doc,
                                 37                 :                :     .tp_methods = PLy_plan_methods,
                                 38                 :                : };
                                 39                 :                : 
                                 40                 :                : void
 4501 peter_e@gmx.net            41                 :CBC          23 : PLy_plan_init_type(void)
                                 42                 :                : {
                                 43         [ -  + ]:             23 :     if (PyType_Ready(&PLy_PlanType) < 0)
 4501 peter_e@gmx.net            44         [ #  # ]:UBC           0 :         elog(ERROR, "could not initialize PLy_PlanType");
 4501 peter_e@gmx.net            45                 :CBC          23 : }
                                 46                 :                : 
                                 47                 :                : PyObject *
                                 48                 :             26 : PLy_plan_new(void)
                                 49                 :                : {
                                 50                 :                :     PLyPlanObject *ob;
                                 51                 :                : 
                                 52         [ -  + ]:             26 :     if ((ob = PyObject_New(PLyPlanObject, &PLy_PlanType)) == NULL)
 4501 peter_e@gmx.net            53                 :UBC           0 :         return NULL;
                                 54                 :                : 
 4501 peter_e@gmx.net            55                 :CBC          26 :     ob->plan = NULL;
                                 56                 :             26 :     ob->nargs = 0;
                                 57                 :             26 :     ob->types = NULL;
                                 58                 :             26 :     ob->values = NULL;
                                 59                 :             26 :     ob->args = NULL;
 3083 tgl@sss.pgh.pa.us          60                 :             26 :     ob->mcxt = NULL;
                                 61                 :                : 
 4501 peter_e@gmx.net            62                 :             26 :     return (PyObject *) ob;
                                 63                 :                : }
                                 64                 :                : 
                                 65                 :                : bool
                                 66                 :             21 : is_PLyPlanObject(PyObject *ob)
                                 67                 :                : {
                                 68                 :             21 :     return ob->ob_type == &PLy_PlanType;
                                 69                 :                : }
                                 70                 :                : 
                                 71                 :                : static void
                                 72                 :             22 : PLy_plan_dealloc(PyObject *arg)
                                 73                 :                : {
                                 74                 :             22 :     PLyPlanObject *ob = (PLyPlanObject *) arg;
                                 75                 :                : 
                                 76         [ +  + ]:             22 :     if (ob->plan)
                                 77                 :                :     {
                                 78                 :             19 :         SPI_freeplan(ob->plan);
 3083 tgl@sss.pgh.pa.us          79                 :             19 :         ob->plan = NULL;
                                 80                 :                :     }
                                 81         [ +  - ]:             22 :     if (ob->mcxt)
                                 82                 :                :     {
                                 83                 :             22 :         MemoryContextDelete(ob->mcxt);
                                 84                 :             22 :         ob->mcxt = NULL;
                                 85                 :                :     }
 4501 peter_e@gmx.net            86                 :             22 :     arg->ob_type->tp_free(arg);
                                 87                 :             22 : }
                                 88                 :                : 
                                 89                 :                : 
                                 90                 :                : static PyObject *
 2605                            91                 :              1 : PLy_plan_cursor(PyObject *self, PyObject *args)
                                 92                 :                : {
                                 93                 :              1 :     PyObject   *planargs = NULL;
                                 94                 :                : 
                                 95         [ -  + ]:              1 :     if (!PyArg_ParseTuple(args, "|O", &planargs))
 2605 peter_e@gmx.net            96                 :UBC           0 :         return NULL;
                                 97                 :                : 
 2605 peter_e@gmx.net            98                 :CBC           1 :     return PLy_cursor_plan(self, planargs);
                                 99                 :                : }
                                100                 :                : 
                                101                 :                : 
                                102                 :                : static PyObject *
                                103                 :              1 : PLy_plan_execute(PyObject *self, PyObject *args)
                                104                 :                : {
                                105                 :              1 :     PyObject   *list = NULL;
                                106                 :              1 :     long        limit = 0;
                                107                 :                : 
                                108         [ -  + ]:              1 :     if (!PyArg_ParseTuple(args, "|Ol", &list, &limit))
 2605 peter_e@gmx.net           109                 :UBC           0 :         return NULL;
                                110                 :                : 
 2605 peter_e@gmx.net           111                 :CBC           1 :     return PLy_spi_execute_plan(self, list, limit);
                                112                 :                : }
                                113                 :                : 
                                114                 :                : 
                                115                 :                : static PyObject *
 4501                           116                 :              2 : PLy_plan_status(PyObject *self, PyObject *args)
                                117                 :                : {
 2726                           118         [ +  - ]:              2 :     if (PyArg_ParseTuple(args, ":status"))
                                119                 :                :     {
 4501                           120                 :              2 :         Py_INCREF(Py_True);
                                121                 :              2 :         return Py_True;
                                122                 :                :         /* return PyLong_FromLong(self->status); */
                                123                 :                :     }
 4501 peter_e@gmx.net           124                 :UBC           0 :     return NULL;
                                125                 :                : }
        

Generated by: LCOV version 2.1-beta2-3-g6141622