removed a few debug stmts
[idzebra-moved-to-github.git] / index / mod_dom.c
index 0dcf999..3340ec4 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of the Zebra server.
-   Copyright (C) 1995-2008 Index Data
+   Copyright (C) 1994-2009 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
@@ -338,7 +338,7 @@ static ZEBRA_RES parse_convert(struct filter_info *tinfo, xmlNodePtr ptr,
             *l = p;
             l = &p->next;
         }
-        else if (!XML_STRCMP(ptr->name, "meta"))
+        else if (!XML_STRCMP(ptr->name, "process-meta"))
         {
             struct _xmlAttr *attr;
             struct convert_s *p = nmem_malloc(tinfo->nmem_config, sizeof(*p));
@@ -376,13 +376,12 @@ static int process_meta(struct filter_info *tinfo, xmlDocPtr doc, xmlNodePtr nod
             struct _xmlAttr *attr;      
             for (attr = node->properties; attr; attr = attr->next)
             {
-                if (attr_content(attr, "element_set_name", &element_set_name))
+                if (attr_content(attr, "name", &element_set_name))
                     ;
                 else
                 {
                     dom_log(YLOG_WARN, tinfo, node,
-                            "bad attribute @%s, expected @element_set_name",
-                            attr->name);
+                            "bad attribute @%s, expected @name", attr->name);
                 }
             }
             if (element_set_name)
@@ -400,11 +399,11 @@ static int process_meta(struct filter_info *tinfo, xmlDocPtr doc, xmlNodePtr nod
                 if (ret == 0)
                 {
                     xmlDocPtr sub_doc = 
-                        xmlParseMemory(    wrbuf_buf(result), wrbuf_len(result));
+                        xmlParseMemory(wrbuf_buf(result), wrbuf_len(result));
                     if (sub_doc)
                     {
                         xmlNodePtr t = xmlDocGetRootElement(sub_doc);
-                        xmlAddChild(node, xmlCopyNode(t, 1));
+                        xmlReplaceNode(node, xmlCopyNode(t, 1));
                         xmlFreeDoc(sub_doc);
                     }
                 }
@@ -814,10 +813,18 @@ static void index_value_of(struct filter_info *tinfo,
     {
         xmlChar *text = xmlNodeGetContent(node);
         size_t text_len = strlen((const char *)text);
-       
+        
         /* if there is no text, we do not need to proceed */
         if (text_len)
         {            
+            /* keep seqno base so that all text will have
+               identical seqno's for multiple fields , e.g
+               <z:index name="title:w any:w title:p">.. */
+            
+            zint seqno_base = recword->seqno;
+            zint seqno_max = recword->seqno;
+       
+
             const char *look = index_p;
             const char *bval;
             const char *eval;
@@ -865,6 +872,7 @@ static void index_value_of(struct filter_info *tinfo,
 
                 /* actually indexing the text given */
 
+                recword->seqno = seqno_base;
                 recword->index_name = (const char *)index;
                 if (*type)
                     recword->index_type = (const char *) type;
@@ -879,12 +887,16 @@ static void index_value_of(struct filter_info *tinfo,
                 
                 (extctr->tokenAdd)(recword);
 
+                if (seqno_max < recword->seqno)
+                    seqno_max = recword->seqno;
+
                 /* eat whitespaces */
                 if (*look && ' ' == *look)
                 {
                     look++;
                 } 
             }
+            recword->seqno = seqno_max;
         }
         xmlFree(text); 
     }
@@ -1151,7 +1163,6 @@ static int convert_extract_doc(struct filter_info *tinfo,
     int len_out;
     const char *params[10];
     xsltStylesheetPtr last_xsp = 0;
-    xmlDocPtr store_doc = 0;
 
     /* per default do not ingest record */
     tinfo->record_info_invoked = 0;
@@ -1168,41 +1179,44 @@ static int convert_extract_doc(struct filter_info *tinfo,
     {
         xmlChar *buf_out;
         int len_out;
+        xmlDocDumpMemory(doc, &buf_out, &len_out);
 #if 0 
         FILE *outf = fopen("extract.xml", "w");
-        xmlDocDumpMemory(doc, &buf_out, &len_out);
         fwrite(buf_out, 1, len_out, outf);
-#endif
-        yaz_log(YLOG_LOG, "Extract Doc: %.*s", len_out, buf_out);
-#if 0
         fclose(outf);
 #endif
+        yaz_log(YLOG_LOG, "Extract Doc: %.*s", len_out, buf_out);
     }
 
-    /* input conversion */
-    perform_convert(tinfo, p, 0, input->convert, params, &doc, 0);
-
-    if (tinfo->store)
+    if (p->setStoreData)
     {
-        /* store conversion */
-        store_doc = xmlCopyDoc(doc, 1);
-        perform_convert(tinfo, p, 0, tinfo->store->convert,
-                        params, &store_doc, &last_xsp);
-    }
-    
-    /* saving either store doc or original doc in case no store doc exists */
-    if (last_xsp)
-        xsltSaveResultToString(&buf_out, &len_out, 
-                               store_doc ? store_doc : doc, last_xsp);
-    else
-        xmlDocDumpMemory(store_doc ? store_doc : doc, &buf_out, &len_out);
+        xmlDocPtr store_doc = 0;
 
-    if (p->setStoreData)
-        (*p->setStoreData)(p, buf_out, len_out);
-    xmlFree(buf_out);
+        /* input conversion */
+        perform_convert(tinfo, p, 0, input->convert, params, &doc, 0);
+        
+        if (tinfo->store)
+        {
+            /* store conversion */
+            store_doc = xmlCopyDoc(doc, 1);
+            perform_convert(tinfo, p, 0, tinfo->store->convert,
+                            params, &store_doc, &last_xsp);
+        }
+        
+        /* saving either store doc or original doc in case no store doc exists */
+        if (last_xsp)
+            xsltSaveResultToString(&buf_out, &len_out, 
+                                   store_doc ? store_doc : doc, last_xsp);
+        else
+            xmlDocDumpMemory(store_doc ? store_doc : doc, &buf_out, &len_out);
+        
+        if (p->setStoreData)
+            (*p->setStoreData)(p, buf_out, len_out);
+        xmlFree(buf_out);
+        if (store_doc)
+            xmlFreeDoc(store_doc);
+    }
 
-    if (store_doc)
-        xmlFreeDoc(store_doc);
 
     /* extract conversion */
     perform_convert(tinfo, p, 0, tinfo->extract->convert, params, &doc, 0);
@@ -1258,7 +1272,7 @@ static int extract_xml_split(struct filter_info *tinfo,
             
             ptr = xmlTextReaderExpand(input->u.xmlreader.reader);
             if (ptr)
-                {
+            {
                 /* we have a new document */
 
                 xmlNodePtr ptr2 = xmlCopyNode(ptr, 1);
@@ -1404,7 +1418,8 @@ static int filter_extract(void *clientData, struct recExtractCtrl *p)
 static int ioread_ret(void *context, char *buffer, int len)
 {
     struct recRetrieveCtrl *p = context;
-    return p->stream->readf(p->stream, buffer, len);
+    int r = p->stream->readf(p->stream, buffer, len);
+    return r;
 }
 
 static int ioclose_ret(void *context)
@@ -1549,6 +1564,7 @@ idzebra_filter
 /*
  * Local variables:
  * c-basic-offset: 4
+ * c-file-style: "Stroustrup"
  * indent-tabs-mode: nil
  * End:
  * vim: shiftwidth=4 tabstop=8 expandtab