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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list