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