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