fts-backend-solr.c revision f56a965dc18dcd1bdf3daa29199cafde15e6ea8a
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen/* Copyright (c) 2006-2008 Dovecot authors, see the included COPYING file */
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainenstatic struct solr_connection *solr_conn = NULL;
acc039dfc0b0f4588cf2feec04727b61e1c672a1Timo Sirainenstatic void solr_quote_str(string_t *dest, const char *str)
acc039dfc0b0f4588cf2feec04727b61e1c672a1Timo Sirainen solr_connection_quote_str(solr_conn, dest, str);
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainenxml_encode_data(string_t *dest, const unsigned char *data, unsigned int len)
acc039dfc0b0f4588cf2feec04727b61e1c672a1Timo Sirainen unsigned int i;
acc039dfc0b0f4588cf2feec04727b61e1c672a1Timo Sirainen for (i = 0; i < len; i++) {
acc039dfc0b0f4588cf2feec04727b61e1c672a1Timo Sirainen switch (data[i]) {
acc039dfc0b0f4588cf2feec04727b61e1c672a1Timo Sirainenstatic void xml_encode(string_t *dest, const char *str)
acc039dfc0b0f4588cf2feec04727b61e1c672a1Timo Sirainen xml_encode_data(dest, (const unsigned char *)str, strlen(str));
acc039dfc0b0f4588cf2feec04727b61e1c672a1Timo Sirainenstatic struct fts_backend *
acc039dfc0b0f4588cf2feec04727b61e1c672a1Timo Sirainenfts_backend_solr_init(struct mailbox *box ATTR_UNUSED)
acc039dfc0b0f4588cf2feec04727b61e1c672a1Timo Sirainen const struct fts_solr_settings *set = &fts_solr_settings;
acc039dfc0b0f4588cf2feec04727b61e1c672a1Timo Sirainen solr_conn = solr_connection_init(set->url, set->debug);
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen backend->flags |= FTS_BACKEND_FLAG_SUBSTRING_LOOKUPS;
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainenstatic void fts_backend_solr_deinit(struct fts_backend *backend)
f50ea0370137dd93d9953d91ea73486ca0784de9Timo Sirainenstatic int fts_backend_solr_get_last_uid(struct fts_backend *backend,
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen unsigned int count;
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen str_append(str, "fl=uid&rows=1&sort=uid%20desc&q=");
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen mailbox_get_status(backend->box, STATUS_UIDVALIDITY, &status);
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen str_printfa(str, "uidv:%u%%20box:", status.uidvalidity);
cf0ad1a0bddb0787f3d7b408a96d721a8b2a98a3Timo Sirainen solr_quote_str(str, backend->box->storage->ns->user->username);
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen if (solr_connection_select(solr_conn, str_c(str), &uids, NULL) < 0)
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen /* nothing indexed yet for this mailbox */
if (headers) {
int ret = 0;
return ret;
T_BEGIN {
} T_END;
unsigned int i, count;
for (i = 0; i < count; i++) {
NULL,
NULL,