- return ret;
-};
-
-static int solr_write_range(void (*pr)(const char *buf, void *client_data),
- void *client_data,
- struct solr_attr *solr_attr_left,
- struct solr_attr *solr_attr_right)
-{
- pr(solr_attr_left->index, client_data);
- pr(":", client_data);
- pr(solr_attr_left->begin, client_data);
- pr(solr_attr_left->term, client_data);
- pr(" TO ", client_data);
- pr(solr_attr_right->term, client_data);
- pr(solr_attr_right->close, client_data);
- return 0;
-};
-
-static int solr_write_structure(void (*pr)(const char *buf, void *client_data),
- void *client_data,
- struct solr_attr *solr_attr)
-{
- if (solr_attr->index) {
- pr(solr_attr->index, client_data);
- pr(":", client_data);
- }
- if (solr_attr->is_range) {
- pr(solr_attr->begin, client_data);
- pr(solr_attr->term, client_data);
- pr(solr_attr->close, client_data);
- }
- else if (solr_attr->term)
- pr(solr_attr->term, client_data);
- return 0;
-};
-
-
-
-static int solr_write_and_or_range(void (*pr)(const char *buf, void *client_data),
- void *client_data,
- struct solr_attr *solr_attr_left,
- struct solr_attr *solr_attr_right)
-{
- if (solr_attr_left->is_range &&
- solr_attr_right->is_range &&
- !strcmp(solr_attr_left->index, solr_attr_right->index))
- {
- if (solr_attr_left->is_range > 3 && solr_attr_right->is_range < 3)
- return solr_write_range(pr, client_data, solr_attr_left, solr_attr_right);
- else if (solr_attr_left->is_range < 3 && solr_attr_right->is_range > 3)
- return solr_write_range(pr, client_data, solr_attr_right, solr_attr_left);
- }
- solr_write_structure(pr, client_data, solr_attr_left);
- pr(" AND ", client_data);
- solr_write_structure(pr, client_data, solr_attr_right);