30static int fmtIdEncoding = -1;
80 if (fmtIdEncoding != -1)
89 Assert(fmtIdEncoding != -1);
106 bool need_quotes =
false;
116 else if (!((rawid[0] >=
'a' && rawid[0] <=
'z') || rawid[0] ==
'_'))
124 if (!((*cp >=
'a' && *cp <=
'z')
125 || (*cp >=
'0' && *cp <=
'9')
206 id_return->
data + id_return->
len);
208 id_return->
data[id_return->
len] =
'\0';
222 for (
int i = 0;
i < charlen;
i++)
234 return id_return->
data;
269 if (schema && *schema)
280 return id_return->
data;
314 char *
buf,
size_t buflen)
316 if (version_number >= 100000)
320 snprintf(
buf, buflen,
"%d.%d", version_number / 10000,
321 version_number % 10000);
323 snprintf(
buf, buflen,
"%d", version_number / 10000);
329 snprintf(
buf, buflen,
"%d.%d.%d", version_number / 10000,
330 (version_number / 100) % 100,
331 version_number % 100);
333 snprintf(
buf, buflen,
"%d.%d", version_number / 10000,
334 (version_number / 100) % 100);
354 size_t length = strlen(
str);
362 target =
buf->data +
buf->len;
424 for (
i = 0;
i < charlen;
i++)
436 buf->len = target -
buf->data;
448 size_t length = strlen(
str);
457 if (
buf->len > 0 &&
buf->data[
buf->len - 1] !=
' ')
486 static const char suffixes[] =
"_XXXXXXX";
500 while (strstr(
str, delimBuf->
data) != NULL)
503 nextchar %=
sizeof(suffixes) - 1;
533 static const char hextbl[] =
"0123456789abcdef";
544 target =
buf->data +
buf->len;
555 *target++ =
hextbl[(
c >> 4) & 0xF];
563 buf->len = target -
buf->data;
587 _(
"shell command argument contains a newline or carriage return: \"%s\"\n"),
597 int backslash_run_length = 0;
607 strspn(
str,
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_./:") == strlen(
str))
615 for (p =
str; *p; p++)
617 if (*p ==
'\n' || *p ==
'\r')
643 for (p =
str; *p; p++)
645 if (*p ==
'\n' || *p ==
'\r')
654 while (backslash_run_length)
657 backslash_run_length--;
662 backslash_run_length++;
664 backslash_run_length = 0;
670 if (!((*p >=
'a' && *p <=
'z') ||
671 (*p >=
'A' && *p <=
'Z') ||
672 (*p >=
'0' && *p <=
'9')))
681 while (backslash_run_length)
684 backslash_run_length--;
708 for (s =
str; *s; s++)
710 if (!((*s >=
'a' && *s <=
'z') || (*s >=
'A' && *s <=
'Z') ||
711 (*s >=
'0' && *s <=
'9') || *s ==
'_' || *s ==
'.'))
725 if (*
str ==
'\'' || *
str ==
'\\')
757 if (*s ==
'\n' || *s ==
'\r')
760 _(
"database name contains a newline or carriage return: \"%s\"\n"),
765 if (!((*s >=
'a' && *s <=
'z') || (*s >=
'A' && *s <=
'Z') ||
766 (*s >=
'0' && *s <=
'9') || *s ==
'_' || *s ==
'.'))
838 inputlen = strlen(atext);
839 if (inputlen < 2 || atext[0] !=
'{' || atext[inputlen - 1] !=
'}')
841 items = (
char **)
malloc(inputlen * (
sizeof(
char *) +
sizeof(
char)));
845 strings = (
char *) (
items + inputlen);
849 while (*atext !=
'}')
853 items[curitem] = strings;
854 while (*atext !=
'}' && *atext !=
',')
859 *strings++ = *atext++;
864 while (*atext !=
'"')
874 *strings++ = *atext++;
884 if (atext[1] !=
'\0')
907 if (buffer->
data[buffer->
len - 1] !=
'{')
911 if (
value[0] ==
'\0')
920 for (tmp =
value; *tmp; tmp++)
924 if (ch ==
'"' || ch ==
'\\' ||
925 ch ==
'{' || ch ==
'}' || ch ==
',' ||
927 ch ==
' ' || ch ==
'\t' || ch ==
'\n' ||
928 ch ==
'\r' || ch ==
'\v' || ch ==
'\f')
939 for (tmp =
value; *tmp; tmp++)
943 if (ch ==
'"' || ch ==
'\\')
967 const char *prefix,
int encoding,
bool std_strings)
1054 bool have_where,
bool force_escape,
1055 const char *schemavar,
const char *namevar,
1056 const char *altnamevar,
const char *visibilityrule,
1061 bool added_clause =
false;
1065 (appendPQExpBufferStr(buf, have_where ? " AND " : "WHERE "), \
1066 have_where = true, added_clause = true)
1071 if (pattern == NULL)
1079 return added_clause;
1094 (schemavar ? dbnamebuf : NULL),
1095 (schemavar ? &schemabuf : NULL),
1097 pattern, force_escape,
true, dotcnt);
1110 if (namevar && namebuf.
len > 2)
1115 if (strcmp(namebuf.
data,
"^(.*)$") != 0)
1121 "(%s OPERATOR(pg_catalog.~) ", namevar);
1126 "\n OR %s OPERATOR(pg_catalog.~) ",
1144 if (schemavar && schemabuf.
len > 2)
1149 if (strcmp(schemabuf.
data,
"^(.*)$") != 0 && schemavar)
1172 return added_clause;
1226 PQExpBuffer namebuf,
const char *pattern,
bool force_escape,
1227 bool want_literal_dbname,
int *dotcnt)
1242 Assert(dbnamebuf == NULL || schemabuf != NULL);
1249 if (dbnamebuf != NULL)
1251 else if (schemabuf != NULL)
1257 if (want_literal_dbname)
1272 if (inquotes && cp[1] ==
'"')
1281 inquotes = !inquotes;
1284 else if (!inquotes && isupper((
unsigned char) ch))
1293 else if (!inquotes && ch ==
'*')
1300 else if (!inquotes && ch ==
'?')
1307 else if (!inquotes && ch ==
'.')
1312 if (curbuf < maxbuf)
1352 if ((inquotes || force_escape) &&
1353 strchr(
"|*+?()[]{}.^$\\", ch))
1355 else if (ch ==
'[' && cp[1] ==
']')
1375 if (schemabuf && curbuf >=
buf)
1382 if (dbnamebuf && curbuf >=
buf)
1384 if (want_literal_dbname)
1391 if (want_literal_dbname)
#define IS_HIGHBIT_SET(ch)
#define Assert(condition)
#define ESCAPE_STRING_SYNTAX
#define SQL_STR_DOUBLE(ch, escape_backslash)
const uint8 ScanKeywordCategories[SCANKEYWORDS_NUM_KEYWORDS]
#define fprintf(file, fmt, msg)
int PQserverVersion(const PGconn *conn)
int PQclientEncoding(const PGconn *conn)
size_t PQescapeStringConn(PGconn *conn, char *to, const char *from, size_t length, int *error)
int PQmblen(const char *s, int encoding)
int PQmblenBounded(const char *s, int encoding)
PGDLLIMPORT const ScanKeywordList ScanKeywords
#define UNRESERVED_KEYWORD
int ScanKeywordLookup(const char *str, const ScanKeywordList *keywords)
static rewind_source * source
static const char hextbl[]
int pg_strcasecmp(const char *s1, const char *s2)
unsigned char pg_tolower(unsigned char ch)
PQExpBuffer createPQExpBuffer(void)
void initPQExpBuffer(PQExpBuffer str)
int enlargePQExpBuffer(PQExpBuffer str, size_t needed)
void resetPQExpBuffer(PQExpBuffer str)
void appendPQExpBuffer(PQExpBuffer str, const char *fmt,...)
void destroyPQExpBuffer(PQExpBuffer str)
void appendPQExpBufferChar(PQExpBuffer str, char ch)
void appendPQExpBufferStr(PQExpBuffer str, const char *data)
void termPQExpBuffer(PQExpBuffer str)
PQExpBufferData * PQExpBuffer
const char * fmtQualifiedId(const char *schema, const char *id)
bool appendShellStringNoError(PQExpBuffer buf, const char *str)
const char * fmtIdEnc(const char *rawid, int encoding)
const char * fmtId(const char *rawid)
const char * fmtQualifiedIdEnc(const char *schema, const char *id, int encoding)
void setFmtEncoding(int encoding)
void appendShellString(PQExpBuffer buf, const char *str)
void appendStringLiteralConn(PQExpBuffer buf, const char *str, PGconn *conn)
void appendPGArray(PQExpBuffer buffer, const char *value)
bool processSQLNamePattern(PGconn *conn, PQExpBuffer buf, const char *pattern, bool have_where, bool force_escape, const char *schemavar, const char *namevar, const char *altnamevar, const char *visibilityrule, PQExpBuffer dbnamebuf, int *dotcnt)
void appendPsqlMetaConnect(PQExpBuffer buf, const char *dbname)
void appendByteaLiteral(PQExpBuffer buf, const unsigned char *str, size_t length, bool std_strings)
bool parsePGArray(const char *atext, char ***itemarray, int *nitems)
void appendStringLiteral(PQExpBuffer buf, const char *str, int encoding, bool std_strings)
void patternToSQLRegex(int encoding, PQExpBuffer dbnamebuf, PQExpBuffer schemabuf, PQExpBuffer namebuf, const char *pattern, bool force_escape, bool want_literal_dbname, int *dotcnt)
bool appendReloptionsArray(PQExpBuffer buffer, const char *reloptions, const char *prefix, int encoding, bool std_strings)
static PQExpBuffer defaultGetLocalPQExpBuffer(void)
static int getFmtEncoding(void)
PQExpBuffer(* getLocalPQExpBuffer)(void)
void appendStringLiteralDQ(PQExpBuffer buf, const char *str, const char *dqprefix)
void appendConnStrVal(PQExpBuffer buf, const char *str)
int quote_all_identifiers
char * formatPGVersionNumber(int version_number, bool include_minor, char *buf, size_t buflen)
void pg_encoding_set_invalid(int encoding, char *dst)
int pg_encoding_mblen(int encoding, const char *mbstr)
int pg_encoding_verifymbchar(int encoding, const char *mbstr, int len)