Changeset: 72d6976ab495 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=72d6976ab495
Modified Files:
        clients/Tests/MAL-signatures.stable.out
        clients/Tests/MAL-signatures.stable.out.int128
        clients/Tests/exports.stable.out
        monetdb5/mal/mal_builder.c
        monetdb5/mal/mal_builder.h
        monetdb5/mal/mal_instruction.c
        monetdb5/mal/mal_instruction.h
        sql/backends/monet5/sql_statement.c
        sql/test/BugTracker-2014/Tests/manifold.Bug-3556.stable.out
        sql/test/BugTracker-2017/Tests/side-effect.Bug-6397.stable.out
Branch: default
Log Message:

Accept output


diffs (truncated from 372 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
@@ -660,7 +660,7 @@ stdout of test 'MAL-signatures` in direc
 [ "bat",       "orderidx",     "pattern bat.orderidx(bv:bat[:any_1]):void ",   
"OIDXcreate;",  "Introduces the OID index arrangement of ordered values"        
]
 [ "bat",       "orderidx",     "pattern bat.orderidx(bv:bat[:any_1], 
pieces:int):void ",       "OIDXcreate;",  "Introduces the OID index arrangement 
of ordered values"        ]
 [ "bat",       "orderidx",     "pattern bat.orderidx(bv:bat[:any_1], 
l:bat[:any_1]...):void ", "OIDXmerge;",   "Consolidates the OID index 
arrangement"        ]
-[ "bat",       "pack", "pattern bat.pack(X_0:any_2...):bat[:any_2] ",  
"MATpackValues;",       "Materialize the MAT (of values) into a BAT"    ]
+[ "bat",       "pack", "pattern bat.pack(X_0:any_2...):bat[:any_2] ",  
"MATpackValues;",       "Materialize the values into a BAT. Avoiding a clash 
with mat.pack() in mergetable"     ]
 [ "bat",       "partition",    "pattern bat.partition(b:bat[:any_1], 
pieces:int, n:int):bat[:any_1] ", "CMDBATpartition2;",    "Create the n-th 
slice over the BAT broken into several pieces."        ]
 [ "bat",       "partition",    "pattern 
bat.partition(b:bat[:any_1]):bat[:any_1]... ", "CMDBATpartition;",     "Create 
a serie of slices over the BAT argument. The BUNs are distributed evenly."      
]
 [ "bat",       "replace",      "command bat.replace(b:bat[:any_1], 
rid:bat[:oid], val:bat[:any_1]):bat[:any_1] ",      "BKCbat_inplace;",      
"Perform replace for all BUNs of the second BAT into the first."        ]
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
@@ -766,7 +766,7 @@ stdout of test 'MAL-signatures` in direc
 [ "bat",       "orderidx",     "pattern bat.orderidx(bv:bat[:any_1]):void ",   
"OIDXcreate;",  "Introduces the OID index arrangement of ordered values"        
]
 [ "bat",       "orderidx",     "pattern bat.orderidx(bv:bat[:any_1], 
pieces:int):void ",       "OIDXcreate;",  "Introduces the OID index arrangement 
of ordered values"        ]
 [ "bat",       "orderidx",     "pattern bat.orderidx(bv:bat[:any_1], 
l:bat[:any_1]...):void ", "OIDXmerge;",   "Consolidates the OID index 
arrangement"        ]
-[ "bat",       "pack", "pattern bat.pack(X_0:any_2...):bat[:any_2] ",  
"MATpackValues;",       "Materialize the MAT (of values) into a BAT"    ]
+[ "bat",       "pack", "pattern bat.pack(X_0:any_2...):bat[:any_2] ",  
"MATpackValues;",       "Materialize the values into a BAT. Avoiding a clash 
with mat.pack() in mergetable"     ]
 [ "bat",       "partition",    "pattern bat.partition(b:bat[:any_1], 
pieces:int, n:int):bat[:any_1] ", "CMDBATpartition2;",    "Create the n-th 
slice over the BAT broken into several pieces."        ]
 [ "bat",       "partition",    "pattern 
bat.partition(b:bat[:any_1]):bat[:any_1]... ", "CMDBATpartition;",     "Create 
a serie of slices over the BAT argument. The BUNs are distributed evenly."      
]
 [ "bat",       "replace",      "command bat.replace(b:bat[:any_1], 
rid:bat[:oid], val:bat[:any_1]):bat[:any_1] ",      "BKCbat_inplace;",      
"Perform replace for all BUNs of the second BAT into the first."        ]
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -2418,6 +2418,7 @@ InstrPtr newFcnCall(MalBlkPtr mb, char *
 Symbol newFunction(str mod, str nme, int kind);
 MalStkPtr newGlobalStack(int size);
 InstrPtr newInstruction(MalBlkPtr mb, str modnme, str fcnnme);
+InstrPtr newInstructionArgs(MalBlkPtr mb, str modnme, str fcnnme, int args);
 MalBlkPtr newMalBlk(int elements);
 int newMalBlkStmt(MalBlkPtr mb, int elements);
 Plant newPlant(MalBlkPtr mb);
@@ -2425,6 +2426,7 @@ InstrPtr newRaiseStmt(MalBlkPtr mb, str 
 str newRef;
 InstrPtr newReturnStmt(MalBlkPtr mb);
 InstrPtr newStmt(MalBlkPtr mb, const char *module, const char *name);
+InstrPtr newStmtArgs(MalBlkPtr mb, const char *module, const char *name, int 
args);
 Symbol newSymbol(str nme, int kind);
 int newTmpVariable(MalBlkPtr mb, malType type);
 int newTypeVariable(MalBlkPtr mb, malType type);
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
@@ -57,6 +57,27 @@ newStmt(MalBlkPtr mb, const char *module
 }
 
 InstrPtr
+newStmtArgs(MalBlkPtr mb, const char *module, const char *name, int args)
+{
+       InstrPtr q;
+       str mName = putName(module), nName = putName(name);
+
+       if(mName == NULL || nName == NULL) {
+               return NULL;
+       }
+       q = newInstructionArgs(mb, mName, nName, args);
+       if ( q == NULL)
+               return NULL;
+       setDestVar(q, newTmpVariable(mb, TYPE_any));
+       if (getDestVar(q) < 0 || mb->errors != MAL_SUCCEED) {
+               freeInstruction(q);
+               return NULL;
+       }
+       pushInstruction(mb, q);
+       return q;
+}
+
+InstrPtr
 newReturnStmt(MalBlkPtr mb)
 {
        InstrPtr q = newInstruction(mb, NULL, NULL);
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
@@ -13,6 +13,7 @@
 #include "mal_instruction.h"
 
 mal_export InstrPtr newStmt(MalBlkPtr mb, const char *module, const char 
*name);
+mal_export InstrPtr newStmtArgs(MalBlkPtr mb, const char *module, const char 
*name, int args);
 mal_export InstrPtr newAssignment(MalBlkPtr mb);
 mal_export InstrPtr newComment(MalBlkPtr mb, const char *val);
 mal_export InstrPtr newCatchStmt(MalBlkPtr mb, str nme);
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
@@ -444,6 +444,36 @@ prepareMalBlk(MalBlkPtr mb, str s)
  * Allocation of an instruction should always succeed.
  */
 InstrPtr
+newInstructionArgs(MalBlkPtr mb, str modnme, str fcnnme, int args)
+{
+       InstrPtr p = NULL;
+
+       p = GDKzalloc(args * sizeof(p->argv[0]) + offsetof(InstrRecord, argv));
+       if (p == NULL) {
+               /* We are facing an hard problem.
+                * The hack is to re-use an already allocated instruction.
+                * The marking of the block as containing errors should protect 
further actions.
+                */
+               if( mb){
+                       mb->errors = createMalException(mb,0, TYPE, 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
+               }
+               return NULL;
+       }
+       p->maxarg = args;
+       p->typechk = TYPE_UNKNOWN;
+       setModuleId(p, modnme);
+       setFunctionId(p, fcnnme);
+       p->argc = 1;
+       p->retc = 1;
+       p->mitosis = -1;
+       p->argv[0] = -1;                        /* watch out for direct use in 
variable table */
+       /* Flow of control instructions are always marked as an assignment
+        * with modifier */
+       p->token = ASSIGNsymbol;
+       return p;
+
+}
+InstrPtr
 newInstruction(MalBlkPtr mb, str modnme, str fcnnme)
 {
        InstrPtr p = NULL;
diff --git a/monetdb5/mal/mal_instruction.h b/monetdb5/mal/mal_instruction.h
--- a/monetdb5/mal/mal_instruction.h
+++ b/monetdb5/mal/mal_instruction.h
@@ -129,6 +129,7 @@
 mal_export void addMalException(MalBlkPtr mb, str msg);
 mal_export void mal_instruction_reset(void);
 mal_export InstrPtr newInstruction(MalBlkPtr mb, str modnme, str fcnnme);
+mal_export InstrPtr newInstructionArgs(MalBlkPtr mb, str modnme, str fcnnme, 
int args);
 mal_export InstrPtr copyInstruction(InstrPtr p);
 mal_export void oldmoveInstruction(InstrPtr dst, InstrPtr src);
 mal_export void clrInstruction(InstrPtr p);
diff --git a/sql/backends/monet5/sql_statement.c 
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -2192,8 +2192,8 @@ stmt_rs_column(backend *be, stmt *rs, in
  */
 #define NEWRESULTSET
 
-#define meta(P, Id, Tpe) \
-P = newStmt(mb, batRef, packRef);\
+#define meta(P, Id, Tpe, Args) \
+P = newStmtArgs(mb, batRef, packRef, Args);\
 Id = getArg(P,0);\
 setVarType(mb, Id, newBatType(Tpe));\
 setVarFixed(mb, Id);\
@@ -2209,11 +2209,16 @@ dump_export_header(mvc *sql, MalBlkPtr m
        node *n;
        bool error = false;
        int ret = -1;
+       int args;
+
        // gather the meta information
        int tblId, nmeId, tpeId, lenId, scaleId;
        InstrPtr list;
        InstrPtr tblPtr, nmePtr, tpePtr, lenPtr, scalePtr;
 
+       args = 4;
+       for (n = l->h; n; n = n->next)  args ++;
+
        list = newInstruction(mb, sqlRef, export_tableRef);
        getArg(list,0) = newTmpVariable(mb,TYPE_int);
        if( file >= 0){
@@ -2225,11 +2230,11 @@ dump_export_header(mvc *sql, MalBlkPtr m
                list = pushStr(mb, list, ns);
                list = pushInt(mb, list, onclient);
        }
-       meta(tblPtr, tblId, TYPE_str);
-       meta(nmePtr, nmeId, TYPE_str);
-       meta(tpePtr, tpeId, TYPE_str);
-       meta(lenPtr, lenId, TYPE_int);
-       meta(scalePtr, scaleId, TYPE_int);
+       meta(tblPtr, tblId, TYPE_str, args);
+       meta(nmePtr, nmeId, TYPE_str, args);
+       meta(tpePtr, tpeId, TYPE_str, args);
+       meta(lenPtr, lenId, TYPE_int, args);
+       meta(scalePtr, scaleId, TYPE_int, args);
        if(tblPtr == NULL || nmePtr == NULL || tpePtr == NULL || lenPtr == NULL 
|| scalePtr == NULL)
                return -1;
 
@@ -2479,19 +2484,23 @@ dump_header(mvc *sql, MalBlkPtr mb, stmt
        bool error = false;
        // gather the meta information
        int tblId, nmeId, tpeId, lenId, scaleId;
+       int args;
        InstrPtr list;
        InstrPtr tblPtr, nmePtr, tpePtr, lenPtr, scalePtr;
 
+       args = 4;
+       for (n = l->h; n; n = n->next) args++;
+
        list = newInstruction(mb,sqlRef, resultSetRef);
        if(!list) {
                return NULL;
        }
        getArg(list,0) = newTmpVariable(mb,TYPE_int);
-       meta(tblPtr, tblId, TYPE_str);
-       meta(nmePtr, nmeId, TYPE_str);
-       meta(tpePtr, tpeId, TYPE_str);
-       meta(lenPtr, lenId, TYPE_int);
-       meta(scalePtr, scaleId, TYPE_int);
+       meta(tblPtr, tblId, TYPE_str, args);
+       meta(nmePtr, nmeId, TYPE_str, args);
+       meta(tpePtr, tpeId, TYPE_str, args);
+       meta(lenPtr, lenId, TYPE_int, args);
+       meta(scalePtr, scaleId, TYPE_int, args);
        if(tblPtr == NULL || nmePtr == NULL || tpePtr == NULL || lenPtr == NULL 
|| scalePtr == NULL)
                return NULL;
 
diff --git a/sql/test/BugTracker-2014/Tests/manifold.Bug-3556.stable.out 
b/sql/test/BugTracker-2014/Tests/manifold.Bug-3556.stable.out
--- a/sql/test/BugTracker-2014/Tests/manifold.Bug-3556.stable.out
+++ b/sql/test/BugTracker-2014/Tests/manifold.Bug-3556.stable.out
@@ -62,12 +62,12 @@ stdout of test 'manifold.Bug-3556` in di
 % clob # type
 % 206 # length
 function user.s4_0():void;
-    X_3:void := querylog.define("explain select replace(a1,a2,a3), id\nfrom 
(\n select name as a1, \\'a\\' as a2, \\'A\\' as a3, id as id \n from 
sys.functions\n) as x;":str, "sequential_pipe":str, 34:int);
-    X_33:bat[:str] := bat.new(nil:str);
-    X_39:bat[:int] := bat.new(nil:int);
-    X_37:bat[:int] := bat.new(nil:int);
-    X_36:bat[:str] := bat.new(nil:str);
-    X_35:bat[:str] := bat.new(nil:str);
+    X_3:void := querylog.define("explain select replace(a1,a2,a3), id\nfrom 
(\n select name as a1, \\'a\\' as a2, \\'A\\' as a3, id as id \n from 
sys.functions\n) as x;":str, "sequential_pipe":str, 24:int);
+    X_33:bat[:str] := bat.pack("sys.L5":str, "sys.x":str);
+    X_34:bat[:str] := bat.pack("L5":str, "id":str);
+    X_35:bat[:str] := bat.pack("varchar":str, "int":str);
+    X_36:bat[:int] := bat.pack(0:int, 32:int);
+    X_37:bat[:int] := bat.pack(0:int, 0:int);
     X_6:int := sql.mvc();
     C_7:bat[:oid] := sql.tid(X_6:int, "sys":str, "functions":str);
     X_20:bat[:str] := sql.bind(X_6:int, "sys":str, "functions":str, 
"name":str, 0:int);
@@ -81,17 +81,7 @@ function user.s4_0():void;
     X_13:bat[:int] := sql.bind(X_6:int, "sys":str, "functions":str, "id":str, 
1:int);
     X_18:bat[:int] := sql.delta(X_10:bat[:int], X_15:bat[:oid], 
X_16:bat[:int], X_13:bat[:int]);
     X_19:bat[:int] := algebra.projection(C_7:bat[:oid], X_18:bat[:int]);
-    X_40:bat[:str] := bat.append(X_33:bat[:str], "sys.L5":str);
-    X_42:bat[:str] := bat.append(X_35:bat[:str], "L5":str);
-    X_44:bat[:str] := bat.append(X_36:bat[:str], "varchar":str);
-    X_46:bat[:int] := bat.append(X_37:bat[:int], 0:int);
-    X_48:bat[:int] := bat.append(X_39:bat[:int], 0:int);
-    X_49:bat[:str] := bat.append(X_40:bat[:str], "sys.x":str);
-    X_51:bat[:str] := bat.append(X_42:bat[:str], "id":str);
-    X_53:bat[:str] := bat.append(X_44:bat[:str], "int":str);
-    X_55:bat[:int] := bat.append(X_46:bat[:int], 32:int);
-    X_57:bat[:int] := bat.append(X_48:bat[:int], 0:int);
-    sql.resultSet(X_49:bat[:str], X_51:bat[:str], X_53:bat[:str], 
X_55:bat[:int], X_57:bat[:int], X_29:bat[:str], X_19:bat[:int]);
+    sql.resultSet(X_33:bat[:str], X_34:bat[:str], X_35:bat[:str], 
X_36:bat[:int], X_37:bat[:int], X_29:bat[:str], X_19:bat[:int]);
 end user.s4_0;
 #inline               actions= 0 time=2 usec 
 #remap                actions= 0 time=3 usec 
@@ -128,12 +118,12 @@ end user.s4_0;
 % clob # type
 % 210 # length
 function user.s6_0():void;
-    X_4:void := querylog.define("explain select replace(a1,a2,a3), id\nfrom 
(\n select name as a1, \\'a\\' as a2, \\'A\\' as a3, id + 1 as id \n from 
sys.functions\n) as x;":str, "sequential_pipe":str, 41:int);
-    X_43:bat[:str] := bat.new(nil:str);
-    X_49:bat[:int] := bat.new(nil:int);
-    X_47:bat[:int] := bat.new(nil:int);
-    X_46:bat[:str] := bat.new(nil:str);
-    X_45:bat[:str] := bat.new(nil:str);
+    X_4:void := querylog.define("explain select replace(a1,a2,a3), id\nfrom 
(\n select name as a1, \\'a\\' as a2, \\'A\\' as a3, id + 1 as id \n from 
sys.functions\n) as x;":str, "sequential_pipe":str, 31:int);
+    X_43:bat[:str] := bat.pack("sys.L5":str, "sys.x":str);
+    X_44:bat[:str] := bat.pack("L5":str, "id":str);
+    X_45:bat[:str] := bat.pack("varchar":str, "bigint":str);
+    X_46:bat[:int] := bat.pack(0:int, 64:int);
+    X_47:bat[:int] := bat.pack(0:int, 0:int);
     X_7:int := sql.mvc();
     C_8:bat[:oid] := sql.tid(X_7:int, "sys":str, "functions":str);
     X_21:bat[:str] := sql.bind(X_7:int, "sys":str, "functions":str, 
"name":str, 0:int);
@@ -152,17 +142,7 @@ function user.s6_0():void;
     X_32:bat[:lng] := batcalc.lng(X_20:bat[:int]);
     X_35:bat[:lng] := algebra.project(X_20:bat[:int], 1:lng);
     X_36:bat[:lng] := batcalc.+(X_32:bat[:lng], X_35:bat[:lng]);
-    X_50:bat[:str] := bat.append(X_43:bat[:str], "sys.L5":str);
-    X_52:bat[:str] := bat.append(X_45:bat[:str], "L5":str);
-    X_54:bat[:str] := bat.append(X_46:bat[:str], "varchar":str);
-    X_56:bat[:int] := bat.append(X_47:bat[:int], 0:int);
-    X_58:bat[:int] := bat.append(X_49:bat[:int], 0:int);
-    X_59:bat[:str] := bat.append(X_50:bat[:str], "sys.x":str);
-    X_61:bat[:str] := bat.append(X_52:bat[:str], "id":str);
-    X_63:bat[:str] := bat.append(X_54:bat[:str], "bigint":str);
-    X_65:bat[:int] := bat.append(X_56:bat[:int], 64:int);
-    X_67:bat[:int] := bat.append(X_58:bat[:int], 0:int);
-    sql.resultSet(X_59:bat[:str], X_61:bat[:str], X_63:bat[:str], 
X_65:bat[:int], X_67:bat[:int], X_39:bat[:str], X_36:bat[:lng]);
+    sql.resultSet(X_43:bat[:str], X_44:bat[:str], X_45:bat[:str], 
X_46:bat[:int], X_47:bat[:int], X_39:bat[:str], X_36:bat[:lng]);
 end user.s6_0;
 #inline               actions= 0 time=1 usec 
 #remap                actions= 1 time=33 usec 
@@ -199,12 +179,12 @@ end user.s6_0;
 % clob # type
 % 211 # length
 function user.s8_0():void;
-    X_3:void := querylog.define("explain select replace(a1,a2,a3), id\nfrom 
(\n select name as a1, \\'a\\' as a2, \\'A\\' as a3, abs(id) as id \n from 
sys.functions\n) as x;":str, "sequential_pipe":str, 37:int);
-    X_38:bat[:str] := bat.new(nil:str);
-    X_44:bat[:int] := bat.new(nil:int);
-    X_42:bat[:int] := bat.new(nil:int);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to