-/* $Id: recctrl.h,v 1.1 2004-09-28 10:15:03 adam Exp $
- Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004
- Index Data Aps
+/* $Id: recctrl.h,v 1.29 2006-08-22 13:39:25 adam Exp $
+ Copyright (C) 1995-2006
+ Index Data ApS
This file is part of the Zebra server.
for more details.
You should have received a copy of the GNU General Public License
-along with Zebra; see the file LICENSE.zebra. If not, write to the
-Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA.
-*/
-
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+*/
-#ifndef RECCTRL_H
-#define RECCTRL_H
+#ifndef IDZEBRA_RECCTRL_H
+#define IDZEBRA_RECCTRL_H
+#include <sys/types.h>
#include <yaz/proto.h>
#include <yaz/oid.h>
#include <yaz/odr.h>
#include <idzebra/res.h>
#include <idzebra/data1.h>
-#include <zebramap.h>
+#include <idzebra/snippet.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
+YAZ_BEGIN_CDECL
+
+/* 1 */
+#define ZEBRA_XPATH_ELM_BEGIN "_XPATH_BEGIN"
+
+/* 2 */
+#define ZEBRA_XPATH_ELM_END "_XPATH_END"
+
+/* 1016 */
+#define ZEBRA_XPATH_CDATA "_XPATH_CDATA"
+
+/* 3 */
+#define ZEBRA_XPATH_ATTR_NAME "_XPATH_ATTR_NAME"
+
+/* 1015 */
+#define ZEBRA_XPATH_ATTR_CDATA "_XPATH_ATTR_CDATA"
-/* single word entity */
+/** Indexing token */
typedef struct {
- int attrSet;
- int attrUse;
- unsigned reg_type;
- char *string;
- int length;
- int seqno;
- ZebraMaps zebra_maps;
+ /** index type ('w', 'p', .. */
+ unsigned index_type;
+ /** index name, e.g. "title" */
+ const char *index_name;
+ /** token char data */
+ const char *term_buf;
+ /** length of term_buf */
+ int term_len;
+ /** sequence number */
+ zint seqno;
+ /** segment number */
+ zint segment;
+ /** record ID */
+ zint record_id;
+ /** section ID */
+ zint section_id;
struct recExtractCtrl *extractCtrl;
} RecWord;
-/* Extract record control */
+/** \brief record reader stream */
+struct ZebraRecStream {
+ /** client data */
+ void *fh;
+ /** \brief read function */
+ int (*readf)(struct ZebraRecStream *s, char *buf, size_t count);
+ /** \brief seek function */
+ off_t (*seekf)(struct ZebraRecStream *s, off_t offset);
+ /** \brief tell function */
+ off_t (*tellf)(struct ZebraRecStream *s);
+ /** \brief set and get of record position */
+ off_t (*endf)(struct ZebraRecStream *s, off_t *offset);
+ /** \brief close and destroy stream */
+ void (*destroy)(struct ZebraRecStream *s);
+};
+
+/** \brief record extract for indexing */
struct recExtractCtrl {
- void *fh; /* File handle and read function */
- int (*readf)(void *fh, char *buf, size_t count);
- off_t (*seekf)(void *fh, off_t offset); /* seek function */
- off_t (*tellf)(void *fh); /* tell function */
- void (*endf)(void *fh, off_t offset); /* end of record position */
- off_t offset; /* start offset */
+ struct ZebraRecStream *stream;
void (*init)(struct recExtractCtrl *p, RecWord *w);
void *clientData;
void (*tokenAdd)(RecWord *w);
- ZebraMaps zebra_maps;
+ void (*setStoreData)(struct recExtractCtrl *p, void *buf, size_t size);
+ int first_record;
int flagShowRecords;
int seqno[256];
+ char match_criteria[256];
+ zint staticrank;
void (*schemaAdd)(struct recExtractCtrl *p, Odr_oid *oid);
data1_handle dh;
void *handle;
/* Retrieve record control */
struct recRetrieveCtrl {
+ struct ZebraRecStream *stream;
/* Input parameters ... */
Res res; /* Resource pool */
ODR odr; /* ODR used to create response */
- void *fh; /* File descriptor and read function */
- int (*readf)(void *fh, char *buf, size_t count);
- off_t (*seekf)(void *fh, off_t offset);
- off_t (*tellf)(void *fh);
oid_value input_format; /* Preferred record syntax */
Z_RecordComposition *comp; /* formatting instructions */
char *encoding; /* preferred character encoding */
zint localno; /* local id of record */
int score; /* score 0-1000 or -1 if none */
+ zint staticrank; /* static rank >= 0, 0 if none */
int recordSize; /* size of record in bytes */
char *fname; /* name of file (or NULL if internal) */
data1_handle dh;
+ zebra_snippets *hit_snippet;
+ zebra_snippets *doc_snippet;
/* response */
oid_value output_format;
void *rec_buf;
int rec_len;
int diagnostic;
- char *message;
+ char *addinfo;
};
typedef struct recType *RecType;
struct recType
{
+ int version;
char *name; /* Name of record type */
void *(*init)(Res res, RecType recType); /* Init function - called once */
- void (*config)(void *clientData, Res res, const char *args); /* Config */
+ ZEBRA_RES (*config)(void *clientData, Res res, const char *args); /* Config */
void (*destroy)(void *clientData); /* Destroy function */
int (*extract)(void *clientData,
struct recExtractCtrl *ctrl); /* Extract proc */
typedef struct recTypeClass *RecTypeClass;
typedef struct recTypes *RecTypes;
+YAZ_EXPORT
RecTypeClass recTypeClass_create (Res res, NMEM nmem);
+
+YAZ_EXPORT
+void recTypeClass_load_modules(RecTypeClass *rts, NMEM nmem,
+ const char *module_path);
+
+YAZ_EXPORT
+RecTypeClass recTypeClass_add_modules(Res res, NMEM nmem,
+ const char *module_path);
+
+YAZ_EXPORT
void recTypeClass_destroy(RecTypeClass rtc);
+
+YAZ_EXPORT
void recTypeClass_info(RecTypeClass rtc, void *cd,
void (*cb)(void *cd, const char *s));
+YAZ_EXPORT
RecTypes recTypes_init(RecTypeClass rtc, data1_handle dh);
+
+YAZ_EXPORT
void recTypes_destroy(RecTypes recTypes);
+
+YAZ_EXPORT
void recTypes_default_handlers(RecTypes recTypes, Res res);
+YAZ_EXPORT
RecType recType_byName(RecTypes rts, Res res, const char *name,
void **clientDataP);
+YAZ_END_CDECL
-#ifdef __cplusplus
-}
#endif
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ * vim: shiftwidth=4 tabstop=8 expandtab
+ */
-#endif