+int zebraExplain_lookup_attr_su(ZebraExplainInfo zei, int index_type,
+ int set, int use)
+{
+ struct zebSUInfoB *zsui;
+
+ assert (zei->curDatabaseInfo);
+ for (zsui = zei->curDatabaseInfo->attributeDetails->SUInfo;
+ zsui; zsui=zsui->next)
+ if (zsui->info.index_type == index_type &&
+ zsui->info.which == ZEB_SU_SET_USE &&
+ zsui->info.u.su.use == use && zsui->info.u.su.set == set)
+ return zsui->info.ordinal;
+ return -1;
+}
+
+int zebraExplain_lookup_attr_str(ZebraExplainInfo zei, int index_type,
+ const char *str)
+{
+ struct zebSUInfoB *zsui;
+
+ assert (zei->curDatabaseInfo);
+ for (zsui = zei->curDatabaseInfo->attributeDetails->SUInfo;
+ zsui; zsui=zsui->next)
+ if (zsui->info.index_type == index_type &&
+ zsui->info.which == ZEB_SU_STR && !strcmp(zsui->info.u.str, str))
+ return zsui->info.ordinal;
+ return -1;
+}
+
+int zebraExplain_trav_ord(ZebraExplainInfo zei, void *handle,
+ int (*f)(void *handle, int ord))
+{
+ struct zebDatabaseInfoB *zdb = zei->curDatabaseInfo;
+ if (zdb)
+ {
+ struct zebSUInfoB *zsui = zdb->attributeDetails->SUInfo;
+ for ( ;zsui; zsui = zsui->next)
+ (*f)(handle, zsui->info.ordinal);
+ }
+ return 0;
+}
+