X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=perl%2FIDZebra.i;h=8b5f86e7d272f31aaf8de839546ab1d17c629f51;hb=4cea1b9769079a2cdc143f4fe483e69d5b77a813;hp=a2528f83b30e1ddde2ed0f9394368371001683e5;hpb=06baa91f7a7f47d46ae76f86c95d7860ffe6a2d4;p=idzebra-moved-to-github.git diff --git a/perl/IDZebra.i b/perl/IDZebra.i index a2528f8..8b5f86e 100644 --- a/perl/IDZebra.i +++ b/perl/IDZebra.i @@ -1,18 +1,53 @@ %module "IDZebra" +%include typemaps.i // Load the typemaps librayr + %{ -#include "zebraapi.h" -#include "zebra_api_ext.h" -#include "data1.h" +#include +#include "zebra_perl.h" +#include #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++; } @@ -45,42 +80,90 @@ /* 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 @@ -133,18 +216,16 @@ const char * zebra_errString (ZebraHandle zh); 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) @@ -160,19 +241,14 @@ int zebra_select_databases (ZebraHandle zh, int num_bases, /* 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) @@ -196,13 +272,13 @@ int zebra_init (ZebraHandle zh); 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) =============================== */ @@ -211,35 +287,61 @@ void zebra_repository_show (ZebraHandle zh); 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) ========================================== */ @@ -263,22 +365,42 @@ void record_retrieve(RetrievalObj *ro, 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 */ /* @@ -286,21 +408,7 @@ void zebra_sort (ZebraHandle zh, ODR stream, %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 */ /* @@ -553,11 +661,13 @@ const char *data1_get_tabroot(data1_handle dh); * ========================================================================= */ 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);