LCOV - differential code coverage report
Current view: top level - src/interfaces/libpq/test - libpq_uri_regress.c (source / functions) Coverage Total Hit UBC CBC
Current: Differential Code Coverage HEAD vs 15 Lines: 88.0 % 25 22 3 22
Current Date: 2023-04-08 17:13:01 Functions: 100.0 % 1 1 1
Baseline: 15 Line coverage date bins:
Baseline Date: 2023-04-08 15:09:40 (240..) days: 88.0 % 25 22 3 22
Legend: Lines: hit not hit Function coverage date bins:
(240..) days: 100.0 % 1 1 1

 Age         Owner                  TLA  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-2023, 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
 4015 alvherre                   21 CBC          60 : main(int argc, char *argv[])
                                 22                 : {
                                 23                 :     PQconninfoOption *opts;
                                 24                 :     PQconninfoOption *defs;
                                 25                 :     PQconninfoOption *opt;
                                 26                 :     PQconninfoOption *def;
                                 27              60 :     char       *errmsg = NULL;
                                 28              60 :     bool        local = true;
                                 29                 : 
                                 30              60 :     if (argc != 2)
 4015 alvherre                   31 UBC           0 :         return 1;
                                 32                 : 
 4015 alvherre                   33 CBC          60 :     opts = PQconninfoParse(argv[1], &errmsg);
                                 34              60 :     if (opts == NULL)
                                 35                 :     {
  340 dgustafsson                36              14 :         fprintf(stderr, "libpq_uri_regress: %s", errmsg);
 4015 alvherre                   37              14 :         return 1;
                                 38                 :     }
                                 39                 : 
                                 40              46 :     defs = PQconndefaults();
                                 41              46 :     if (defs == NULL)
                                 42                 :     {
  340 dgustafsson                43 UBC           0 :         fprintf(stderr, "libpq_uri_regress: cannot fetch default options\n");
 4015 alvherre                   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                 :      */
 4015 alvherre                   53 CBC        1840 :     for (opt = opts, def = defs; opt->keyword; ++opt, ++def)
                                 54                 :     {
                                 55            1794 :         if (opt->val != NULL)
                                 56                 :         {
                                 57              91 :             if (def->val == NULL || strcmp(opt->val, def->val) != 0)
                                 58              90 :                 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              91 :             if (*opt->val &&
                                 70              91 :                 (strcmp(opt->keyword, "hostaddr") == 0 ||
                                 71              89 :                  (strcmp(opt->keyword, "host") == 0 && *opt->val != '/')))
                                 72                 :             {
                                 73              32 :                 local = false;
                                 74                 :             }
                                 75                 :         }
                                 76                 :     }
                                 77                 : 
                                 78              46 :     if (local)
                                 79              15 :         printf("(local)\n");
                                 80                 :     else
                                 81              31 :         printf("(inet)\n");
                                 82                 : 
                                 83              46 :     return 0;
                                 84                 : }
        

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