ch = zebraExplain_lookup_attr_str(zei, cat, p->index_type, p->index_name);
if (ch < 0)
ch = zebraExplain_add_attr_str(zei, cat, p->index_type, p->index_name);
- key.len = 2;
+ key.len = 3;
key.mem[0] = ch;
key.mem[1] = p->record_id;
+ key.mem[2] = p->section_id;
zebra_rec_keys_write(zh->reg->sortKeys, str, length, &key);
}
int cmd;
struct sort_add_ent *next;
WRBUF wrbuf;
+ zint sysno;
+ zint section_id;
};
struct sort_add_ent *sort_ent_list = 0;
- zebra_sort_sysno(si, sysno);
while (zebra_rec_keys_read(reckeys, &str, &slen, &key_in))
{
int ord = CAST_ZINT_TO_INT(key_in.mem[0]);
+ zint filter_sysno = key_in.mem[1];
+ zint section_id = key_in.mem[2];
struct sort_add_ent **e = &sort_ent_list;
- while (*e && (*e)->ord != ord)
- e = &(*e)->next;
+ for (; *e; e = &(*e)->next)
+ if ((*e)->ord == ord && section_id == (*e)->section_id)
+ break;
if (!*e)
{
*e = nmem_malloc(nmem, sizeof(**e));
(*e)->wrbuf = wrbuf_alloc();
(*e)->ord = ord;
(*e)->cmd = cmd;
+ (*e)->sysno = filter_sysno ? filter_sysno : sysno;
+ (*e)->section_id = section_id;
}
wrbuf_write((*e)->wrbuf, str, slen);
}
if (sort_ent_list)
{
+ zint last_sysno = 0;
struct sort_add_ent *e = sort_ent_list;
for (; e; e = e->next)
{
+ if (last_sysno != e->sysno)
+ {
+ zebra_sort_sysno(si, e->sysno);
+ last_sysno = e->sysno;
+ }
zebra_sort_type(si, e->ord);
if (e->cmd == 1)
- zebra_sort_add(si, e->wrbuf);
+ zebra_sort_add(si, e->section_id, e->wrbuf);
else
- zebra_sort_delete(si);
+ zebra_sort_delete(si, e->section_id);
wrbuf_destroy(e->wrbuf);
}
}