Changeset: fd94da72da3b for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fd94da72da3b
Modified Files:
        clients/Tests/MAL-signatures.stable.out
        clients/Tests/MAL-signatures.stable.out.int128
        gdk/gdk_value.c
        monetdb5/extras/rapi/rapi.c
        monetdb5/mal/mal_interpreter.c
        monetdb5/modules/atoms/json.c
        monetdb5/modules/mal/Tests/inspect00.stable.out
        monetdb5/modules/mal/batcalc.c
        monetdb5/modules/mal/mdb.mal
Branch: resultset
Log Message:

Merge with default branch.


diffs (truncated from 360 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
@@ -39090,7 +39090,7 @@ pattern mdb.getDefinition():bat[:oid,:st
 address MDBgetDefinition;
 comment Returns a string representation of the current function        with 
typing information attached
 
-pattern mdb.getStackTrace() (X_1:bat[:oid,:str],X_2:bat[:oid,:str]) 
+pattern mdb.getStackTrace() (X_1:bat[:oid,:int],X_2:bat[:oid,:str]) 
 address MDBStkTrace;
 pattern mdb.getStackFrame() (X_1:bat[:oid,:str],X_2:bat[:oid,:str]) 
 address MDBgetStackFrame;
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
@@ -50021,7 +50021,7 @@ pattern mdb.getDefinition():bat[:oid,:st
 address MDBgetDefinition;
 comment Returns a string representation of the current function        with 
typing information attached
 
-pattern mdb.getStackTrace() (X_1:bat[:oid,:str],X_2:bat[:oid,:str]) 
+pattern mdb.getStackTrace() (X_1:bat[:oid,:int],X_2:bat[:oid,:str]) 
 address MDBStkTrace;
 pattern mdb.getStackFrame() (X_1:bat[:oid,:str],X_2:bat[:oid,:str]) 
 address MDBgetStackFrame;
diff --git a/gdk/gdk_value.c b/gdk/gdk_value.c
--- a/gdk/gdk_value.c
+++ b/gdk/gdk_value.c
@@ -175,7 +175,7 @@ VALinit(ValPtr d, int tpe, const void *s
                GDKerror("VALinit:unsupported init\n");
                d->vtype = TYPE_int;
        } else if (tpe >= TYPE_str && ATOMstorage(tpe) == TYPE_str) {
-               d->vtype = TYPE_str;
+               d->vtype = tpe;
                d->val.sval = GDKstrdup(s);
                d->len = strLen(s);
        } else {
diff --git a/monetdb5/extras/rapi/rapi.c b/monetdb5/extras/rapi/rapi.c
--- a/monetdb5/extras/rapi/rapi.c
+++ b/monetdb5/extras/rapi/rapi.c
@@ -645,7 +645,7 @@ str RAPIeval(Client cntxt, MalBlkPtr mb,
                                                                        i, 
rtypename(TYPEOF(ret_col)));
                                goto wrapup;
                        }
-                       SXP_TO_BAT(bte, LOGICAL_POINTER, *p==NA_LOGICAL);
+                       SXP_TO_BAT(bit, LOGICAL_POINTER, *p==NA_LOGICAL);
                        break;
                }
                case TYPE_dbl: {
diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c
--- a/monetdb5/mal/mal_interpreter.c
+++ b/monetdb5/mal/mal_interpreter.c
@@ -627,11 +627,52 @@ str runMALsequence(Client cntxt, MalBlkP
                                if (pci->fcn == NULL) {
                                        ret = createScriptException(mb, stkpc, 
MAL, NULL,
                                                "address of pattern %s.%s 
missing", pci->modname, pci->fcnname);
-                               } else
+                               } else {
                                        ret = (str)(*pci->fcn)(cntxt, mb, stk, 
pci);
+#ifndef NDEBUG
+                                       /* check that the types of actual 
results match
+                                        * expected results */
+                                       for (i = 0; i < pci->retc; i++) {
+                                               int a = getArg(pci, i);
+                                               int t = getArgType(mb, pci, i);
+
+                                               if (isaBatType(t)) {
+                                                       bat bid = 
stk->stk[a].val.bval;
+                                                       t = getColumnType(t);
+                                                       
assert(stk->stk[a].vtype == TYPE_bat);
+                                                       assert(bid == 0 ||
+                                                                  bid == 
bat_nil ||
+                                                                  t == 
TYPE_any ||
+                                                                  
ATOMtype(BBP_cache(bid)->ttype) == ATOMtype(t));
+                                               } else {
+                                                       assert(t == 
stk->stk[a].vtype);
+                                               }
+                                       }
+#endif
+                               }
                                break;
                        case CMDcall:
                                ret =malCommandCall(stk, pci);
+#ifndef NDEBUG
+                               /* check that the types of actual results match
+                                * expected results */
+                               for (i = 0; i < pci->retc; i++) {
+                                       int a = getArg(pci, i);
+                                       int t = getArgType(mb, pci, i);
+
+                                       if (isaBatType(t)) {
+                                               bat bid = stk->stk[a].val.bval;
+                                               t = getColumnType(t);
+                                               assert(stk->stk[a].vtype == 
TYPE_bat);
+                                               assert(bid == 0 ||
+                                                          bid == bat_nil ||
+                                                          t == TYPE_any ||
+                                                          
ATOMtype(BBP_cache(bid)->ttype) == ATOMtype(t));
+                                       } else {
+                                               assert(t == stk->stk[a].vtype);
+                                       }
+                               }
+#endif
                                break;
                        case FACcall:
                                /*
diff --git a/monetdb5/modules/atoms/json.c b/monetdb5/modules/atoms/json.c
--- a/monetdb5/modules/atoms/json.c
+++ b/monetdb5/modules/atoms/json.c
@@ -115,8 +115,15 @@ JSONtoString(str *s, int *len, json src)
        char *c, *dst;
 
        if (GDK_STRNIL(src)) {
-               *s = GDKstrdup("null");
-               return 0;
+               if (*s == NULL || *len < 4) {
+                       GDKfree(*s);
+                       *len = 4;
+                       *s = GDKmalloc(4);
+                       if (*s == NULL)
+                               return -1;
+               }
+               strncpy(*s, "nil", 4);
+               return 3;
        }
        /* count how much space we need for the output string */
        cnt = 3;                /* two times " plus \0 */
@@ -1287,7 +1294,7 @@ JSONvalueTable(bat *ret, json *js)
        JSON *jt;
 
        jt = JSONparse(*js, TRUE);      // already validated
-       bn = BATnew(TYPE_void, TYPE_str, 64, TRANSIENT);
+       bn = BATnew(TYPE_void, TYPE_json, 64, TRANSIENT);
        if (bn == NULL)
                throw(MAL, "json.values", MAL_MALLOC_FAIL);
        BATseqbase(bn, 0);
diff --git a/monetdb5/modules/mal/Tests/inspect00.stable.out 
b/monetdb5/modules/mal/Tests/inspect00.stable.out
--- a/monetdb5/modules/mal/Tests/inspect00.stable.out
+++ b/monetdb5/modules/mal/Tests/inspect00.stable.out
@@ -33,7 +33,7 @@ stack depth 2
 # view stk     stk                                                       # name
 # void int     str                                                       # type
 #--------------------------#
-[ 0@0, 0,      "    (h=nil:bat[:oid,:str],t=nil:bat[:oid,:str]) := 
mdb.getStackTrace(); at user.tst[3]"  ]
+[ 0@0, 0,      "    (h=nil:bat[:oid,:int],t=nil:bat[:oid,:str]) := 
mdb.getStackTrace(); at user.tst[3]"  ]
 [ 1@0,   1,      "    user.tst(); at user.main[2]"                       ]
 #-------------------------------------------------#
 # view stk     stk                               # name
diff --git a/monetdb5/modules/mal/batcalc.c b/monetdb5/modules/mal/batcalc.c
--- a/monetdb5/modules/mal/batcalc.c
+++ b/monetdb5/modules/mal/batcalc.c
@@ -303,7 +303,7 @@ calcmodtype(int tp1, int tp2)
 }
 
 static str
-CMDbatBINARY2(MalStkPtr stk, InstrPtr pci,
+CMDbatBINARY2(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci,
                          BAT *(*batfunc)(BAT *, BAT *, BAT *, int, int),
                          BAT *(batfunc1)(BAT *, const ValRecord *, BAT *, int, 
int),
                          BAT *(batfunc2)(const ValRecord *, BAT *, BAT *, int, 
int),
@@ -312,10 +312,13 @@ CMDbatBINARY2(MalStkPtr stk, InstrPtr pc
 {
        bat *bid;
        BAT *bn, *b, *s = NULL;
-       int tp1, tp2;
+       int tp1, tp2, tp3;
 
        tp1 = stk->stk[getArg(pci, 1)].vtype;
        tp2 = stk->stk[getArg(pci, 2)].vtype;
+       tp3 = getArgType(mb, pci, 0);
+       assert(isaBatType(tp3));
+       tp3 = getColumnType(tp3);
        if (pci->argc == 4) {
                bat *sid = getArgReference_bat(stk, pci, 3);
                if (*sid && (s = BATdescriptor(*sid)) == NULL)
@@ -344,12 +347,15 @@ CMDbatBINARY2(MalStkPtr stk, InstrPtr pc
                        assert(BAThdense(b2));
                }
                if (b2) {
-                       bn = (*batfunc)(b, b2, s, (*typefunc)(b->T->type, 
b2->T->type),
-                                                       abort_on_error);
+                       if (tp3 == TYPE_any)
+                               tp3 = (*typefunc)(b->ttype, b2->ttype);
+                       bn = (*batfunc)(b, b2, s, tp3, abort_on_error);
                        BBPunfix(b2->batCacheid);
                } else {
+                       if (tp3 == TYPE_any)
+                               tp3 = (*typefunc)(b->T->type, tp2);
                        bn = (*batfunc1)(b, &stk->stk[getArg(pci, 2)], s,
-                                                        
(*typefunc)(b->T->type, tp2), abort_on_error);
+                                                        tp3, abort_on_error);
                }
        } else {
                assert(tp1 != TYPE_bat && !isaBatType(tp1));
@@ -362,8 +368,9 @@ CMDbatBINARY2(MalStkPtr stk, InstrPtr pc
                        throw(MAL, malfunc, RUNTIME_OBJECT_MISSING);
                }
                assert(BAThdense(b));
-               bn = (*batfunc2)(&stk->stk[getArg(pci, 1)], b, s,
-                                                (*typefunc)(tp1, b->T->type), 
abort_on_error);
+               if (tp3 == TYPE_any)
+                       tp3 = (*typefunc)(tp1, b->T->type);
+               bn = (*batfunc2)(&stk->stk[getArg(pci, 1)], b, s, tp3, 
abort_on_error);
        }
        BBPunfix(b->batCacheid);
        if (bn == NULL) {
@@ -572,9 +579,8 @@ str
 CMDbatADD(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        (void) cntxt;
-       (void) mb;
 
-       return CMDbatBINARY2(stk, pci, BATcalcadd, BATcalcaddcst, BATcalccstadd,
+       return CMDbatBINARY2(mb, stk, pci, BATcalcadd, BATcalcaddcst, 
BATcalccstadd,
                                                 calctype, 0, 
"batcalc.add_noerror");
 }
 
@@ -584,9 +590,8 @@ str
 CMDbatADDsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        (void) cntxt;
-       (void) mb;
 
-       return CMDbatBINARY2(stk, pci, BATcalcadd, BATcalcaddcst, BATcalccstadd,
+       return CMDbatBINARY2(mb, stk, pci, BATcalcadd, BATcalcaddcst, 
BATcalccstadd,
                                                 calctype, 1, "batcalc.+");
 }
 
@@ -596,9 +601,8 @@ str
 CMDbatADDenlarge(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        (void) cntxt;
-       (void) mb;
 
-       return CMDbatBINARY2(stk, pci, BATcalcadd, BATcalcaddcst, BATcalccstadd,
+       return CMDbatBINARY2(mb, stk, pci, BATcalcadd, BATcalcaddcst, 
BATcalccstadd,
                                                 calctypeenlarge, 1, 
"batcalc.add_enlarge");
 }
 
@@ -608,9 +612,8 @@ str
 CMDbatSUB(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        (void) cntxt;
-       (void) mb;
 
-       return CMDbatBINARY2(stk, pci, BATcalcsub, BATcalcsubcst, BATcalccstsub,
+       return CMDbatBINARY2(mb, stk, pci, BATcalcsub, BATcalcsubcst, 
BATcalccstsub,
                                                 calctype, 0, 
"batcalc.sub_noerror");
 }
 
@@ -620,9 +623,8 @@ str
 CMDbatSUBsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        (void) cntxt;
-       (void) mb;
 
-       return CMDbatBINARY2(stk, pci, BATcalcsub, BATcalcsubcst, BATcalccstsub,
+       return CMDbatBINARY2(mb, stk, pci, BATcalcsub, BATcalcsubcst, 
BATcalccstsub,
                                                 calctype, 1, "batcalc.-");
 }
 
@@ -632,9 +634,8 @@ str
 CMDbatSUBenlarge(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        (void) cntxt;
-       (void) mb;
 
-       return CMDbatBINARY2(stk, pci, BATcalcsub, BATcalcsubcst, BATcalccstsub,
+       return CMDbatBINARY2(mb, stk, pci, BATcalcsub, BATcalcsubcst, 
BATcalccstsub,
                                                 calctypeenlarge, 1, 
"batcalc.sub_enlarge");
 }
 
@@ -644,9 +645,8 @@ str
 CMDbatMUL(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        (void) cntxt;
-       (void) mb;
 
-       return CMDbatBINARY2(stk, pci, BATcalcmul, BATcalcmulcst, BATcalccstmul,
+       return CMDbatBINARY2(mb, stk, pci, BATcalcmul, BATcalcmulcst, 
BATcalccstmul,
                                                 calctype, 0, 
"batcalc.mul_noerror");
 }
 
@@ -656,9 +656,8 @@ str
 CMDbatMULsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        (void) cntxt;
-       (void) mb;
 
-       return CMDbatBINARY2(stk, pci, BATcalcmul, BATcalcmulcst, BATcalccstmul,
+       return CMDbatBINARY2(mb, stk, pci, BATcalcmul, BATcalcmulcst, 
BATcalccstmul,
                                                 calctype, 1, "batcalc.*");
 }
 
@@ -668,9 +667,8 @@ str
 CMDbatMULenlarge(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        (void) cntxt;
-       (void) mb;
 
-       return CMDbatBINARY2(stk, pci, BATcalcmul, BATcalcmulcst, BATcalccstmul,
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to