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