X-Git-Url: http://git.indexdata.com/?p=idzebra-moved-to-github.git;a=blobdiff_plain;f=index%2Frecindex.h;h=e087e27d6bdeac5ad208e995e27e22a23c569ae4;hp=55658eb6800e54512dbf42097c8ee102a6995a37;hb=f3f20a205132c39c9434b10086422c6b49b47faf;hpb=ce3907338568fce46c5751e7e1091a5ad1c8e291 diff --git a/index/recindex.h b/index/recindex.h index 55658eb..e087e27 100644 --- a/index/recindex.h +++ b/index/recindex.h @@ -1,92 +1,158 @@ -/* - * Copyright (C) 1994-1998, Index Data I/S - * All rights reserved. - * Sebastian Hammer, Adam Dickmeiss - * - * $Log: recindex.h,v $ - * Revision 1.13 1998-03-05 08:45:12 adam - * New result set model and modular ranking system. Moved towards - * descent server API. System information stored as "SGML" records. - * - * Revision 1.12 1998/01/12 15:04:08 adam - * The test option (-s) only uses read-lock (and not write lock). - * - * Revision 1.11 1997/09/17 12:19:16 adam - * Zebra version corresponds to YAZ version 1.4. - * Changed Zebra server so that it doesn't depend on global common_resource. - * - * Revision 1.10 1996/10/29 14:06:53 adam - * Include zebrautl.h instead of alexutil.h. - * - * Revision 1.9 1996/05/01 13:46:36 adam - * First work on multiple records in one file. - * New option, -offset, to the "unread" command in the filter module. - * - * Revision 1.8 1995/12/06 12:41:25 adam - * New command 'stat' for the index program. - * Filenames can be read from stdin by specifying '-'. - * Bug fix/enhancement of the transformation from terms to regular - * expressons in the search engine. - * - * Revision 1.7 1995/11/28 09:09:45 adam - * Zebra config renamed. - * Use setting 'recordId' to identify record now. - * Bug fix in recindex.c: rec_release_blocks was invokeded even - * though the blocks were already released. - * File traversal properly deletes records when needed. - * - * Revision 1.6 1995/11/27 09:56:21 adam - * Record info elements better enumerated. Internal store of records. - * - * Revision 1.5 1995/11/25 10:24:07 adam - * More record fields - they are enumerated now. - * New options: flagStoreData flagStoreKey. - * - * Revision 1.4 1995/11/22 17:19:19 adam - * Record management uses the bfile system. - * - * Revision 1.3 1995/11/20 16:59:46 adam - * New update method: the 'old' keys are saved for each records. - * - * Revision 1.2 1995/11/15 19:13:08 adam - * Work on record management. - * - * Revision 1.1 1995/11/15 14:46:21 adam - * Started work on better record management system. - * - */ +/* This file is part of the Zebra server. + Copyright (C) Index Data + +Zebra is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +Zebra is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + +#ifndef RECINDEX_H +#define RECINDEX_H + +#include +#include +#include -#include -#include +YAZ_BEGIN_CDECL #define REC_NO_INFO 8 typedef struct record_info { - int sysno; + zint sysno; int newFlag; char *info[REC_NO_INFO]; size_t size[REC_NO_INFO]; + char buf_size[REC_NO_INFO][6]; + size_t size_size[REC_NO_INFO]; + Zebra_mutex mutex; } *Record; typedef struct records_info *Records; -Record rec_cp (Record rec); -void rec_del (Records p, Record *recpp); -void rec_rm (Record *recpp); -void rec_put (Records p, Record *recpp); -Record rec_new (Records p); -Record rec_get (Records p, int sysno); -void rec_close (Records *p); -Records rec_open (BFiles bfs, int rw); -char *rec_strdup (const char *s, size_t *len); -void rec_prstat (Records p); - -enum { - recInfo_fileType, - recInfo_filename, - recInfo_delKeys, +/** \brief marks record for deletion (on file storage) + \param p records handle + \param recpp record pointer + \returns ZEBRA_OK / ZEBRA_FAIL +*/ +ZEBRA_RES rec_del(Records p, Record *recpp); + +/** \brief frees record (from memory) + \param recpp record pointer +*/ +void rec_free(Record *recpp); + +/** \brief puts record (writes into file storage) + \param p records handle + \param recpp record pointer + \returns ZEBRA_OK / ZEBRA_FAIL +*/ +ZEBRA_RES rec_put(Records p, Record *recpp); + +/** \brief creates new record (to be written to file storage) + \param p records handle + \returns record pointer (or NULL on error) +*/ +Record rec_new(Records p); +/** \brief gets record - with given system number + \param p records handle + \param sysno system ID (external number) + \returns record pointer (or NULL on error) +*/ +Record rec_get(Records p, zint sysno); + +/** \brief gets root record + \param p records handle + \returns record pointer (or NULL on error) +*/ +Record rec_get_root(Records p); + + +/** \brief gets next record - with given records + \param p records handle + \param rec record + \returns record pointer (or NULL on error) +*/ +Record rec_get_next(Records p, Record rec); + +ZEBRA_RES rec_close (Records *p); + +/** \brief opens records system + \param bfs block file storage + \param rw read-write flag(0=read only, 1=write) + \param compression_method REC_COMPRESS_ type +*/ +Records rec_open(BFiles bfs, int rw, int compression_method); + +/** \brief check whether a compression method is supported + \param compression_method (REC_COMPRESS_..) + \retval 0 if method is unsupported + \retval 1 if method is supported +*/ +int rec_check_compression_method(int compression_method); + +char *rec_strdup(const char *s, size_t *len); +void rec_prstat(Records p, int verbose); + +zint rec_sysno_to_int(zint sysno); + + +/** \brief No compression ("none") */ +#define REC_COMPRESS_NONE 0 +/** \brief BZIP2 compression (slow and requires big chunks) */ +#define REC_COMPRESS_BZIP2 1 +/** \brief zlib compression (faster and works off small chunks) */ +#define REC_COMPRESS_ZLIB 2 + + +enum { + recInfo_fileType, + recInfo_filename, + recInfo_delKeys, recInfo_databaseName, recInfo_storeData, - recInfo_attr + recInfo_attr, + recInfo_sortKeys }; +typedef struct recindex *recindex_t; + +/** \brief opens record index handle + \param bfs Block files handle + \param rw 1 for read and write; 0 for read-only + \param use_isamb 1 if ISAMB is to used for record index; 0 for flat (old) +*/ +recindex_t recindex_open(BFiles bfs, int rw, int use_isamb); + +/** \brief closes record index handle + \param p records handle +*/ +void recindex_close(recindex_t p); +int recindex_read_head(recindex_t p, void *buf); +const char *recindex_get_fname(recindex_t p); +ZEBRA_RES recindex_write_head(recindex_t p, const void *buf, size_t len); +int recindex_read_indx(recindex_t p, zint sysno, void *buf, int itemsize, + int ignoreError); +void recindex_write_indx(recindex_t p, zint sysno, void *buf, int itemsize); + +YAZ_END_CDECL +#endif +/* + * Local variables: + * c-basic-offset: 4 + * c-file-style: "Stroustrup" + * indent-tabs-mode: nil + * End: + * vim: shiftwidth=4 tabstop=8 expandtab + */ +