Changeset: d469dcd8c762 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/d469dcd8c762
Modified Files:
clients/Tests/MAL-signatures-hge.test
clients/Tests/MAL-signatures.test
monetdb5/modules/mal/pp_hash.c
Branch: pp_hashjoin
Log Message:
added <size>:lng for oahash.new
diffs (84 lines):
diff --git a/clients/Tests/MAL-signatures-hge.test
b/clients/Tests/MAL-signatures-hge.test
--- a/clients/Tests/MAL-signatures-hge.test
+++ b/clients/Tests/MAL-signatures-hge.test
@@ -49494,6 +49494,16 @@ pattern oahash.new(X_0:any_1, X_1:int, X
OAHASHnew
(empty)
oahash
+new
+pattern oahash.new(X_0:any_1, X_1:lng):bat[:any_1]
+OAHASHnew
+(empty)
+oahash
+new
+pattern oahash.new(X_0:any_1, X_1:lng, X_2:bat[:any_2]):bat[:any_1]
+OAHASHnew
+(empty)
+oahash
no_slices
command oahash.no_slices(X_0:bat[:any_1]):int
OAHASHno_slices
diff --git a/clients/Tests/MAL-signatures.test
b/clients/Tests/MAL-signatures.test
--- a/clients/Tests/MAL-signatures.test
+++ b/clients/Tests/MAL-signatures.test
@@ -37954,6 +37954,16 @@ pattern oahash.new(X_0:any_1, X_1:int, X
OAHASHnew
(empty)
oahash
+new
+pattern oahash.new(X_0:any_1, X_1:lng):bat[:any_1]
+OAHASHnew
+(empty)
+oahash
+new
+pattern oahash.new(X_0:any_1, X_1:lng, X_2:bat[:any_2]):bat[:any_1]
+OAHASHnew
+(empty)
+oahash
no_slices
command oahash.no_slices(X_0:bat[:any_1]):int
OAHASHno_slices
diff --git a/monetdb5/modules/mal/pp_hash.c b/monetdb5/modules/mal/pp_hash.c
--- a/monetdb5/modules/mal/pp_hash.c
+++ b/monetdb5/modules/mal/pp_hash.c
@@ -404,10 +404,20 @@ OAHASHnew(Client cntxt, MalBlkPtr m, Mal
bat *res = getArgReference_bat(s, p, 0);
int tt = getArgType(m, p, 1);
- int size = *getArgReference_int(s, p, 2);
+ int tt2 = getArgType(m, p, 2);
+ lng size = 0;
hash_table *parent = NULL;
BAT *pht = NULL;
+ if (tt2 == TYPE_int) {
+ size = (lng) *getArgReference_int(s, p, 2);
+ } else {
+ assert(tt2 == TYPE_lng);
+ size = *getArgReference_lng(s, p, 2);
+ }
+ /* multiply with the magic estimation while avoiding overflow */
+ size = size > (BUN_MAX / 1.2 / 2.1)? BUN_MAX : size * 1.2 * 2.1;
+
if (p->argc == 4) {
bat pid = *getArgReference_bat(s, p, 3);
if ((pht = BATdescriptor(pid)) == NULL)
@@ -420,7 +430,7 @@ OAHASHnew(Client cntxt, MalBlkPtr m, Mal
BBPreclaim(pht);
return createException(MAL, "oahash.new", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
}
- b->tsink = (Sink*)ht_create(tt, (size_t)(size*1.2*2.1), parent);
+ b->tsink = (Sink*)ht_create(tt, (size_t)size, parent);
BBPreclaim(pht);
if (b->tsink == NULL) {
BBPunfix(b->batCacheid);
@@ -3377,6 +3387,9 @@ OAHASHhash(Client cntxt, MalBlkPtr m, Ma
static mel_func oa_hash_init_funcs[] = {
pattern("oahash", "new", OAHASHnew, false, "", args(1,3,
batargany("ht_sink",1),argany("tt",1),arg("size",int))),
pattern("oahash", "new", OAHASHnew, false, "", args(1,4,
batargany("ht_sink",1),argany("tt",1),arg("size",int),batargany("p",2))),
+ pattern("oahash", "new", OAHASHnew, false, "", args(1,3,
batargany("ht_sink",1),argany("tt",1),arg("size",lng))),
+ pattern("oahash", "new", OAHASHnew, false, "", args(1,4,
batargany("ht_sink",1),argany("tt",1),arg("size",lng),batargany("p",2))),
+
command("oahash", "hashmark_init", OAHASHhashmark_init, false, "", args(1,3,
batarg("hashmark",bit),batargany("ht_sink",1),batargany("payload",2))),
pattern("hash", "ext", UHASHext, false, "", args(1,2,
batarg("ext",oid),batargany("in",1))),
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]