QueryItem * clean_NOT(QueryItem *ptr, int *len) { NODE *root = maketree(ptr); return plaintree(clean_NOT_intree(root), len); }
ITEM * clean_NOT(ITEM * ptr, int4 *len) { NODE *root = maketree(ptr); return plaintree(clean_NOT_intree(root), len); }
/* * Remove QI_VALSTOP (stopword) nodes from TSQuery. */ TSQuery cleanup_tsquery_stopwords(TSQuery in) { int32 len, lenstr, commonlen, i; NODE *root; int ladd, radd; TSQuery out; QueryItem *items; char *operands; if (in->size == 0) return in; /* eliminate stop words */ root = clean_stopword_intree(maketree(GETQUERY(in)), &ladd, &radd); if (root == NULL) { ereport(NOTICE, (errmsg("text-search query contains only stop words or doesn't contain lexemes, ignored"))); out = palloc(HDRSIZETQ); out->size = 0; SET_VARSIZE(out, HDRSIZETQ); return out; } /* * Build TSQuery from plain view */ lenstr = calcstrlen(root); items = plaintree(root, &len); commonlen = COMPUTESIZE(len, lenstr); out = palloc(commonlen); SET_VARSIZE(out, commonlen); out->size = len; memcpy(GETQUERY(out), items, len * sizeof(QueryItem)); items = GETQUERY(out); operands = GETOPERAND(out); for (i = 0; i < out->size; i++) { QueryOperand *op = (QueryOperand *) &items[i]; if (op->type != QI_VAL) continue; memcpy(operands, GETOPERAND(in) + op->distance, op->length); operands[op->length] = '\0'; op->distance = operands - GETOPERAND(out); operands += op->length + 1; } return out; }
ITEM * clean_fakeval(ITEM * ptr, int4 *len) { NODE *root = maketree(ptr); char result = V_UNKNOWN; NODE *resroot; resroot = clean_fakeval_intree(root, &result); if (result != V_UNKNOWN) { elog(NOTICE, "query contains only stopword(s) or doesn't contain lexeme(s), ignored"); *len = 0; return NULL; } return plaintree(resroot, len); }
QueryItem * clean_fakeval(QueryItem *ptr, int *len) { NODE *root = maketree(ptr); char result = V_UNKNOWN; NODE *resroot; resroot = clean_fakeval_intree(root, &result); if (result != V_UNKNOWN) { ereport(NOTICE, (errmsg("text-search query contains only stop words or doesn't contain lexemes, ignored"))); *len = 0; return NULL; } return plaintree(resroot, len); }