Changeset: c579cab524f3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/c579cab524f3
Modified Files:
        cmake/monetdb-toolchain.cmake
        monetdb5/extras/mal_optimizer_template/opt_sql_append.c
        monetdb5/mal/mal_builder.c
        monetdb5/mal/mal_builder.h
        monetdb5/mal/mal_instruction.c
        monetdb5/mal/mal_instruction.h
        monetdb5/mal/mal_module.c
        monetdb5/mal/mal_namespace.c
        monetdb5/mal/mal_parser.c
        monetdb5/mal/mal_prelude.c
        monetdb5/mal/mal_resolve.c
        monetdb5/modules/mal/manifold.c
        monetdb5/modules/mal/orderidx.c
        monetdb5/optimizer/opt_commonTerms.c
        monetdb5/optimizer/opt_dataflow.c
        monetdb5/optimizer/opt_dict.c
        monetdb5/optimizer/opt_emptybind.c
        monetdb5/optimizer/opt_evaluate.c
        monetdb5/optimizer/opt_generator.c
        monetdb5/optimizer/opt_matpack.c
        monetdb5/optimizer/opt_mergetable.c
        monetdb5/optimizer/opt_mitosis.c
        monetdb5/optimizer/opt_multiplex.c
        monetdb5/optimizer/opt_pushselect.c
        monetdb5/optimizer/opt_wrapper.c
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql_execute.c
        sql/backends/monet5/sql_gencode.c
        sql/backends/monet5/sql_optimizer.c
        sql/backends/monet5/sql_scenario.c
        sql/backends/monet5/sql_statement.c
        sql/common/exception_buffer.c
        sql/common/sql_hash.c
        sql/storage/objectset.c
        sql/storage/store.c
Branch: Jun2023
Log Message:

Do a log (and I mean a *lot*) of error checking.
We also now use the exception buffer (i.e. longjmp) more in case of
errors during parsing and optimization.


diffs (truncated from 7614 to 300 lines):

diff --git a/cmake/monetdb-toolchain.cmake b/cmake/monetdb-toolchain.cmake
--- a/cmake/monetdb-toolchain.cmake
+++ b/cmake/monetdb-toolchain.cmake
@@ -98,7 +98,6 @@ function(monetdb_default_compiler_option
       add_option_if_available("-fstack-protector-all")
       add_option_if_available("-Wpacked-bitfield-compat")
       add_option_if_available("-Wsync-nand")
-      add_option_if_available("-Wjump-misses-init")
       add_option_if_available("-Wmissing-include-dirs")
       add_option_if_available("-Wlogical-op")
       add_option_if_available("-Wduplicated-cond")
diff --git a/monetdb5/extras/mal_optimizer_template/opt_sql_append.c 
b/monetdb5/extras/mal_optimizer_template/opt_sql_append.c
--- a/monetdb5/extras/mal_optimizer_template/opt_sql_append.c
+++ b/monetdb5/extras/mal_optimizer_template/opt_sql_append.c
@@ -201,6 +201,12 @@ OPTsql_appendImplementation(Client cntxt
                                q2 = pushArgument(mb, q2, getArg(p, 5));
                                q2 = pushLng(mb, q2, 0);
                                q2 = pushArgument(mb, q2, getArg(q1, 0));
+                               if (mb->errors) {
+                                       freeInstruction(q1);
+                                       freeInstruction(q2);
+                                       i--;
+                                       break;
+                               }
                                pushInstruction(mb, q1);
                                pushInstruction(mb, q2);
 
diff --git a/monetdb5/mal/mal_builder.c b/monetdb5/mal/mal_builder.c
--- a/monetdb5/mal/mal_builder.c
+++ b/monetdb5/mal/mal_builder.c
@@ -219,6 +219,8 @@ newExitStmt(MalBlkPtr mb, const char *nm
 InstrPtr
 pushEndInstruction(MalBlkPtr mb)
 {
+       if (mb->errors)
+               return NULL;
        InstrPtr q = newInstruction(mb, NULL, NULL);
 
        if (q == NULL)
@@ -229,6 +231,8 @@ pushEndInstruction(MalBlkPtr mb)
        q->retc = 0;
        q->argv[0] = 0;
        pushInstruction(mb, q);
+       if (mb->errors)
+               return NULL;
        return q;
 }
 
@@ -253,8 +257,8 @@ pushInt(MalBlkPtr mb, InstrPtr q, int va
        int _t;
        ValRecord cst;
 
-       if (q == NULL)
-               return NULL;
+       if (q == NULL || mb->errors)
+               return q;
        cst.vtype = TYPE_int;
        cst.val.ival = val;
        cst.len = 0;
@@ -285,8 +289,8 @@ pushBte(MalBlkPtr mb, InstrPtr q, bte va
        int _t;
        ValRecord cst;
 
-       if (q == NULL)
-               return NULL;
+       if (q == NULL || mb->errors)
+               return q;
        cst.vtype = TYPE_bte;
        cst.val.btval = val;
        cst.len = 0;
@@ -317,8 +321,8 @@ pushOid(MalBlkPtr mb, InstrPtr q, oid va
        int _t;
        ValRecord cst;
 
-       if (q == NULL)
-               return NULL;
+       if (q == NULL || mb->errors)
+               return q;
        cst.vtype = TYPE_oid;
        cst.val.oval = val;
        cst.len = 0;
@@ -334,8 +338,8 @@ pushVoid(MalBlkPtr mb, InstrPtr q)
        int _t;
        ValRecord cst;
 
-       if (q == NULL)
-               return NULL;
+       if (q == NULL || mb->errors)
+               return q;
        cst.vtype = TYPE_void;
        cst.val.oval = oid_nil;
        cst.len = 0;
@@ -366,8 +370,8 @@ pushLng(MalBlkPtr mb, InstrPtr q, lng va
        int _t;
        ValRecord cst;
 
-       if (q == NULL)
-               return NULL;
+       if (q == NULL || mb->errors)
+               return q;
        cst.vtype = TYPE_lng;
        cst.val.lval = val;
        cst.len = 0;
@@ -398,8 +402,8 @@ pushSht(MalBlkPtr mb, InstrPtr q, sht va
        int _t;
        ValRecord cst;
 
-       if (q == NULL)
-               return NULL;
+       if (q == NULL || mb->errors)
+               return q;
        cst.vtype = TYPE_sht;
        cst.val.shval = val;
        cst.len = 0;
@@ -431,8 +435,8 @@ pushHge(MalBlkPtr mb, InstrPtr q, hge va
        int _t;
        ValRecord cst;
 
-       if (q == NULL)
-               return NULL;
+       if (q == NULL || mb->errors)
+               return q;
        cst.vtype = TYPE_hge;
        cst.val.hval = val;
        cst.len = 0;
@@ -464,8 +468,8 @@ pushDbl(MalBlkPtr mb, InstrPtr q, dbl va
        int _t;
        ValRecord cst;
 
-       if (q == NULL)
-               return NULL;
+       if (q == NULL || mb->errors)
+               return q;
        cst.vtype = TYPE_dbl;
        cst.val.dval = val;
        cst.len = 0;
@@ -496,8 +500,8 @@ pushFlt(MalBlkPtr mb, InstrPtr q, flt va
        int _t;
        ValRecord cst;
 
-       if (q == NULL)
-               return NULL;
+       if (q == NULL || mb->errors)
+               return q;
        cst.vtype = TYPE_flt;
        cst.val.fval = val;
        cst.len = 0;
@@ -530,8 +534,8 @@ pushStr(MalBlkPtr mb, InstrPtr q, const 
        int _t;
        ValRecord cst;
 
-       if (q == NULL)
-               return NULL;
+       if (q == NULL || mb->errors)
+               return q;
        if (VALinit(&cst, TYPE_str, Val) == NULL) {
                str msg = createException(MAL, "pushStr",
                                                                  "Can not 
allocate string variable");
@@ -566,8 +570,8 @@ pushBit(MalBlkPtr mb, InstrPtr q, bit va
        int _t;
        ValRecord cst;
 
-       if (q == NULL)
-               return NULL;
+       if (q == NULL || mb->errors)
+               return q;
        cst.vtype = TYPE_bit;
        cst.val.btval = val;
        cst.len = 0;
@@ -583,12 +587,12 @@ pushNil(MalBlkPtr mb, InstrPtr q, int tp
        int _t;
        ValRecord cst;
 
-       if (q == NULL)
-               return NULL;
+       if (q == NULL || mb->errors)
+               return q;
        cst.len = 0;
        if (!isaBatType(tpe) && tpe != TYPE_bat) {
                assert(tpe < MAXATOMS); /* in particular, tpe!=TYPE_any */
-               if (!tpe) {
+               if (tpe == TYPE_void) {
                        cst.vtype = TYPE_void;
                        cst.val.oval = oid_nil;
                } else {
@@ -619,29 +623,28 @@ pushNilType(MalBlkPtr mb, InstrPtr q, ch
        ValRecord cst;
        str msg;
 
-       if (q == NULL)
-               return NULL;
+       if (q == NULL || mb->errors)
+               return q;
        idx = getAtomIndex(tpe, strlen(tpe), TYPE_any);
        if (idx < 0 || idx >= GDKatomcnt || idx >= MAXATOMS) {
-               str msg = createException(MAL, "pushNilType",
-                                                                 "Can not 
allocate type variable");
-               addMalException(mb, msg);
-               freeException(msg);
+               msg = createException(MAL, "pushNilType",
+                                                         "Can not allocate 
type variable");
        } else {
                cst.vtype = TYPE_void;
                cst.val.oval = oid_nil;
                cst.len = 0;
                msg = convertConstant(idx, &cst);
-               if (msg != MAL_SUCCEED) {
-                       addMalException(mb, msg);
-                       freeException(msg);
-               } else {
+               if (msg == MAL_SUCCEED) {
                        _t = defConstant(mb, idx, &cst);
                        if (_t >= 0) {
                                return pushArgument(mb, q, _t);
                        }
                }
        }
+       if (msg) {
+               addMalException(mb, msg);
+               freeException(msg);
+       }
        return q;
 }
 
@@ -652,8 +655,8 @@ pushType(MalBlkPtr mb, InstrPtr q, int t
        ValRecord cst;
        str msg;
 
-       if (q == NULL)
-               return NULL;
+       if (q == NULL || mb->errors)
+               return q;
        cst.vtype = TYPE_void;
        cst.val.oval = oid_nil;
        cst.len = 0;
@@ -677,8 +680,8 @@ pushZero(MalBlkPtr mb, InstrPtr q, int t
        ValRecord cst;
        str msg;
 
-       if (q == NULL)
-               return NULL;
+       if (q == NULL || mb->errors)
+               return q;
        cst.vtype = TYPE_int;
        cst.val.ival = 0;
        cst.len = 0;
@@ -697,8 +700,8 @@ pushZero(MalBlkPtr mb, InstrPtr q, int t
 InstrPtr
 pushEmptyBAT(MalBlkPtr mb, InstrPtr q, int tpe)
 {
-       if (q == NULL)
-               return NULL;
+       if (q == NULL || mb->errors)
+               return q;
        setModuleId(q, getName("bat"));
        setFunctionId(q, getName("new"));
 
@@ -714,8 +717,8 @@ pushValue(MalBlkPtr mb, InstrPtr q, ValP
        int _t;
        ValRecord cst;
 
-       if (q == NULL)
-               return NULL;
+       if (q == NULL || mb->errors)
+               return q;
        if (VALcopy(&cst, vr) == NULL) {
                str msg = createException(MAL, "pushValue", "Can not allocate 
variable");
                addMalException(mb, msg);
diff --git a/monetdb5/mal/mal_builder.h b/monetdb5/mal/mal_builder.h
--- a/monetdb5/mal/mal_builder.h
+++ b/monetdb5/mal/mal_builder.h
@@ -27,8 +27,13 @@ mal_export InstrPtr newReturnStmt(MalBlk
 mal_export InstrPtr newFcnCall(MalBlkPtr mb, const char *mod, const char *fcn);
 mal_export InstrPtr newFcnCallArgs(MalBlkPtr mb, const char *mod,
                                                                   const char 
*fcn, int args);
+mal_export InstrPtr pushEndInstruction(MalBlkPtr mb);
+
+/* all the below push* functions (and also pushArgument) return NULL
+ * _only_ if q is NULL, else they return q or a valid new instruction
+ * (and the old q was then freed); in case of error, mb->errors is set
+ * to a non-NULL value */
 mal_export InstrPtr pushSht(MalBlkPtr mb, InstrPtr q, sht val);
-mal_export InstrPtr pushEndInstruction(MalBlkPtr mb);
 mal_export InstrPtr pushInt(MalBlkPtr mb, InstrPtr q, int val);
 mal_export InstrPtr pushLng(MalBlkPtr mb, InstrPtr q, lng val);
 #ifdef HAVE_HGE
diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c
--- a/monetdb5/mal/mal_instruction.c
+++ b/monetdb5/mal/mal_instruction.c
@@ -305,62 +305,37 @@ copyMalBlk(MalBlkPtr old)
        }
 
        mb->vsize = old->vsize;
-       mb->vtop = old->vtop;
        mb->vid = old->vid;
 
        /* copy all variable records */
        for (i = 0; i < old->vtop; i++) {
                mb->var[i] = old->var[i];
-               if (!VALcopy(&(mb->var[i].value), &(old->var[i].value))) {
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to