Update of /cvsroot/monetdb/pathfinder/runtime
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv21826/runtime

Modified Files:
      Tag: PF_ROX
        pathfinder.mx shttpd.c xrpc_server.mx 
Log Message:
propagated changes of Thursday Jun 05 2008 - Friday Jun 06 2008
from the development trunk to the PF_ROX branch



Index: shttpd.c
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/runtime/shttpd.c,v
retrieving revision 1.33.6.2
retrieving revision 1.33.6.3
diff -u -d -r1.33.6.2 -r1.33.6.3
--- shttpd.c    24 Feb 2008 20:42:59 -0000      1.33.6.2
+++ shttpd.c    6 Jun 2008 14:25:44 -0000       1.33.6.3
@@ -2840,6 +2840,7 @@
                {"css",         "text/css"                      },
                {"htm",         "text/html"                     },
                {"html",        "text/html"                     },
+               {"xml",     "text/xml"          },
                {NULL,          NULL                            }
        };
 

U pathfinder.mx
Index: pathfinder.mx
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/runtime/pathfinder.mx,v
retrieving revision 1.395.2.21
retrieving revision 1.395.2.22
diff -u -d -r1.395.2.21 -r1.395.2.22
--- pathfinder.mx       24 May 2008 20:41:17 -0000      1.395.2.21
+++ pathfinder.mx       6 Jun 2008 14:25:43 -0000       1.395.2.22
@@ -675,19 +675,15 @@
 
 
 # the logger background thread
-var logger_base := 0;
 PROC pf_logmanager() : void {
-    logger_base := logger_changes(pf_logger);
     var cnt := 0;
     while(true) {
         var changes := logger_changes(pf_logger);
-        var delta := changes - logger_base;
         if (((cnt :+= 1) % 10) = 0) { 
             cleantmpdir((msec() / 1000LL) - 3600LL);
         }
-        if (((delta < 0) or (delta > 100000)) and (cnt > 10)) { 
+        if ((changes > 100000) and (cnt > 10)) { 
             pf_logflush(0LL);
-            logger_base = changes;
             cnt := 0;
         } 
         sleep(30);  
@@ -2880,7 +2876,7 @@
     # if there is a free page, then this is easy
     var coll_shortlock := reverse(runtime).fetch(RT_LOCK_FREELIST);
     lock_set(coll_shortlock);
-    var page_id := [EMAIL PROTECTED]; err := CATCH(page_id := 
__runtime_newpage(runtime));
+    var page_id := [EMAIL PROTECTED], err := CATCH(page_id := 
__runtime_newpage(runtime));
     lock_unset(coll_shortlock);
 
     if (isnil(err) and isnil(page_id)) {
@@ -4026,7 +4022,7 @@
 
 mapi_register(xquery_frontend()); # open up mapi client access
 if (monet_environment.find("monet_welcome") = "yes") 
-    printf("%c MonetDB/XQuery module v0.25.0 loaded\n", int(35));
+    printf("%c MonetDB/XQuery module v0.25.0 loaded (default back-end is 
'%s')\n", int(35), monet_environment.find("xquery_backend"));
     #                                 ^^^^^^
     # Maintained via vertoo. Please don't modify by hand!
     # Contact [EMAIL PROTECTED] for details and/or assistance.
@@ -4434,13 +4430,13 @@
         options |= COMPILE_OPTION_STANDOFF;
     /* Setting the Algebra flag; server setting overules compile-time default; 
client choice overrules server setting */
 #if MILPRINT_SUMMER_IS_DEFAULT
-    if ((ctx->mode & XQ_ALGEBRA) || \
-        (!(ctx->mode & XQ_MILPRINT_SUMMER) && \
+    if (((ctx->mode & XQ_ALGEBRA) != 0) || \
+        (((ctx->mode & XQ_MILPRINT_SUMMER) == 0) && \
          (GDKgetenv("xquery_backend") != NULL) && 
(strcmp(GDKgetenv("xquery_backend"),"algebra") == 0)))
         options |= COMPILE_OPTION_ALGEBRA;
 #else /* ALGEBRA_IS_DEFAULT */
-    if (!(ctx->mode & XQ_MILPRINT_SUMMER) && \
-        ((ctx->mode & XQ_ALGEBRA) || \
+    if (((ctx->mode & XQ_MILPRINT_SUMMER) != 0) && \
+        (((ctx->mode & XQ_ALGEBRA) == 0) || \
          (GDKgetenv("xquery_backend") == NULL) || 
(strcmp(GDKgetenv("xquery_backend"),"milprint_summer") != 0)))
         options |= COMPILE_OPTION_ALGEBRA;
 #endif
@@ -6232,6 +6228,14 @@
 bat *
 xquery_prelude(void)
 {
+    if (GDKgetenv("xquery_backend") == NULL) {
+#if MILPRINT_SUMMER_IS_DEFAULT
+        GDKsetenv("xquery_backend","milprint_summer");
+#else /* ALGEBRA_IS_DEFAULT */
+        GDKsetenv("xquery_backend","algebra");
+#endif
+    }
+
     MT_init_lock(pf_compiler_lock, "pf_compiler_lock");
     MT_init_lock(pf_module_lock, "pf_module_lock");
     MT_init_lock(pf_cache_lock, "pf_cache_lock");

U xrpc_server.mx
Index: xrpc_server.mx
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/runtime/xrpc_server.mx,v
retrieving revision 1.58.4.5
retrieving revision 1.58.4.6
diff -u -d -r1.58.4.5 -r1.58.4.6
--- xrpc_server.mx      22 May 2008 08:48:42 -0000      1.58.4.5
+++ xrpc_server.mx      6 Jun 2008 14:25:45 -0000       1.58.4.6
@@ -322,28 +322,27 @@
  * @return PRE, or 0 if not found.
  */
 static INLINE oid
-get_req_node_pre(
-        stream *out,
-        oid   start_pre,
-        oid   end_pre,
-        oid  *pre_propT,
-        char *pre_kindT,
-        BAT  *qn_prefix_uri_loc)
+get_pre_by_qname(str qname,
+                 oid start_pre,
+                 oid end_pre,
+                 oid *pre_propT,
+                 char *pre_kindT,
+                 BAT *qn_uri_loc)
 {
     oid i;
-    char *qname = NULL;
-    BATiter qn_puli;
-    
-    qn_puli = bat_iterator(qn_prefix_uri_loc);
+    BUN bun = BUN_NONE;
+    BATiter qn_uli = bat_iterator(qn_uri_loc);
+
     for (i = start_pre; i <= end_pre; i++) {
         if (pre_kindT[i] == ELEMENT) {
-            qname = BUNtail(qn_puli, BUNfnd(qn_prefix_uri_loc, 
&(pre_propT[i])));
-            if(strcmp(qname, "xrpc|"XRPC_NS"|request") == 0)
+            BUNfndVOID(bun, qn_uli, &(pre_propT[i]));
+            if(bun == BUN_NONE)
+                return 0;
+            if(strcmp(BUNtail(qn_uli, bun), qname) == 0)
                 return i;
         }
     }
 
-    send_err(out, ERR404, "env:Sender", "The required \""XRPC_NS":request\" 
element not found");
     return 0;
 }
 
@@ -510,12 +509,12 @@
     frag_root  = BATsetaccess(frag_root, BAT_APPEND);
     nattrs     = BATcount(attr_prop);
 
-    /* There are at least two nodes before "request", namely "Envelope"
-     * and "Body" (a "Header" node is optional). There are at least one
-     * node after "request", namely "sequence". */
-    if (!(req_node_pre = get_req_node_pre(out, 2, BATcount(pre_size),
-                    pre_propT, pre_kindT, qn_prefix_uri_loc)))
+    if (!(req_node_pre = get_pre_by_qname(XRPC_NS"|request",
+                    2, /* There are at least two nodes before "request" */
+                    BATcount(pre_size), pre_propT, pre_kindT, qn_uri_loc))) {
+        send_err(out, ERR404, "env:Sender", "The required 
\""XRPC_NS":request\" element not found");
         return GDK_FAIL;
+    }
     while(ao_ptr < nattrs && attr_ownT[ao_ptr] < req_node_pre) ao_ptr++;
     while(ao_ptr < nattrs && attr_ownT[ao_ptr] == req_node_pre) {
         char *pul = (char*) BUNtail(qn_puli, BUNfirst(qn_prefix_uri_loc) + 
attr_qnT[ao_ptr]);
@@ -553,7 +552,17 @@
             return GDK_FAIL;
         }
     } else {
-        iterc = BATcount(BATselect(qn_uri_loc, XRPC_NS"|call", 
XRPC_NS"|call"));
+        /* calculate iterc by counting the "xrpc:call" nodes */
+        call_node_pre = get_pre_by_qname(XRPC_NS"|call", req_node_pre + 1,
+                    req_node_pre + pre_sizeT[req_node_pre], pre_propT,
+                    pre_kindT, qn_uri_loc); /* remember first "xrpc:call" */
+        next_call_node_pre = call_node_pre;
+        do {
+            iterc++; /* found an "xrpc:call", try next */
+            next_call_node_pre = next_call_node_pre + 
pre_sizeT[next_call_node_pre] + 1;
+        } while ((next_call_node_pre = get_pre_by_qname(XRPC_NS"|call",
+                        next_call_node_pre, req_node_pre + 
pre_sizeT[req_node_pre],
+                        pre_propT, pre_kindT, qn_uri_loc)));
     }
     argc = my_strtol(out, FALSE, arity_str, "arity");
     if(errno) {
@@ -589,24 +598,27 @@
         return GDK_FAIL;
     }
    
-    call_node_pre = req_node_pre + 1;
+    call_node_pre = call_node_pre > 0 ? call_node_pre :
+        get_pre_by_qname(XRPC_NS"|call", (req_node_pre + 1),
+                req_node_pre + pre_sizeT[req_node_pre] + 1, pre_propT,
+                pre_kindT, qn_uri_loc);
     /* Fill the arrays 'argcnt', 'argval', 'argtpe' */
     /* i: index in xrpc:call; j: index of xrpc:sequence per xrpc:call */
     for(i = 0; next_call_node_pre < BATcount(pre_size); call_node_pre = 
next_call_node_pre, i++) {
         /* skip possible empty text node, without further checking */
-        call_node_pre += (pre_kindT[call_node_pre] == ELEMENT ? 0 : 1);
+        call_node_pre += (pre_kindT[call_node_pre] == TEXT ? 1 : 0);
         next_call_node_pre = call_node_pre + pre_sizeT[call_node_pre] + 1;
 
         for(seq_node_pre = call_node_pre + 1, j = 0; seq_node_pre < 
next_call_node_pre;
                 seq_node_pre = next_seq_node_pre, j++) {
             /* skip possible empty text nodes, without further checking */
-            seq_node_pre += (pre_kindT[seq_node_pre] == ELEMENT ? 0 : 1);
+            seq_node_pre += (pre_kindT[seq_node_pre] == TEXT ? 1 : 0);
             next_seq_node_pre = seq_node_pre + pre_sizeT[seq_node_pre] + 1;
        
             for(tpe_node_pre = seq_node_pre+1, k=1; tpe_node_pre < 
next_seq_node_pre;
                     tpe_node_pre = next_tpe_node_pre, k++) {
                 /* skip possible empty text nodes, without further checking */
-                tpe_node_pre += (pre_kindT[tpe_node_pre] == ELEMENT ? 0 : 1);
+                tpe_node_pre += (pre_kindT[tpe_node_pre] == TEXT ? 1 : 0);
                 next_tpe_node_pre = tpe_node_pre + pre_sizeT[tpe_node_pre]+1;
                 /* advance our cursor in attr_own */
                 while(ao_ptr < nattrs && attr_ownT[ao_ptr] < tpe_node_pre) 
ao_ptr++;
@@ -708,7 +720,8 @@
                        strcmp(argtpe[nr_args], "xs:comment") == 0 ||
                        strcmp(argtpe[nr_args], "xs:processing-instruction") == 
0) {
                         val_node_pre = tpe_node_pre + 1;
-                        val_node_pre += (pre_kindT[val_node_pre] == ELEMENT ? 
0 : 1);
+                        if(strcmp(argtpe[nr_args], "xs:text") != 0)
+                            val_node_pre += (pre_kindT[val_node_pre] == TEXT ? 
1 : 0);
                     } else if (strcmp(argtpe[nr_args], "xs:document") == 0) {
                         val_node_pre = tpe_node_pre;
                         pre_kindT[val_node_pre] = 4;


-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
Monetdb-pf-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-pf-checkins

Reply via email to