+void meta_query(int lineno, ZebraHandle zh, char *query, int exphits,
+ zint *ids)
+{
+ ZebraMetaRecord *meta;
+ ODR odr_output = odr_createmem (ODR_ENCODE);
+ const char *setname="rsetname";
+ zint *positions = (zint *) malloc(1 + (exphits * sizeof(zint)));
+ int hits;
+ int rc;
+ int i;
+
+ hits = do_query(lineno, zh, query, exphits);
+
+ for (i = 0; i<exphits; i++)
+ positions[i] = i+1;
+
+ meta = zebra_meta_records_create (zh, setname, exphits, positions);
+
+ if (!meta)
+ {
+ printf("Error: retrieve returned %d \n%s\n",rc,query);
+ exit (1);
+ }
+
+ for (i = 0; i<exphits; i++)
+ {
+ if (meta[i].sysno != ids[i])
+ {
+ printf("Expected id=" ZINT_FORMAT " but got id=" ZINT_FORMAT,
+ ids[i], meta[i].sysno);
+ exit(1);
+ }
+ }
+ zebra_meta_records_destroy(zh, meta, exphits);
+ odr_destroy (odr_output);
+ free(positions);
+}
+