27static text *
dotrim(
const char *
string,
int stringlen,
28 const char *set,
int setlen,
29 bool doltrim,
bool dortrim);
31 bool doltrim,
bool dortrim);
205 (
errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
206 errmsg(
"requested length too large")));
213 ptr2end = ptr2 + s2len;
220 memcpy(ptr_ret, ptr2, mlen);
233 memcpy(ptr_ret, ptr1, mlen);
303 (
errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
304 errmsg(
"requested length too large")));
317 memcpy(ptr_ret, ptr1, mlen);
323 ptr2end = ptr2 + s2len;
329 memcpy(ptr_ret, ptr2, mlen);
395 const char *set,
int setlen,
396 bool doltrim,
bool dortrim)
401 if (stringlen > 0 && setlen > 0)
410 const char **stringchars;
411 const char **setchars;
424 stringchars = (
const char **)
palloc(stringlen *
sizeof(
char *));
425 stringmblen = (
int *)
palloc(stringlen *
sizeof(
int));
431 stringchars[stringnchars] = p;
432 stringmblen[stringnchars] = mblen =
pg_mblen(p);
438 setchars = (
const char **)
palloc(setlen *
sizeof(
char *));
439 setmblen = (
int *)
palloc(setlen *
sizeof(
int));
445 setchars[setnchars] = p;
446 setmblen[setnchars] = mblen =
pg_mblen(p);
453 resultnchars = stringnchars;
457 while (resultnchars > 0)
459 str_pos = stringchars[resultndx];
460 str_len = stringmblen[resultndx];
461 for (
i = 0;
i < setnchars;
i++)
463 if (str_len == setmblen[
i] &&
464 memcmp(str_pos, setchars[
i], str_len) == 0)
470 stringlen -= str_len;
478 while (resultnchars > 0)
480 str_pos = stringchars[resultndx + resultnchars - 1];
481 str_len = stringmblen[resultndx + resultnchars - 1];
482 for (
i = 0;
i < setnchars;
i++)
484 if (str_len == setmblen[
i] &&
485 memcmp(str_pos, setchars[
i], str_len) == 0)
490 stringlen -= str_len;
507 while (stringlen > 0)
511 for (
i = 0;
i < setlen;
i++)
513 if (str_ch == set[
i])
525 while (stringlen > 0)
527 char str_ch =
string[stringlen - 1];
529 for (
i = 0;
i < setlen;
i++)
531 if (str_ch == set[
i])
565 if (stringlen <= 0 || setlen <= 0)
570 end = ptr + stringlen - 1;
572 end2 = ptr2start + setlen - 1;
843 to_end = to_ptr + tolen;
854 (
errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
855 errmsg(
"requested length too large")));
867 for (
i = 0;
i < fromlen;
i +=
len)
870 if (
len == source_len &&
881 for (
i = 0;
i < from_index;
i++)
890 memcpy(target, p,
len);
898 memcpy(target,
source, source_len);
899 target += source_len;
900 retlen += source_len;
962 result = *
data & 0x07;
965 else if (*
data >= 0xE0)
967 result = *
data & 0x0F;
973 result = *
data & 0x1f;
979 for (
i = 1;
i <= tbytes;
i++)
982 result = (result << 6) + (
data[
i] & 0x3f);
991 (
errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
992 errmsg(
"requested character too large")));
1035 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
1036 errmsg(
"character number must be positive")));
1039 (
errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
1040 errmsg(
"null character not permitted")));
1055 if (cvalue > 0x0010ffff)
1057 (
errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
1058 errmsg(
"requested character too large for encoding: %u",
1061 if (cvalue > 0xffff)
1063 else if (cvalue > 0x07ff)
1070 wch = (
unsigned char *)
VARDATA(result);
1074 wch[0] = 0xC0 | ((cvalue >> 6) & 0x1F);
1075 wch[1] = 0x80 | (cvalue & 0x3F);
1077 else if (bytes == 3)
1079 wch[0] = 0xE0 | ((cvalue >> 12) & 0x0F);
1080 wch[1] = 0x80 | ((cvalue >> 6) & 0x3F);
1081 wch[2] = 0x80 | (cvalue & 0x3F);
1085 wch[0] = 0xF0 | ((cvalue >> 18) & 0x07);
1086 wch[1] = 0x80 | ((cvalue >> 12) & 0x3F);
1087 wch[2] = 0x80 | ((cvalue >> 6) & 0x3F);
1088 wch[3] = 0x80 | (cvalue & 0x3F);
1098 (
errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
1099 errmsg(
"requested character not valid for encoding: %u",
1108 if ((is_mb && (cvalue > 127)) || (!is_mb && (cvalue > 255)))
1110 (
errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
1111 errmsg(
"requested character too large for encoding: %u",
1116 *
VARDATA(result) = (char) cvalue;
1157 (
errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
1158 errmsg(
"requested length too large")));
1165 for (
i = 0;
i < count;
i++)
1167 memcpy(cp, sp, slen);
#define Assert(condition)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
#define PG_GETARG_BYTEA_PP(n)
#define PG_GETARG_TEXT_PP(n)
#define PG_RETURN_BYTEA_P(x)
#define PG_RETURN_TEXT_P(x)
#define PG_RETURN_INT32(x)
#define PG_GETARG_INT32(n)
#define PG_GET_COLLATION()
static bool pg_mul_s32_overflow(int32 a, int32 b, int32 *result)
static bool pg_add_s32_overflow(int32 a, int32 b, int32 *result)
int GetDatabaseEncoding(void)
int pg_mbstrlen_with_len(const char *mbstr, int limit)
int pg_database_encoding_max_length(void)
int pg_mblen(const char *mbstr)
void pfree(void *pointer)
#define AllocSizeIsValid(size)
#define CHECK_FOR_INTERRUPTS()
static text * dotrim(const char *string, int stringlen, const char *set, int setlen, bool doltrim, bool dortrim)
Datum bytealtrim(PG_FUNCTION_ARGS)
Datum ltrim(PG_FUNCTION_ARGS)
Datum byteatrim(PG_FUNCTION_ARGS)
Datum lower(PG_FUNCTION_ARGS)
Datum initcap(PG_FUNCTION_ARGS)
Datum upper(PG_FUNCTION_ARGS)
Datum byteartrim(PG_FUNCTION_ARGS)
Datum rtrim(PG_FUNCTION_ARGS)
Datum rpad(PG_FUNCTION_ARGS)
Datum chr(PG_FUNCTION_ARGS)
Datum ltrim1(PG_FUNCTION_ARGS)
Datum btrim1(PG_FUNCTION_ARGS)
Datum ascii(PG_FUNCTION_ARGS)
Datum rtrim1(PG_FUNCTION_ARGS)
Datum casefold(PG_FUNCTION_ARGS)
Datum translate(PG_FUNCTION_ARGS)
static bytea * dobyteatrim(bytea *string, bytea *set, bool doltrim, bool dortrim)
Datum lpad(PG_FUNCTION_ARGS)
Datum btrim(PG_FUNCTION_ARGS)
Datum repeat(PG_FUNCTION_ARGS)
static rewind_source * source
#define SET_VARSIZE(PTR, len)
#define VARSIZE_ANY_EXHDR(PTR)
text * cstring_to_text_with_len(const char *s, int len)
text * cstring_to_text(const char *s)
bool pg_utf8_islegal(const unsigned char *source, int length)
int pg_encoding_max_length(int encoding)