MCPcopy Create free account
hub / github.com/apache/cloudberry / appendStringInfoStringQuoted

Function appendStringInfoStringQuoted

src/backend/utils/mb/stringinfo_mb.c:33–86  ·  view source on GitHub ↗

* appendStringInfoStringQuoted * * Append up to maxlen bytes from s to str, or the whole input string if * maxlen < 0, adding single quotes around it and doubling all single quotes. * Add an ellipsis if the copy is incomplete. */

Source from the content-addressed store, hash-verified

31 * Add an ellipsis if the copy is incomplete.
32 */
33void
34appendStringInfoStringQuoted(StringInfo str, const char *s, int maxlen)
35{
36 char *copy = NULL;
37 const char *chunk_search_start,
38 *chunk_copy_start,
39 *chunk_end;
40 int slen;
41 bool ellipsis;
42
43 Assert(str != NULL);
44
45 slen = strlen(s);
46 if (maxlen >= 0 && maxlen < slen)
47 {
48 int finallen = pg_mbcliplen(s, slen, maxlen);
49
50 copy = pnstrdup(s, finallen);
51 chunk_search_start = copy;
52 chunk_copy_start = copy;
53
54 ellipsis = true;
55 }
56 else
57 {
58 chunk_search_start = s;
59 chunk_copy_start = s;
60
61 ellipsis = false;
62 }
63
64 appendStringInfoCharMacro(str, '\'');
65
66 while ((chunk_end = strchr(chunk_search_start, '\'')) != NULL)
67 {
68 /* copy including the found delimiting ' */
69 appendBinaryStringInfoNT(str,
70 chunk_copy_start,
71 chunk_end - chunk_copy_start + 1);
72
73 /* in order to double it, include this ' into the next chunk as well */
74 chunk_copy_start = chunk_end;
75 chunk_search_start = chunk_end + 1;
76 }
77
78 /* copy the last chunk and terminate */
79 if (ellipsis)
80 appendStringInfo(str, "%s...'", chunk_copy_start);
81 else
82 appendStringInfo(str, "%s'", chunk_copy_start);
83
84 if (copy)
85 pfree(copy);
86}

Callers 4

format_expr_paramsFunction · 0.85
BuildParamLogStringFunction · 0.85

Calls 5

pg_mbcliplenFunction · 0.85
appendBinaryStringInfoNTFunction · 0.85
appendStringInfoFunction · 0.85
pnstrdupFunction · 0.50
pfreeFunction · 0.50

Tested by

no test coverage detected