LCOV - code coverage report
Current view: top level - contrib/ltree_plpython - ltree_plpython.c (source / functions) Hit Total Coverage
Test: PostgreSQL 19devel Lines: 16 17 94.1 %
Date: 2026-02-07 10:18:48 Functions: 4 4 100.0 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.16