Changeset: 622d81b7f81c for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=622d81b7f81c Modified Files: sql/backends/monet5/UDF/80_udf.sql sql/backends/monet5/UDF/udf.c sql/backends/monet5/UDF/udf.h sql/backends/monet5/UDF/udf.mal Branch: arrays Log Message:
update of a column from q in qr decomposition diffs (81 lines): diff --git a/sql/backends/monet5/UDF/80_udf.sql b/sql/backends/monet5/UDF/80_udf.sql --- a/sql/backends/monet5/UDF/80_udf.sql +++ b/sql/backends/monet5/UDF/80_udf.sql @@ -23,3 +23,8 @@ returns integer external name udf.fuse; -- fuse two (4-byte) integer values into one (8-byte) bigint value create function fuse(one integer, two integer) returns bigint external name udf.fuse; + +-- update column c of q +CREATE FUNCTION qrq(c double, s double) +RETURNS double external name udf.qrq; + diff --git a/sql/backends/monet5/UDF/udf.c b/sql/backends/monet5/UDF/udf.c --- a/sql/backends/monet5/UDF/udf.c +++ b/sql/backends/monet5/UDF/udf.c @@ -366,3 +366,46 @@ UDFBATfuse(bat *ires, const bat *ione, c return msg; } + +char* UDFqrq(bat *q, const bat *c, const double *s) { + BAT *cBAT, *qBAT; + BUN start, end, i; + BATiter c_iter; + double *qVals; + + if(!(cBAT = BATdescriptor(*c))) { + return createException(MAL, "batudf.qrq", "Problem retrieving BAT"); + } + + if( !BAThdense(cBAT) ) { + BBPunfix(cBAT->batCacheid); + return createException(MAL, "batudf.qrq", "BATs must have dense heads"); + } + + c_iter = bat_iterator(cBAT); + start = BUNfirst(cBAT); + end = BUNlast(cBAT); + + if(!(qBAT = BATnew(TYPE_void, TYPE_dbl, BATcount(cBAT), TRANSIENT))) { + BBPunfix(cBAT->batCacheid); + return createException(MAL, "batudf.qrq", MAL_MALLOC_FAIL); + } + + BATseqbase(qBAT, cBAT->hseqbase); + + qVals = (double*)Tloc(qBAT, BUNfirst(qBAT)); + for(i=start; i<end; i++) { + *(qVals++) = *(double*)BUNtail(c_iter, i)/(*s); + } + + BATsetcount(qBAT, BATcount(cBAT)); + qBAT->tsorted = 0; + qBAT->trevsorted = 0; + qBAT->tkey = 0; + qBAT->tdense = 0; + + BBPunfix(cBAT->batCacheid); + BBPkeepref(*q = qBAT->batCacheid); + + return MAL_SUCCEED; +} diff --git a/sql/backends/monet5/UDF/udf.h b/sql/backends/monet5/UDF/udf.h --- a/sql/backends/monet5/UDF/udf.h +++ b/sql/backends/monet5/UDF/udf.h @@ -44,4 +44,5 @@ UDFfuse_scalar_decl(lng, hge); udf_export char * UDFBATfuse(bat *ret, const bat *one, const bat *two); +udf_export char* UDFqrq(bat *q, const bat *c, const double *s); #endif /* _SQL_UDF_H_ */ diff --git a/sql/backends/monet5/UDF/udf.mal b/sql/backends/monet5/UDF/udf.mal --- a/sql/backends/monet5/UDF/udf.mal +++ b/sql/backends/monet5/UDF/udf.mal @@ -51,3 +51,6 @@ comment "fuse two (2-byte) sht values in command fuse(one:bat[:oid,:int],two:bat[:oid,:int]):bat[:oid,:lng] address UDFBATfuse comment "fuse two (4-byte) int values into one (8-byte) lng value"; + +command batudf.qrq(c:bat[:oid,:dbl], s:dbl) :bat[:oid,:dbl] +address UDFqrq; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list