LCOV - differential code coverage report
Current view: top level - src/backend/utils/adt - quote.c (source / functions) Coverage Total Hit CBC EUB ECB
Current: 0e5ff9b9b45a657aea12440478dc002e9b01f138 vs 0123ce131fca454009439dfa3b2266d1d40737d7 Lines: 100.0 % 37 37 37
Current Date: 2026-03-14 14:10:32 -0400 Functions: 100.0 % 5 5 5
Baseline: lcov-20260315-024220-baseline Branches: 100.0 % 12 12 12 7 5
Baseline Date: 2026-03-14 15:27:56 +0100 Line coverage date bins:
Legend: Lines:     hit not hit
Branches: + taken - not taken # not executed
(30,360] days: 100.0 % 2 2 2
(360..) days: 100.0 % 35 35 35
Function coverage date bins:
(360..) days: 100.0 % 5 5 5
Branch coverage date bins:
(360..) days: 50.0 % 24 12 12 7 5

 Age         Owner                    Branch data    TLA  Line data    Source code
                                  1                 :                : /*-------------------------------------------------------------------------
                                  2                 :                :  *
                                  3                 :                :  * quote.c
                                  4                 :                :  *    Functions for quoting identifiers and literals
                                  5                 :                :  *
                                  6                 :                :  * Portions Copyright (c) 2000-2026, PostgreSQL Global Development Group
                                  7                 :                :  *
                                  8                 :                :  *
                                  9                 :                :  * IDENTIFICATION
                                 10                 :                :  *    src/backend/utils/adt/quote.c
                                 11                 :                :  *
                                 12                 :                :  *-------------------------------------------------------------------------
                                 13                 :                :  */
                                 14                 :                : #include "postgres.h"
                                 15                 :                : 
                                 16                 :                : #include "utils/builtins.h"
                                 17                 :                : #include "varatt.h"
                                 18                 :                : 
                                 19                 :                : 
                                 20                 :                : /*
                                 21                 :                :  * quote_ident -
                                 22                 :                :  *    returns a properly quoted identifier
                                 23                 :                :  */
                                 24                 :                : Datum
 9322 JanWieck@Yahoo.com         25                 :CBC        4396 : quote_ident(PG_FUNCTION_ARGS)
                                 26                 :                : {
 6564 tgl@sss.pgh.pa.us          27                 :           4396 :     text       *t = PG_GETARG_TEXT_PP(0);
                                 28                 :                :     const char *qstr;
                                 29                 :                :     char       *str;
                                 30                 :                : 
                                 31                 :           4396 :     str = text_to_cstring(t);
 7664                            32                 :           4396 :     qstr = quote_identifier(str);
 6564                            33                 :           4396 :     PG_RETURN_TEXT_P(cstring_to_text(qstr));
                                 34                 :                : }
                                 35                 :                : 
                                 36                 :                : /*
                                 37                 :                :  * quote_literal_internal -
                                 38                 :                :  *    helper function for quote_literal and quote_literal_cstr
                                 39                 :                :  *
                                 40                 :                :  * NOTE: This must produce output that will work in old servers with
                                 41                 :                :  * standard_conforming_strings = off.  It's used for example by
                                 42                 :                :  * dblink, which may send the result to another server.
                                 43                 :                :  */
                                 44                 :                : static size_t
 5500 peter_e@gmx.net            45                 :           4827 : quote_literal_internal(char *dst, const char *src, size_t len)
                                 46                 :                : {
                                 47                 :                :     const char *s;
 5594 rhaas@postgresql.org       48                 :           4827 :     char       *savedst = dst;
                                 49                 :                : 
                                 50         [ +  + ]:         350659 :     for (s = src; s < src + len; s++)
                                 51                 :                :     {
                                 52         [ +  + ]:         345837 :         if (*s == '\\')
                                 53                 :                :         {
                                 54                 :              5 :             *dst++ = ESCAPE_STRING_SYNTAX;
                                 55                 :              5 :             break;
                                 56                 :                :         }
                                 57                 :                :     }
                                 58                 :                : 
                                 59                 :           4827 :     *dst++ = '\'';
                                 60         [ +  + ]:         350666 :     while (len-- > 0)
                                 61                 :                :     {
                                 62   [ +  +  +  + ]:         345839 :         if (SQL_STR_DOUBLE(*src, true))
                                 63                 :             24 :             *dst++ = *src;
                                 64                 :         345839 :         *dst++ = *src++;
                                 65                 :                :     }
                                 66                 :           4827 :     *dst++ = '\'';
                                 67                 :                : 
                                 68                 :           4827 :     return dst - savedst;
                                 69                 :                : }
                                 70                 :                : 
                                 71                 :                : /*
                                 72                 :                :  * quote_literal -
                                 73                 :                :  *    returns a properly quoted literal
                                 74                 :                :  */
                                 75                 :                : Datum
 9322 JanWieck@Yahoo.com         76                 :           1769 : quote_literal(PG_FUNCTION_ARGS)
                                 77                 :                : {
 3290 noah@leadboat.com          78                 :           1769 :     text       *t = PG_GETARG_TEXT_PP(0);
                                 79                 :                :     text       *result;
                                 80                 :                :     char       *cp1;
                                 81                 :                :     char       *cp2;
                                 82                 :                :     int         len;
                                 83                 :                : 
                                 84   [ -  +  -  -  :           1769 :     len = VARSIZE_ANY_EXHDR(t);
                                     -  -  -  -  +  
                                                 + ]
                                 85                 :                :     /* We make a worst-case result area; wasting a little space is OK */
 7561 bruce@momjian.us           86                 :           1769 :     result = (text *) palloc(len * 2 + 3 + VARHDRSZ);
                                 87                 :                : 
 3290 noah@leadboat.com          88         [ +  + ]:           1769 :     cp1 = VARDATA_ANY(t);
 9322 JanWieck@Yahoo.com         89                 :           1769 :     cp2 = VARDATA(result);
                                 90                 :                : 
 5594 rhaas@postgresql.org       91                 :           1769 :     SET_VARSIZE(result, VARHDRSZ + quote_literal_internal(cp2, cp1, len));
                                 92                 :                : 
                                 93                 :           1769 :     PG_RETURN_TEXT_P(result);
                                 94                 :                : }
                                 95                 :                : 
                                 96                 :                : /*
                                 97                 :                :  * quote_literal_cstr -
                                 98                 :                :  *    returns a properly quoted literal
                                 99                 :                :  */
                                100                 :                : char *
 5500 peter_e@gmx.net           101                 :           3058 : quote_literal_cstr(const char *rawstr)
                                102                 :                : {
                                103                 :                :     char       *result;
                                104                 :                :     int         len;
                                105                 :                :     int         newlen;
                                106                 :                : 
 5594 rhaas@postgresql.org      107                 :           3058 :     len = strlen(rawstr);
                                108                 :                :     /* We make a worst-case result area; wasting a little space is OK */
  342 michael@paquier.xyz       109                 :           3058 :     result = palloc(
                                110                 :                :                     (len * 2)   /* doubling for every character if each one is
                                111                 :                :                                  * a quote */
                                112                 :                :                     + 3         /* two outer quotes + possibly 'E' if needed */
                                113                 :           3058 :                     + 1         /* null terminator */
                                114                 :                :         );
                                115                 :                : 
 5594 rhaas@postgresql.org      116                 :           3058 :     newlen = quote_literal_internal(result, rawstr, len);
                                117                 :           3058 :     result[newlen] = '\0';
                                118                 :                : 
                                119                 :           3058 :     return result;
                                120                 :                : }
                                121                 :                : 
                                122                 :                : /*
                                123                 :                :  * quote_nullable -
                                124                 :                :  *    Returns a properly quoted literal, with null values returned
                                125                 :                :  *    as the text string 'NULL'.
                                126                 :                :  */
                                127                 :                : Datum
 6566 tgl@sss.pgh.pa.us         128                 :            790 : quote_nullable(PG_FUNCTION_ARGS)
                                129                 :                : {
                                130         [ +  + ]:            790 :     if (PG_ARGISNULL(0))
 6564                           131                 :             42 :         PG_RETURN_TEXT_P(cstring_to_text("NULL"));
                                132                 :                :     else
 6566                           133                 :            748 :         PG_RETURN_DATUM(DirectFunctionCall1(quote_literal,
                                134                 :                :                                             PG_GETARG_DATUM(0)));
                                135                 :                : }
        

Generated by: LCOV version 2.4-beta