Update of /cvsroot/monetdb/pathfinder/compiler/mil
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv1296/compiler/mil

Modified Files:
      Tag: xquery-decomposition
        mil.c milgen.brg 
Log Message:
propagated changes up to Thursday Jan 17 2008
from the development trunk to the xquery-decomposition branch


Index: mil.c
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/mil/mil.c,v
retrieving revision 1.45
retrieving revision 1.45.2.1
diff -u -d -r1.45 -r1.45.2.1
--- mil.c       11 Jan 2008 10:47:10 -0000      1.45
+++ mil.c       17 Jan 2008 08:36:41 -0000      1.45.2.1
@@ -322,6 +322,7 @@
         case PF_MIL_VAR_ATTR_CONT:   return "ATTR_CONT";
         case PF_MIL_VAR_QN_LOC:      return "QN_LOC";
         case PF_MIL_VAR_QN_URI:      return "QN_URI";
+        case PF_MIL_VAR_QN_PREFIX:   return "QN_PREFIX";
         case PF_MIL_VAR_PROP_VAL:    return "PROP_VAL";
         case PF_MIL_VAR_PROP_TEXT:   return "PROP_TEXT";
         case PF_MIL_VAR_PROP_COM:    return "PROP_COM";

Index: milgen.brg
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/mil/milgen.brg,v
retrieving revision 1.96
retrieving revision 1.96.2.1
diff -u -d -r1.96 -r1.96.2.1
--- milgen.brg  11 Jan 2008 10:47:10 -0000      1.96
+++ milgen.brg  17 Jan 2008 08:36:41 -0000      1.96.2.1
@@ -464,13 +464,13 @@
 void
 env_add (PFarray_t *env, PFalg_att_t att, PFalg_simple_type_t ty, mvar_t *v)
 {
-    assert (ty == aat_nat || ty == aat_int || ty == aat_str || ty == aat_dec
-            || ty == aat_dbl || ty == aat_bln || ty == aat_qname
-            || ty == aat_uA || ty == aat_pre || ty == aat_attr
-            || ty == aat_pfrag || ty == aat_afrag || ty == aat_update
-            || ty == aat_node1 || ty == aat_anode1 || ty == aat_attr1
-            || ty == aat_afrag1 || ty == aat_pnode1 || ty == aat_pre1
-            || ty == aat_pfrag1 );
+    assert (ty == aat_nat    || ty == aat_int    || ty == aat_str 
+         || ty == aat_dec    || ty == aat_dbl    || ty == aat_bln
+         || ty == aat_node   || ty == aat_qname  || ty == aat_uA
+         || ty == aat_pre    || ty == aat_attr   || ty == aat_pfrag
+         || ty == aat_afrag  || ty == aat_update || ty == aat_node1
+         || ty == aat_anode1 || ty == aat_attr1  || ty == aat_afrag1
+         || ty == aat_pnode1 || ty == aat_pre1   || ty == aat_pfrag1 );
 
     *(env_t *) PFarray_add (env)
         = (env_t) { .att = att, .ty = ty, .mvar = v };
@@ -4059,14 +4059,127 @@
 
                 case alg_fun_fn_name:
                 {
-                }   break;
+                    PFalg_att_t         att;
+                    PFmil_t             *name     = NULL;
+                    PFmil_t             *frag     = NULL;
+                    PFmil_ident_t       node_qn   = PF_MIL_VAR_UNUSED;
+                    PFmil_ident_t       node_cont = PF_MIL_VAR_UNUSED;
+                    mvar_t              *prefix   = new_var(1);
 
-                case alg_fun_fn_local_name:
-                {
+
+                    att = p->sem.fun_1to1.refs.atts[0];
+
+                    switch (type_of (L(p), att)) {
+                        case (aat_anode): {       /* attribute       */
+                            name      = VAR (L(p)->env, att, aat_attr);
+                            frag      = VAR (L(p)->env, att, aat_afrag);
+                            node_qn   = PF_MIL_VAR_ATTR_QN;
+                            node_cont = PF_MIL_VAR_ATTR_CONT;
+                        }   break;
+                        case (aat_pnode): {       /* all other nodes */
+                            name = VAR (L(p)->env, att, aat_pre);
+                            frag = VAR (L(p)->env, att, aat_pfrag);
+                            node_qn   = PF_MIL_VAR_PRE_PROP;
+                            node_cont = PF_MIL_VAR_PRE_CONT;
+                        }   break;
+                        default:
+                            assert(!"should never reach here"); break;
+                    } 
+
+                    /* get all prefix and add : to the ones that are not "" */
+                    /* FIXME: not sure if this mil code (the first execute
+                              command) actually works correctly, therefore
+                              it must be tested and changed if necessery. */
+                    execute ( 
+                        assgn (var (prefix->name),
+                               mposjoin ( mposjoin (name,
+                                                    frag,
+                                                    fetch (var (PF_MIL_VAR_WS),
+                                                           var (node_qn))),
+                                          mposjoin (name,
+                                                    frag,
+                                                    fetch (var (PF_MIL_VAR_WS),
+                                                           var (node_cont))),
+                                          fetch (var (PF_MIL_VAR_WS),
+                                                 var (PF_MIL_VAR_QN_PREFIX)))),
+                        madd (uselect (meq (var (prefix->name),
+                                            lit_str("")),
+                                       lit_bit(false)),
+                              lit_str(":")));
+
+                    execute (
+                        assgn (var (res->name),
+                               madd (var (prefix->name),
+                                     mposjoin (mposjoin (
+                                                   name,
+                                                   frag,
+                                                   fetch (var (PF_MIL_VAR_WS),
+                                                          var (node_qn))),
+                                               mposjoin (
+                                                   name,
+                                                   frag,
+                                                   fetch (var (PF_MIL_VAR_WS),
+                                                          var (node_cont))),
+                                               fetch (
+                                                   var (PF_MIL_VAR_WS),
+                                                   var 
(PF_MIL_VAR_QN_LOC))))));
+
+                    res_type = aat_str;
+                    unpin(prefix, 1);
                 }   break;
 
+                case alg_fun_fn_local_name:
                 case alg_fun_fn_namespace_uri:
                 {
+                    PFalg_att_t         att;
+                    PFmil_t             *name     = NULL;
+                    PFmil_t             *frag     = NULL;
+                    PFmil_ident_t       uri_loc   = PF_MIL_VAR_UNUSED;
+                    PFmil_ident_t       node_qn   = PF_MIL_VAR_UNUSED;
+                    PFmil_ident_t       node_cont = PF_MIL_VAR_UNUSED;
+
+                    att = p->sem.fun_1to1.refs.atts[0];
+
+                    switch (p->sem.fun_1to1.kind) {
+                        case alg_fun_fn_local_name:
+                            uri_loc = PF_MIL_VAR_QN_LOC; break;
+                        case alg_fun_fn_namespace_uri:
+                            uri_loc = PF_MIL_VAR_QN_URI; break;
+                        default:
+                            assert(!"should never reach here"); break;
+                    }
+
+                    switch (type_of (L(p), att)) {
+                        case (aat_anode): {       /* attribute       */
+                            name      = VAR (L(p)->env, att, aat_attr);
+                            frag      = VAR (L(p)->env, att, aat_afrag);
+                            node_qn   = PF_MIL_VAR_ATTR_QN;
+                            node_cont = PF_MIL_VAR_ATTR_CONT;
+                        }   break;
+                        case (aat_pnode): {       /* all other nodes */
+                            name = VAR (L(p)->env, att, aat_pre);
+                            frag = VAR (L(p)->env, att, aat_pfrag);
+                            node_qn   = PF_MIL_VAR_PRE_PROP;
+                            node_cont = PF_MIL_VAR_PRE_CONT;
+                        }   break;
+                        default:
+                            assert(!"should never reach here"); break;
+                    } 
+
+                    execute (
+                        assgn (var (res->name),
+                               mposjoin (mposjoin (name,
+                                                   frag,
+                                                   fetch (var (PF_MIL_VAR_WS),
+                                                          var (node_qn))),
+                                         mposjoin (name,
+                                                   frag,
+                                                   fetch (var (PF_MIL_VAR_WS),
+                                                          var (node_cont))),
+                                         fetch (var (PF_MIL_VAR_WS),
+                                                var (uri_loc)))));
+
+                    res_type = aat_str;
                 }   break;
 
                 case alg_fun_fn_number:
@@ -4212,7 +4325,7 @@
                         assgn (var (res->name),
                                project (
                                    var (loop->name),
-                                   lit_int(UPDATE_DELETE))));
+                                   lit_lng(UPDATE_DELETE))));
                 }   break;
 
                 case alg_fun_upd_rename:
@@ -4290,7 +4403,7 @@
                         assgn (var (res->name),
                                project (
                                    var (loop->name),
-                                   lit_int(update_str))));
+                                   lit_lng(update_str))));
                 }   break;
             }
 


-------------------------------------------------------------------------
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

Reply via email to