LCOV - differential code coverage report
Current view: top level - src/backend/utils/adt - quote.c (source / functions) Coverage Total Hit UBC CBC
Current: Differential Code Coverage 16@8cea358b128 vs 17@8cea358b128 Lines: 100.0 % 36 36 36
Current Date: 2024-04-14 14:21:10 Functions: 100.0 % 5 5 5
Baseline: 16@8cea358b128 Branches: 70.8 % 24 17 7 17
Baseline Date: 2024-04-14 14:21:09 Line coverage date bins:
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed (240..) days: 100.0 % 36 36 36
Function coverage date bins:
(240..) days: 100.0 % 5 5 5
Branch coverage date bins:
(240..) days: 70.8 % 24 17 7 17

 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-2024, 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
 8622 JanWieck@Yahoo.com         25                 :CBC        3788 : quote_ident(PG_FUNCTION_ARGS)
                                 26                 :                : {
 5864 tgl@sss.pgh.pa.us          27                 :           3788 :     text       *t = PG_GETARG_TEXT_PP(0);
                                 28                 :                :     const char *qstr;
                                 29                 :                :     char       *str;
                                 30                 :                : 
                                 31                 :           3788 :     str = text_to_cstring(t);
 6964                            32                 :           3788 :     qstr = quote_identifier(str);
 5864                            33                 :           3788 :     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: think not to make this function's behavior change with
                                 41                 :                :  * standard_conforming_strings.  We don't know where the result
                                 42                 :                :  * literal will be used, and so we must generate a result that
                                 43                 :                :  * will work with either setting.  Take a look at what dblink
                                 44                 :                :  * uses this for before thinking you know better.
                                 45                 :                :  */
                                 46                 :                : static size_t
 4800 peter_e@gmx.net            47                 :           4902 : quote_literal_internal(char *dst, const char *src, size_t len)
                                 48                 :                : {
                                 49                 :                :     const char *s;
 4894 rhaas@postgresql.org       50                 :           4902 :     char       *savedst = dst;
                                 51                 :                : 
                                 52         [ +  + ]:         351794 :     for (s = src; s < src + len; s++)
                                 53                 :                :     {
                                 54         [ +  + ]:         346897 :         if (*s == '\\')
                                 55                 :                :         {
                                 56                 :              5 :             *dst++ = ESCAPE_STRING_SYNTAX;
                                 57                 :              5 :             break;
                                 58                 :                :         }
                                 59                 :                :     }
                                 60                 :                : 
                                 61                 :           4902 :     *dst++ = '\'';
                                 62         [ +  + ]:         351801 :     while (len-- > 0)
                                 63                 :                :     {
                                 64   [ +  +  +  + ]:         346899 :         if (SQL_STR_DOUBLE(*src, true))
                                 65                 :             22 :             *dst++ = *src;
                                 66                 :         346899 :         *dst++ = *src++;
                                 67                 :                :     }
                                 68                 :           4902 :     *dst++ = '\'';
                                 69                 :                : 
                                 70                 :           4902 :     return dst - savedst;
                                 71                 :                : }
                                 72                 :                : 
                                 73                 :                : /*
                                 74                 :                :  * quote_literal -
                                 75                 :                :  *    returns a properly quoted literal
                                 76                 :                :  */
                                 77                 :                : Datum
 8622 JanWieck@Yahoo.com         78                 :           1768 : quote_literal(PG_FUNCTION_ARGS)
                                 79                 :                : {
 2590 noah@leadboat.com          80                 :           1768 :     text       *t = PG_GETARG_TEXT_PP(0);
                                 81                 :                :     text       *result;
                                 82                 :                :     char       *cp1;
                                 83                 :                :     char       *cp2;
                                 84                 :                :     int         len;
                                 85                 :                : 
                                 86   [ -  +  -  -  :           1768 :     len = VARSIZE_ANY_EXHDR(t);
                                     -  -  -  -  +  
                                                 + ]
                                 87                 :                :     /* We make a worst-case result area; wasting a little space is OK */
 6861 bruce@momjian.us           88                 :           1768 :     result = (text *) palloc(len * 2 + 3 + VARHDRSZ);
                                 89                 :                : 
 2590 noah@leadboat.com          90         [ +  + ]:           1768 :     cp1 = VARDATA_ANY(t);
 8622 JanWieck@Yahoo.com         91                 :           1768 :     cp2 = VARDATA(result);
                                 92                 :                : 
 4894 rhaas@postgresql.org       93                 :           1768 :     SET_VARSIZE(result, VARHDRSZ + quote_literal_internal(cp2, cp1, len));
                                 94                 :                : 
                                 95                 :           1768 :     PG_RETURN_TEXT_P(result);
                                 96                 :                : }
                                 97                 :                : 
                                 98                 :                : /*
                                 99                 :                :  * quote_literal_cstr -
                                100                 :                :  *    returns a properly quoted literal
                                101                 :                :  */
                                102                 :                : char *
 4800 peter_e@gmx.net           103                 :           3134 : quote_literal_cstr(const char *rawstr)
                                104                 :                : {
                                105                 :                :     char       *result;
                                106                 :                :     int         len;
                                107                 :                :     int         newlen;
                                108                 :                : 
 4894 rhaas@postgresql.org      109                 :           3134 :     len = strlen(rawstr);
                                110                 :                :     /* We make a worst-case result area; wasting a little space is OK */
 2676 heikki.linnakangas@i      111                 :           3134 :     result = palloc(len * 2 + 3 + 1);
                                112                 :                : 
 4894 rhaas@postgresql.org      113                 :           3134 :     newlen = quote_literal_internal(result, rawstr, len);
                                114                 :           3134 :     result[newlen] = '\0';
                                115                 :                : 
                                116                 :           3134 :     return result;
                                117                 :                : }
                                118                 :                : 
                                119                 :                : /*
                                120                 :                :  * quote_nullable -
                                121                 :                :  *    Returns a properly quoted literal, with null values returned
                                122                 :                :  *    as the text string 'NULL'.
                                123                 :                :  */
                                124                 :                : Datum
 5866 tgl@sss.pgh.pa.us         125                 :            790 : quote_nullable(PG_FUNCTION_ARGS)
                                126                 :                : {
                                127         [ +  + ]:            790 :     if (PG_ARGISNULL(0))
 5864                           128                 :             42 :         PG_RETURN_TEXT_P(cstring_to_text("NULL"));
                                129                 :                :     else
 5866                           130                 :            748 :         PG_RETURN_DATUM(DirectFunctionCall1(quote_literal,
                                131                 :                :                                             PG_GETARG_DATUM(0)));
                                132                 :                : }
        

Generated by: LCOV version 2.1-beta2-3-g6141622