Stefan,

The pre-parser still uses MPS. It loads and caches modules. When it sees a
query that is just a function call with simle atomic parameters, it uses the
fast-path (i.e. execute a precompiled MIL tree). XRPC always enters on the
fast-path.

If the query is of any other form, it is fully recompiled and then executed
with whatever compiler is active (ALG or MPS). This means that indeed
imported modules may be compiled twice (that was already the case). First,
the preparser compiles them with MPS and caches them. Second, when re-use it
is not possible, the complete query is compiled again.

Porting XRPC to algebra is on Jennie's plate. However, Jennie is not such a
fast eater and it is a big meal. Therefore, this workaround should go into
the HEAD also.

Peter

-----Original Message-----
From: Stefan Manegold [mailto:[EMAIL PROTECTED]
Sent: woensdag 18 juni 2008 10:11
To: [email protected]; Peter Boncz
Subject: Re: [Monetdb-pf-checkins] pathfinder/runtime pathfinder.mx,
,1.421, 1.422 pf_support.mx, , 1.301, 1.302


On Tue, Jun 17, 2008 at 05:07:29PM +0000, Peter Boncz wrote:
> Update of /cvsroot/monetdb/pathfinder/runtime
> In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv2937
>
> Modified Files:
>       pathfinder.mx pf_support.mx
> Log Message:
> - BUG 1995879: only use algebra for normal queries
>
>   cachable queries and the XRPC server still use mps

Peter,

just for clarification and the records:
am I right that this means that now all XQuery modules are compiled with
MPS, but when a (non-XRPC?) query uses an XQuery module, this XQuery itself
is compiled with ALG? Or are such queries compiled with MPS, too?

Thanks in advance!

Stefan

>
>
>
> U pathfinder.mx
> Index: pathfinder.mx
> ===================================================================
> RCS file: /cvsroot/monetdb/pathfinder/runtime/pathfinder.mx,v
> retrieving revision 1.421
> retrieving revision 1.422
> diff -u -d -r1.421 -r1.422
> --- pathfinder.mx     16 Jun 2008 23:38:41 -0000      1.421
> +++ pathfinder.mx     17 Jun 2008 17:07:26 -0000      1.422
> @@ -4246,7 +4246,7 @@
>   * - execute MIL buffer (parse & execute)
>   *
>   * int
> - * xquery_compile_exec(xquery_client *ctx, char* xquery, int is_url,
> + * xquery_compile_exec(xquery_client *ctx, int options, char* xquery, int
is_url,
>   *                     char** prologue, char** query, char** epilogue,
char* nsurl)
>   * - translate xquery to MIL and execute
>   *
> @@ -4345,6 +4345,7 @@
>  extern char* PFmaxstack;
>  static int
>  xquery_compile_exec(xquery_client *ctx,
> +                    int options,
>                      char* url,
>                      int is_url,
>                      char** prologue,
> @@ -4356,22 +4357,9 @@
>      char *xquery = url;
>      char *err = NULL;
>
> -    int options = 0;
>      /* Setting the StandOff flag based on runtime settings */
>      if ((GDKgetenv("standoff") != NULL) &&
(strcmp(GDKgetenv("standoff"),"enabled") == 0))
>          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) != 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) == 0) && \
> -        (((ctx->mode & XQ_ALGEBRA) != 0) || \
> -         (GDKgetenv("xquery_backend") == NULL) ||
(strcmp(GDKgetenv("xquery_backend"),"milprint_summer") != 0)))
> -        options |= COMPILE_OPTION_ALGEBRA;
> -#endif
>
>      MT_set_lock(pf_compiler_lock, "xquery_compile_exec");
>      if (is_url) {
> @@ -4910,7 +4898,7 @@
>      strcpy(mod->url, url);
>      mod->nsurl = mod->url + url_len;
>
> -    ret = xquery_compile_exec(ctx, url, 1, &mod->prologue, NULL,
&mod->epilogue, mod->nsurl);
> +    ret = xquery_compile_exec(ctx, 0, url, 1, &mod->prologue, NULL,
&mod->epilogue, mod->nsurl);
>      if (!ret) {
>          xquery_module_free(mod);
>          return NULL;
> @@ -5745,9 +5733,22 @@
>          char *sec1 = NULL;
>          char *sec2 = NULL;
>          char *sec3 = NULL;
> +        int options = 0;
>          /* compile and execute the query (minus module imports) */
>          err = xquery_nondescriptive_error;
> -        if (xquery_compile_exec(ctx, query, 0, &sec1, &sec2, &sec3,
NULL))
> +    /* 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) != 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) == 0) && \
> +            (((ctx->mode & XQ_ALGEBRA) != 0) || \
> +             (GDKgetenv("xquery_backend") == NULL) ||
(strcmp(GDKgetenv("xquery_backend"),"milprint_summer") != 0)))
> +            options = COMPILE_OPTION_ALGEBRA;
> +#endif
> +        if (xquery_compile_exec(ctx, options, query, 0, &sec1, &sec2,
&sec3, NULL))
>                  err = NULL;
>          if (sec1) free(sec1);
>          if (sec2) free(sec2);
>
> U pf_support.mx
> Index: pf_support.mx
> ===================================================================
> RCS file: /cvsroot/monetdb/pathfinder/runtime/pf_support.mx,v
> retrieving revision 1.301
> retrieving revision 1.302
> diff -u -d -r1.301 -r1.302
> --- pf_support.mx     10 Jun 2008 09:22:17 -0000      1.301
> +++ pf_support.mx     17 Jun 2008 17:07:27 -0000      1.302
> @@ -8373,7 +8373,7 @@
>          BUNins(*res, &docpre, &docid[j], FALSE);
>
>          /* skip all nodes of this document */
> -        docpre = docpre + size[docpre];
> +        docpre = docpre + size[docpre] + 1;
>          for (delta = (n-i) >> 4; delta > 40; delta >>= 4)
>              while (i+delta < n && * (oid *) BUNtail(inputi, i+delta) <=
docpre)
>                  i += delta;
>
>
> -------------------------------------------------------------------------
> 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

--
| Dr. Stefan Manegold | mailto:[EMAIL PROTECTED] |
| CWI,  P.O.Box 94079 | http://www.cwi.nl/~manegold/  |
| 1090 GB Amsterdam   | Tel.: +31 (20) 592-4212       |
| The Netherlands     | Fax : +31 (20) 592-4312       |


-------------------------------------------------------------------------
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-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-developers

Reply via email to