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

Reply via email to