+int delete_w_handle(const char *info, void *handle)
+{
+ ZebraHandle zh = (ZebraHandle) handle;
+ ISAMC_P pos;
+
+ if (*info == sizeof(pos))
+ {
+ memcpy (&pos, info+1, sizeof(pos));
+ isamb_unlink(zh->reg->isamb, pos);
+ }
+ return 0;
+}
+
+static int delete_SU_handle(void *handle, int ord)
+{
+ ZebraHandle zh = (ZebraHandle) handle;
+ char ord_buf[20];
+ int ord_len;
+
+ ord_len = key_SU_encode (ord, ord_buf);
+ ord_buf[ord_len] = '\0';
+
+ assert (zh->reg->isamb);
+ dict_delete_subtree(zh->reg->dict, ord_buf,
+ zh, delete_w_handle);
+ return 0;
+}
+
+int zebra_drop_database (ZebraHandle zh, const char *database)
+{
+ ASSERTZH;
+ yaz_log(LOG_API,"zebra_drop_database");
+ zh->errCode = 0;
+
+ if (zebra_select_database (zh, database))
+ return -1;
+ if (zebra_begin_trans (zh, 1))
+ return -1;
+ if (zh->reg->isamb)
+ {
+ zebraExplain_curDatabase (zh->reg->zei, database);
+
+ zebraExplain_trav_ord(zh->reg->zei, zh, delete_SU_handle);
+ zebraExplain_removeDatabase(zh->reg->zei, zh);
+ }
+ zebra_end_trans (zh);
+ return 0;
+}
+