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