Changeset: 0750c9f0e349 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0750c9f0e349
Modified Files:
        clients/Tests/MAL-signatures.stable.out
        clients/Tests/MAL-signatures.stable.out.int128
        clients/Tests/exports.stable.out
        monetdb5/modules/atoms/Tests/xml10.mal
        monetdb5/modules/atoms/Tests/xml10.stable.out
        monetdb5/modules/atoms/batxml.c
        monetdb5/modules/atoms/batxml.mal
        monetdb5/modules/atoms/batxml.sql
        monetdb5/modules/atoms/xml.sql
        sql/test/sql_xml/Tests/funcs.sql
Branch: default
Log Message:

Updated batxml module to be "headless".
Removed old and unused batxml.agg with the implementation.


diffs (truncated from 853 to 300 lines):

diff --git a/clients/Tests/MAL-signatures.stable.out 
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -41602,18 +41602,6 @@ command xml.aggr(val:bat[:oid,:xml]):xml
 address BATXMLgroup;
 comment Aggregate the XML values.
 
-command xml.agg(val:bat[:oid,:xml]):xml 
-address BATXMLgroup;
-comment Aggregate the XML values over groups specified.
-
-command xml.agg(val:bat[:oid,:xml],grp:bat[:oid,:oid]):bat[:oid,:xml] 
-address BATXMLagg;
-comment Aggregate the XML values over groups specified.
-
-command 
xml.agg(val:bat[:oid,:xml],grp:bat[:oid,:oid],e:bat[:oid,:any_1]):bat[:oid,:xml]
 
-address BATXMLagg3;
-comment Aggregate the XML values over groups specified.
-
 command xml.attribute(name:str,val:str):xml 
 address XMLattribute;
 comment Construct an attribute value pair
diff --git a/clients/Tests/MAL-signatures.stable.out.int128 
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -52537,18 +52537,6 @@ command xml.aggr(val:bat[:oid,:xml]):xml
 address BATXMLgroup;
 comment Aggregate the XML values.
 
-command xml.agg(val:bat[:oid,:xml]):xml 
-address BATXMLgroup;
-comment Aggregate the XML values over groups specified.
-
-command xml.agg(val:bat[:oid,:xml],grp:bat[:oid,:oid]):bat[:oid,:xml] 
-address BATXMLagg;
-comment Aggregate the XML values over groups specified.
-
-command 
xml.agg(val:bat[:oid,:xml],grp:bat[:oid,:oid],e:bat[:oid,:any_1]):bat[:oid,:xml]
 
-address BATXMLagg3;
-comment Aggregate the XML values over groups specified.
-
 command xml.attribute(name:str,val:str):xml 
 address XMLattribute;
 comment Construct an attribute value pair
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -824,8 +824,6 @@ str BATPCREnotilike(bat *ret, const bat 
 str BATPCREnotilike2(bat *ret, const bat *b, const str *pat);
 str BATPCREnotlike(bat *ret, const bat *b, const str *pat, const str *esc);
 str BATPCREnotlike2(bat *ret, const bat *b, const str *pat);
-str BATXMLagg(bat *ret, const bat *bid, const bat *grp);
-str BATXMLagg3(bat *ret, const bat *bid, const bat *grp, const bat *e);
 str BATXMLattribute(bat *ret, const char *const *name, const bat *bid);
 str BATXMLcomment(bat *ret, const bat *bid);
 str BATXMLconcat(bat *ret, const bat *bid, const bat *rid);
diff --git a/monetdb5/modules/atoms/Tests/xml10.mal 
b/monetdb5/modules/atoms/Tests/xml10.mal
--- a/monetdb5/modules/atoms/Tests/xml10.mal
+++ b/monetdb5/modules/atoms/Tests/xml10.mal
@@ -34,13 +34,16 @@ g:= bat.new(:oid,:oid);
 bat.append(g,0@0);
 bat.append(g,0@0);
 bat.append(g,1@0);
+e:=bat.new(:oid,:int);
+bat.append(e,0);
+bat.append(e,0);
 
 k:= algebra.leftfetchjoin(g,te);
 io.print(k);
 l:= algebra.subsort(k,false,false);
 io.print(l);
 
-ag:= xml.agg(te,g);
+ag:= xml.subaggr(te,g,e,true);
 io.print(ag);
 
 cc:= batxml.concat(ax,te);
@@ -50,7 +53,7 @@ ae:= batxml.element("author",cc);
 io.print(ae);
 
 io.print("book construction");
-be:= xml.agg(ae);
+be:= xml.aggr(ae);
 io.print(be);
 doc:= xml.element("books",be);
 io.print(doc);
diff --git a/monetdb5/modules/atoms/Tests/xml10.stable.out 
b/monetdb5/modules/atoms/Tests/xml10.stable.out
--- a/monetdb5/modules/atoms/Tests/xml10.stable.out
+++ b/monetdb5/modules/atoms/Tests/xml10.stable.out
@@ -48,11 +48,14 @@ function user.main():void;
     bat.append(g,0@0);
     bat.append(g,0@0);
     bat.append(g,1@0);
+    e := bat.new(:oid,:int);
+    bat.append(e,0);
+    bat.append(e,0);
     k := algebra.leftfetchjoin(g,te);
     io.print(k);
     l := algebra.subsort(k,false,false);
     io.print(l);
-    ag := xml.agg(te,g);
+    ag := xml.subaggr(te,g,e,true);
     io.print(ag);
     cc := batxml.concat(ax,te);
     io.print(cc);
@@ -60,7 +63,7 @@ function user.main():void;
     ae := batxml.element("author",cc);
     io.print(ae);
     io.print("book construction");
-    be := xml.agg(ae);
+    be := xml.aggr(ae);
     io.print(be);
     doc := xml.element("books",be);
     io.print(doc);
diff --git a/monetdb5/modules/atoms/batxml.c b/monetdb5/modules/atoms/batxml.c
--- a/monetdb5/modules/atoms/batxml.c
+++ b/monetdb5/modules/atoms/batxml.c
@@ -55,34 +55,37 @@ batxml_export str BATXMLattribute(bat *r
 batxml_export str BATXMLelement(bat *ret, const char * const *name, xml *ns, 
xml *attr, const bat *bid);
 batxml_export str BATXMLconcat(bat *ret, const bat *bid, const bat *rid);
 batxml_export str BATXMLforest(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr p);
-batxml_export str BATXMLagg(bat *ret, const bat *bid, const bat *grp);
-batxml_export str BATXMLagg3(bat *ret, const bat *bid, const bat *grp, const 
bat *e);
 batxml_export str BATXMLgroup(xml *ret, const bat *bid);
 batxml_export str AGGRsubxmlcand(bat *retval, const bat *bid, const bat *gid, 
const bat *eid, const bat *sid, const bit *skip_nils);
 batxml_export str AGGRsubxml(bat *retval, const bat *bid, const bat *gid, 
const bat *eid, const bit *skip_nils);
 
 
 #define prepareResult(X,Y,tpe,Z,free)                                          
        \
-       (X) = BATnew((Y)->htype, (tpe), BATcount(Y), TRANSIENT);        \
-    if ((X) == NULL) {                                                         
                        \
-        BBPunfix((Y)->batCacheid);                                             
                \
-               free;                                                           
                                        \
-        throw(MAL, "xml." Z, MAL_MALLOC_FAIL);                                 
\
-    }                                                                          
                                        \
-       BATseqbase((X), (Y)->hseqbase);                                         
                \
-    (X)->hsorted = (Y)->hsorted;                                               
                \
-    (X)->hrevsorted = (Y)->hrevsorted;                                         
        \
-    (X)->tsorted =  0;                                                         
                        \
-    (X)->trevsorted =  0;                                                      
                        \
-    (X)->H->nonil = (Y)->H->nonil;                                             
                \
-       (X)->T->nonil = 1;
+       do {                                                                    
                                        \
+               (X) = BATnew(TYPE_void, (tpe), BATcount(Y), TRANSIENT); \
+               if ((X) == NULL) {                                              
                                \
+                       BBPunfix((Y)->batCacheid);                              
                        \
+                       free;                                                   
                                        \
+                       throw(MAL, "xml." Z, MAL_MALLOC_FAIL);                  
        \
+               }                                                               
                                                \
+               BATseqbase((X), (Y)->hseqbase);                                 
                \
+               (X)->hsorted = 1;                                               
                                \
+               (X)->hrevsorted = (Y)->hrevsorted;                              
                \
+               (X)->tsorted =  0;                                              
                                \
+               (X)->trevsorted =  0;                                           
                        \
+               (X)->H->nonil = (Y)->H->nonil;                                  
                \
+               (X)->T->nonil = 1;                                              
                                \
+       } while (0)
 
 #define finalizeResult(X,Y,Z)                                  \
-    if (!((Y)->batDirty & 2))                                  \
-               BATsetaccess((Y), BAT_READ);                    \
-    *(X) = (Y)->batCacheid;                                            \
-    BBPkeepref(*(X));                                                  \
-    BBPunfix((Z)->batCacheid);
+       do {                                                                    
        \
+               BATsetcount((Y), (Y)->batCount);                \
+               if (!((Y)->batDirty & 2))                               \
+                       BATsetaccess((Y), BAT_READ);            \
+               *(X) = (Y)->batCacheid;                                 \
+               BBPkeepref(*(X));                                               
\
+               BBPunfix((Z)->batCacheid);                              \
+       } while (0)
 
 str
 BATXMLxml2str(bat *ret, const bat *bid)
@@ -96,15 +99,14 @@ BATXMLxml2str(bat *ret, const bat *bid)
        prepareResult(bn, b, TYPE_str, "str", (void) 0);
        bi = bat_iterator(b);
        BATloop(b, p, q) {
-               const void *h = (const void *) BUNhead(bi, p);
                const char *t = (const char *) BUNtail(bi, p);
 
                if (strNil(t)) {
-                       bunfastins(bn, h, t);
+                       bunfastapp(bn, t);
                        bn->T->nonil = 0;
                } else {
                        assert(*t == 'A' || *t == 'C' || *t == 'D');
-                       bunfastins(bn, h, t + 1);
+                       bunfastapp(bn, t + 1);
                }
        }
        finalizeResult(ret, bn, b);
@@ -112,7 +114,7 @@ BATXMLxml2str(bat *ret, const bat *bid)
   bunins_failed:
        BBPunfix(b->batCacheid);
        BBPunfix(bn->batCacheid);
-       throw(MAL, "xml.str", OPERATION_FAILED " During bulk coercion");
+       throw(MAL, "xml.str", OPERATION_FAILED " during bulk coercion");
 }
 
 str
@@ -133,45 +135,47 @@ BATXMLxmltext(bat *ret, const bat *bid)
        prepareResult(bn, b, TYPE_str, "text", (void) 0);
        bi = bat_iterator(b);
        BATloop(b, p, q) {
-               const void *h = (const void *) BUNhead(bi, p);
                const char *t = (const char *) BUNtail(bi, p);
                size_t len;
 
                if (strNil(t)) {
-                       bunfastins(bn, h, t);
+                       bunfastapp(bn, t);
                        bn->T->nonil = 0;
                        continue;
                }
-               assert(*t == 'A' || *t == 'C' || *t == 'D');
                len = strlen(t);
-               if (*t == 'D') {
+               switch (*t) {
+               case 'D': {
                        xmlDocPtr d = xmlParseMemory(t + 1, (int) (len - 1));
                        elem = xmlDocGetRootElement(d);
                        content = (str) xmlNodeGetContent(elem);
                        xmlFreeDoc(d);
                        if (content == NULL) {
-                               err= MAL_MALLOC_FAIL;
+                               err = MAL_MALLOC_FAIL;
                                goto bunins_failed;
                        }
-               } else if (*t == 'C') {
+                       break;
+               }
+               case 'C':
                        if (doc == NULL)
                                doc = xmlParseMemory("<doc/>", 6);
                        xmlParseInNodeContext(xmlDocGetRootElement(doc), t + 1, 
(int) (len - 1), 0, &elem);
                        content = (str) xmlNodeGetContent(elem);
                        xmlFreeNodeList(elem);
                        if (content == NULL) {
-                               err= MAL_MALLOC_FAIL;
+                               err = MAL_MALLOC_FAIL;
                                goto bunins_failed;
                        }
-               } else {
+                       break;
+               case 'A': {
                        str s;
 
-                       if (buf == 0 || size < len) {
+                       if (buf == NULL || size < len) {
                                size = len + 128;
                                if (buf != NULL)
                                        GDKfree(buf);
                                buf = GDKmalloc(size);
-                               if (buf == 0) {
+                               if (buf == NULL) {
                                        err = MAL_MALLOC_FAIL;
                                        goto bunins_failed;
                                }
@@ -187,9 +191,16 @@ BATXMLxmltext(bat *ret, const bat *bid)
                                t++;
                        }
                        *s = 0;
+                       break;
+               }
+               default:
+                       assert(*t == 'A' || *t == 'C' || *t == 'D');
+                       bunfastapp(bn, str_nil);
+                       bn->T->nonil = 0;
+                       continue;
                }
                assert(content != NULL || buf != NULL);
-               bunfastins(bn, h, content != NULL ? content : buf);
+               bunfastapp(bn, content != NULL ? content : buf);
                if (content != NULL)
                        GDKfree(content);
                content = NULL;
@@ -243,12 +254,11 @@ BATXMLstr2xml(bat *ret, const bat *bid)
        prepareResult(bn, b, TYPE_xml, "xml", GDKfree(buf));
        bi = bat_iterator(b);
        BATloop(b, p, q) {
-               const void *h = (const void *) BUNhead(bi, p);
                const char *t = (const char *) BUNtail(bi, p);
                size_t len;
 
                if (strNil(t)) {
-                       bunfastins(bn, h, str_nil);
+                       bunfastapp(bn, str_nil);
                        bn->T->nonil = 0;
                        continue;
                }
@@ -259,13 +269,13 @@ BATXMLstr2xml(bat *ret, const bat *bid)
                        GDKfree(buf);
                        buf = GDKmalloc(size);
                        if (buf == NULL) {
-                               err= MAL_MALLOC_FAIL;
+                               err = MAL_MALLOC_FAIL;
                                goto bunins_failed;
                        }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to