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