void Indexer_delete_by_term(Indexer *self, CharBuf *field, Obj *term) { Schema *schema = self->schema; FieldType *type = Schema_Fetch_Type(schema, field); // Raise exception if the field isn't indexed. if (!type || !FType_Indexed(type)) THROW(ERR, "%o is not an indexed field", field); // Analyze term if appropriate, then zap. if (FType_Is_A(type, FULLTEXTTYPE)) { CERTIFY(term, CHARBUF); { Analyzer *analyzer = Schema_Fetch_Analyzer(schema, field); VArray *terms = Analyzer_Split(analyzer, (CharBuf*)term); Obj *analyzed_term = VA_Fetch(terms, 0); if (analyzed_term) { DelWriter_Delete_By_Term(self->del_writer, field, analyzed_term); } DECREF(terms); } } else { DelWriter_Delete_By_Term(self->del_writer, field, term); } }
void Indexer_Delete_By_Term_IMP(Indexer *self, String *field, Obj *term) { IndexerIVARS *const ivars = Indexer_IVARS(self); Schema *schema = ivars->schema; FieldType *type = Schema_Fetch_Type(schema, field); // Raise exception if the field isn't indexed. if (!type || !FType_Indexed(type)) { THROW(ERR, "%o is not an indexed field", field); } // Analyze term if appropriate, then zap. if (FType_is_a(type, FULLTEXTTYPE)) { CERTIFY(term, STRING); Analyzer *analyzer = Schema_Fetch_Analyzer(schema, field); Vector *terms = Analyzer_Split(analyzer, (String*)term); Obj *analyzed_term = Vec_Fetch(terms, 0); if (analyzed_term) { DelWriter_Delete_By_Term(ivars->del_writer, field, analyzed_term); } DECREF(terms); } else { DelWriter_Delete_By_Term(ivars->del_writer, field, term); } }