static bool checkcondition_str(void *checkval, ITEM *val) { ltree_level *level = LTREE_FIRST(((CHKVAL *) checkval)->node); int tlen = ((CHKVAL *) checkval)->node->numlevel; char *op = ((CHKVAL *) checkval)->operand + val->distance; int (*cmpptr) (const char *, const char *, size_t); cmpptr = (val->flag & LVAR_INCASE) ? ltree_strncasecmp : strncmp; while (tlen > 0) { if (val->flag & LVAR_SUBLEXEME) { if (compare_subnode(level, op, val->length, cmpptr, (val->flag & LVAR_ANYEND))) return true; } else if ( ( val->length == level->len || (level->len > val->length && (val->flag & LVAR_ANYEND)) ) && (*cmpptr) (op, level->name, val->length) == 0) return true; tlen--; level = LEVEL_NEXT(level); } return false; }
static bool checkLevel(lquery_level * curq, ltree_level * curt) { int (*cmpptr) (const char *, const char *, size_t); lquery_variant *curvar = LQL_FIRST(curq); int i; for (i = 0; i < curq->numvar; i++) { cmpptr = (curvar->flag & LVAR_INCASE) ? pg_strncasecmp : strncmp; if (curvar->flag & LVAR_SUBLEXEM) { if (compare_subnode(curt, curvar->name, curvar->len, cmpptr, (curvar->flag & LVAR_ANYEND))) return true; } else if ( ( curvar->len == curt->len || (curt->len > curvar->len && (curvar->flag & LVAR_ANYEND)) ) && (*cmpptr) (curvar->name, curt->name, curvar->len) == 0) { return true; } curvar = LVAR_NEXT(curvar); } return false; }