Changeset: 03c0143ed1e8 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=03c0143ed1e8
Added Files:
        ChangeLog.Jun2016
        sql/backends/monet5/Tests/pyapi31.sql
Modified Files:
        monetdb5/mal/mal_module.c
        monetdb5/mal/mal_parser.c
        monetdb5/modules/mal/pcre.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_optimizer.c
        sql/backends/monet5/sql_upgrades.c
        sql/server/rel_exp.c
        sql/server/rel_exp.h
        sql/server/rel_optimizer.c
        sql/server/rel_planner.c
        sql/server/rel_schema.c
        sql/server/sql_atom.c
        sql/server/sql_atom.h
        sql/server/sql_mvc.c
        sql/server/sql_mvc.h
        sql/test/mergetables/Tests/part-elim.sql
Branch: jit
Log Message:

merge with default


diffs (truncated from 756 to 300 lines):

diff --git a/ChangeLog.Jun2016 b/ChangeLog.Jun2016
new file mode 100644
--- /dev/null
+++ b/ChangeLog.Jun2016
@@ -0,0 +1,6 @@
+# ChangeLog file for candidate
+# This file is updated with Maddlog
+
+* Fri Jul  1 2016 Sjoerd Mullender <sjo...@acm.org>
+- Lots of memory leaks have been plugged across the whole system.
+
diff --git a/monetdb5/mal/mal_module.c b/monetdb5/mal/mal_module.c
--- a/monetdb5/mal/mal_module.c
+++ b/monetdb5/mal/mal_module.c
@@ -24,8 +24,7 @@ Module mal_scope;    /* the root of the 
 Module scopeJump[256][256];  /* to speedup access to correct scope */
 
 static void newSubScope(Module scope){
-       int len = (MAXSCOPE)*sizeof(Module);
-       scope->subscope = (Symbol *) GDKzalloc(len);
+       scope->subscope = (Symbol *) GDKzalloc(MAXSCOPE * sizeof(Symbol));
 }
 
 void
diff --git a/monetdb5/mal/mal_parser.c b/monetdb5/mal/mal_parser.c
--- a/monetdb5/mal/mal_parser.c
+++ b/monetdb5/mal/mal_parser.c
@@ -1149,6 +1149,11 @@ fcnHeader(Client cntxt, int kind)
        curInstr = getInstrPtr(curBlk, 0);
 
        if (currChar(cntxt) != '('){
+               if (cntxt->backup) {
+                       freeSymbol(cntxt->curprg);
+                       cntxt->curprg = cntxt->backup;
+                       cntxt->backup = 0;
+               }
                parseError(cntxt, "function header '(' expected\n");
                skipToEnd(cntxt);
                return curBlk;
@@ -1160,6 +1165,7 @@ fcnHeader(Client cntxt, int kind)
 
        if (isModuleDefined(cntxt->nspace, getModuleId(curInstr)) == FALSE) {
                if (cntxt->backup) {
+                       freeSymbol(cntxt->curprg);
                        cntxt->curprg = cntxt->backup;
                        cntxt->backup = 0;
                }
@@ -1181,6 +1187,7 @@ fcnHeader(Client cntxt, int kind)
                        if (ch == ')')
                                break;
                        if (cntxt->backup) {
+                               freeSymbol(cntxt->curprg);
                                cntxt->curprg = cntxt->backup;
                                cntxt->backup = 0;
                        }
@@ -1262,6 +1269,7 @@ fcnHeader(Client cntxt, int kind)
                if (currChar(cntxt) != ')') {
                        freeInstruction(curInstr);
                        if (cntxt->backup) {
+                               freeSymbol(cntxt->curprg);
                                cntxt->curprg = cntxt->backup;
                                cntxt->backup = 0;
                        }
diff --git a/monetdb5/modules/mal/pcre.c b/monetdb5/modules/mal/pcre.c
--- a/monetdb5/modules/mal/pcre.c
+++ b/monetdb5/modules/mal/pcre.c
@@ -33,6 +33,10 @@
 
 #include <pcre.h>
 
+#if PCRE_MAJOR < 8 || (PCRE_MAJOR == 8 && PCRE_MINOR < 13)
+#define pcre_free_study my_pcre_free
+#endif
+
 pcre_export str PCREquote(str *r, const str *v);
 pcre_export str PCREmatch(bit *ret, const str *val, const str *pat);
 pcre_export str PCREimatch(bit *ret, const str *val, const str *pat);
diff --git a/sql/backends/monet5/Tests/pyapi31.sql 
b/sql/backends/monet5/Tests/pyapi31.sql
new file mode 100644
--- /dev/null
+++ b/sql/backends/monet5/Tests/pyapi31.sql
@@ -0,0 +1,31 @@
+
+START TRANSACTION;
+
+# generate data
+CREATE FUNCTION pyapi31_gendata() RETURNS TABLE(i INTEGER) LANGUAGE PYTHON { 
return numpy.arange(100) };
+CREATE TABLE input AS SELECT * FROM pyapi31_gendata() WITH DATA;
+
+# parallel table-producing function
+CREATE FUNCTION pyapi31_parallel(i INTEGER) 
+RETURNS TABLE(a INTEGER, b INTEGER, c INTEGER) LANGUAGE PYTHON_MAP 
+{ 
+       return {'a': i, 'b': i * 2, 'c': i * 3};
+};
+# this function should be executed in parallel over the inputs
+explain SELECT * FROM pyapi31_parallel((SELECT i FROM input));
+SELECT * FROM pyapi31_parallel((SELECT i FROM input));
+
+
+# while we're at it, parallel function with more than 3 inputs:
+CREATE FUNCTION pyapi31_many_inputs(a INTEGER, b INTEGER, c INTEGER, d 
INTEGER, e INTEGER) RETURNS INTEGER LANGUAGE PYTHON_MAP { return a * b * c * d 
* e };
+
+explain SELECT pyapi31_many_inputs(i, i, i, i, i) FROM input;
+SELECT pyapi31_many_inputs(i, i, i, i, i) FROM input;
+
+# but a function with 3 inputs does work 
+CREATE FUNCTION pyapi31_three_inputs(a INTEGER, b INTEGER, c INTEGER) RETURNS 
INTEGER LANGUAGE PYTHON_MAP { return a * b * c };
+
+explain SELECT pyapi31_three_inputs(i, i, i) FROM input;
+SELECT pyapi31_three_inputs(i, i, i) FROM input;
+
+ROLLBACK;
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -1570,6 +1570,7 @@ getVariable(Client cntxt, MalBlkPtr mb, 
        mvc *m = NULL;
        str msg;
        str varname = *getArgReference_str(stk, pci, 2);
+       atom *a;
        ValRecord *dst, *src;
 
        if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
@@ -1578,12 +1579,13 @@ getVariable(Client cntxt, MalBlkPtr mb, 
                return msg;
        if (mtype < 0 || mtype >= 255)
                throw(SQL, "sql.getVariable", "failed");
-       src = stack_get_var(m, varname);
-       if (!src) {
+       a = stack_get_var(m, varname);
+       if (!a) {
                char buf[BUFSIZ];
                snprintf(buf, BUFSIZ, "variable '%s' unknown", varname);
                throw(SQL, "sql.getVariable", "%s", buf);
        }
+       src = &a->data;
        dst = &stk->stk[getArg(pci, 0)];
        VALcopy(dst, src);
        return MAL_SUCCEED;
diff --git a/sql/backends/monet5/sql_optimizer.c 
b/sql/backends/monet5/sql_optimizer.c
--- a/sql/backends/monet5/sql_optimizer.c
+++ b/sql/backends/monet5/sql_optimizer.c
@@ -127,11 +127,11 @@ SQLgetSpace(mvc *m, MalBlkPtr mb, int pr
 str
 getSQLoptimizer(mvc *m)
 {
-       ValRecord *val = stack_get_var(m, "optimizer");
+       char *opt = stack_get_string(m, "optimizer");
        char *pipe = "default_pipe";
 
-       if (val && val->val.sval)
-               pipe = val->val.sval;
+       if (opt)
+               pipe = opt;
        return pipe;
 }
 
diff --git a/sql/backends/monet5/sql_upgrades.c 
b/sql/backends/monet5/sql_upgrades.c
--- a/sql/backends/monet5/sql_upgrades.c
+++ b/sql/backends/monet5/sql_upgrades.c
@@ -219,14 +219,10 @@ sql_update_oct2014(Client c, mvc *sql)
 {
        size_t bufsize = 8192*2, pos = 0;
        char *buf = GDKmalloc(bufsize), *err = NULL;
-       ValRecord *schvar = stack_get_var(sql, "current_schema");
-       char *schema = NULL;
+       char *schema = stack_get_string(sql, "current_schema");
        sql_table *t;
        sql_schema *s;
 
-       if (schvar)
-               schema = strdup(schvar->val.sval);
-
        pos += snprintf(buf + pos, bufsize - pos, "set schema \"sys\";\n");
 
        /* cleanup columns of dropped views */
@@ -488,10 +484,8 @@ sql_update_oct2014(Client c, mvc *sql)
                        "insert into sys.systemfunctions (select f.id from 
sys.functions f, sys.schemas s where f.name in ('bbp', 'db_users', 'env', 
'generate_series', 'storage', 'storagemodel', 'var') and f.type = %d and 
f.schema_id = s.id and s.name = 'sys');\n",
                        F_UNION);
 
-       if (schema) {
+       if (schema) 
                pos += snprintf(buf + pos, bufsize - pos, "set schema 
\"%s\";\n", schema);
-               free(schema);
-       }
 
        assert(pos < bufsize);
 
@@ -508,11 +502,7 @@ sql_update_oct2014_sp1(Client c, mvc *sq
 {
        size_t bufsize = 8192*2, pos = 0;
        char *buf = GDKmalloc(bufsize), *err = NULL;
-       ValRecord *schvar = stack_get_var(sql, "current_schema");
-       char *schema = NULL;
-
-       if (schvar)
-               schema = strdup(schvar->val.sval);
+       char *schema = stack_get_string(sql, "current_schema");
 
        pos += snprintf(buf + pos, bufsize - pos,
                        "set schema \"sys\";\n"
@@ -539,10 +529,8 @@ sql_update_oct2014_sp1(Client c, mvc *sq
                        "drop table upgradeOct2014_changes;\n"
                        "drop table upgradeOct2014;\n");
 
-       if (schema) {
+       if (schema) 
                pos += snprintf(buf + pos, bufsize - pos, "set schema 
\"%s\";\n", schema);
-               free(schema);
-       }
        assert(pos < bufsize);
 
        printf("Running database upgrade commands:\n%s\n", buf);
@@ -556,11 +544,7 @@ sql_update_oct2014_sp2(Client c, mvc *sq
 {
        size_t bufsize = 8192, pos = 0;
        char *buf = GDKmalloc(bufsize), *err = NULL;
-       ValRecord *schvar = stack_get_var(sql, "current_schema");
-       char *schema = NULL;
-
-       if (schvar)
-               schema = strdup(schvar->val.sval);
+       char *schema = stack_get_string(sql, "current_schema");
 
        pos += snprintf(buf + pos, bufsize - pos,
                        "set schema \"sys\";\n"
@@ -575,10 +559,8 @@ sql_update_oct2014_sp2(Client c, mvc *sq
                        "from sys.storagemodel() group by 
\"schema\",\"table\";\n"
                        "update _tables set system = true where name = 
'tablestoragemodel' and schema_id = (select id from schemas where name = 
'sys');\n");
 
-       if (schema) {
+       if (schema) 
                pos += snprintf(buf + pos, bufsize - pos, "set schema 
\"%s\";\n", schema);
-               free(schema);
-       }
        assert(pos < bufsize);
 
        {
@@ -603,11 +585,7 @@ sql_update_oct2014_sp3(Client c, mvc *sq
 {
        size_t bufsize = 8192, pos = 0;
        char *buf = GDKmalloc(bufsize), *err = NULL;
-       ValRecord *schvar = stack_get_var(sql, "current_schema");
-       char *schema = NULL;
-
-       if (schvar)
-               schema = strdup(schvar->val.sval);
+       char *schema = stack_get_string(sql, "current_schema");
 
        pos += snprintf(buf + pos, bufsize - pos,
                        "set schema \"sys\";\n"
@@ -617,10 +595,8 @@ sql_update_oct2014_sp3(Client c, mvc *sq
                        "CREATE FUNCTION \"right_shift_assign\"(i1 inet, i2 
inet) RETURNS boolean EXTERNAL NAME inet.\">>=\";\n"
                        "insert into sys.systemfunctions (select id from 
sys.functions where name in ('left_shift', 'right_shift', 'left_shift_assign', 
'right_shift_assign') and schema_id = (select id from sys.schemas where name = 
'sys') and id not in (select function_id from sys.systemfunctions));\n");
 
-       if (schema) {
+       if (schema) 
                pos += snprintf(buf + pos, bufsize - pos, "set schema 
\"%s\";\n", schema);
-               free(schema);
-       }
        assert(pos < bufsize);
 
        printf("Running database upgrade commands:\n%s\n", buf);
@@ -635,11 +611,7 @@ sql_update_hugeint(Client c, mvc *sql)
 {
        size_t bufsize = 8192, pos = 0;
        char *buf = GDKmalloc(bufsize), *err = NULL;
-       ValRecord *schvar = stack_get_var(sql, "current_schema");
-       char *schema = NULL;
-
-       if (schvar)
-               schema = strdup(schvar->val.sval);
+       char *schema = stack_get_string(sql, "current_schema");
 
        pos += snprintf(buf + pos, bufsize - pos, "set schema \"sys\";\n");
 
@@ -720,10 +692,8 @@ sql_update_hugeint(Client c, mvc *sql)
                }
        }
 
-       if (schema) {
+       if (schema) 
                pos += snprintf(buf + pos, bufsize - pos, "set schema 
\"%s\";\n", schema);
-               free(schema);
-       }
        assert(pos < bufsize);
 
        printf("Running database upgrade commands:\n%s\n", buf);
@@ -738,11 +708,8 @@ sql_update_jul2015(Client c, mvc *sql)
 {
        size_t bufsize = 15360, pos = 0;
        char *buf = GDKmalloc(bufsize), *err = NULL;
-       ValRecord *schvar = stack_get_var(sql, "current_schema");
-       char *schema = NULL;
+       char *schema = stack_get_string(sql, "current_schema");
 
-       if (schvar)
-               schema = strdup(schvar->val.sval);
        pos += snprintf(buf + pos, bufsize - pos, "set schema \"sys\";\n");
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to