Changeset: c98387b1a90a for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c98387b1a90a Modified Files: clients/mapiclient/dump.c clients/mapiclient/mclient.c clients/python2/monetdb/sql/monetize.py clients/python2/test/test_monetize.py clients/python3/monetdb/sql/monetize.py clients/python3/test/test_monetize.py monetdb5/modules/atoms/batxml.c sql/backends/monet5/sql_scenario.c sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out sql/test/testdb-upgrade/Tests/upgrade.stable.out Branch: transaction-replication Log Message:
Merge with default branch Manual merge with updated upgarde code in sql_scenario diffs (truncated from 586 to 300 lines): diff --git a/clients/python2/monetdb/sql/monetize.py b/clients/python2/monetdb/sql/monetize.py --- a/clients/python2/monetdb/sql/monetize.py +++ b/clients/python2/monetdb/sql/monetize.py @@ -88,7 +88,7 @@ def convert(data): else: for type_, func in mapping: if issubclass(type(data), type_): - return func + return func(data) #if hasattr(data, '__str__'): # return monet_escape raise ProgrammingError("type %s not supported as value" % type(data)) diff --git a/clients/python2/test/test_monetize.py b/clients/python2/test/test_monetize.py --- a/clients/python2/test/test_monetize.py +++ b/clients/python2/test/test_monetize.py @@ -25,8 +25,9 @@ class TestMonetize(unittest.TestCase): class StrSubClass(str): pass x = StrSubClass('test') - func = convert(x) - self.assertEqual(func, monet_escape) + csub = convert(x) + cstr = convert('test') + self.assertEqual(csub, cstr) def test_unknown_type(self): class Unknown: diff --git a/clients/python3/monetdb/sql/monetize.py b/clients/python3/monetdb/sql/monetize.py --- a/clients/python3/monetdb/sql/monetize.py +++ b/clients/python3/monetdb/sql/monetize.py @@ -84,7 +84,7 @@ def convert(data): else: for type_, func in mapping: if issubclass(type(data), type_): - return func + return func(data) #if hasattr(data, '__str__'): # return monet_escape raise ProgrammingError("type %s not supported as value" % type(data)) diff --git a/clients/python3/test/test_monetize.py b/clients/python3/test/test_monetize.py --- a/clients/python3/test/test_monetize.py +++ b/clients/python3/test/test_monetize.py @@ -25,8 +25,9 @@ class TestMonetize(unittest.TestCase): class StrSubClass(str): pass x = StrSubClass('test') - func = convert(x) - self.assertEqual(func, monet_escape) + csub = convert(x) + cstr = convert('test') + self.assertEqual(csub, cstr) def test_unknown_type(self): class Unknown: 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 @@ -77,11 +77,12 @@ batxml_export str AGGRsubxmlcand(bat *re batxml_export str AGGRsubxml(bat *retval, bat *bid, bat *gid, bat *eid, bit *skip_nils); -#define prepareResult(X,Y,tpe,Z) \ +#define prepareResult(X,Y,tpe,Z, Freeup) \ assert((Y)->htype == TYPE_void); \ (X) = BATnew(TYPE_void, (tpe), BATcount(Y)); \ if ((X) == NULL) { \ BBPreleaseref((Y)->batCacheid); \ + Freeup; \ throw(MAL, "xml." Z, MAL_MALLOC_FAIL); \ } \ BATseqbase((X), (Y)->hseqbase); \ @@ -108,7 +109,7 @@ BATXMLxml2str(bat *ret, const bat *bid) if ((b = BATdescriptor(*bid)) == NULL) throw(MAL, "xml.str", INTERNAL_BAT_ACCESS); - prepareResult(bn, b, TYPE_str, "str"); + prepareResult(bn, b, TYPE_str, "str",); bi = bat_iterator(b); BATloop(b, p, q) { const void *h = (const void *) BUNhead(bi, p); @@ -145,7 +146,7 @@ BATXMLxmltext(bat *ret, const bat *bid) if ((b = BATdescriptor(*bid)) == NULL) throw(MAL, "xml.text", INTERNAL_BAT_ACCESS); - prepareResult(bn, b, TYPE_str, "text"); + prepareResult(bn, b, TYPE_str, "text",); bi = bat_iterator(b); BATloop(b, p, q) { const void *h = (const void *) BUNhead(bi, p); @@ -255,7 +256,7 @@ BATXMLstr2xml(bat *ret, const bat *bid) GDKfree(buf); throw(MAL, "xml.xml", INTERNAL_BAT_ACCESS); } - prepareResult(bn, b, TYPE_xml, "xml"); + prepareResult(bn, b, TYPE_xml, "xml",GDKfree(buf)); bi = bat_iterator(b); BATloop(b, p, q) { const void *h = (const void *) BUNhead(bi, p); @@ -309,7 +310,7 @@ BATXMLdocument(bat *ret, const bat *bid) GDKfree(buf); throw(MAL, "xml.document", INTERNAL_BAT_ACCESS); } - prepareResult(bn, b, TYPE_xml, "document"); + prepareResult(bn, b, TYPE_xml, "document", GDKfree(buf)); bi = bat_iterator(b); BATloop(b, p, q) { const void *h = (const void *) BUNhead(bi, p); @@ -375,7 +376,7 @@ BATXMLcontent(bat *ret, const bat *bid) } doc = xmlParseMemory("<doc/>", 6); root = xmlDocGetRootElement(doc); - prepareResult(bn, b, TYPE_xml, "content"); + prepareResult(bn, b, TYPE_xml, "content", GDKfree(buf)); bi = bat_iterator(b); xbuf = xmlBufferCreate(); BATloop(b, p, q) { @@ -439,7 +440,7 @@ BATXMLisdocument(bat *ret, const bat *bi if ((b = BATdescriptor(*bid)) == NULL) throw(MAL, "xml.isdocument", INTERNAL_BAT_ACCESS); - prepareResult(bn, b, TYPE_bit, "isdocument"); + prepareResult(bn, b, TYPE_bit, "isdocument",); bi = bat_iterator(b); BATloop(b, p, q) { const void *h = (const void *) BUNhead(bi, p); @@ -504,7 +505,7 @@ BATXMLoptions(bat *ret, const char * con GDKfree(buf); throw(MAL, "xml.options", INTERNAL_BAT_ACCESS); } - prepareResult(bn, b, TYPE_xml, "options"); + prepareResult(bn, b, TYPE_xml, "options", GDKfree(buf);GDKfree(val)); if (strcmp(*options, "absent") == 0) buf[0] = 0; @@ -571,7 +572,7 @@ BATXMLcomment(bat *ret, const bat *bid) GDKfree(buf); throw(MAL, "xml.comment", INTERNAL_BAT_ACCESS); } - prepareResult(bn, b, TYPE_xml, "comment"); + prepareResult(bn, b, TYPE_xml, "comment", GDKfree(buf)); bi = bat_iterator(b); BATloop(b, p, q) { const void *h = (const void *) BUNhead(bi, p); @@ -646,7 +647,7 @@ BATXMLpi(bat *ret, const char * const *t GDKfree(buf); throw(MAL, "xml.pi", INTERNAL_BAT_ACCESS); } - prepareResult(bn, b, TYPE_xml, "pi"); + prepareResult(bn, b, TYPE_xml, "pi", GDKfree(buf)); bi = bat_iterator(b); BATloop(b, p, q) { const void *h = (const void *) BUNhead(bi, p); @@ -716,7 +717,7 @@ BATXMLroot(bat *ret, const bat *bid, con GDKfree(buf); throw(MAL, "xml.pi", INTERNAL_BAT_ACCESS); } - prepareResult(bn, b, TYPE_xml, "pi"); + prepareResult(bn, b, TYPE_xml, "pi", GDKfree(buf)); bi = bat_iterator(b); BATloop(b, p, q) { const void *h = (const void *) BUNhead(bi, p); @@ -793,7 +794,7 @@ BATXMLattribute(bat *ret, const char * c GDKfree(buf); throw(MAL, "xml.attribute", INTERNAL_BAT_ACCESS); } - prepareResult(bn, b, TYPE_xml, "attribute"); + prepareResult(bn, b, TYPE_xml, "attribute", GDKfree(buf)); bi = bat_iterator(b); BATloop(b, p, q) { const void *h = (const void *) BUNhead(bi, p); @@ -871,7 +872,7 @@ BATXMLelement(bat *ret, const char * con GDKfree(buf); throw(MAL, "xml.element", INTERNAL_BAT_ACCESS); } - prepareResult(bn, b, TYPE_xml, "element"); + prepareResult(bn, b, TYPE_xml, "element", GDKfree(buf)); bi = bat_iterator(b); BATloop(b, p, q) { const void *h = (const void *) BUNhead(bi, p); @@ -979,7 +980,7 @@ BATXMLforest(Client cntxt, MalBlkPtr mb, throw(MAL, "xml.forest", INTERNAL_BAT_ACCESS); } - prepareResult(bn, bi[pci->retc].b, TYPE_xml, "forest"); + prepareResult(bn, bi[pci->retc].b, TYPE_xml, "forest", GDKfree(bi);GDKfree(p);GDKfree(q);GDKfree(buf)); while (p[pci->retc] < q[pci->retc]) { const char *t; @@ -1072,7 +1073,7 @@ BATXMLconcat(bat *ret, const bat *bid, c q = BUNlast(b); rp = BUNfirst(r); - prepareResult(bn, b, TYPE_xml, "concat"); + prepareResult(bn, b, TYPE_xml, "concat", GDKfree(buf)); bi = bat_iterator(b); ri = bat_iterator(r); diff --git a/sql/backends/monet5/sql_scenario.c b/sql/backends/monet5/sql_scenario.c --- a/sql/backends/monet5/sql_scenario.c +++ b/sql/backends/monet5/sql_scenario.c @@ -166,7 +166,6 @@ SQLprelude(void) ms->engine = "MALengine"; /* init the SQL store */ - tmp = SQLinit(readonly); if (tmp != MAL_SUCCEED) { return (tmp); @@ -644,7 +643,7 @@ sql_update_jan2014(Client c) if (schvar) schema = strdup(schvar->val.sval); - + pos += snprintf(buf + pos, bufsize - pos, "set schema \"sys\";\n"); /* remove table return types (#..), ie tt_generated from _tables/_columns */ @@ -884,8 +883,6 @@ sql_update_default(Client c) mvc *sql = ((backend*) c->sqlcontext)->mvc; ValRecord *schvar = stack_get_var(sql, "current_schema"); char *schema = NULL; - char *fullname; - FILE *fp; sql_table *t; sql_schema *s; @@ -898,19 +895,91 @@ sql_update_default(Client c) pos += snprintf(buf + pos, bufsize - pos, "set schema \"sys\";\n"); + /* remove table return types (#..), ie tt_generated from + * _tables/_columns */ + pos += snprintf(buf + pos, bufsize - pos, "delete from _columns where table_id in (select id from _tables where name like '#%%');\n"); + pos += snprintf(buf + pos, bufsize - pos, "delete from _tables where name like '#%%';\n"); + /* change in 25_debug.sql */ pos += snprintf(buf + pos, bufsize - pos, "drop function sys.bbp;\n"); pos += snprintf(buf + pos, bufsize - pos, "create function sys.bbp() returns table (id int, name string, htype string, ttype string, count BIGINT, refcnt int, lrefcnt int, location string, heat int, dirty string, status string, kind string) external name bbp.get;\n"); /* new file 40_json.sql */ - snprintf(buf + pos, bufsize - pos, "createdb%c40_json", DIR_SEP); - if ((fullname = MSP_locate_sqlscript(buf + pos, 1)) != NULL) { - if ((fp = fopen(fullname, "r")) != NULL) { - pos += fread(buf + pos, 1, bufsize - pos, fp); - fclose(fp); - } - GDKfree(fullname); - } + pos += snprintf(buf + pos, bufsize - pos, "\ +create schema json;\n\ +\n\ +create type json external name json;\n\ +\n\ +create function json.filter(js json, pathexpr string)\n\ +returns json external name json.filter;\n\ +\n\ +create function json.filter(js json, name tinyint)\n\ +returns json external name json.filter;\n\ +\n\ +create function json.filter(js json, name integer)\n\ +returns json external name json.filter;\n\ +\n\ +create function json.filter(js json, name bigint)\n\ +returns json external name json.filter;\n\ +\n\ +create function json.text(js json, e string)\n\ +returns string external name json.text;\n\ +\n\ +create function json.number(js json)\n\ +returns float external name json.number;\n\ +\n\ +create function json.\"integer\"(js json)\n\ +returns bigint external name json.\"integer\";\n\ +\n\ +create function json.isvalid(js string)\n\ +returns bool external name json.isvalid;\n\ +\n\ +create function json.isobject(js string)\n\ +returns bool external name json.isobject;\n\ +\n\ +create function json.isarray(js string)\n\ +returns bool external name json.isarray;\n\ +\n\ +create function json.isvalid(js json)\n\ +returns bool external name json.isvalid;\n\ +\n\ +create function json.isobject(js json)\n\ +returns bool external name json.isobject;\n\ +\n\ +create function json.isarray(js json)\n\ +returns bool external name json.isarray;\n\ +\n\ +create function json.length(js json)\n\ +returns integer external name json.length;\n\ +\n\ +create function json.keyarray(js json)\n\ +returns json external name json.keyarray;\n\ +\n\ +create function json.valuearray(js json)\n\ +returns json external name json.valuearray;\n\ _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list