22#define NEXTVAL(x) ( (lquery*)( (char*)(x) + INTALIGN( VARSIZE(x) ) ) )
36 while (ptr < end && !
t_iseq(ptr,
'_'))
48 char *endq = qn +
len;
54 while ((qn =
getlexeme(qn, endq, &lenq)) != NULL)
58 while ((tn =
getlexeme(tn, endt, &lent)) != NULL)
60 if ((lent == lenq || (lent > lenq && anyend)) &&
61 (*prefix_eq) (qn, lenq, tn, lent))
87 return (strncmp(
a,
b, a_sz) == 0);
97 size_t al_sz = a_sz + 1;
100 size_t bl_sz = b_sz + 1;
111 if (al_len + 1 > al_sz)
117 Assert(al_len + 1 <= al_sz);
121 if (bl_len + 1 > bl_sz)
127 Assert(bl_len + 1 <= bl_sz);
133 res = (strncmp(al, bl, al_len) == 0);
171 else if ((curvar->
len == curt->
len ||
207 low = curq->
low, high = curq->
high;
229 for (
int matchcnt = 0; matchcnt < high; matchcnt++)
235 if (matchcnt >= low &&
checkCond(nextq, qlen, curt, tlen))
298 (
errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR),
299 errmsg(
"array must be one-dimensional")));
302 (
errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED),
303 errmsg(
"array must not contain nulls")));
#define PG_GETARG_ARRAYTYPE_P(n)
bool array_contains_nulls(const ArrayType *array)
int ArrayGetNItems(int ndim, const int *dims)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
#define PG_FREE_IF_COPY(ptr, n)
#define DirectFunctionCall2(func, arg1, arg2)
#define PG_GETARG_DATUM(n)
#define PG_RETURN_DATUM(x)
#define PG_RETURN_BOOL(x)
Assert(PointerIsAligned(start, uint64))
bool compare_subnode(ltree_level *t, char *qn, int len, ltree_prefix_eq_func prefix_eq, bool anyend)
PG_FUNCTION_INFO_V1(ltq_regex)
bool ltree_prefix_eq(const char *a, size_t a_sz, const char *b, size_t b_sz)
Datum lt_q_rregex(PG_FUNCTION_ARGS)
bool ltree_prefix_eq_ci(const char *a, size_t a_sz, const char *b, size_t b_sz)
static char * getlexeme(char *start, char *end, int *len)
static bool checkCond(lquery_level *curq, int qlen, ltree_level *curt, int tlen)
Datum lt_q_regex(PG_FUNCTION_ARGS)
Datum ltq_regex(PG_FUNCTION_ARGS)
static bool checkLevel(lquery_level *curq, ltree_level *curt)
Datum ltq_rregex(PG_FUNCTION_ARGS)
#define PG_GETARG_LQUERY_P(n)
bool(* ltree_prefix_eq_func)(const char *, size_t, const char *, size_t)
#define PG_GETARG_LTREE_P(n)
int pg_mblen(const char *mbstr)
void * repalloc(void *pointer, Size size)
void pfree(void *pointer)
#define CHECK_FOR_INTERRUPTS()
size_t pg_strfold(char *dst, size_t dstsize, const char *src, ssize_t srclen, pg_locale_t locale)
pg_locale_t pg_database_locale(void)
static bool DatumGetBool(Datum X)
static Datum PointerGetDatum(const void *X)
void check_stack_depth(void)
char name[FLEXIBLE_ARRAY_MEMBER]
char name[FLEXIBLE_ARRAY_MEMBER]