Update of /cvsroot/monetdb/pathfinder/compiler/mil
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv26738/compiler/mil
Modified Files:
mil.c milgen.brg milprint.c
Log Message:
* Algebra / MIL implementation of XQuery builtin function fn:translate.
* Erase trailing space chars.
* Introduce new algebra types for the document management functions:
- aat_docmgmt
- aat_str1
- aat_str2
* Algebra implementation of the following document management functions:
- pf:add-doc(str,str)
- pf:add-doc(str,str, str)
- pf:add-doc(str,str, int)
- pf:add-doc(str,str, str, int)
- pf:del-doc(str)
mil code generation and runtime DocmgmTape function are still missing.
Index: milprint.c
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/mil/milprint.c,v
retrieving revision 1.60
retrieving revision 1.61
diff -u -d -r1.60 -r1.61
--- milprint.c 17 Jan 2008 14:10:54 -0000 1.60
+++ milprint.c 18 Jan 2008 16:11:38 -0000 1.61
@@ -37,10 +37,13 @@
| expression '.exist (' expression ')' <m_exist>
| expression '.project (' expression ')' <m_project>
| expression '.mark (' expression ')' <m_mark>
+ | expression '.hmark (' expression ')' <m_hmark>
+ | expression '.tmark (' expression ')' <m_tmark>
| expression '.mark_grp (' expression ')' <m_mark_grp>
| expression '.cross (' expression ')' <m_cross>
| expression '.join (' expression ')' <m_join>
| expression '.leftjoin (' expression ')' <m_leftjoin>
+ | expression '.leftfetchjoin (' expr ')' <m_leftfetchjoin>
| 'thetajoin ('exp','exp','exp','exp')' <m_thetajoin>
| 'htordered_unique_thetajoin ('
exp ',' exp ',' exp ', nil, nil)' <m_unq2_tjoin>
@@ -122,6 +125,7 @@
| '[length](' expresion ')' <m_mlength>
| '[toUpper](' expresion ')' <m_mtoUpper>
| '[toLower](' expresion ')' <m_mtoLower>
+ | '[translate](' exp ',' exp ',' exp ')' <m_mtranslate>
| '[normSpace](' expresion ')' <m_mnorm_space>
| '[pcre_match]('exp','exp')' <m_mpcre_match>
| '[pcre_match]('exp','exp','exp')'
<m_mpcre_match_flag>
@@ -297,6 +301,7 @@
, [m_mlength] = "[length]"
, [m_mtoUpper] = "[toUpper]"
, [m_mtoLower] = "[toLower]"
+ , [m_mtranslate] = "[translate]"
, [m_mnorm_space] = "[normSpace]"
, [m_mpcre_match] = "[pcre_match]"
, [m_mpcre_match_flag] = "[pcre_match]"
@@ -1020,6 +1025,8 @@
milprintf ("%s ()", ID[n->kind]);
break;
+ /* expression : '[translate] (' expr ',' expr ',' expr ')' */
+ case m_mtranslate:
/* expression : 'attr_constr (' expr ',' expr ',' expr ')' */
case m_attr_constr:
/* expression : 'mposjoin (' exp ',' exp ',' exp ')' */
Index: mil.c
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/mil/mil.c,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -d -r1.47 -r1.48
--- mil.c 17 Jan 2008 14:10:53 -0000 1.47
+++ mil.c 18 Jan 2008 16:11:38 -0000 1.48
@@ -1320,6 +1320,14 @@
return wire1 (m_mtoLower, a);
}
+/** Multiplexed translate() function `[translate](a,b,c)' */
+PFmil_t *
+PFmil_mtranslate (const PFmil_t *a, const PFmil_t *b, const PFmil_t *c)
+{
+ return wire3 (m_mtranslate, a, b, c);
+}
+
+
/** Multiplexed normSpace() function `[normSpace](a)' */
PFmil_t *
PFmil_mnorm_space (const PFmil_t *a)
Index: milgen.brg
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/mil/milgen.brg,v
retrieving revision 1.98
retrieving revision 1.99
diff -u -d -r1.98 -r1.99
--- milgen.brg 17 Jan 2008 14:10:53 -0000 1.98
+++ milgen.brg 18 Jan 2008 16:11:38 -0000 1.99
@@ -464,13 +464,14 @@
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
+ 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 );
+ || ty == aat_pnode1 || ty == aat_pre1 || ty == aat_pfrag1
+ || ty == aat_docmgmt|| ty == aat_str1 || ty == aat_str2 );
*(env_t *) PFarray_add (env)
= (env_t) { .att = att, .ty = ty, .mvar = v };
@@ -3910,6 +3911,23 @@
} break;
+ case alg_fun_fn_translate:
+ {
+ PFalg_att_t att1, att2, att3;
+
+ att1 = p->sem.fun_1to1.refs.atts[0];
+ att2 = p->sem.fun_1to1.refs.atts[1];
+ att3 = p->sem.fun_1to1.refs.atts[2];
+ res_type = aat_str;
+
+ execute (
+ assgn ( var (res->name),
+ mtranslate (
+ VAR (L(p)->env, att1, aat_str),
+ VAR (L(p)->env, att2, aat_str),
+ VAR (L(p)->env, att3, aat_str))));
+ } break;
+
case alg_fun_fn_contains:
{
PFalg_att_t att1, att2;
@@ -4088,10 +4106,10 @@
} break;
default:
assert(!"should never reach here"); break;
- }
+ }
/* get all prefix */
- execute (
+ execute (
assgn (var (prefix->name),
mposjoin ( mposjoin (name,
frag,
@@ -4124,7 +4142,7 @@
lit_str(":"))));
args = arg ( arg (var (true_oid->name), var
(false_oid->name)),
- arg (lit_str(""), var (prefix->name)));
+ arg (lit_str(""), var (prefix->name)));
execute (
assgn (var (prefix->name),
fetch (merged_union (args),
@@ -4191,7 +4209,7 @@
} break;
default:
assert(!"should never reach here"); break;
- }
+ }
execute (
assgn (var (res->name),
@@ -4317,16 +4335,25 @@
} break;
case alg_fun_pf_fragment:
+ {
res_type = aat_pfrag;
res = env_mvar (L(p)->env,
p->sem.fun_1to1.refs.atts[0],
aat_node);
- break;
+ } break;
case alg_fun_pf_supernode:
assert (!"no implementation here");
break;
+ case alg_fun_pf_add_doc:
+ case alg_fun_pf_add_doc_str:
+ case alg_fun_pf_add_doc_int:
+ case alg_fun_pf_add_doc_str_int:
+ case alg_fun_pf_del_doc:
+ res_type = aat_docmgmt;
+ break;
+
case alg_fun_upd_delete:
{
PFalg_att_t tgt = p->sem.fun_1to1.refs.atts[0];
@@ -4611,7 +4638,7 @@
/* put the result into p's environment */
env_add (p->env, p->sem.mark.res, aat_nat, res);
} break;
-
+
/* Rel: rank (Rel) */
case 72:
/* Rel: rank (std_sort (Rel)) */
@@ -4702,7 +4729,7 @@
/* put the result into p's environment */
env_add (p->env, p->sem.rank.res, aat_nat, res);
-
+
/*
* The join with each input relation:
*
@@ -7585,20 +7612,20 @@
env_at (L(p)->env, i).mvar);
}
break;
-
+
/* Rel: FunRel */
case 150:
/* no operator -- nothing to do */
break;
-
+
/* FunRel: fun_call (Rel, Param) */
case 151:
{ /* TOPDOWN */
PFarray_t *old_fun_params;
-
+
/* Collect the destinations */
reduce (kids[0], nts[0]);
-
+
old_fun_params = fun_params;
/* We will collect the parameters here */
@@ -7614,14 +7641,14 @@
/* DO FUNCTION TRANSFORMATION HERE */
/* */
/***********************************/
-
+
if (p->sem.fun_call.kind == alg_fun_call_xrpc) {
PFcnode_t *core_apply = (PFcnode_t *) p->sem.fun_call.ctx;
-
+
/* do XRPC stuff here */
(void)* fun_params;
(void)* core_apply;
-
+
/* dummy stub to fill the environment */
/* create dummy temp variable */
@@ -7630,7 +7657,7 @@
pin (v, 1);
/* release all pins */
unpin (v, 2);
-
+
/* fill the environment for all attributes and columns */
for (unsigned int i = 0; i < p->schema.count; i++) {
for (PFalg_simple_type_t t = 1; t; t <<= 1)
@@ -7645,12 +7672,12 @@
}
}
- }
+ }
/* restore the function arguments */
fun_params = old_fun_params;
} break;
-
+
/* Param: fun_param (Rel, Param) */
case 152:
{ /* TOPDOWN */
@@ -7673,12 +7700,12 @@
/* go on to next arguments */
reduce (kids[1], nts[1]);
} break;
-
+
/* Param: fun_frag_param (FragList, Param) */
case 153:
/* fragment part of the parameter list -- probably ignored */
break;
-
+
/* Param: nil */
case 154:
/* end of parameter list */
-------------------------------------------------------------------------
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