Changeset: e5bb1d2ed7bd for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e5bb1d2ed7bd
Modified Files:
        monetdb5/modules/mal/array.mx
        sql/sql/29_array.sql
Branch: sciql
Log Message:

Made ARRAYfiller work with var sized types(CHAR, VARCHAR, BLOB, CLOB)


diffs (76 lines):

diff --git a/monetdb5/modules/mal/array.mx b/monetdb5/modules/mal/array.mx
--- a/monetdb5/modules/mal/array.mx
+++ b/monetdb5/modules/mal/array.mx
@@ -362,16 +362,17 @@ ARRAYfiller_bat(Client cntxt, MalBlkPtr 
        int *ret = (int*) getArgReference(stk,pci,0);
        int bid = *(int*) getArgReference(stk,pci,1);
        void *val = (void*) getArgReference(stk,pci,2);
+       int type = getArgType(mb,pci,2);
 
        if ((b = BATdescriptor(bid)) == NULL) 
                throw(MAL, "array.filler", RUNTIME_OBJECT_MISSING);
        
-       bn = BATnew(b->htype, getArgType(mb,pci,2), BATcount(b));
+       bn = BATnew(b->htype, type, BATcount(b));
        BATseqbase(bn,0);
 
        bi = bat_iterator(b);
        BATloop(b,p,q){
-               BUNfastins(bn, BUNhead(bi, p), val);
+               BUNfastins(bn, BUNhead(bi, p), ATOMvarsized(type)?*(str 
*)val:val);
        }
        (void) cntxt;
        BBPkeepref(*ret = bn->batCacheid);
@@ -386,17 +387,18 @@ ARRAYfiller(Client cntxt, MalBlkPtr mb, 
        int *ret = (int*) getArgReference(stk,pci,0);
        lng i = 0, cnt = *(lng *) getArgReference(stk,pci,1);
        void *val = (void*) getArgReference(stk,pci,2);
+       int type = getArgType(mb,pci,2);
 
        (void) cntxt;
 
        /* TODO: why not TYPE_void? */
-       if(!(bn = BATnew(TYPE_oid, getArgType(mb,pci,2), cnt)))
+       if(!(bn = BATnew(TYPE_oid, type, cnt)))
                throw(MAL, "array.filler", MAL_MALLOC_FAIL);
        BATseqbase(bn, 0);
 
        bi = bat_iterator(bn);
        for (i = 0; i < cnt; i++)
-               BUNfastins(bn, BUNhead(bi, i), val);
+               BUNfastins(bn, BUNhead(bi, i), ATOMvarsized(type)?*(str 
*)val:val);
 
        BATsetcount(bn, cnt);
        bn->tsorted = 1;
diff --git a/sql/sql/29_array.sql b/sql/sql/29_array.sql
--- a/sql/sql/29_array.sql
+++ b/sql/sql/29_array.sql
@@ -45,14 +45,18 @@ create function array_filler(cnt bigint,
        external name "array".filler;
 create function array_filler(cnt bigint, val double) returns table (id bigint, 
cellval double)
        external name "array".filler;
---create function array_filler(cnt bigint, val date) returns table (vals date)
---     external name "array".filler;
---create function array_filler(cnt bigint, val time) returns table (vals time)
---     external name "array".filler;
---create function array_filler(cnt bigint, val timestamp) returns table (vals 
timestamp)
---     external name "array".filler;
---create function array_filler(cnt bigint, val char(1024)) returns table (vals 
char(1024))
---     external name "array".filler;
---create function array_filler(cnt bigint, val varchar(1024)) returns table 
(vals varchar(1024))
---     external name "array".filler;
+create function array_filler(cnt bigint, val date) returns table (id bigint, 
vals date)
+       external name "array".filler;
+create function array_filler(cnt bigint, val time) returns table (id bigint, 
vals time)
+       external name "array".filler;
+create function array_filler(cnt bigint, val timestamp) returns table (id 
bigint, vals timestamp)
+       external name "array".filler;
+create function array_filler(cnt bigint, val char(2048)) returns table (id 
bigint, vals char(2048))
+       external name "array".filler;
+create function array_filler(cnt bigint, val varchar(2048)) returns table (id 
bigint, vals varchar(2048))
+       external name "array".filler;
+create function array_filler(cnt bigint, val blob) returns table (id bigint, 
vals blob)
+       external name "array".filler;
+create function array_filler(cnt bigint, val clob) returns table (id bigint, 
vals clob)
+       external name "array".filler;
 
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to