Changeset: c1a84302b8e8 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c1a84302b8e8 Branch: mtest Log Message:
merged diffs (truncated from 11439 to 300 lines): diff --git a/sql/backends/monet5/UDF/capi/Tests/All b/sql/backends/monet5/UDF/capi/Tests/All --- a/sql/backends/monet5/UDF/capi/Tests/All +++ b/sql/backends/monet5/UDF/capi/Tests/All @@ -11,9 +11,10 @@ NOT_WIN32?capi08 NOT_WIN32?capi09 NOT_WIN32?capi10 NOT_WIN32?capi11 -NOT_WIN32?capi12 +#NOT_WIN32?capi12 no oids NOT_WIN32?capi13 NOT_WIN32?capi14 NOT_WIN32?capi15 NOT_WIN32?capi16 -NOT_WIN32?capi17 +#NOT_WIN32?capi17 no oids +NOT_WIN32?capi18 diff --git a/sql/backends/monet5/UDF/capi/Tests/capi00.test b/sql/backends/monet5/UDF/capi/Tests/capi00.test new file mode 100644 --- /dev/null +++ b/sql/backends/monet5/UDF/capi/Tests/capi00.test @@ -0,0 +1,37 @@ +statement ok +START TRANSACTION + +statement ok +CREATE FUNCTION capi00(inp INTEGER) RETURNS INTEGER LANGUAGE C { + size_t i; + result->initialize(result, inp.count); + for(i = 0; i < inp.count; i++) { + result->data[i] = inp.data[i] * 2; + } +} + +statement ok +CREATE TABLE integers(i INTEGER) + +statement ok +INSERT INTO integers VALUES (1), (2), (3), (4), (5) + +query II rowsort +SELECT i, capi00(i) FROM integers +---- +1 +2 +2 +4 +3 +6 +4 +8 +5 +10 + +statement ok +DROP FUNCTION capi00 + +statement ok +DROP TABLE integers diff --git a/sql/backends/monet5/UDF/capi/Tests/capi01.test b/sql/backends/monet5/UDF/capi/Tests/capi01.test new file mode 100644 --- /dev/null +++ b/sql/backends/monet5/UDF/capi/Tests/capi01.test @@ -0,0 +1,30 @@ +statement ok +START TRANSACTION + +statement ok +CREATE FUNCTION capi01(inp INTEGER) RETURNS TABLE (i INTEGER, d DOUBLE) +language C +{ +#include <math.h> + size_t j; + size_t count = inp.data[0]; + i->initialize(i, count); + d->initialize(d, count); + for(j = 0; j < count; j++) { + i->data[j] = j; + d->data[j] = round(j > 0 ? 42.0 / j : 42.0); + } +}; + +query II rowsort +SELECT i,d FROM capi01(42) AS R +---- +84 values hashing to 5bb395f601dde2dc995b28f19ffe7d50 + +statement ok +DROP FUNCTION capi01 + +statement ok +ROLLBACK + + diff --git a/sql/backends/monet5/UDF/capi/Tests/capi02.sql b/sql/backends/monet5/UDF/capi/Tests/capi02.sql --- a/sql/backends/monet5/UDF/capi/Tests/capi02.sql +++ b/sql/backends/monet5/UDF/capi/Tests/capi02.sql @@ -87,7 +87,6 @@ language C result->data[i].date.year = d.data[i].date.year + 1; result->data[i].date.month = d.data[i].date.month; result->data[i].date.day = d.data[i].date.day; - result->data[i].time.hours = (i + 1234) % 24; result->data[i].time.minutes = (i + 1234) % 60; result->data[i].time.seconds = (i + 1234) % 60; diff --git a/sql/backends/monet5/UDF/capi/Tests/capi02.test b/sql/backends/monet5/UDF/capi/Tests/capi02.test new file mode 100644 --- /dev/null +++ b/sql/backends/monet5/UDF/capi/Tests/capi02.test @@ -0,0 +1,119 @@ +statement ok +START TRANSACTION + +statement ok +CREATE FUNCTION capi02_increment_year(d DATE) RETURNS DATE +language C +{ + size_t i; + result->initialize(result, d.count); + for(i = 0; i < result->count; i++) { + if (d.is_null(d.data[i])) { + result->data[i] = result->null_value; + } else { + result->data[i].year = d.data[i].year + 1; + result->data[i].month = d.data[i].month; + result->data[i].day = d.data[i].day; + } + } +} + +statement ok +CREATE TABLE dates(i DATE) + +statement ok +INSERT INTO dates VALUES ('1992-09-20'), ('2000-03-10'), ('1000-05-03'), (NULL) + +query T rowsort +SELECT capi02_increment_year(i) FROM dates +---- +1001-05-03 +1993-09-20 +2001-03-10 +NULL + +statement ok +DROP FUNCTION capi02_increment_year + +statement ok +DROP TABLE dates + +statement ok +CREATE FUNCTION capi02_randomize_time(d TIME) RETURNS TIME +language C +{ + size_t i; + result->initialize(result, d.count); + for(i = 0; i < result->count; i++) { + if (d.is_null(d.data[i])) { + result->data[i] = result->null_value; + } else { + result->data[i].hours = (i + 1234) % 24; + result->data[i].minutes = (i + 1234) % 60; + result->data[i].seconds = (i + 1234) % 60; + result->data[i].ms = (i + 1234) % 1000; + } + } +} + +statement ok +CREATE TABLE times(i TIME) + +statement ok +INSERT INTO times VALUES ('03:03:02.0101'), (NULL), ('03:03:02.0101') + +query T rowsort +SELECT capi02_randomize_time(i) FROM times +---- +10:34:34 +12:36:36 +NULL + +statement ok +DROP FUNCTION capi02_randomize_time + +statement ok +DROP TABLE times + +statement ok +CREATE FUNCTION capi02_increment_timestamp(d TIMESTAMP) RETURNS TIMESTAMP +language C +{ + size_t i; + result->initialize(result, d.count); + for(i = 0; i < result->count; i++) { + if (d.is_null(d.data[i])) { + result->data[i] = result->null_value; + } else { + result->data[i].date.year = d.data[i].date.year + 1; + result->data[i].date.month = d.data[i].date.month; + result->data[i].date.day = d.data[i].date.day; + result->data[i].time.hours = (i + 1234) % 24; + result->data[i].time.minutes = (i + 1234) % 60; + result->data[i].time.seconds = (i + 1234) % 60; + result->data[i].time.ms = (i + 1234) % 1000; + } + } +} + +statement ok +CREATE TABLE times(i TIMESTAMP) + +statement ok +INSERT INTO times VALUES ('1992-09-20 03:03:02.0101'), (NULL), ('2000-03-10 03:03:02.0101') + +query T rowsort +SELECT capi02_increment_timestamp(i) FROM times +---- +1993-09-20 10:34:34.234000 +2001-03-10 12:36:36.236000 +NULL + +statement ok +DROP FUNCTION capi02_increment_timestamp + +statement ok +DROP TABLE times + +statement ok +ROLLBACK diff --git a/sql/backends/monet5/UDF/capi/Tests/capi03.test b/sql/backends/monet5/UDF/capi/Tests/capi03.test new file mode 100644 --- /dev/null +++ b/sql/backends/monet5/UDF/capi/Tests/capi03.test @@ -0,0 +1,61 @@ +statement ok +START TRANSACTION + +statement ok +CREATE FUNCTION capi03() RETURNS TABLE(i INTEGER, j INTEGER) LANGUAGE C { + size_t index; + i->initialize(i, 10); + j->initialize(j, 20); + for(index = 0; index < i->count; index++) { + i->data[index] = 0; + } + for(index = 0; index < j->count; index++) { + j->data[index] = 1; + } +} + +statement error +SELECT * FROM capi03() + +statement ok +ROLLBACK + +statement ok +START TRANSACTION + +statement ok +CREATE FUNCTION capi03(inp INTEGER) RETURNS INTEGER LANGUAGE C { + +} + +statement ok +CREATE TABLE integers(i INTEGER) + +statement ok +INSERT INTO integers VALUES (1), (2), (3), (4), (5) + +statement error +SELECT capi03(i) FROM integers + +statement ok +ROLLBACK + +statement ok +START TRANSACTION + +statement ok +CREATE FUNCTION capi03(inp INTEGER) RETURNS INTEGER LANGUAGE C { + return "Something went wrong!"; +} + +statement ok +CREATE TABLE integers(i INTEGER) + +statement ok +INSERT INTO integers VALUES (1), (2), (3), (4), (5) + +statement error +SELECT capi03(i) FROM integers + +statement ok +ROLLBACK diff --git a/sql/backends/monet5/UDF/capi/Tests/capi04.test b/sql/backends/monet5/UDF/capi/Tests/capi04.test new file mode 100644 --- /dev/null +++ b/sql/backends/monet5/UDF/capi/Tests/capi04.test @@ -0,0 +1,74 @@ +statement ok _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list