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]

Reply via email to