Lefteris,
I think Jan is talking an empty input _relation_ (in the loop
lifting sense) not the absence of the argument in the actual
function call.
Cheers,
--Torsten
On Feb 14, 2008, at 15:37, Lefteris wrote:
> Jan, is this the correct way to cope with empty input?
>
> The xquery function specs say that if input is ommited then it
> defaults to the context item (.)
>
> That also is expresed in xquery_fo.c with the .arity = 0 version of
> fn:name etc.
> If that is true, shouldn't be dealed at the core level?
>
> lefteris
>
> On Wed, Feb 13, 2008 at 9:54 PM, Jan Rittinger
> <[EMAIL PROTECTED]> wrote:
>> Update of /cvsroot/monetdb/pathfinder/compiler/algebra
>> In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv18492/algebra
>>
>> Modified Files:
>> builtins.c
>> Log Message:
>> -- Fix the translation of fn:name, fn:local-name, and fn:namespace-
>> uri.
>> (All three have to cope with empty input.)
>>
>>
>> Index: builtins.c
>> ===================================================================
>> RCS file: /cvsroot/monetdb/pathfinder/compiler/algebra/builtins.c,v
>> retrieving revision 1.79
>> retrieving revision 1.80
>> diff -u -d -r1.79 -r1.80
>> --- builtins.c 6 Feb 2008 16:36:28 -0000 1.79
>> +++ builtins.c 13 Feb 2008 20:54:17 -0000 1.80
>> @@ -2350,6 +2350,10 @@
>> * is not even the right function to use there, because the
>> constructors
>> * should do their job based on _statically-known namespace
>> declarations_,
>> * not in-scope declarations.
>> + *
>> + * Furthermore a cast from string to xs:QName is only allowed at
>> compile
>> + * time on constant strings. At runtime a cast to xs:QName is only
>> allowed
>> + * for QNames inputs.
>> */
>> struct PFla_pair_t
>> PFbui_fn_resolve_qname (const PFla_op_t *loop, bool ordering,
>> @@ -2416,22 +2420,34 @@
>> struct PFla_pair_t
>> PFbui_fn_name (const PFla_op_t *loop, bool ordering, struct
>> PFla_pair_t *args)
>> {
>> - (void) loop; (void) ordering;
>> + (void) ordering;
>>
>> - return (struct PFla_pair_t) {
>> - .rel = project (
>> - fun_1to1 (
>> - project (args[0].rel,
>> - proj (att_iter, att_iter),
>> - proj (att_pos, att_pos),
>> - proj (att_item, att_item)),
>> - alg_fun_fn_name,
>> - att_res,
>> - attlist(att_item)),
>> - proj (att_iter, att_iter),
>> - proj (att_pos, att_pos),
>> - proj (att_item, att_res)),
>> - .frag = PFla_empty_set() };
>> + PFla_op_t *strings = project (
>> + fun_1to1 (
>> + project (args[0].rel,
>> + proj (att_iter, att_iter),
>> + proj (att_pos, att_pos),
>> + proj (att_item,
>> att_item)),
>> + alg_fun_fn_name,
>> + att_res,
>> + attlist(att_item)),
>> + proj (att_iter, att_iter),
>> + proj (att_pos, att_pos),
>> + proj (att_item, att_res));
>> +
>> + PFla_op_t *res = disjunion (
>> + strings,
>> + attach (
>> + attach (
>> + difference (
>> + loop,
>> + project (
>> + strings,
>> + proj (att_iter,
>> att_iter))),
>> + att_pos, lit_nat (1)),
>> + att_item, lit_str ("")));
>> +
>> + return (struct PFla_pair_t) { .rel = res, .frag =
>> PFla_empty_set() };
>> }
>>
>> /* ------------------- */
>> @@ -2442,22 +2458,34 @@
>> PFbui_fn_local_name (const PFla_op_t *loop, bool ordering,
>> struct PFla_pair_t *args)
>> {
>> - (void) loop; (void) ordering;
>> + (void) ordering;
>>
>> - return (struct PFla_pair_t) {
>> - .rel = project (
>> - fun_1to1 (
>> - project (args[0].rel,
>> - proj (att_iter, att_iter),
>> - proj (att_pos, att_pos),
>> - proj (att_item, att_item)),
>> - alg_fun_fn_local_name,
>> - att_res,
>> - attlist(att_item)),
>> - proj (att_iter, att_iter),
>> - proj (att_pos, att_pos),
>> - proj (att_item, att_res)),
>> - .frag = args[0].frag };
>> + PFla_op_t *strings = project (
>> + fun_1to1 (
>> + project (args[0].rel,
>> + proj (att_iter, att_iter),
>> + proj (att_pos, att_pos),
>> + proj (att_item,
>> att_item)),
>> + alg_fun_fn_local_name,
>> + att_res,
>> + attlist(att_item)),
>> + proj (att_iter, att_iter),
>> + proj (att_pos, att_pos),
>> + proj (att_item, att_res));
>> +
>> + PFla_op_t *res = disjunion (
>> + strings,
>> + attach (
>> + attach (
>> + difference (
>> + loop,
>> + project (
>> + strings,
>> + proj (att_iter,
>> att_iter))),
>> + att_pos, lit_nat (1)),
>> + att_item, lit_str ("")));
>> +
>> + return (struct PFla_pair_t) { .rel = res, .frag =
>> PFla_empty_set() };
>> }
>>
>> /* --------------------- */
>> @@ -2468,22 +2496,34 @@
>> PFbui_fn_namespace_uri (const PFla_op_t *loop, bool ordering,
>> struct PFla_pair_t *args)
>> {
>> - (void) loop; (void) ordering;
>> + (void) ordering;
>>
>> - return (struct PFla_pair_t) {
>> - .rel = project (
>> - fun_1to1 (
>> - project (args[0].rel,
>> - proj (att_iter, att_iter),
>> - proj (att_pos, att_pos),
>> - proj (att_item, att_item)),
>> - alg_fun_fn_namespace_uri,
>> - att_res,
>> - attlist(att_item)),
>> - proj (att_iter, att_iter),
>> - proj (att_pos, att_pos),
>> - proj (att_item, att_res)),
>> - .frag = args[0].frag };
>> + PFla_op_t *strings = project (
>> + fun_1to1 (
>> + project (args[0].rel,
>> + proj (att_iter, att_iter),
>> + proj (att_pos, att_pos),
>> + proj (att_item,
>> att_item)),
>> + alg_fun_fn_namespace_uri,
>> + att_res,
>> + attlist(att_item)),
>> + proj (att_iter, att_iter),
>> + proj (att_pos, att_pos),
>> + proj (att_item, att_res));
>> +
>> + PFla_op_t *res = disjunion (
>> + strings,
>> + attach (
>> + attach (
>> + difference (
>> + loop,
>> + project (
>> + strings,
>> + proj (att_iter,
>> att_iter))),
>> + att_pos, lit_nat (1)),
>> + att_item, lit_str ("")));
>> +
>> + return (struct PFla_pair_t) { .rel = res, .frag =
>> PFla_empty_set() };
>> }
>>
>> /* --------------- */
>>
>>
>> -------------------------------------------------------------------------
>> This SF.net email is sponsored by: Microsoft
>> Defy all challenges. Microsoft(R) Visual Studio 2008.
>> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
>> _______________________________________________
>> Monetdb-pf-checkins mailing list
>> [EMAIL PROTECTED]
>> https://lists.sourceforge.net/lists/listinfo/monetdb-pf-checkins
>>
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Microsoft
> Defy all challenges. Microsoft(R) Visual Studio 2008.
> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> _______________________________________________
> Monetdb-developers mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/monetdb-developers
--
Torsten Grust
[EMAIL PROTECTED]
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Monetdb-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-developers