Update of /cvsroot/monetdb/pathfinder/compiler/algebra
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv26181/compiler/algebra
Modified Files:
Tag: xquery-decomposition
algebra.c algebra_cse.c builtins.c core2alg.brg logical.c
physical.c planner.c
Log Message:
propagated changes of Friday 15 Feb 2008 - Monday Feb 18 2008
from the development trunk to the xquery-decomposition branch
Index: core2alg.brg
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/algebra/core2alg.brg,v
retrieving revision 1.60.2.2
retrieving revision 1.60.2.3
diff -u -d -r1.60.2.2 -r1.60.2.3
--- core2alg.brg 16 Feb 2008 01:02:07 -0000 1.60.2.2
+++ core2alg.brg 18 Feb 2008 16:21:07 -0000 1.60.2.3
@@ -383,7 +383,11 @@
/* worker to implement type tests */
static PFla_op_t *type_test (PFty_t ty, PFla_pair_t e, PFla_op_t *loop);
+/* Extract all possible algebra types from the XQuery type. */
+static PFalg_simple_type_t PFalg_type (PFty_t ty);
+/* Extract occurrence indicator from the XQuery type. */
+static PFalg_occ_ind_t PFalg_type_occ (PFty_t ty);
/**
* Reducer function. This is the heart of this source file. It
@@ -2833,9 +2837,54 @@
*/
static struct PFla_pair_t
locstep (core2alg_ctx_t *ctx,
- PFalg_axis_t axis, PFty_t seqty,
+ PFalg_axis_t axis, PFty_t ty,
struct PFla_pair_t p)
{
+ PFalg_step_spec_t spec;
+
+ spec.axis = axis;
+ /* missing QName */
+ spec.qname = PFqname (PFns_wild, NULL);
+
+ if (PFty_subtype (ty, PFty_xs_anyAttribute ())) {
+ /* This is a test for attribute nodes */
+ spec.kind = node_kind_attr;
+ spec.qname = PFty_name (ty);
+ }
+ else if (PFty_subtype (ty, PFty_xs_anyElement ())) {
+ /* This is a test for element nodes */
+ spec.kind = node_kind_elem;
+ spec.qname = PFty_name (ty);
+ }
+ else if (PFty_subtype (ty, PFty_doc (PFty_xs_anyType ()))) {
+ /* This is a test for document nodes */
+ spec.kind = node_kind_doc;
+ }
+ else if (PFty_subtype (ty, PFty_text ())) {
+ /* This is a test for text nodes */
+ spec.kind = node_kind_text;
+ }
+ else if (PFty_subtype (ty, PFty_comm ())) {
+ /* This is a test for comment nodes */
+ spec.kind = node_kind_comm;
+ }
+ else if (PFty_subtype (ty, PFty_pi (NULL))) {
+ /* This is a test for processing-instruction nodes */
+ spec.kind = node_kind_pi;
+ spec.qname = PFty_name (ty);
+ }
+ else if (PFty_subtype (PFty_xs_anyNode (), ty)) {
+ /* If all these cases did not apply, it is probably a node() test. */
+ spec.kind = node_kind_node;
+ }
+ /* 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));
+ spec.kind = node_kind_node;
+ }
+
/*
* env, loop: e => (q(e), delta)
* ------------------------------------------------------------
@@ -2850,7 +2899,7 @@
project (p.rel,
proj (att_iter, att_iter),
proj (att_item, att_item)),
- axis, seqty, att_iter, att_item, att_item);
+ spec, att_iter, att_item, att_item);
if (ORDERING)
return (struct PFla_pair_t) {
@@ -3091,6 +3140,70 @@
return NULL; /* pacify picky compilers */
}
+/**
+ * Extract all possible algebra types from the XQuery type.
+ */
+static PFalg_simple_type_t
+PFalg_type (PFty_t ty)
+{
+ PFalg_simple_type_t alg_ty = 0;
+
+ ty = PFty_prime (PFty_defn (ty));
+
+ if (!PFty_disjoint (ty, PFty_xs_integer ()))
+ alg_ty |= aat_int;
+ if (!PFty_disjoint (ty, PFty_xs_string ()))
+ alg_ty |= aat_str;
+ if (!PFty_disjoint (ty, PFty_xs_double ()))
+ alg_ty |= aat_dbl;
+ if (!PFty_disjoint (ty, PFty_xs_decimal ()))
+ alg_ty |= aat_dec;
+ if (!PFty_disjoint (ty, PFty_xs_boolean ()))
+ alg_ty |= aat_bln;
+ if (!PFty_disjoint (ty, PFty_xs_QName ()))
+ alg_ty |= aat_qname;
+ if (!PFty_disjoint (ty, PFty_untypedAtomic ()))
+ alg_ty |= aat_uA;
+ if (!PFty_disjoint (ty, PFty_xs_anyAttribute ()))
+ alg_ty |= aat_anode;
+ if (!PFty_disjoint (ty, PFty_xs_anyElement ()) ||
+ !PFty_disjoint (ty, PFty_doc (PFty_xs_anyNode ())) ||
+ !PFty_disjoint (ty, PFty_pi (NULL)) ||
+ !PFty_disjoint (ty, PFty_comm ()) ||
+ !PFty_disjoint (ty, PFty_text ()))
+ alg_ty |= aat_pnode;
+ if (!PFty_disjoint (ty, PFty_stmt ())) {
+ alg_ty |= aat_update;
+ alg_ty |= aat_node;
+ alg_ty |= aat_node1;
+ alg_ty |= aat_uA;
+ alg_ty |= aat_qname;
+ }
+ if (!PFty_disjoint (ty, PFty_docmgmt ())) {
+ alg_ty |= aat_docmgmt;
+ alg_ty |= aat_path;
+ alg_ty |= aat_docnm;
+ alg_ty |= aat_colnm;
+ }
+ return alg_ty;
+}
+
+/**
+ * Extract occurrence indicator from the XQuery type.
+ */
+static PFalg_occ_ind_t
+PFalg_type_occ (PFty_t ty)
+{
+ if (PFty_subtype (ty, PFty_item ()))
+ return alg_occ_exactly_one;
+ else if (PFty_subtype (ty, PFty_plus (PFty_item ())))
+ return alg_occ_one_or_more;
+ else if (PFty_subtype (ty, PFty_opt(PFty_item ())))
+ return alg_occ_zero_or_one;
+ else
+ return alg_occ_unknown;
+}
+
/**
* Compile XQuery Core tree into relational algebra tree.
Index: algebra.c
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/algebra/algebra.c,v
retrieving revision 1.66.2.3
retrieving revision 1.66.2.4
diff -u -d -r1.66.2.3 -r1.66.2.4
--- algebra.c 16 Feb 2008 01:02:06 -0000 1.66.2.3
+++ algebra.c 18 Feb 2008 16:21:05 -0000 1.66.2.4
@@ -428,7 +428,6 @@
#include "oops.h"
#include "mem.h"
#include "array.h"
-#include "subtyping.h"
#include "algebra.h"
@@ -956,82 +955,59 @@
}
/**
- * Print function call kind
+ * Print XPath axis
*/
char *
-PFalg_fun_call_kind_str (PFalg_fun_call_t kind)
+PFalg_axis_str (PFalg_axis_t axis)
{
- switch (kind) {
- case alg_fun_call_dft: return "";
- case alg_fun_call_xrpc: return "XRPC";
- case alg_fun_call_xrpc_helpers: return "XRPC helper";
- case alg_fun_call_tijah: return "Tijah";
+ switch (axis) {
+ case alg_anc: return "ancestor";
+ case alg_anc_s: return "ancestor-or-self";
+ case alg_attr: return "attribute";
+ case alg_chld: return "child";
+ case alg_desc: return "descendant";
+ case alg_desc_s: return "descendant-or-self";
+ case alg_fol: return "following";
+ case alg_fol_s: return "following-sibling";
+ case alg_par: return "parent";
+ case alg_prec: return "preceding";
+ case alg_prec_s: return "preceding-sibling";
+ case alg_self: return "self";
}
return NULL;
}
/**
- * Extract all possible algebra types from the XQuery type.
+ * Print node kind
*/
-PFalg_simple_type_t
-PFalg_type (PFty_t ty)
+char *
+PFalg_node_kind_str (PFalg_node_kind_t kind)
{
- PFalg_simple_type_t alg_ty = 0;
-
- ty = PFty_prime (PFty_defn (ty));
-
- if (!PFty_disjoint (ty, PFty_xs_integer ()))
- alg_ty |= aat_int;
- if (!PFty_disjoint (ty, PFty_xs_string ()))
- alg_ty |= aat_str;
- if (!PFty_disjoint (ty, PFty_xs_double ()))
- alg_ty |= aat_dbl;
- if (!PFty_disjoint (ty, PFty_xs_decimal ()))
- alg_ty |= aat_dec;
- if (!PFty_disjoint (ty, PFty_xs_boolean ()))
- alg_ty |= aat_bln;
- if (!PFty_disjoint (ty, PFty_xs_QName ()))
- alg_ty |= aat_qname;
- if (!PFty_disjoint (ty, PFty_untypedAtomic ()))
- alg_ty |= aat_uA;
- if (!PFty_disjoint (ty, PFty_xs_anyAttribute ()))
- alg_ty |= aat_anode;
- if (!PFty_disjoint (ty, PFty_xs_anyElement ()) ||
- !PFty_disjoint (ty, PFty_doc (PFty_xs_anyNode ())) ||
- !PFty_disjoint (ty, PFty_pi (NULL)) ||
- !PFty_disjoint (ty, PFty_comm ()) ||
- !PFty_disjoint (ty, PFty_text ()))
- alg_ty |= aat_pnode;
- if (!PFty_disjoint (ty, PFty_stmt ())) {
- alg_ty |= aat_update;
- alg_ty |= aat_node;
- alg_ty |= aat_node1;
- alg_ty |= aat_uA;
- alg_ty |= aat_qname;
- }
- if (!PFty_disjoint (ty, PFty_docmgmt ())) {
- alg_ty |= aat_docmgmt;
- alg_ty |= aat_path;
- alg_ty |= aat_docnm;
- alg_ty |= aat_colnm;
+ switch (kind) {
+ case node_kind_elem: return "element";
+ case node_kind_attr: return "attribute";
+ case node_kind_text: return "text";
+ case node_kind_pi: return "processing-instruction";
+ case node_kind_comm: return "comment";
+ case node_kind_doc: return "document-node";
+ case node_kind_node: return "node";
}
- return alg_ty;
+ return NULL;
}
/**
- * Extract occurrence indicator from the XQuery type.
+ * Print function call kind
*/
-PFalg_occ_ind_t
-PFalg_type_occ (PFty_t ty)
+char *
+PFalg_fun_call_kind_str (PFalg_fun_call_t kind)
{
- if (PFty_subtype (ty, PFty_item ()))
- return alg_occ_exactly_one;
- else if (PFty_subtype (ty, PFty_plus (PFty_item ())))
- return alg_occ_one_or_more;
- else if (PFty_subtype (ty, PFty_opt(PFty_item ())))
- return alg_occ_zero_or_one;
- else
- return alg_occ_unknown;
+ switch (kind) {
+ case alg_fun_call_dft: return "";
+ case alg_fun_call_xrpc: return "XRPC";
+ case alg_fun_call_xrpc_helpers: return "XRPC helper";
+ case alg_fun_call_tijah: return "Tijah";
+ }
+ return NULL;
}
/**
Index: physical.c
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/algebra/physical.c,v
retrieving revision 1.50.2.4
retrieving revision 1.50.2.5
diff -u -d -r1.50.2.4 -r1.50.2.5
--- physical.c 16 Feb 2008 01:02:08 -0000 1.50.2.4
+++ physical.c 18 Feb 2008 16:21:09 -0000 1.50.2.5
@@ -57,7 +57,6 @@
#define JOIN_COST 100
#define SORT_COST 700
-#ifndef NDEBUG
/**
* check for a column @a a in op @a p.
*/
@@ -72,7 +71,6 @@
return false;
}
-#endif
/**
* check for the type of column @a a in op @a p.
@@ -2458,8 +2456,7 @@
*/
PFpa_op_t *
PFpa_llscjoin (const PFpa_op_t *ctx,
- PFalg_axis_t axis,
- const PFty_t test,
+ PFalg_step_spec_t spec,
const PFord_ordering_t in,
const PFord_ordering_t out,
PFalg_att_t iter, PFalg_att_t item)
@@ -2477,8 +2474,7 @@
#endif
/* store semantic content in node */
- ret->sem.scjoin.axis = axis;
- ret->sem.scjoin.ty = test;
+ ret->sem.scjoin.spec = spec;
ret->sem.scjoin.iter = iter;
ret->sem.scjoin.item = item;
@@ -2490,7 +2486,7 @@
ret->schema.items[0]
= (PFalg_schm_item_t) { .name = iter, .type = aat_nat };
/* the result of an attribute axis is also of type attribute */
- if (axis == alg_attr)
+ if (spec.axis == alg_attr)
ret->schema.items[1]
= (PFalg_schm_item_t) { .name = item, .type = aat_anode };
else
Index: planner.c
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/algebra/planner.c,v
retrieving revision 1.46.2.3
retrieving revision 1.46.2.4
diff -u -d -r1.46.2.3 -r1.46.2.4
--- planner.c 16 Feb 2008 01:02:08 -0000 1.46.2.3
+++ planner.c 18 Feb 2008 16:21:10 -0000 1.46.2.4
@@ -1449,13 +1449,12 @@
for (unsigned int k = 0; k < PFarray_last (ordered); k++)
/* the evaluation of the attribute axis keeps the input order */
- if (n->sem.step.axis == alg_attr)
+ if (n->sem.step.spec.axis == alg_attr)
add_plan (
ret,
llscjoin (
*(plan_t **) PFarray_at (ordered, k),
- n->sem.step.axis,
- n->sem.step.ty,
+ n->sem.step.spec,
in[i],
out[i],
n->sem.step.iter,
@@ -1466,8 +1465,7 @@
ret,
llscjoin (
*(plan_t **) PFarray_at (ordered, k),
- n->sem.step.axis,
- n->sem.step.ty,
+ n->sem.step.spec,
in[i],
out[o],
n->sem.step.iter,
Index: algebra_cse.c
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/algebra/algebra_cse.c,v
retrieving revision 1.65.2.1
retrieving revision 1.65.2.2
diff -u -d -r1.65.2.1 -r1.65.2.2
--- algebra_cse.c 8 Feb 2008 22:59:12 -0000 1.65.2.1
+++ algebra_cse.c 18 Feb 2008 16:21:05 -0000 1.65.2.2
@@ -38,9 +38,6 @@
#include "array.h"
#include "alg_dag.h"
-/* compare types in path step operator nodes */
-#include "subtyping.h"
-
#include <assert.h>
#include <string.h> /* strcmp */
@@ -348,9 +345,9 @@
case la_step_join:
case la_guide_step:
case la_guide_step_join:
- if (a->sem.step.axis != b->sem.step.axis
- || !PFty_subtype (a->sem.step.ty, b->sem.step.ty)
- || !PFty_subtype (b->sem.step.ty, a->sem.step.ty)
+ if (a->sem.step.spec.axis != b->sem.step.spec.axis
+ || a->sem.step.spec.kind != b->sem.step.spec.kind
+ || !PFqname_eq (a->sem.step.spec.qname, b->sem.step.spec.qname)
|| a->sem.step.guide_count != b->sem.step.guide_count
|| a->sem.step.level != b->sem.step.level
|| a->sem.step.iter != b->sem.step.iter
Index: logical.c
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/algebra/logical.c,v
retrieving revision 1.75.2.3
retrieving revision 1.75.2.4
diff -u -d -r1.75.2.3 -r1.75.2.4
--- logical.c 8 Feb 2008 22:59:13 -0000 1.75.2.3
+++ logical.c 18 Feb 2008 16:21:09 -0000 1.75.2.4
@@ -2537,7 +2537,7 @@
*/
PFla_op_t *
PFla_step (const PFla_op_t *doc, const PFla_op_t *n,
- PFalg_axis_t axis, PFty_t seqty, int level,
+ PFalg_step_spec_t spec, int level,
PFalg_att_t iter, PFalg_att_t item,
PFalg_att_t item_res)
{
@@ -2552,8 +2552,7 @@
ret = la_op_wire2 (la_step, doc, n);
/* insert semantic value (axis/kind test, col names) into the result */
- ret->sem.step.axis = axis;
- ret->sem.step.ty = seqty;
+ ret->sem.step.spec = spec;
ret->sem.step.guide_count = 0;
ret->sem.step.guides = NULL;
ret->sem.step.level = level;
@@ -2588,7 +2587,7 @@
= (struct PFalg_schm_item_t) { .name = iter,
.type = PFprop_type_of (n, iter) };
/* the result of an attribute axis is also of type attribute */
- if (ret->sem.step.axis == alg_attr)
+ if (ret->sem.step.spec.axis == alg_attr)
ret->schema.items[1]
= (struct PFalg_schm_item_t) { .name = item_res,
.type = aat_anode };
@@ -2602,11 +2601,11 @@
PFla_op_t *
PFla_step_simple (const PFla_op_t *doc, const PFla_op_t *n,
- PFalg_axis_t axis, PFty_t seqty,
+ PFalg_step_spec_t spec,
PFalg_att_t iter, PFalg_att_t item,
PFalg_att_t item_res)
{
- return PFla_step (doc, n, axis, seqty, -1, iter, item, item_res);
+ return PFla_step (doc, n, spec, -1, iter, item, item_res);
}
@@ -2621,7 +2620,7 @@
*/
PFla_op_t *
PFla_step_join (const PFla_op_t *doc, const PFla_op_t *n,
- PFalg_axis_t axis, PFty_t seqty, int level,
+ PFalg_step_spec_t spec, int level,
PFalg_att_t item,
PFalg_att_t item_res)
{
@@ -2634,8 +2633,7 @@
ret = la_op_wire2 (la_step_join, doc, n);
/* insert semantic value (axis/kind test, col names) into the result */
- ret->sem.step.axis = axis;
- ret->sem.step.ty = seqty;
+ ret->sem.step.spec = spec;
ret->sem.step.guide_count = 0;
ret->sem.step.guides = NULL;
ret->sem.step.level = level;
@@ -2668,7 +2666,7 @@
ret->schema.items[i] = n->schema.items[i];
/* the result of an attribute axis is also of type attribute */
- if (ret->sem.step.axis == alg_attr)
+ if (ret->sem.step.spec.axis == alg_attr)
ret->schema.items[i]
= (struct PFalg_schm_item_t) { .name = item_res,
.type = aat_anode };
@@ -2682,10 +2680,10 @@
PFla_op_t *
PFla_step_join_simple (const PFla_op_t *doc, const PFla_op_t *n,
- PFalg_axis_t axis, PFty_t seqty,
+ PFalg_step_spec_t spec,
PFalg_att_t item, PFalg_att_t item_res)
{
- return PFla_step_join (doc, n, axis, seqty, -1, item, item_res);
+ return PFla_step_join (doc, n, spec, -1, item, item_res);
}
@@ -2700,7 +2698,7 @@
*/
PFla_op_t *
PFla_guide_step (const PFla_op_t *doc, const PFla_op_t *n,
- PFalg_axis_t axis, PFty_t seqty,
+ PFalg_step_spec_t spec,
unsigned int guide_count, PFguide_tree_t **guides,
int level,
PFalg_att_t iter, PFalg_att_t item,
@@ -2717,8 +2715,7 @@
ret = la_op_wire2 (la_guide_step, doc, n);
/* insert semantic value (axis/kind test, col names) into the result */
- ret->sem.step.axis = axis;
- ret->sem.step.ty = seqty;
+ ret->sem.step.spec = spec;
ret->sem.step.guide_count = guide_count;
ret->sem.step.guides = memcpy (PFmalloc (guide_count *
sizeof (PFguide_tree_t *)),
@@ -2756,7 +2753,7 @@
= (struct PFalg_schm_item_t) { .name = iter,
.type = PFprop_type_of (n, iter) };
/* the result of an attribute axis is also of type attribute */
- if (ret->sem.step.axis == alg_attr)
+ if (ret->sem.step.spec.axis == alg_attr)
ret->schema.items[1]
= (struct PFalg_schm_item_t) { .name = item_res,
.type = aat_anode };
@@ -2770,14 +2767,14 @@
PFla_op_t *
PFla_guide_step_simple (const PFla_op_t *doc, const PFla_op_t *n,
- PFalg_axis_t axis, PFty_t seqty,
+ PFalg_step_spec_t spec,
unsigned int guide_count, PFguide_tree_t **guides,
PFalg_att_t iter, PFalg_att_t item,
PFalg_att_t item_res)
{
return PFla_guide_step (
doc, n,
- axis, seqty,
+ spec,
guide_count, guides,
-1,
iter, item, item_res);
@@ -2796,7 +2793,7 @@
*/
PFla_op_t *
PFla_guide_step_join (const PFla_op_t *doc, const PFla_op_t *n,
- PFalg_axis_t axis, PFty_t seqty,
+ PFalg_step_spec_t spec,
unsigned int guide_count, PFguide_tree_t **guides,
int level, PFalg_att_t item, PFalg_att_t item_res)
{
@@ -2809,8 +2806,7 @@
ret = la_op_wire2 (la_guide_step_join, doc, n);
/* insert semantic value (axis/kind test, col names) into the result */
- ret->sem.step.axis = axis;
- ret->sem.step.ty = seqty;
+ ret->sem.step.spec = spec;
ret->sem.step.guide_count = guide_count;
ret->sem.step.guides = memcpy (PFmalloc (guide_count *
sizeof (PFguide_tree_t *)),
@@ -2847,7 +2843,7 @@
ret->schema.items[i] = n->schema.items[i];
/* the result of an attribute axis is also of type attribute */
- if (ret->sem.step.axis == alg_attr)
+ if (ret->sem.step.spec.axis == alg_attr)
ret->schema.items[i]
= (struct PFalg_schm_item_t) { .name = item_res,
.type = aat_anode };
@@ -2861,13 +2857,13 @@
PFla_op_t *
PFla_guide_step_join_simple (const PFla_op_t *doc, const PFla_op_t *n,
- PFalg_axis_t axis, PFty_t seqty,
+ PFalg_step_spec_t spec,
unsigned int guide_count, PFguide_tree_t **guides,
PFalg_att_t item, PFalg_att_t item_res)
{
return PFla_guide_step_join (
doc, n,
- axis, seqty,
+ spec,
guide_count, guides,
-1, item, item_res);
}
@@ -4298,8 +4294,7 @@
case la_step:
return PFla_step (left, right,
- n->sem.step.axis,
- n->sem.step.ty,
+ n->sem.step.spec,
n->sem.step.level,
n->sem.step.iter,
n->sem.step.item,
@@ -4307,16 +4302,14 @@
case la_step_join:
return PFla_step_join (left, right,
- n->sem.step.axis,
- n->sem.step.ty,
+ n->sem.step.spec,
n->sem.step.level,
n->sem.step.item,
n->sem.step.item_res);
case la_guide_step:
return PFla_guide_step (left, right,
- n->sem.step.axis,
- n->sem.step.ty,
+ n->sem.step.spec,
n->sem.step.guide_count,
n->sem.step.guides,
n->sem.step.level,
@@ -4326,8 +4319,7 @@
case la_guide_step_join:
return PFla_guide_step_join (left, right,
- n->sem.step.axis,
- n->sem.step.ty,
+ n->sem.step.spec,
n->sem.step.guide_count,
n->sem.step.guides,
n->sem.step.level,
Index: builtins.c
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/algebra/builtins.c,v
retrieving revision 1.71.2.3
retrieving revision 1.71.2.4
diff -u -d -r1.71.2.3 -r1.71.2.4
--- builtins.c 16 Feb 2008 01:02:06 -0000 1.71.2.3
+++ builtins.c 18 Feb 2008 16:21:06 -0000 1.71.2.4
@@ -4342,6 +4342,11 @@
struct PFla_pair_t *args)
{
PFla_op_t *node_scj, *nodes;
+ PFalg_step_spec_t desc_text_spec;
+ desc_text_spec.axis = alg_desc_s;
+ desc_text_spec.kind = node_kind_text;
+ /* missing QName */
+ desc_text_spec.qname = PFqname (PFns_wild, NULL);
(void) ordering;
@@ -4352,7 +4357,7 @@
project (args[0].rel,
proj (att_iter, att_iter),
proj (att_item, att_item)),
- alg_desc_s, PFty_text (),
+ desc_text_spec,
att_iter, att_item, att_item),
att_pos, sortby (att_item));
@@ -4391,6 +4396,11 @@
{
PFla_op_t *sel_attr, *sel_node, *attributes,
*node_scj, *nodes;
+ PFalg_step_spec_t desc_text_spec;
+ desc_text_spec.axis = alg_desc_s;
+ desc_text_spec.kind = node_kind_text;
+ /* missing QName */
+ desc_text_spec.qname = PFqname (PFns_wild, NULL);
/* we know that we have no empty sequences and
thus can skip the treating for empty sequences */
@@ -4434,7 +4444,7 @@
project (sel_node,
proj (att_iter, att_iter),
proj (att_item, att_item)),
- alg_desc_s, PFty_text (),
+ desc_text_spec,
att_iter, att_item, att_item),
att_pos, sortby (att_item));
-------------------------------------------------------------------------
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