Update of /cvsroot/monetdb/pathfinder/compiler/mil
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv26181/compiler/mil
Modified Files:
Tag: xquery-decomposition
milgen.brg
Log Message:
propagated changes of Friday 15 Feb 2008 - Monday Feb 18 2008
from the development trunk to the xquery-decomposition branch
Index: milgen.brg
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/mil/milgen.brg,v
retrieving revision 1.96.2.4
retrieving revision 1.96.2.5
diff -u -d -r1.96.2.4 -r1.96.2.5
--- milgen.brg 16 Feb 2008 01:02:15 -0000 1.96.2.4
+++ milgen.brg 18 Feb 2008 16:21:34 -0000 1.96.2.5
@@ -94,8 +94,6 @@
#include "mil.h"
/* XRPC function call context */
#include "core.h"
-/* axis */
-#include "subtyping.h"
/* abbreviate MIL constructor calls */
#include "mil_mnemonic.h"
@@ -487,7 +485,7 @@
default:
PFoops (OOPS_FATAL, "illegal type in impl_types");
- return 0;
+ return mty_oid;
}
}
@@ -1267,7 +1265,8 @@
/* find all element nodes and extract their QName references */
mvar_t *kind = new_var (1),
*elem = new_var (1),
- *elem_cont = new_var (1);
+ *elem_cont = new_var (1),
+ *map = new_var (1);
PFmil_t *pre = VAR (p->env, att, aat_pre),
*pre_cont = VAR (p->env, att, aat_frag);
@@ -1278,27 +1277,33 @@
pre_cont,
fetch (var (PF_MIL_VAR_WS),
var (PF_MIL_VAR_PRE_KIND)))),
- assgn (var (kind->name),
- mirror (select_ (var (kind->name),
- var (PF_MIL_VAR_KIND_ELEM)))),
+ assgn (var (map->name),
+ hmark (select_ (var (kind->name),
+ var (PF_MIL_VAR_KIND_ELEM)),
+ lit_oid (0))),
assgn (var (elem->name),
- leftjoin (var (kind->name), pre)),
+ leftfetchjoin (var (map->name), pre)),
assgn (var (elem_cont->name),
- leftjoin (var (kind->name), pre_cont)),
+ leftfetchjoin (var (map->name), pre_cont)),
assgn (var (id->name),
- mposjoin (var (elem->name),
- var (elem_cont->name),
- fetch (var (PF_MIL_VAR_WS),
- var (PF_MIL_VAR_PRE_PROP)))),
+ leftfetchjoin (
+ reverse (var (map->name)),
+ mposjoin (var (elem->name),
+ var (elem_cont->name),
+ fetch (var (PF_MIL_VAR_WS),
+ var (PF_MIL_VAR_PRE_PROP))))),
assgn (var (cont->name),
- mposjoin (var (elem->name),
- var (elem_cont->name),
- fetch (var (PF_MIL_VAR_WS),
- var (PF_MIL_VAR_PRE_CONT)))));
+ leftfetchjoin (
+ reverse (var (map->name)),
+ mposjoin (var (elem->name),
+ var (elem_cont->name),
+ fetch (var (PF_MIL_VAR_WS),
+ var (PF_MIL_VAR_PRE_CONT))))));
unpin (kind, 1);
unpin (elem, 1);
unpin (elem_cont, 1);
+ unpin (map, 1);
}
else if (ty == aat_anode) {
/* extract all QName references from the attributes */
@@ -1322,8 +1327,7 @@
/* split up nodes and attributes,
find all element nodes and extract their QName references */
- mvar_t *kind = new_var (1),
- *elem = new_var (1),
+ mvar_t *elem = new_var (1),
*elem_cont = new_var (1),
*pre_sel = new_var (1),
*attr_sel = new_var (1),
@@ -1342,40 +1346,49 @@
execute (
/* get all attributes */
assgn (var (attr_sel->name),
- mirror (
+ hmark (
select2 (var (attr_col->name),
cast (type (mty_oid), nil ()),
- cast (type (mty_oid), nil ())))),
+ cast (type (mty_oid), nil ())),
+ lit_oid (0))),
/* get all attribute QNames */
assgn (var (aid->name),
- mposjoin (leftjoin (var (attr_sel->name), attr),
- leftjoin (var (attr_sel->name), pre_cont),
+ mposjoin (leftfetchjoin (var (attr_sel->name), attr),
+ leftfetchjoin (var (attr_sel->name), pre_cont),
fetch (var (PF_MIL_VAR_WS),
var (PF_MIL_VAR_ATTR_QN)))),
assgn (var (acont->name),
- mposjoin (leftjoin (var (attr_sel->name), attr),
- leftjoin (var (attr_sel->name), pre_cont),
+ mposjoin (leftfetchjoin (var (attr_sel->name), attr),
+ leftfetchjoin (var (attr_sel->name), pre_cont),
fetch (var (PF_MIL_VAR_WS),
var (PF_MIL_VAR_ATTR_CONT)))),
/* get all other nodes */
assgn (var (pre_sel->name),
- mirror (
+ hmark (
select_ (
misnil (var (attr_col->name)),
- lit_bit (true)))),
+ lit_bit (true)),
+ lit_oid (0))),
/* get all element nodes */
- assgn (var (kind->name),
- mposjoin (leftjoin (var (pre_sel->name), pre),
- leftjoin (var (pre_sel->name), pre_cont),
- fetch (var (PF_MIL_VAR_WS),
- var (PF_MIL_VAR_PRE_KIND)))),
- assgn (var (kind->name),
- mirror (select_ (var (kind->name),
- var (PF_MIL_VAR_KIND_ELEM)))),
assgn (var (elem->name),
- leftjoin (var (kind->name), pre)),
+ leftfetchjoin (var (pre_sel->name), pre)),
assgn (var (elem_cont->name),
- leftjoin (var (kind->name), pre_cont)),
+ leftfetchjoin (var (pre_sel->name), pre_cont)),
+ assgn (var (pre_sel->name),
+ leftfetchjoin (
+ reverse (var (pre_sel->name)),
+ mposjoin (var (elem->name),
+ var (elem_cont->name),
+ fetch (var (PF_MIL_VAR_WS),
+ var (PF_MIL_VAR_PRE_KIND))))),
+ assgn (var (pre_sel->name),
+ hmark (select_ (var (pre_sel->name),
+ var (PF_MIL_VAR_KIND_ELEM)),
+ lit_oid (0))),
+ assgn (var (elem->name),
+ leftfetchjoin (var (pre_sel->name), pre)),
+ assgn (var (elem_cont->name),
+ leftfetchjoin (var (pre_sel->name), pre_cont)),
/* get all element QNames */
assgn (var (pid->name),
mposjoin (var (elem->name),
@@ -1390,16 +1403,12 @@
/* combine the results */
assgn (var (res->name),
merged_union (
- arg (hmark (var (aid->name), lit_oid (0)),
- arg (hmark (var (pid->name), lit_oid (0)),
- arg (tmark (var (aid->name),
- lit_oid (0)),
- arg (tmark (var (pid->name),
- lit_oid (0)),
- arg (tmark (var (acont->name),
- lit_oid (0)),
- tmark (var (pcont->name),
- lit_oid (0))))))))),
+ arg (var (attr_sel->name),
+ arg (var (pre_sel->name),
+ arg (var (aid->name),
+ arg (var (pid->name),
+ arg (var (acont->name),
+ var (pcont->name)))))))),
assgn (var (id->name),
leftfetchjoin (
reverse (fetch (var (res->name), lit_int (0))),
@@ -1409,7 +1418,6 @@
reverse (fetch (var (res->name), lit_int (0))),
fetch (var (res->name), lit_int (2)))));
- unpin (kind, 1);
unpin (elem, 1);
unpin (elem_cont, 1);
unpin (pre_sel, 1);
@@ -2000,10 +2008,12 @@
llscj (const PFpa_op_t *p)
{ /* fold( */
/* abbreviations for input expressions */
- PFty_t ty = p->sem.scjoin.ty;
PFord_ordering_t in = p->sem.scjoin.in;
PFord_ordering_t out = p->sem.scjoin.out;
+ char *uri = PFqname_uri (p->sem.scjoin.spec.qname),
+ *loc = PFqname_loc (p->sem.scjoin.spec.qname);
+
/* MIL equivalents of input expression */
PFmil_t *iter;
PFmil_t *item;
@@ -2074,95 +2084,64 @@
order = lit_int (o);
- if (PFty_subtype (ty, PFty_xs_anyElement ())) {
-
+ if (p->sem.scjoin.spec.kind == node_kind_elem) {
/* This is a test for element nodes */
- /* Is it just a generic element kind test? (e.g. .../element()) */
- if (PFty_subtype (PFty_xs_anyElement (), ty))
-
- scj = llscj_elem (p->sem.scjoin.axis, iter, item, frag,
- var (PF_MIL_VAR_WS), order);
-
- /* Is it a test on element kind and local name only? */
- else if (PFty_subtype (
- PFty_elem (
- PFqname (PFns_wild,
- PFqname_loc (PFty_name (PFty_defn (ty)))),
- PFty_xs_anyType ()),
- ty))
- scj = llscj_elem_loc (p->sem.scjoin.axis, iter, item, frag,
- var (PF_MIL_VAR_WS), order,
- lit_str (PFqname_loc (
- PFty_name (PFty_defn (ty)))));
-
- /* Or maybe a test on element kind and namespace only? */
- else if (PFty_subtype (
- PFty_elem (PFqname (PFqname_ns (PFty_name (PFty_defn
(ty))),
- NULL),
- PFty_xs_anyType ()),
- ty))
- scj = llscj_elem_ns (p->sem.scjoin.axis, iter, item, frag,
- var (PF_MIL_VAR_WS), order,
- lit_str (PFqname_uri (
- PFty_name (PFty_defn (ty)))));
-
- /* A test on element kind and full QName? */
- else if (PFty_subtype (
- PFty_elem (PFty_name (PFty_defn (ty)),
- PFty_xs_anyType ()),
- ty))
+ if (uri && loc)
+ /* A test on element kind and full QName? */
scj = llscj_elem_nsloc (
- p->sem.scjoin.axis,
+ p->sem.scjoin.spec.axis,
iter, item, frag, var (PF_MIL_VAR_WS), order,
- lit_str (PFqname_uri (PFty_name (PFty_defn (ty)))),
- lit_str (PFqname_loc (PFty_name (PFty_defn (ty)))));
- /*
- * If we couldn't figure out what element test we got, give up.
- *
- * NOTE: The surface language actually allows such tests. We
- * just cannot implement them (yet):
- *
- * doc("foo")/child::element(shoeSize, xs:integer)
- */
+ lit_str (uri), lit_str (loc));
+ else if (uri)
+ /* Or maybe a test on element kind and namespace only? */
+ scj = llscj_elem_ns (p->sem.scjoin.spec.axis, iter, item, frag,
+ var (PF_MIL_VAR_WS), order,
+ lit_str (uri));
+ else if (loc)
+ /* Is it a test on element kind and local name only? */
+ scj = llscj_elem_loc (p->sem.scjoin.spec.axis, iter, item, frag,
+ var (PF_MIL_VAR_WS), order,
+ lit_str (loc));
else
- PFoops (OOPS_FATAL,
- "Problem with an XPath step: cannot evaluate "
- "node test `%s'", PFty_str (ty));
+ /* Is it just a generic element kind test? (e.g. .../element()) */
+ scj = llscj_elem (p->sem.scjoin.spec.axis, iter, item, frag,
+ var (PF_MIL_VAR_WS), order);
}
/* If the node test wasn't some element test, maybe it is a text() test? */
- else if (PFty_subtype (ty, PFty_text ())) {
- scj = llscj_text (p->sem.scjoin.axis,
+ else if (p->sem.scjoin.spec.kind == node_kind_text) {
+ scj = llscj_text (p->sem.scjoin.spec.axis,
iter, item, frag, var (PF_MIL_VAR_WS), order);
}
/* or a comment() test? */
- else if (PFty_subtype (ty, PFty_comm ())) {
- scj = llscj_comm (p->sem.scjoin.axis,
+ else if (p->sem.scjoin.spec.kind == node_kind_comm) {
+ scj = llscj_comm (p->sem.scjoin.spec.axis,
iter, item, frag, var (PF_MIL_VAR_WS), order);
}
/* some test for processing-instructions? */
- else if (PFty_subtype (ty, PFty_pi (NULL))) {
+ else if (p->sem.scjoin.spec.kind == node_kind_pi) {
/* maybe we look for _any_ pi, regardless of its target? */
- if (PFty_subtype (PFty_pi (NULL), ty))
- scj = llscj_pi (p->sem.scjoin.axis,
+ if (!loc)
+ scj = llscj_pi (p->sem.scjoin.spec.axis,
iter, item, frag, var (PF_MIL_VAR_WS), order);
/* or was there a target specified? */
else
scj = llscj_pi_targ (
- p->sem.scjoin.axis,
+ p->sem.scjoin.spec.axis,
iter, item, frag, var (PF_MIL_VAR_WS), order,
- lit_str (PFqname_loc (PFty_name (PFty_defn (ty)))));
+ lit_str (loc));
}
/* If all these cases did not apply, it is probably a node() test. */
- else if (PFty_subtype (PFty_xs_anyNode (), ty)) {
- scj = llscj_node (p->sem.scjoin.axis,
+ else if (p->sem.scjoin.spec.kind == node_kind_node) {
+ scj = llscj_node (p->sem.scjoin.spec.axis,
iter, item, frag, var (PF_MIL_VAR_WS), order);
}
/* If we still couldn't find out, we probably need to give up. */
else
PFoops (OOPS_FATAL,
"Problem with an XPath step: cannot evaluate "
- "node test `%s'", PFty_str (ty));
+ "node test `%s'",
+ PFalg_node_kind_str (p->sem.scjoin.spec.kind));
assert (scj);
@@ -4883,8 +4862,8 @@
/* get all prefixes */
execute (
assgn (var (prefix->name),
- mposjoin (var (id->name),
- var (cont->name),
+ mposjoin (tmark (var (id->name), lit_oid (0)),
+ tmark (var (cont->name), lit_oid (0)),
fetch (var (PF_MIL_VAR_WS),
var (PF_MIL_VAR_QN_PREFIX)))),
/* add ":" only to prefix that are not "" */
@@ -4915,8 +4894,10 @@
fetch (var (mu->name), lit_int (1)))),
assgn (var (name->name),
madd (var (prefix->name),
- mposjoin (var (id->name),
- var (cont->name),
+ mposjoin (tmark (var (id->name),
+ lit_oid (0)),
+ tmark (var (cont->name),
+ lit_oid (0)),
fetch (
var (PF_MIL_VAR_WS),
var (PF_MIL_VAR_QN_LOC))))),
@@ -4927,11 +4908,10 @@
lit_str (""))),
assgn (var (mu->name),
merged_union (
- arg (hmark (var (name->name), lit_oid (0)),
+ arg (hmark (var (id->name), lit_oid (0)),
arg (hmark (var (empty_str->name),
lit_oid (0)),
- arg (tmark (var (name->name),
- lit_oid (0)),
+ arg (var (name->name),
tmark (var (empty_str->name),
lit_oid (0))))))),
assgn (var (res->name),
@@ -4976,8 +4956,8 @@
/* get all prefixes */
execute (
assgn (var (name->name),
- mposjoin (var (id->name),
- var (cont->name),
+ mposjoin (tmark (var (id->name), lit_oid (0)),
+ tmark (var (cont->name), lit_oid (0)),
fetch (var (PF_MIL_VAR_WS),
var (uri_loc)))),
/* empty names for nodes that have no QName */
@@ -4987,11 +4967,10 @@
lit_str (""))),
assgn (var (mu->name),
merged_union (
- arg (hmark (var (name->name), lit_oid (0)),
+ arg (hmark (var (id->name), lit_oid (0)),
arg (hmark (var (empty_str->name),
lit_oid (0)),
- arg (tmark (var (name->name),
- lit_oid (0)),
+ arg (var (name->name),
tmark (var (empty_str->name),
lit_oid (0))))))),
assgn (var (res->name),
@@ -6056,13 +6035,14 @@
/* Rel: llscjoin (Rel) */
/* FIXME: This code needs to be cleaned up. */
case 80: /* fold( */
- if (p->sem.scjoin.axis != alg_attr)
+ if (p->sem.scjoin.spec.axis == alg_self)
+ PFoops (OOPS_FATAL, "self step not implemented yet.");
+ if (p->sem.scjoin.spec.axis != alg_attr)
llscj (p);
else
{
-
- /* abbreviations for input expressions */
- PFty_t ty = p->sem.scjoin.ty;
+ char *uri = PFqname_uri (p->sem.scjoin.spec.qname),
+ *loc = PFqname_loc (p->sem.scjoin.spec.qname);
/* MIL equivalents of input expression */
PFmil_t *iter;
@@ -6136,188 +6116,134 @@
unpin (tmp2, 1);
- /* ... then filter out all nodes, whose name test does not match */
- if (PFty_subtype (ty, PFty_xs_anyAttribute ())) {
-
- /* Is it just a generic attribute kind test?
- (e.g. .../attribute()) */
- if (PFty_subtype (PFty_xs_anyAttribute (), ty))
- ;
+ assert (p->sem.scjoin.spec.kind == node_kind_attr);
- /* Is it a test on attribute kind and local name only? */
- else if (PFty_subtype (
- PFty_attr (
- PFqname (PFns_wild,
- PFqname_loc (
- PFty_name (PFty_defn (ty)))),
- PFty_xs_anySimpleType ()),
- ty))
- execute (
- assgn (var (tmp->name),
+ /* Is it a test on attribute kind and local name only? */
+ if (loc && !uri)
+ execute (
+ assgn (var (tmp->name),
+ mposjoin (
mposjoin (
- mposjoin (
- var (ret_attr->name),
- var (ret_frag->name),
- fetch (var (PF_MIL_VAR_WS),
- var (PF_MIL_VAR_ATTR_QN))),
- mposjoin (
- var (ret_attr->name),
- var (ret_frag->name),
- fetch (var (PF_MIL_VAR_WS),
- var (PF_MIL_VAR_ATTR_CONT))),
- fetch (var (PF_MIL_VAR_WS),
- var (PF_MIL_VAR_QN_LOC)))),
- assgn (var (tmp->name),
- uselect (var (tmp->name),
- lit_str (
- PFqname_loc (
- PFty_name (
- PFty_defn (ty)))))),
- assgn (var (tmp->name),
- reverse (mark (var (tmp->name), lit_oid (0)))),
- assgn (var (ret_attr->name),
- leftjoin (var (tmp->name),
- var (ret_attr->name))),
- assgn (var (ret_pre->name),
- leftjoin (var (tmp->name),
- var (ret_pre->name))),
- assgn (var (ret_frag->name),
- leftjoin (var (tmp->name),
- var (ret_frag->name))),
- assgn (var (ret_iter->name),
- leftjoin (var (tmp->name),
- var (ret_iter->name))));
-
- /* Or maybe a test on attribute kind and namespace only? */
- else if (PFty_subtype (
- PFty_attr (
- PFqname (
- PFqname_ns (PFty_name (PFty_defn (ty))),
- NULL),
- PFty_xs_anySimpleType ()),
- ty))
- execute (
- assgn (var (tmp->name),
+ var (ret_attr->name),
+ var (ret_frag->name),
+ fetch (var (PF_MIL_VAR_WS),
+ var (PF_MIL_VAR_ATTR_QN))),
mposjoin (
- mposjoin (var (ret_attr->name),
- var (ret_frag->name),
- fetch (var (PF_MIL_VAR_WS),
- var (PF_MIL_VAR_ATTR_QN))),
- mposjoin (
- var (ret_attr->name),
- var (ret_frag->name),
- fetch (var (PF_MIL_VAR_WS),
- var (PF_MIL_VAR_ATTR_CONT))),
+ var (ret_attr->name),
+ var (ret_frag->name),
fetch (var (PF_MIL_VAR_WS),
- var (PF_MIL_VAR_QN_URI)))),
- assgn (var (tmp->name),
- uselect (var (tmp->name),
- lit_str (
- PFqname_uri (
- PFty_name (
- PFty_defn (ty)))))),
- assgn (var (tmp->name),
- reverse (mark (var (tmp->name), lit_oid (0)))),
- assgn (var (ret_attr->name),
- leftjoin (var (tmp->name),
- var (ret_attr->name))),
- assgn (var (ret_frag->name),
- leftjoin (var (tmp->name),
- var (ret_frag->name))),
- assgn (var (ret_iter->name),
- leftjoin (var (tmp->name),
- var (ret_iter->name))));
-
- /* A test on attribute kind and full QName? */
- else if (PFty_subtype (
- PFty_attr (PFty_name (PFty_defn (ty)),
- PFty_xs_anySimpleType ()),
- ty))
- execute (
- assgn (var (tmp->name),
+ var (PF_MIL_VAR_ATTR_CONT))),
+ fetch (var (PF_MIL_VAR_WS),
+ var (PF_MIL_VAR_QN_LOC)))),
+ assgn (var (tmp->name),
+ uselect (var (tmp->name),
+ lit_str (loc))),
+ assgn (var (tmp->name),
+ reverse (mark (var (tmp->name), lit_oid (0)))),
+ assgn (var (ret_attr->name),
+ leftjoin (var (tmp->name),
+ var (ret_attr->name))),
+ assgn (var (ret_pre->name),
+ leftjoin (var (tmp->name),
+ var (ret_pre->name))),
+ assgn (var (ret_frag->name),
+ leftjoin (var (tmp->name),
+ var (ret_frag->name))),
+ assgn (var (ret_iter->name),
+ leftjoin (var (tmp->name),
+ var (ret_iter->name))));
+ /* Or maybe a test on attribute kind and namespace only? */
+ else if (!loc && uri)
+ execute (
+ assgn (var (tmp->name),
+ mposjoin (
+ mposjoin (var (ret_attr->name),
+ var (ret_frag->name),
+ fetch (var (PF_MIL_VAR_WS),
+ var (PF_MIL_VAR_ATTR_QN))),
mposjoin (
- mposjoin (var (ret_attr->name),
- var (ret_frag->name),
- fetch (var (PF_MIL_VAR_WS),
- var (PF_MIL_VAR_ATTR_QN))),
- mposjoin (var (ret_attr->name),
- var (ret_frag->name),
- fetch (var (PF_MIL_VAR_WS),
- var
(PF_MIL_VAR_ATTR_CONT))),
- fetch (var (PF_MIL_VAR_WS),
- var (PF_MIL_VAR_QN_LOC)))),
- assgn (var (tmp->name),
- uselect (var (tmp->name),
- lit_str (
- PFqname_loc (
- PFty_name (
- PFty_defn (ty)))))),
- assgn (var (tmp->name),
- reverse (mark (var (tmp->name), lit_oid (0)))),
- assgn (var (ret_attr->name),
- leftjoin (var (tmp->name),
- var (ret_attr->name))),
- assgn (var (ret_pre->name),
- leftjoin (var (tmp->name),
- var (ret_pre->name))),
- assgn (var (ret_frag->name),
- leftjoin (var (tmp->name),
- var (ret_frag->name))),
- assgn (var (ret_iter->name),
- leftjoin (var (tmp->name),
- var (ret_iter->name))),
- assgn (var (tmp->name),
+ var (ret_attr->name),
+ var (ret_frag->name),
+ fetch (var (PF_MIL_VAR_WS),
+ var (PF_MIL_VAR_ATTR_CONT))),
+ fetch (var (PF_MIL_VAR_WS),
+ var (PF_MIL_VAR_QN_URI)))),
+ assgn (var (tmp->name),
+ uselect (var (tmp->name),
+ lit_str (uri))),
+ assgn (var (tmp->name),
+ reverse (mark (var (tmp->name), lit_oid (0)))),
+ assgn (var (ret_attr->name),
+ leftjoin (var (tmp->name),
+ var (ret_attr->name))),
+ assgn (var (ret_frag->name),
+ leftjoin (var (tmp->name),
+ var (ret_frag->name))),
+ assgn (var (ret_iter->name),
+ leftjoin (var (tmp->name),
+ var (ret_iter->name))));
+ /* A test on attribute kind and full QName? */
+ else if (loc && uri)
+ execute (
+ assgn (var (tmp->name),
+ mposjoin (
+ mposjoin (var (ret_attr->name),
+ var (ret_frag->name),
+ fetch (var (PF_MIL_VAR_WS),
+ var (PF_MIL_VAR_ATTR_QN))),
+ mposjoin (var (ret_attr->name),
+ var (ret_frag->name),
+ fetch (var (PF_MIL_VAR_WS),
+ var (PF_MIL_VAR_ATTR_CONT))),
+ fetch (var (PF_MIL_VAR_WS),
+ var (PF_MIL_VAR_QN_LOC)))),
+ assgn (var (tmp->name),
+ uselect (var (tmp->name),
+ lit_str (loc))),
+ assgn (var (tmp->name),
+ reverse (mark (var (tmp->name), lit_oid (0)))),
+ assgn (var (ret_attr->name),
+ leftjoin (var (tmp->name),
+ var (ret_attr->name))),
+ assgn (var (ret_pre->name),
+ leftjoin (var (tmp->name),
+ var (ret_pre->name))),
+ assgn (var (ret_frag->name),
+ leftjoin (var (tmp->name),
+ var (ret_frag->name))),
+ assgn (var (ret_iter->name),
+ leftjoin (var (tmp->name),
+ var (ret_iter->name))),
+ assgn (var (tmp->name),
+ mposjoin (
+ mposjoin (var (ret_attr->name),
+ var (ret_frag->name),
+ fetch (var (PF_MIL_VAR_WS),
+ var (PF_MIL_VAR_ATTR_QN))),
mposjoin (
- mposjoin (var (ret_attr->name),
- var (ret_frag->name),
- fetch (var (PF_MIL_VAR_WS),
- var (PF_MIL_VAR_ATTR_QN))),
- mposjoin (
- var (ret_attr->name),
- var (ret_frag->name),
- fetch (var (PF_MIL_VAR_WS),
- var (PF_MIL_VAR_ATTR_CONT))),
+ var (ret_attr->name),
+ var (ret_frag->name),
fetch (var (PF_MIL_VAR_WS),
- var (PF_MIL_VAR_QN_URI)))),
- assgn (var (tmp->name),
- uselect (var (tmp->name),
- lit_str (
- PFqname_uri (
- PFty_name (
- PFty_defn (ty)))))),
- assgn (var (tmp->name),
- reverse (mark (var (tmp->name), lit_oid (0)))),
- assgn (var (ret_attr->name),
- leftjoin (var (tmp->name),
- var (ret_attr->name))),
- assgn (var (ret_pre->name),
- leftjoin (var (tmp->name),
- var (ret_pre->name))),
- assgn (var (ret_frag->name),
- leftjoin (var (tmp->name),
- var (ret_frag->name))),
- assgn (var (ret_iter->name),
- leftjoin (var (tmp->name),
- var (ret_iter->name))));
-
- /*
- * If we couldn't figure out what attribute test we got,
- * give up.
- *
- * NOTE: The surface language actually allows such tests. We
- * just cannot implement them (yet):
- *
- * doc("foo")/attribute::attribute(shoeSize, xs:integer)
- */
- else
- PFoops (OOPS_FATAL,
- "Problem with an XPath step: cannot evaluate "
- "node test `%s'", PFty_str (ty));
- }
- else
- PFoops (OOPS_FATAL,
- "Problem with an XPath step: cannot evaluate "
- "node test `%s'", PFty_str (ty));
+ var (PF_MIL_VAR_ATTR_CONT))),
+ fetch (var (PF_MIL_VAR_WS),
+ var (PF_MIL_VAR_QN_URI)))),
+ assgn (var (tmp->name),
+ uselect (var (tmp->name),
+ lit_str (uri))),
+ assgn (var (tmp->name),
+ reverse (mark (var (tmp->name), lit_oid (0)))),
+ assgn (var (ret_attr->name),
+ leftjoin (var (tmp->name),
+ var (ret_attr->name))),
+ assgn (var (ret_pre->name),
+ leftjoin (var (tmp->name),
+ var (ret_pre->name))),
+ assgn (var (ret_frag->name),
+ leftjoin (var (tmp->name),
+ var (ret_frag->name))),
+ assgn (var (ret_iter->name),
+ leftjoin (var (tmp->name),
+ var (ret_iter->name))));
/* because leftjoin does not know that we have
exactly one match for each tuple in v,
-------------------------------------------------------------------------
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