Changeset: d50298371bb0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d50298371bb0
Modified Files:
        clients/Tests/MAL-signatures.stable.out
        clients/Tests/MAL-signatures.stable.out.int128
        monetdb5/modules/mal/mat.mal
        sql/backends/monet5/UDF/udf/Tests/udf-fuse.stable.out
        sql/backends/monet5/UDF/udf/Tests/udf-reverse.stable.out
        sql/backends/monet5/sql_statement.c
        
sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.stable.out
        
sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out
        
sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.stable.out
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-0join-query.stable.out
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-0join-view.stable.out
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-1join-view.stable.out
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-2join-view.stable.out
        sql/test/remote/Tests/partition_elim.stable.out
        sql/test/sys-schema/Tests/systemfunctions.stable.out
        sql/test/sys-schema/Tests/systemfunctions.stable.out.int128
Branch: default
Log Message:

Reduce the SQL header to just 5 BATs. Still upgrade on the pre-allocation
of the corresponding argument list is needed to avoid repetitive calls to 
malloc.


diffs (truncated from 1851 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,6 +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",       "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,6 +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",       "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/monetdb5/modules/mal/mat.mal b/monetdb5/modules/mal/mat.mal
--- a/monetdb5/modules/mal/mat.mal
+++ b/monetdb5/modules/mal/mat.mal
@@ -11,6 +11,10 @@ address MATpack
 comment "Define a Merge Association Table (MAT). Fall back to the pack 
operation
 when this is called ";
 
+pattern bat.pack(:any_2...):bat[:any_2]
+address MATpackValues
+comment "Materialize the values into a BAT. Avoiding a clash with mat.pack() 
in mergetable";
+
 pattern pack(:any_2...):bat[:any_2]
 address MATpackValues
 comment "Materialize the MAT (of values) into a BAT";
diff --git a/sql/backends/monet5/UDF/udf/Tests/udf-fuse.stable.out 
b/sql/backends/monet5/UDF/udf/Tests/udf-fuse.stable.out
--- a/sql/backends/monet5/UDF/udf/Tests/udf-fuse.stable.out
+++ b/sql/backends/monet5/UDF/udf/Tests/udf-fuse.stable.out
@@ -169,12 +169,12 @@ end user.s8_0;
 % clob # type
 % 114 # length
 function user.s16_0():void;
-    X_1:void := querylog.define("explain select fuse(a,b) from udf_fuse;":str, 
"sequential_pipe":str, 27:int);
-    X_29:bat[:str] := bat.new(nil:str);
-    X_35:bat[:int] := bat.new(nil:int);
-    X_33:bat[:int] := bat.new(nil:int);
-    X_32:bat[:str] := bat.new(nil:str);
-    X_31:bat[:str] := bat.new(nil:str);
+    X_1:void := querylog.define("explain select fuse(a,b) from udf_fuse;":str, 
"sequential_pipe":str, 22:int);
+    X_29:bat[:str] := bat.pack("sys.L1":str);
+    X_30:bat[:str] := bat.pack("L1":str);
+    X_31:bat[:str] := bat.pack("smallint":str);
+    X_32:bat[:int] := bat.pack(16:int);
+    X_33:bat[:int] := bat.pack(0:int);
     X_4:int := sql.mvc();
     C_5:bat[:oid] := sql.tid(X_4:int, "sys":str, "udf_fuse":str);
     X_8:bat[:bte] := sql.bind(X_4:int, "sys":str, "udf_fuse":str, "a":str, 
0:int);
@@ -182,12 +182,7 @@ function user.s16_0():void;
     X_18:bat[:bte] := sql.bind(X_4:int, "sys":str, "udf_fuse":str, "b":str, 
0:int);
     X_24:bat[:bte] := algebra.projection(C_5:bat[:oid], X_18:bat[:bte]);
     X_25:bat[:sht] := batudf.fuse(X_17:bat[:bte], X_24:bat[:bte]);
-    X_36:bat[:str] := bat.append(X_29:bat[:str], "sys.L1":str);
-    X_38:bat[:str] := bat.append(X_31:bat[:str], "L1":str);
-    X_40:bat[:str] := bat.append(X_32:bat[:str], "smallint":str);
-    X_42:bat[:int] := bat.append(X_33:bat[:int], 16:int);
-    X_44:bat[:int] := bat.append(X_35:bat[:int], 0:int);
-    sql.resultSet(X_36:bat[:str], X_38:bat[:str], X_40:bat[:str], 
X_42:bat[:int], X_44:bat[:int], X_25:bat[:sht]);
+    sql.resultSet(X_29:bat[:str], X_30:bat[:str], X_31:bat[:str], 
X_32:bat[:int], X_33:bat[:int], X_25:bat[:sht]);
 end user.s16_0;
 #inline               actions= 0 time=1 usec 
 #remap                actions= 1 time=6 usec 
@@ -220,12 +215,12 @@ end user.s16_0;
 % clob # type
 % 114 # length
 function user.s18_0():void;
-    X_1:void := querylog.define("explain select fuse(c,d) from udf_fuse;":str, 
"sequential_pipe":str, 27:int);
-    X_29:bat[:str] := bat.new(nil:str);
-    X_35:bat[:int] := bat.new(nil:int);
-    X_33:bat[:int] := bat.new(nil:int);
-    X_32:bat[:str] := bat.new(nil:str);
-    X_31:bat[:str] := bat.new(nil:str);
+    X_1:void := querylog.define("explain select fuse(c,d) from udf_fuse;":str, 
"sequential_pipe":str, 22:int);
+    X_29:bat[:str] := bat.pack("sys.L1":str);
+    X_30:bat[:str] := bat.pack("L1":str);
+    X_31:bat[:str] := bat.pack("int":str);
+    X_32:bat[:int] := bat.pack(32:int);
+    X_33:bat[:int] := bat.pack(0:int);
     X_4:int := sql.mvc();
     C_5:bat[:oid] := sql.tid(X_4:int, "sys":str, "udf_fuse":str);
     X_8:bat[:sht] := sql.bind(X_4:int, "sys":str, "udf_fuse":str, "c":str, 
0:int);
@@ -233,12 +228,7 @@ function user.s18_0():void;
     X_18:bat[:sht] := sql.bind(X_4:int, "sys":str, "udf_fuse":str, "d":str, 
0:int);
     X_24:bat[:sht] := algebra.projection(C_5:bat[:oid], X_18:bat[:sht]);
     X_25:bat[:int] := batudf.fuse(X_17:bat[:sht], X_24:bat[:sht]);
-    X_36:bat[:str] := bat.append(X_29:bat[:str], "sys.L1":str);
-    X_38:bat[:str] := bat.append(X_31:bat[:str], "L1":str);
-    X_40:bat[:str] := bat.append(X_32:bat[:str], "int":str);
-    X_42:bat[:int] := bat.append(X_33:bat[:int], 32:int);
-    X_44:bat[:int] := bat.append(X_35:bat[:int], 0:int);
-    sql.resultSet(X_36:bat[:str], X_38:bat[:str], X_40:bat[:str], 
X_42:bat[:int], X_44:bat[:int], X_25:bat[:int]);
+    sql.resultSet(X_29:bat[:str], X_30:bat[:str], X_31:bat[:str], 
X_32:bat[:int], X_33:bat[:int], X_25:bat[:int]);
 end user.s18_0;
 #inline               actions= 0 time=0 usec 
 #remap                actions= 1 time=4 usec 
@@ -271,12 +261,12 @@ end user.s18_0;
 % clob # type
 % 114 # length
 function user.s20_0():void;
-    X_1:void := querylog.define("explain select fuse(e,f) from udf_fuse;":str, 
"sequential_pipe":str, 27:int);
-    X_29:bat[:str] := bat.new(nil:str);
-    X_35:bat[:int] := bat.new(nil:int);
-    X_33:bat[:int] := bat.new(nil:int);
-    X_32:bat[:str] := bat.new(nil:str);
-    X_31:bat[:str] := bat.new(nil:str);
+    X_1:void := querylog.define("explain select fuse(e,f) from udf_fuse;":str, 
"sequential_pipe":str, 22:int);
+    X_29:bat[:str] := bat.pack("sys.L1":str);
+    X_30:bat[:str] := bat.pack("L1":str);
+    X_31:bat[:str] := bat.pack("bigint":str);
+    X_32:bat[:int] := bat.pack(64:int);
+    X_33:bat[:int] := bat.pack(0:int);
     X_4:int := sql.mvc();
     C_5:bat[:oid] := sql.tid(X_4:int, "sys":str, "udf_fuse":str);
     X_8:bat[:int] := sql.bind(X_4:int, "sys":str, "udf_fuse":str, "e":str, 
0:int);
@@ -284,12 +274,7 @@ function user.s20_0():void;
     X_18:bat[:int] := sql.bind(X_4:int, "sys":str, "udf_fuse":str, "f":str, 
0:int);
     X_24:bat[:int] := algebra.projection(C_5:bat[:oid], X_18:bat[:int]);
     X_25:bat[:lng] := batudf.fuse(X_17:bat[:int], X_24:bat[:int]);
-    X_36:bat[:str] := bat.append(X_29:bat[:str], "sys.L1":str);
-    X_38:bat[:str] := bat.append(X_31:bat[:str], "L1":str);
-    X_40:bat[:str] := bat.append(X_32:bat[:str], "bigint":str);
-    X_42:bat[:int] := bat.append(X_33:bat[:int], 64:int);
-    X_44:bat[:int] := bat.append(X_35:bat[:int], 0:int);
-    sql.resultSet(X_36:bat[:str], X_38:bat[:str], X_40:bat[:str], 
X_42:bat[:int], X_44:bat[:int], X_25:bat[:lng]);
+    sql.resultSet(X_29:bat[:str], X_30:bat[:str], X_31:bat[:str], 
X_32:bat[:int], X_33:bat[:int], X_25:bat[:lng]);
 end user.s20_0;
 #inline               actions= 0 time=0 usec 
 #remap                actions= 1 time=4 usec 
diff --git a/sql/backends/monet5/UDF/udf/Tests/udf-reverse.stable.out 
b/sql/backends/monet5/UDF/udf/Tests/udf-reverse.stable.out
--- a/sql/backends/monet5/UDF/udf/Tests/udf-reverse.stable.out
+++ b/sql/backends/monet5/UDF/udf/Tests/udf-reverse.stable.out
@@ -107,23 +107,17 @@ end user.s4_0;
 % clob # type
 % 114 # length
 function user.s16_0():void;
-    X_1:void := querylog.define("explain select reverse(x) from 
udf_reverse;":str, "sequential_pipe":str, 22:int);
-    X_22:bat[:str] := bat.new(nil:str);
-    X_28:bat[:int] := bat.new(nil:int);
-    X_26:bat[:int] := bat.new(nil:int);
-    X_25:bat[:str] := bat.new(nil:str);
-    X_24:bat[:str] := bat.new(nil:str);
+    X_1:void := querylog.define("explain select reverse(x) from 
udf_reverse;":str, "sequential_pipe":str, 17:int);
+    X_22:bat[:str] := bat.pack("sys.L1":str);
+    X_23:bat[:str] := bat.pack("L1":str);
+    X_24:bat[:str] := bat.pack("clob":str);
+    X_25:bat[:int] := bat.pack(0:int);
     X_4:int := sql.mvc();
     C_5:bat[:oid] := sql.tid(X_4:int, "sys":str, "udf_reverse":str);
     X_8:bat[:str] := sql.bind(X_4:int, "sys":str, "udf_reverse":str, "x":str, 
0:int);
     X_17:bat[:str] := algebra.projection(C_5:bat[:oid], X_8:bat[:str]);
     X_18:bat[:str] := batudf.reverse(X_17:bat[:str]);
-    X_29:bat[:str] := bat.append(X_22:bat[:str], "sys.L1":str);
-    X_31:bat[:str] := bat.append(X_24:bat[:str], "L1":str);
-    X_33:bat[:str] := bat.append(X_25:bat[:str], "clob":str);
-    X_35:bat[:int] := bat.append(X_26:bat[:int], 0:int);
-    X_36:bat[:int] := bat.append(X_28:bat[:int], 0:int);
-    sql.resultSet(X_29:bat[:str], X_31:bat[:str], X_33:bat[:str], 
X_35:bat[:int], X_36:bat[:int], X_18:bat[:str]);
+    sql.resultSet(X_22:bat[:str], X_23:bat[:str], X_24:bat[:str], 
X_25:bat[:int], X_25:bat[:int], X_18:bat[:str]);
 end user.s16_0;
 #inline               actions= 0 time=1 usec 
 #remap                actions= 1 time=5 usec 
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,28 +2192,27 @@ stmt_rs_column(backend *be, stmt *rs, in
  */
 #define NEWRESULTSET
 
-#define meta(Id,Tpe) \
-q = newStmt(mb, batRef, newRef);\
-q= pushType(mb,q, Tpe);\
-Id = getArg(q,0); \
-list = pushArgument(mb,list,Id);
-
-#define metaInfo(Id,Tpe,Val)\
-p = newStmt(mb, batRef, appendRef);\
-p = pushArgument(mb,p, Id);\
-p = push##Tpe(mb,p, Val);\
-Id = getArg(p,0);
+#define meta(P, Id, Tpe) \
+P = newStmt(mb, batRef, packRef);\
+Id = getArg(P,0);\
+setVarType(mb, Id, newBatType(Tpe));\
+setVarFixed(mb, Id);\
+list = pushArgument(mb, list, Id);
+
+#define metaInfo(P,Tpe,Val)\
+P = push##Tpe(mb, P, Val);
 
 
 static int
 dump_export_header(mvc *sql, MalBlkPtr mb, list *l, int file, const char * 
format, const char * sep,const char * rsep,const char * ssep,const char * ns, 
int onclient)
 {
        node *n;
-       InstrPtr q = NULL;
+       bool error = false;
        int ret = -1;
        // gather the meta information
-       int tblId, nmeId, tpeId, lenId, scaleId, k;
-       InstrPtr p= NULL, list;
+       int tblId, nmeId, tpeId, lenId, scaleId;
+       InstrPtr list;
+       InstrPtr tblPtr, nmePtr, tpePtr, lenPtr, scalePtr;
 
        list = newInstruction(mb, sqlRef, export_tableRef);
        getArg(list,0) = newTmpVariable(mb,TYPE_int);
@@ -2226,12 +2225,13 @@ dump_export_header(mvc *sql, MalBlkPtr m
                list = pushStr(mb, list, ns);
                list = pushInt(mb, list, onclient);
        }
-       k = list->argc;
-       meta(tblId,TYPE_str);
-       meta(nmeId,TYPE_str);
-       meta(tpeId,TYPE_str);
-       meta(lenId,TYPE_int);
-       meta(scaleId,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);
+       if(tblPtr == NULL || nmePtr == NULL || tpePtr == NULL || lenPtr == NULL 
|| scalePtr == NULL)
+               return -1;
 
        for (n = l->h; n; n = n->next) {
                stmt *c = n->data;
@@ -2251,28 +2251,22 @@ dump_export_header(mvc *sql, MalBlkPtr m
                        fqtn = NEW_ARRAY(char, fqtnl);
                        if(fqtn) {
                                snprintf(fqtn, fqtnl, "%s.%s", nsn, ntn);
-                               metaInfo(tblId, Str, fqtn);
-                               metaInfo(nmeId, Str, cn);
-                               metaInfo(tpeId, Str, (t->type->localtype == 
TYPE_void ? "char" : t->type->sqlname));
-                               metaInfo(lenId, Int, t->digits);
-                               metaInfo(scaleId, Int, t->scale);
+                               metaInfo(tblPtr, Str, fqtn);
+                               metaInfo(nmePtr, Str, cn);
+                               metaInfo(tpePtr, Str, (t->type->localtype == 
TYPE_void ? "char" : t->type->sqlname));
+                               metaInfo(lenPtr, Int, t->digits);
+                               metaInfo(scalePtr, Int, t->scale);
                                list = pushArgument(mb, list, c->nr);
                                _DELETE(fqtn);
                        } else
-                               q = NULL;
+                               error = true;
                } else
-                       q = NULL;
+                       error = true; 
                c_delete(ntn);
                c_delete(nsn);
-               if (q == NULL)
+               if(error)
                        return -1;
        }
-       // add the correct variable ids
-       getArg(list,k++) = tblId;
-       getArg(list,k++) = nmeId;
-       getArg(list,k++) = tpeId;
-       getArg(list,k++) = lenId;
-       getArg(list,k) = scaleId;
        ret = getArg(list,0);
        pushInstruction(mb,list);
        return ret;
@@ -2482,22 +2476,24 @@ static InstrPtr
 dump_header(mvc *sql, MalBlkPtr mb, stmt *s, list *l)
 {
        node *n;
-       InstrPtr q = NULL;
+       bool error = false;
        // gather the meta information
-       int tblId, nmeId, tpeId, lenId, scaleId, k;
-       InstrPtr p = NULL, list;
+       int tblId, nmeId, tpeId, lenId, scaleId;
+       InstrPtr list;
+       InstrPtr tblPtr, nmePtr, tpePtr, lenPtr, scalePtr;
 
        list = newInstruction(mb,sqlRef, resultSetRef);
        if(!list) {
                return NULL;
        }
        getArg(list,0) = newTmpVariable(mb,TYPE_int);
-       k = list->argc;
-       meta(tblId,TYPE_str);
-       meta(nmeId,TYPE_str);
-       meta(tpeId,TYPE_str);
-       meta(lenId,TYPE_int);
-       meta(scaleId,TYPE_int);
+       meta(tblPtr, tblId, TYPE_str);
+       meta(nmePtr, nmeId, TYPE_str);
+       meta(tpePtr, tpeId, TYPE_str);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to