LCOV - differential code coverage report
Current view: top level - contrib/ltree_plpython - ltree_plpython.c (source / functions) Coverage Total Hit UIC GBC GIC CBC ECB
Current: Differential Code Coverage HEAD vs 15 Lines: 94.1 % 17 16 1 1 10 5 11
Current Date: 2023-04-08 15:15:32 Functions: 100.0 % 4 4 3 1 3
Baseline: 15
Baseline Date: 2023-04-08 15:09:40
Legend: Lines: hit not hit

           TLA  Line data    Source code
       1                 : #include "postgres.h"
       2                 : 
       3                 : #include "fmgr.h"
       4                 : #include "ltree/ltree.h"
       5                 : #include "plpython.h"
       6                 : 
       7 CBC           1 : PG_MODULE_MAGIC;
       8                 : 
       9                 : /* Linkage to functions in plpython module */
      10                 : typedef PyObject *(*PLyUnicode_FromStringAndSize_t) (const char *s, Py_ssize_t size);
      11                 : static PLyUnicode_FromStringAndSize_t PLyUnicode_FromStringAndSize_p;
      12                 : 
      13                 : 
      14                 : /*
      15                 :  * Module initialize function: fetch function pointers for cross-module calls.
      16 ECB             :  */
      17                 : void
      18 GIC           1 : _PG_init(void)
      19                 : {
      20 ECB             :     /* Asserts verify that typedefs above match original declarations */
      21                 :     AssertVariableIsOfType(&PLyUnicode_FromStringAndSize, PLyUnicode_FromStringAndSize_t);
      22 GIC           1 :     PLyUnicode_FromStringAndSize_p = (PLyUnicode_FromStringAndSize_t)
      23 CBC           1 :         load_external_function("$libdir/" PLPYTHON_LIBNAME, "PLyUnicode_FromStringAndSize",
      24                 :                                true, NULL);
      25 GIC           1 : }
      26                 : 
      27                 : 
      28                 : /* These defines must be after the module init function */
      29                 : #define PLyUnicode_FromStringAndSize PLyUnicode_FromStringAndSize_p
      30 ECB             : 
      31                 : 
      32 GIC           2 : PG_FUNCTION_INFO_V1(ltree_to_plpython);
      33 ECB             : 
      34                 : Datum
      35 CBC           2 : ltree_to_plpython(PG_FUNCTION_ARGS)
      36                 : {
      37 GIC           2 :     ltree      *in = PG_GETARG_LTREE_P(0);
      38                 :     int         i;
      39                 :     PyObject   *list;
      40 ECB             :     ltree_level *curlevel;
      41                 : 
      42 GBC           2 :     list = PyList_New(in->numlevel);
      43 GIC           2 :     if (!list)
      44 UIC           0 :         ereport(ERROR,
      45                 :                 (errcode(ERRCODE_OUT_OF_MEMORY),
      46 ECB             :                  errmsg("out of memory")));
      47                 : 
      48 GIC           2 :     curlevel = LTREE_FIRST(in);
      49 CBC           8 :     for (i = 0; i < in->numlevel; i++)
      50 ECB             :     {
      51 GIC           6 :         PyList_SetItem(list, i, PLyUnicode_FromStringAndSize(curlevel->name, curlevel->len));
      52               6 :         curlevel = LEVEL_NEXT(curlevel);
      53 ECB             :     }
      54                 : 
      55 CBC           2 :     PG_FREE_IF_COPY(in, 0);
      56                 : 
      57 GIC           2 :     return PointerGetDatum(list);
      58                 : }
        

Generated by: LCOV version v1.16-55-g56c0a2a