* All rights reserved.
*
* $Log: zebraapi.c,v $
- * Revision 1.29 2000-03-20 19:08:36 adam
+ * Revision 1.35 2000-07-07 12:49:20 adam
+ * Optimized resultSetInsert{Rank,Sort}.
+ *
+ * Revision 1.34 2000/06/09 13:56:38 ian
+ * Added some logging on Authentication and searches.
+ *
+ * Revision 1.33 2000/05/18 12:01:36 adam
+ * System call times(2) used again. More 64-bit fixes.
+ *
+ * Revision 1.32 2000/04/19 14:35:59 adam
+ * WIN32 update (this version is known not to work on Windows).
+ *
+ * Revision 1.31 2000/04/05 10:07:02 adam
+ * Minor zebra compile fix.
+ *
+ * Revision 1.30 2000/04/05 09:49:35 adam
+ * On Unix, zebra/z'mbol uses automake.
+ *
+ * Revision 1.29 2000/03/20 19:08:36 adam
* Added remote record import using Z39.50 extended services and Segment
* Requests.
*
static int zebra_register_lock (ZebraHandle zh)
{
+ zh->errCode = 0;
+ zh->errString = 0;
if (!zh->service->active)
{
zh->errCode = 1019;
return 1;
}
+#if HAVE_SYS_TIMES_H
+ times (&zh->tms1);
+#endif
return 0;
}
static void zebra_register_unlock (ZebraHandle zh)
{
+#if HAVE_SYS_TIMES_H
+ times (&zh->tms2);
+ logf (LOG_LOG, "user/system: %ld/%ld",
+ (long) (zh->tms2.tms_utime - zh->tms1.tms_utime),
+ (long) (zh->tms2.tms_stime - zh->tms1.tms_stime));
+
+#endif
}
ZebraHandle zebra_open (ZebraService zs)
assert (zs);
if (zs->stop_flag)
- {
- zh->errCode = 1019;
return 0;
- }
zh = (ZebraHandle) xmalloc (sizeof(*zh));
zh->errString = 0;
zh->key_buf = 0;
+ zh->admin_databaseName = 0;
zebra_mutex_cond_lock (&zs->session_lock);
zs->sessions = zh;
zebra_mutex_cond_unlock (&zs->session_lock);
+
+ logf(LOG_APP,"CONNECT:");
+
return zh;
}
zh->dict = 0;
zh->sortIdx = 0;
zh->isams = 0;
+#if ZMBOL
zh->isam = 0;
zh->isamc = 0;
zh->isamd = 0;
+#endif
zh->zei = 0;
zebraRankInstall (zh, rank1_class);
logf (LOG_WARN, "rec_open");
return -1;
}
- if (!(zh->dict = dict_open (zh->bfs, FNAME_DICT, 40, 1, 0)))
+ if (!(zh->dict = dict_open (zh->bfs, FNAME_DICT, 80, 1, 0)))
{
logf (LOG_WARN, "dict_open");
return -1;
zebra_chdir (zh);
if (zh->records)
{
- zebraExplain_close (zh->zei, 1);
+ zebraExplain_close (zh->zei, 0);
dict_close (zh->dict);
sortIdx_close (zh->sortIdx);
if (zh->isams)
xfree (zh->key_buf);
zh->key_buf = 0;
}
+ xfree (zh->admin_databaseName);
zebra_mutex_cond_lock (&zs->session_lock);
sp = &zs->sessions;
while (1)
resultSetAddRPN (zh, stream, decode, query, num_bases, basenames, setname);
zebra_register_unlock (zh);
+
+ logf(LOG_APP,"SEARCH:%d:",zh->hits);
}
void zebra_records_retrieve (ZebraHandle zh, ODR stream,
if (zebra_register_lock (zh))
return;
- zh->errCode = 0;
pos_array = (int *) xmalloc (num_recs * sizeof(*pos_array));
for (i = 0; i<num_recs; i++)
pos_array[i] = recs[i].position;
int zebra_auth (ZebraService zh, const char *user, const char *pass)
{
if (!zh->passwd_db || !passwd_db_auth (zh->passwd_db, user, pass))
+ {
+ logf(LOG_APP,"AUTHOK:%s", user?user:"ANONYMOUS");
return 0;
+ }
+
+ logf(LOG_APP,"AUTHFAIL:%s", user?user:"ANONYMOUS");
return 1;
}
{
if (zebra_register_lock (zh))
return;
+ xfree (zh->admin_databaseName);
+ zh->admin_databaseName = xstrdup(database);
zebra_register_unlock(zh);
}
+void zebra_admin_import_end (ZebraHandle zh)
+{
+ zebraExplain_flush (zh->service->zei, 1, zh);
+ extract_index (zh);
+}
+
void zebra_admin_import_segment (ZebraHandle zh, Z_Segment *segment)
{
+ int sysno;
+ int i;
if (zebra_register_lock (zh))
return;
- if (segment->num_segmentRecords == 0)
- {
- zebraExplain_flush (zh->service->zei, 1, zh);
- extract_index (zh);
- }
- else
+ for (i = 0; i<segment->num_segmentRecords; i++)
{
- int sysno;
- int i;
- for (i = 0; i<segment->num_segmentRecords; i++)
+ Z_NamePlusRecord *npr = segment->segmentRecords[i];
+ const char *databaseName = npr->databaseName;
+
+ if (!databaseName)
+ databaseName = zh->admin_databaseName;
+ printf ("--------------%d--------------------\n", i);
+ if (npr->which == Z_NamePlusRecord_intermediateFragment)
{
- Z_NamePlusRecord *npr = segment->segmentRecords[i];
- printf ("--------------%d--------------------\n", i);
- if (npr->which == Z_NamePlusRecord_intermediateFragment)
+ Z_FragmentSyntax *fragment = npr->u.intermediateFragment;
+ if (fragment->which == Z_FragmentSyntax_notExternallyTagged)
{
- Z_FragmentSyntax *fragment = npr->u.intermediateFragment;
- if (fragment->which == Z_FragmentSyntax_notExternallyTagged)
- {
- Odr_oct *oct = fragment->u.notExternallyTagged;
- printf ("%.*s", (oct->len > 100 ? 100 : oct->len) ,
- oct->buf);
-
- sysno = 0;
- extract_rec_in_mem (zh, "grs.sgml",
- oct->buf, oct->len,
- "Default", 0 /* delete_flag */,
- 0 /* test_mode */,
- &sysno /* sysno */,
- 1 /* store_keys */,
- 1 /* store_data */,
- 0 /* match criteria */);
- }
+ Odr_oct *oct = fragment->u.notExternallyTagged;
+ printf ("%.*s", (oct->len > 100 ? 100 : oct->len) ,
+ oct->buf);
+
+ sysno = 0;
+ extract_rec_in_mem (zh, "grs.sgml",
+ oct->buf, oct->len,
+ databaseName,
+ 0 /* delete_flag */,
+ 0 /* test_mode */,
+ &sysno /* sysno */,
+ 1 /* store_keys */,
+ 1 /* store_data */,
+ 0 /* match criteria */);
}
}
}
zh->keys.prevSeqNo = 0;
zh->sortKeys = 0;
-
extractCtrl.subType = subType;
extractCtrl.init = extract_init;
extractCtrl.tokenAdd = extract_token_add;