%module "IDZebra"
+%include typemaps.i // Load the typemaps librayr
+
%{
-#include "zebraapi.h"
-#include "zebra_api_ext.h"
-#include "data1.h"
+#include <idzebra/api.h>
+#include "zebra_perl.h"
+#include <idzebra/data1.h>
#include "yaz/odr.h"
+#include "yaz/cql.h"
%}
/* == Typemaps ============================================================= */
+%typemap(in) int * {
+ int i;
+ if (!SvIOK($input))
+ croak("Argument $argnum is not an integer.");
+ i = SvIV($input);
+ $1 = &i;
+}
+
+%typemap(out) int * {
+ $result=newSViv($1)
+ sv_2mortal($result);
+ argvi++;
+}
+
+/* * * * * * Fix for broken swig implementation */
+%typemap(argout) long long *INOUT {
+ char temp[256];
+ if (argvi >= items) {
+ EXTEND(sp,1);
+ }
+ /* sprintf(temp,"%lld", $1); */
+ sprintf(temp,"%lld", *$1);
+ $result = sv_newmortal();
+ sv_setpv($result,temp);
+ argvi++;
+}
+
+
/* RetrievalRecordBuff is a special construct, to allow to map a char * buf
to non-null terminated perl string scalar value (SVpv). */
%typemap(out) RetrievalRecordBuf * {
- $result = newSVpv($1->buf,$1->len);
+ if ($1->len) {
+ $result = newSVpv($1->buf,$1->len);
+ } else {
+ $result = newSVpv("",0);
+ }
sv_2mortal($result);
argvi++;
}
/* Creates a new Perl array and places a NULL-terminated char ** into it */
%typemap(out) char ** {
- AV *myav;
- SV **svs;
- int i = 0,len = 0;
- /* Figure out how many elements we have */
- while ($1[len])
- len++;
- svs = (SV **) malloc(len*sizeof(SV *));
- for (i = 0; i < len ; i++) {
- svs[i] = sv_newmortal();
- sv_setpv((SV*)svs[i],$1[i]);
- };
- myav = av_make(len,svs);
- free(svs);
+ AV *myav;
+ SV **svs;
+ int i = 0,len = 0;
+ /* Figure out how many elements we have */
+ while ($1[len])
+ len++;
+ svs = (SV **) malloc(len*sizeof(SV *));
+ for (i = 0; i < len ; i++) {
+ svs[i] = sv_newmortal();
+ sv_setpv((SV*)svs[i],$1[i]);
+ };
+ myav = av_make(len,svs);
+ free(svs);
$result = newRV((SV*)myav);
sv_2mortal($result);
argvi++;
}
-
/* == Structures for shadow classes ======================================= */
-%include "zebra_api_ext.h"
+/*%include "zebra_perl.h" */
+
+typedef struct {
+ int noOfRecords;
+ ZebraRetrievalRecord *records;
+} RetrievalObj;
+
+typedef struct {
+ int errCode; /* non-zero if error when fetching this */
+ char *errString; /* error string */
+ int position; /* position of record in result set (1,2,..) */
+ char *base;
+ long long sysno;
+ int score;
+ char *format; /* record syntax */
+ RetrievalRecordBuf *buf;
+} RetrievalRecord;
+
+/* Scan Term Descriptor */
+typedef struct {
+ int occurrences; /* scan term occurrences */
+ char *term; /* scan term string */
+} scanEntry;
+
+typedef struct {
+ int num_entries;
+ int position;
+ int is_partial;
+ scanEntry *entries;
+} ScanObj;
+
+
+typedef struct {
+ int processed;
+ int inserted;
+ int updated;
+ int deleted;
+ long utime;
+ long stime;
+} ZebraTransactionStatus;
/* == Module initialization and cleanup (zebra_perl.c) ===================== */
void init (void);
void DESTROY (void);
-
/* == Logging facilities (yaz/log.h) ======================================= */
-void logLevel (int level);
-void logFile (const char *fname);
+%name(logLevel)
+void yaz_log_init_level (int level);
+
+%name(logFile)
+void yaz_log_init_file (const char *fname);
+
+%name(logMsg)
void logMsg (int level, const char *message);
+%name(logPrefix)
+void yaz_log_init_prefix (const char *prefix);
+
+%name(logPrefix2)
+void yaz_log_init_prefix2 (const char *prefix);
+
#define LOG_FATAL 0x0001
#define LOG_DEBUG 0x0002
#define LOG_WARN 0x0004
char * zebra_errAdd (ZebraHandle zh);
-/* == Record groups and database selection ================================= */
+/* == Zebra resources and database selection =============================== */
-/* initialize a recordGroup (zebra_api_ext.c); */
-void init_recordGroup (recordGroup *rg);
+/* set a resource */
+%name(set_resource)
+void zebra_set_resource(ZebraHandle zh, const char *name, const char *value);
-/* set up a recordGroup for a specific file extension from zebra.cfg
- (zebra_api_ext.c); */
-void res_get_recordGroup (ZebraHandle zh, recordGroup *rg,
- const char *ext);
-/* set current record group for update purposes (zebraapi.c) */
-%name(set_group)
-void zebra_set_group (ZebraHandle zh, struct recordGroup *rg);
+/* get a resource */
+%name(get_resource)
+const char *zebra_set_resource(ZebraHandle zh, const char *name,
+ const char *defaultvalue);
/* select database for update purposes (zebraapi.c) */
%name(select_database)
/* begin transaction (add write lock) (zebraapi.c) */
%name(begin_trans)
-void zebra_begin_trans (ZebraHandle zh);
+int zebra_begin_trans (ZebraHandle zh, int rw);
/* end transaction (remove write lock) (zebraapi.c) */
%name(end_trans)
-void zebra_end_trans (ZebraHandle zh);
-
-/* begin retrieval (add read lock) (zebraapi.c) */
-%name(begin_read)
-int zebra_begin_read (ZebraHandle zh);
+void zebra_end_transaction (ZebraHandle zh, ZebraTransactionStatus *stat);
-/* end retrieval (remove read lock) (zebraapi.c) */
-%name(end_read)
-void zebra_end_read (ZebraHandle zh);
+%name(trans_no)
+int zebra_trans_no (ZebraHandle zh);
/* commit changes from shadow (zebraapi.c) */
%name(commit)
int zebra_compact (ZebraHandle zh);
%name(repository_update)
-void zebra_repository_update (ZebraHandle zh);
+void zebra_repository_update (ZebraHandle zh, const char *path);
%name(repository_delete)
-void zebra_repository_delete (ZebraHandle zh);
+void zebra_repository_delete (ZebraHandle zh, const char *path);
%name(repository_show)
-void zebra_repository_show (ZebraHandle zh);
+void zebra_repository_show (ZebraHandle zh, const char *path);
/* == Record update/delete (zebra_api_ext.c) =============================== */
If not, and match_criteria is provided, then sysno is guessed
If not, and a record is provided, then sysno is got from there */
+%apply long long *INOUT { long long *sysno };
+
+%name(insert_record)
+int zebra_insert_record (ZebraHandle zh,
+ const char *recordType,
+ long long *sysno,
+ const char *match,
+ const char *fname,
+ const char *buf,
+ int buf_size,
+ int force_update);
+/* actually, sysno is only output param in insert_record, but kept */
+/* as inout for symmetry in the interface. The session class assures */
+/* that nothing goes in... */
+
+
%name(update_record)
int zebra_update_record (ZebraHandle zh,
- recordGroup *rGroup,
- int sysno,
+ const char *recordType,
+ long long *sysno,
const char *match,
const char *fname,
const char *buf,
- int buf_size);
+ int buf_size,
+ int force_update);
%name(delete_record)
int zebra_delete_record (ZebraHandle zh,
- recordGroup *rGroup,
- int sysno,
+ const char *recordType,
+ long long *sysno,
const char *match,
const char *fname,
const char *buf,
- int buf_size);
-
-/* == Search (zebra_api_ext.c) ============================================= */
+ int buf_size,
+ int force_update);
+/* == Search (zebraapi.c) ================================================== */
+%include "typemaps.i"
+%apply int *REFERENCE { int *hits };
%name(search_PQF)
int zebra_search_PQF (ZebraHandle zh,
- ODR odr_input, ODR odr_output,
const char *pqf_query,
- const char *setname);
+ const char *setname,
+ int *hits);
+
+/* == YAZ - query tools ==================================================== */
-/* TODO: search_CCL */
+cql_transform_t cql_transform_open_fname(const char *fname);
+void cql_transform_close(cql_transform_t ct);
+int cql_transform_error(cql_transform_t ct, const char **addinfo);
+%name(cql2pqf)
+int zebra_cql2pqf (cql_transform_t ct,
+ const char *query, char *res, int len);
/* == Retrieval (zebra_api_ext.c) ========================================== */
RetrievalRecord *res,
int pos);
+/* Delete Result Set(s) (zebraapi.c) */
+%name(deleteResultSet)
+int zebra_deleleResultSet(ZebraHandle zh, int function,
+ int num_setnames, char **setnames,
+ int *statuses);
+
+
+/* Resultset terms */
+/* disabled
+%name(resultSetTerms)
+int zebra_resultSetTerms (ZebraHandle zh, const char *setname,
+ int no, int *REFERENCE,
+ int *REFERENCE, char *out, int *REFERENCE);
+*/
+
/* == Sort ================================================================= */
-int sort (ZebraHandle zh,
+%name(sort)
+int zebra_sort_by_specstr (ZebraHandle zh,
ODR stream,
const char *sort_spec,
const char *output_setname,
const char **input_setnames
);
-/*
-void zebra_sort (ZebraHandle zh, ODR stream,
- int num_input_setnames,
- const char **input_setnames,
- const char *output_setname,
- Z_SortKeySpecList *sort_sequence,
- int *sort_status);
-*/
+/* == Scan ================================================================= */
+%name(scan_PQF)
+void zebra_scan_PQF (ZebraHandle zh,
+ ScanObj *so,
+ ODR stream,
+ const char *pqf_query);
+
+scanEntry *getScanEntry(ScanObj *so, int pos);
+
+%typemap(in) int * (int dvalue);
+%typemap(argout) int *;
+
/* Admin functionality */
/*
%name(admin_shutdown) void zebra_admin_shutdown (ZebraHandle zh);
*/
-/* Browse
-void zebra_scan (ZebraHandle zh, ODR stream,
- Z_AttributesPlusTerm *zapt,
- oid_value attributeset,
- int *position, int *num_entries,
- ZebraScanEntry **list,
- int *is_partial);
-*/
-/* Delete Result Set(s) */
-/*
-int zebra_deleleResultSet(ZebraHandle zh, int function,
- int num_setnames, char **setnames,
- int *statuses);
-*/
/* do authentication */
/*
* =========================================================================
*/
int grs_perl_readf(struct perl_context *context, size_t len);
+int grs_perl_readline(struct perl_context *context);
+char grs_perl_getc(struct perl_context *context);
off_t grs_perl_seekf(struct perl_context *context, off_t offset);
off_t grs_perl_tellf(struct perl_context *context);
void grs_perl_endf(struct perl_context *context, off_t offset);
-data1_handle grs_perl_get_dh(struct perl_context *context);
-NMEM grs_perl_get_mem(struct perl_context *context);
+data1_handle *grs_perl_get_dh(struct perl_context *context);
+NMEM *grs_perl_get_mem(struct perl_context *context);
void grs_perl_set_res(struct perl_context *context, data1_node *n);