-/* $Id: zebraapi.c,v 1.99 2003-05-13 13:52:12 adam Exp $
+/* $Id: zebraapi.c,v 1.102 2003-05-20 21:39:57 adam Exp $
Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003
Index Data Aps
return 0;
}
-void zebra_search_rpn (ZebraHandle zh, ODR decode, ODR stream,
+void zebra_search_RPN (ZebraHandle zh,
Z_RPNQuery *query, const char *setname, int *hits)
{
ASSERTZH;
zebra_livcode_transform(zh, query);
- resultSetAddRPN (zh, decode, stream, query,
+ resultSetAddRPN (zh, query,
zh->num_basenames, zh->basenames, setname);
zebra_end_read (zh);
return 0;
}
-void zebra_admin_create (ZebraHandle zh, const char *database)
+void zebra_create_database (ZebraHandle zh, const char *database)
{
ZebraService zs;
ASSERTZH;
if (zebra_select_database (zh, database))
return;
- zebra_begin_trans (zh, 1);
+ if (zebra_begin_trans (zh, 1))
+ return;
zs = zh->service;
/* announce database */
int zebra_begin_trans (ZebraHandle zh, int rw)
{
+ yaz_log(LOG_LOG, "zebra_begin_trans rw=%d trans=%d", rw, zh->trans_no);
if (!zh->res)
{
zh->errCode = 2;
zh->errCode=0;
- yaz_log (LOG_LOG, "zebra_begin_trans");
-
zh->records_inserted = 0;
zh->records_updated = 0;
zh->records_deleted = 0;
zh->path_reg);
if (zh->reg)
zh->reg->seqno = seqno;
+ else
+ {
+ zebra_set_state (zh, 'o', seqno);
+
+ zebra_unlock (zh->lock_shadow);
+ zebra_unlock (zh->lock_normal);
+
+ zh->trans_no--;
+ zh->trans_w_no = 0;
+
+ zh->errCode = 2;
+ zh->errString = "zebra_begin_trans: cannot open register";
+ yaz_log(LOG_FATAL, zh->errString);
+ return -1;
+ }
}
else
{
zh->res, zh->path_reg);
if (!zh->reg)
{
+ zebra_unlock (zh->lock_normal);
+ zebra_unlock (zh->lock_shadow);
+ zh->trans_no--;
zh->errCode = 109;
return -1;
}
is not mandatory. (it's repeatable now, also in zebraapi.c)
*/
-void zebra_search_RPN (ZebraHandle zh, ODR decode, ODR stream,
- Z_RPNQuery *query, const char *setname, int *hits)
-{
- zh->hits = 0;
- *hits = 0;
-
- if (zebra_begin_read (zh))
- return;
- resultSetAddRPN (zh, decode, stream, query,
- zh->num_basenames, zh->basenames, setname);
-
- zebra_end_read (zh);
-
- *hits = zh->hits;
-}
-
-int zebra_search_PQF (ZebraHandle zh,
- ODR odr_input, ODR odr_output,
- const char *pqf_query,
+int zebra_search_PQF (ZebraHandle zh, const char *pqf_query,
const char *setname)
-
{
- int hits;
+ int hits = 0;
Z_RPNQuery *query;
- query = p_query_rpn (odr_input, PROTO_Z3950, pqf_query);
+ ODR odr = odr_createmem(ODR_ENCODE);
- if (!query) {
- logf (LOG_WARN, "bad query %s\n", pqf_query);
- odr_reset (odr_input);
- return(0);
- }
- zebra_search_RPN (zh, odr_input, odr_output, query, setname, &hits);
+ query = p_query_rpn (odr, PROTO_Z3950, pqf_query);
- odr_reset (odr_input);
- odr_reset (odr_output);
+ if (!query)
+ yaz_log (LOG_WARN, "bad query %s\n", pqf_query);
+ else
+ zebra_search_RPN (zh, query, setname, &hits);
- return(hits);
+ odr_destroy(odr);
+
+ return hits;
}
/* ---------------------------------------------------------------------------