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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list