- int i;
-
- s = ZOOM_query_create ();
- if (ZOOM_query_prefix (s, *args))
- {
- fprintf (stderr, "Bad PQF: %s\n", *args);
- return;
- }
- for (i = 0; i<MAX_CON; i++)
- {
- if (c[i])
- {
- ZOOM_resultset_destroy (r[i]);
- r[i] = 0;
- }
- if (c[i])
- r[i] = ZOOM_connection_search (c[i], s);
- }
-
- while (ZOOM_event (MAX_CON, c))
- ;
-
- for (i = 0; i<MAX_CON; i++)
- {
- int error;
- const char *errmsg, *addinfo;
- /* display errors if any */
- if (!c[i])
- continue;
- if ((error = ZOOM_connection_error(c[i], &errmsg, &addinfo)))
- fprintf (stderr, "%s error: %s (%d) %s\n",
- ZOOM_connection_option_get(c[i], "host"), errmsg,
- error, addinfo);
- else if (r[i])
- {
- /* OK, no major errors. Look at the result count */
- int start = ZOOM_options_get_int (options, "start", 0);
- int count = ZOOM_options_get_int (options, "count", 0);
-
- printf ("%s: %d hits\n", ZOOM_connection_option_get(c[i], "host"),
- ZOOM_resultset_size(r[i]));
- /* and display */
- display_records (c[i], r[i], start, count);
- }
- }
- ZOOM_query_destroy (s);
+ const char *query_str = *args;
+ int ret = 0;
+ struct zoom_db *db;
+
+ s = ZOOM_query_create();
+ while (*query_str == ' ')
+ query_str++;
+ if (memcmp(query_str, "cql:", 4) == 0)
+ {
+ ZOOM_query_cql(s, query_str + 4);
+ }
+ else if (ZOOM_query_prefix(s, query_str))
+ {
+ printf("Bad PQF: %s\n", query_str);
+ ZOOM_query_destroy(s);
+ return 1;
+ }
+ if (sh->strategy && wrbuf_len(sh->strategy) && wrbuf_len(sh->criteria))
+ {
+ int r = ZOOM_query_sortby2(s, wrbuf_cstr(sh->strategy),
+ wrbuf_cstr(sh->criteria));
+ if (r)
+ {
+ if (r == -1)
+ printf("Bad sortby strategy: %s\n", wrbuf_cstr(sh->strategy));
+ else
+ printf("Bad sortby criteria: %s\n", wrbuf_cstr(sh->criteria));
+ ZOOM_query_destroy(s);
+ return 1;
+ }
+ printf("sortby added\n");
+ }
+ for (db = sh->list; db; db = db->next)
+ {
+ if (db->con)
+ {
+ ZOOM_resultset_destroy(db->res);
+ db->res = ZOOM_connection_search(db->con, s);
+ }
+ }
+ ZOOM_query_destroy(s);
+
+ process_events(sh);
+
+ for (db = sh->list; db; db = db->next)
+ {
+ int error;
+ const char *errmsg, *addinfo, *dset;
+ /* display errors if any */
+ if (!db->con)
+ continue;
+ if ((error = ZOOM_connection_error_x(db->con, &errmsg, &addinfo,
+ &dset)))
+ {
+ printf("%s error: %s (%s:%d) %s\n",
+ ZOOM_connection_option_get(db->con, "host"), errmsg,
+ dset, error, addinfo);
+ ret = 1;
+ }
+ else if (db->res)
+ {
+ /* OK, no major errors. Look at the result count */
+ int start = ZOOM_options_get_int(sh->options, "start", 0);
+ int count = ZOOM_options_get_int(sh->options, "count", 0);
+ int facet_num;
+
+ printf("%s: %lld hits\n", ZOOM_connection_option_get(db->con,
+ "host"),
+ (long long int) ZOOM_resultset_size(db->res));
+
+ facet_num = ZOOM_resultset_facets_size(db->res);
+ if (facet_num)
+ {
+ ZOOM_facet_field *facets = ZOOM_resultset_facets(db->res);
+ int facet_idx;
+ for (facet_idx = 0; facet_idx < facet_num; facet_idx++)
+ {
+ const char *name = ZOOM_facet_field_name(facets[facet_idx]);
+ size_t term_idx;
+ size_t term_num = ZOOM_facet_field_term_count(facets[facet_idx]);
+ printf("facet: %s\n", name);
+ for (term_idx = 0; term_idx < term_num; term_idx++ )
+ {
+ int freq;
+ const char *term =
+ ZOOM_facet_field_get_term(facets[facet_idx], term_idx, &freq);
+ printf("term: %s %d\n", term, freq);
+ }
+ }
+ }
+ display_search_result(db);
+ /* and display */
+ display_records(db->con, db->res, start, count, "render");
+ }
+ }
+ return ret;
+}
+
+static int cmd_scan(struct zoom_sh *sh, const char **args)
+{
+ const char *query_str = *args;
+ ZOOM_query query = ZOOM_query_create();
+ int i, number;
+ int ret = 0;
+ ZOOM_scanset *s = 0;
+ struct zoom_db *db;
+
+ while (*query_str == ' ')
+ query_str++;
+
+ if (memcmp(query_str, "cql:", 4) == 0)
+ {
+ ZOOM_query_cql(query, query_str + 4);
+ }
+ else if (ZOOM_query_prefix(query, query_str))
+ {
+ printf("Bad PQF: %s\n", query_str);
+ ZOOM_query_destroy(query);
+ return 1;
+ }
+
+ for (number = 0, db = sh->list; db; db = db->next)
+ if (db->con)
+ number++;
+
+ s = xmalloc(sizeof(*s) * number);
+
+ for (i = 0, db = sh->list; db; db = db->next)
+ if (db->con)
+ s[i++] = ZOOM_connection_scan1(db->con, query);
+
+ ZOOM_query_destroy(query);
+
+ process_events(sh);
+
+ for (i = 0, db = sh->list; db; db = db->next)
+ {
+ int error;
+ const char *errmsg, *addinfo, *dset;
+ /* display errors if any */
+ if (!db->con)
+ continue;
+ if ((error = ZOOM_connection_error_x(db->con, &errmsg, &addinfo,
+ &dset)))
+ {
+ printf("%s error: %s (%s:%d) %s\n",
+ ZOOM_connection_option_get(db->con, "host"), errmsg,
+ dset, error, addinfo);
+ ret = 1;
+ }
+ if (s[i])
+ {
+ size_t p, sz = ZOOM_scanset_size(s[i]);
+ for (p = 0; p < sz; p++)
+ {
+ size_t occ = 0;
+ size_t len = 0;
+ const char *term = ZOOM_scanset_display_term(s[i], p,
+ &occ, &len);
+ printf("%.*s %lld\n", (int) len, term, (long long int) occ);
+ }
+ ZOOM_scanset_destroy(s[i]);
+ }
+ i++;
+ }
+ xfree(s);
+ return ret;