LCOV - code coverage report
Current view: top level - src/interfaces/libpq/test - libpq_uri_regress.c (source / functions) Coverage Total Hit
Test: PostgreSQL 20devel Lines: 88.0 % 25 22
Test Date: 2026-07-24 10:15:36 Functions: 100.0 % 1 1
Legend: Lines:     hit not hit
Branches: + taken - not taken # not executed
Branches: 87.5 % 24 21

             Branch data     Line data    Source code
       1                 :             : /*
       2                 :             :  * libpq_uri_regress.c
       3                 :             :  *      A test program for libpq URI format
       4                 :             :  *
       5                 :             :  * This is a helper for libpq conninfo regression testing.  It takes a single
       6                 :             :  * conninfo string as a parameter, parses it using PQconninfoParse, and then
       7                 :             :  * prints out the values from the parsed PQconninfoOption struct that differ
       8                 :             :  * from the defaults (obtained from PQconndefaults).
       9                 :             :  *
      10                 :             :  * Portions Copyright (c) 2012-2026, PostgreSQL Global Development Group
      11                 :             :  *
      12                 :             :  * IDENTIFICATION
      13                 :             :  *      src/interfaces/libpq/test/libpq_uri_regress.c
      14                 :             :  */
      15                 :             : 
      16                 :             : #include "postgres_fe.h"
      17                 :             : 
      18                 :             : #include "libpq-fe.h"
      19                 :             : 
      20                 :             : int
      21                 :          63 : main(int argc, char *argv[])
      22                 :             : {
      23                 :             :     PQconninfoOption *opts;
      24                 :             :     PQconninfoOption *defs;
      25                 :             :     PQconninfoOption *opt;
      26                 :             :     PQconninfoOption *def;
      27                 :          63 :     char       *errmsg = NULL;
      28                 :          63 :     bool        local = true;
      29                 :             : 
      30         [ -  + ]:          63 :     if (argc != 2)
      31                 :           0 :         return 1;
      32                 :             : 
      33                 :          63 :     opts = PQconninfoParse(argv[1], &errmsg);
      34         [ +  + ]:          63 :     if (opts == NULL)
      35                 :             :     {
      36                 :          16 :         fprintf(stderr, "libpq_uri_regress: %s", errmsg);
      37                 :          16 :         return 1;
      38                 :             :     }
      39                 :             : 
      40                 :          47 :     defs = PQconndefaults();
      41         [ -  + ]:          47 :     if (defs == NULL)
      42                 :             :     {
      43                 :           0 :         fprintf(stderr, "libpq_uri_regress: cannot fetch default options\n");
      44                 :           0 :         return 1;
      45                 :             :     }
      46                 :             : 
      47                 :             :     /*
      48                 :             :      * Loop on the options, and print the value of each if not the default.
      49                 :             :      *
      50                 :             :      * XXX this coding assumes that PQconninfoOption structs always have the
      51                 :             :      * keywords in the same order.
      52                 :             :      */
      53         [ +  + ]:        2491 :     for (opt = opts, def = defs; opt->keyword; ++opt, ++def)
      54                 :             :     {
      55         [ +  + ]:        2444 :         if (opt->val != NULL)
      56                 :             :         {
      57   [ +  +  +  + ]:          94 :             if (def->val == NULL || strcmp(opt->val, def->val) != 0)
      58                 :          93 :                 printf("%s='%s' ", opt->keyword, opt->val);
      59                 :             : 
      60                 :             :             /*
      61                 :             :              * Try to detect if this is a Unix-domain socket or inet.  This is
      62                 :             :              * a bit grotty but it's the same thing that libpq itself does.
      63                 :             :              *
      64                 :             :              * Note that we directly test for '/' instead of using
      65                 :             :              * is_absolute_path, as that would be considerably more messy.
      66                 :             :              * This would fail on Windows, but that platform doesn't have
      67                 :             :              * Unix-domain sockets anyway.
      68                 :             :              */
      69         [ +  - ]:          94 :             if (*opt->val &&
      70         [ +  + ]:          94 :                 (strcmp(opt->keyword, "hostaddr") == 0 ||
      71   [ +  +  +  + ]:          92 :                  (strcmp(opt->keyword, "host") == 0 && *opt->val != '/')))
      72                 :             :             {
      73                 :          33 :                 local = false;
      74                 :             :             }
      75                 :             :         }
      76                 :             :     }
      77                 :             : 
      78         [ +  + ]:          47 :     if (local)
      79                 :          15 :         printf("(local)\n");
      80                 :             :     else
      81                 :          32 :         printf("(inet)\n");
      82                 :             : 
      83                 :          47 :     return 0;
      84                 :             : }
        

Generated by: LCOV version 2.0-1