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

Reply via email to