Changeset: 0361ebdfd02b for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0361ebdfd02b Added Files: sql/backends/monet5/UDF/capi/Tests/capi14.sql sql/backends/monet5/UDF/capi/Tests/capi14.stable.err sql/backends/monet5/UDF/capi/Tests/capi14.stable.out Modified Files: sql/backends/monet5/UDF/capi/Tests/All sql/backends/monet5/UDF/capi/capi.c Branch: Mar2018 Log Message:
Fix JIT UDF is_null function for new flt_nil and dbl_nil and add new testcase. diffs (257 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 @@ -12,3 +12,6 @@ NOT_WIN32?capi09 NOT_WIN32?capi10 NOT_WIN32?capi11 NOT_WIN32?capi12 +NOT_WIN32?capi13 +NOT_WIN32?capi14 + diff --git a/sql/backends/monet5/UDF/capi/Tests/capi14.sql b/sql/backends/monet5/UDF/capi/Tests/capi14.sql new file mode 100644 --- /dev/null +++ b/sql/backends/monet5/UDF/capi/Tests/capi14.sql @@ -0,0 +1,35 @@ +# NULL values +START TRANSACTION; + +CREATE FUNCTION capi14(i INTEGER, j REAL, k DOUBLE) RETURNS DOUBLE LANGUAGE C { + size_t it; + result->initialize(result, i.count); + for(it = 0; it < i.count; it++) { + result->data[it] = 0; + if (!i.is_null(i.data[it])) { + result->data[it] += i.data[it]; + } else { + result->data[it] -= 1; + } + if (!j.is_null(j.data[it])) { + result->data[it] += j.data[it]; + } else { + result->data[it] -= 1; + } + if (!k.is_null(k.data[it])) { + result->data[it] += k.data[it]; + } else { + result->data[it] -= 1; + } + } +}; + +CREATE TABLE vals(i INTEGER, j REAL, k DOUBLE); +INSERT INTO vals VALUES (1, NULL, 1), (NULL, 2, 2), (3, 3, NULL), (NULL, NULL, NULL), (5, 5, 5); + +SELECT i, j, k, capi14(i, j, k) FROM vals; + +DROP FUNCTION capi14; +DROP TABLE vals; + +ROLLBACK; diff --git a/sql/backends/monet5/UDF/capi/Tests/capi14.stable.err b/sql/backends/monet5/UDF/capi/Tests/capi14.stable.err new file mode 100644 --- /dev/null +++ b/sql/backends/monet5/UDF/capi/Tests/capi14.stable.err @@ -0,0 +1,36 @@ +stderr of test 'capi14` in directory 'sql/backends/monet5/UDF/capi` itself: + + +# 09:44:31 > +# 09:44:31 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=32793" "--set" "mapi_usock=/var/tmp/mtest-48691/.s.monetdb.32793" "--set" "monet_prompt=" "--forcemito" "--dbpath=/Users/myth/opt/var/MonetDB/mTests_sql_backends_monet5_UDF_capi" "--set" "embedded_py=true" "--set" "embedded_c=true" +# 09:44:31 > + +# builtin opt gdk_dbpath = /Users/myth/opt/var/monetdb5/dbfarm/demo +# builtin opt gdk_debug = 0 +# builtin opt gdk_vmtrim = no +# builtin opt monet_prompt = > +# builtin opt monet_daemon = no +# builtin opt mapi_port = 50000 +# builtin opt mapi_open = false +# builtin opt mapi_autosense = false +# builtin opt sql_optimizer = default_pipe +# builtin opt sql_debug = 0 +# cmdline opt gdk_nr_threads = 0 +# cmdline opt mapi_open = true +# cmdline opt mapi_port = 32793 +# cmdline opt mapi_usock = /var/tmp/mtest-48691/.s.monetdb.32793 +# cmdline opt monet_prompt = +# cmdline opt gdk_dbpath = /Users/myth/opt/var/MonetDB/mTests_sql_backends_monet5_UDF_capi +# cmdline opt embedded_py = true +# cmdline opt embedded_c = true +# cmdline opt gdk_debug = 553648138 + +# 09:44:31 > +# 09:44:31 > "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-48691" "--port=32793" +# 09:44:31 > + + +# 09:44:32 > +# 09:44:32 > "Done." +# 09:44:32 > + diff --git a/sql/backends/monet5/UDF/capi/Tests/capi14.stable.out b/sql/backends/monet5/UDF/capi/Tests/capi14.stable.out new file mode 100644 --- /dev/null +++ b/sql/backends/monet5/UDF/capi/Tests/capi14.stable.out @@ -0,0 +1,101 @@ +stdout of test 'capi14` in directory 'sql/backends/monet5/UDF/capi` itself: + + +# 09:44:31 > +# 09:44:31 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=32793" "--set" "mapi_usock=/var/tmp/mtest-48691/.s.monetdb.32793" "--set" "monet_prompt=" "--forcemito" "--dbpath=/Users/myth/opt/var/MonetDB/mTests_sql_backends_monet5_UDF_capi" "--set" "embedded_py=true" "--set" "embedded_c=true" +# 09:44:31 > + +# MonetDB 5 server v11.29.2 +# This is an unreleased version +# Serving database 'mTests_sql_backends_monet5_UDF_capi', using 4 threads +# Compiled for x86_64-apple-darwin15.6.0/64bit with 128bit integers +# Found 8.000 GiB available main-memory. +# Copyright (c) 1993 - July 2008 CWI. +# Copyright (c) August 2008 - 2018 MonetDB B.V., all rights reserved +# Visit https://www.monetdb.org/ for further information +# Listening for connection requests on mapi:monetdb://Marks-MacBook-Pro.local:32793/ +# Listening for UNIX domain connection requests on mapi:monetdb:///var/tmp/mtest-48691/.s.monetdb.32793 +# MonetDB/SQL module loaded +# MonetDB/Python2 module loaded + +Ready. +# SQL catalog created, loading sql scripts once +# loading sql script: 09_like.sql +# loading sql script: 10_math.sql +# loading sql script: 11_times.sql +# loading sql script: 12_url.sql +# loading sql script: 13_date.sql +# loading sql script: 14_inet.sql +# loading sql script: 15_querylog.sql +# loading sql script: 16_tracelog.sql +# loading sql script: 17_temporal.sql +# loading sql script: 18_index.sql +# loading sql script: 20_vacuum.sql +# loading sql script: 21_dependency_functions.sql +# loading sql script: 21_dependency_views.sql +# loading sql script: 22_clients.sql +# loading sql script: 23_skyserver.sql +# loading sql script: 25_debug.sql +# loading sql script: 26_sysmon.sql +# loading sql script: 27_rejects.sql +# loading sql script: 39_analytics.sql +# loading sql script: 39_analytics_hge.sql +# loading sql script: 40_json.sql +# loading sql script: 40_json_hge.sql +# loading sql script: 41_md5sum.sql +# loading sql script: 45_uuid.sql +# loading sql script: 46_profiler.sql +# loading sql script: 51_sys_schema_extension.sql +# loading sql script: 60_wlcr.sql +# loading sql script: 72_fits.sql +# loading sql script: 74_netcdf.sql +# loading sql script: 75_storagemodel.sql +# loading sql script: 80_statistics.sql +# loading sql script: 80_udf.sql +# loading sql script: 80_udf_hge.sql +# loading sql script: 90_generator.sql +# loading sql script: 90_generator_hge.sql +# loading sql script: 99_system.sql + +# 09:44:31 > +# 09:44:31 > "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-48691" "--port=32793" +# 09:44:31 > + +#START TRANSACTION; +#CREATE FUNCTION capi14(i INTEGER, j REAL, k DOUBLE) RETURNS DOUBLE LANGUAGE C { +# size_t it; +# result->initialize(result, i.count); +# for(it = 0; it < i.count; it++) { +# result->data[it] = 0; +# if (!i.is_null(i.data[it])) { +# result->data[it] += i.data[it]; +# } else { +# result->data[it] -= 1; +# } +# if (!j.is_null(j.data[it])) { +# result->data[it] += j.data[it]; +# } else { +# result->data[it] -= 1; +# } +# if (!k.is_null(k.data[it])) { +#CREATE TABLE vals(i INTEGER, j REAL, k DOUBLE); +#INSERT INTO vals VALUES (1, NULL, 1), (NULL, 2, 2), (3, 3, NULL), (NULL, NULL, NULL), (5, 5, 5); +[ 5 ] +#SELECT i, j, k, capi14(i, j, k) FROM vals; +% sys.vals, sys.vals, sys.vals, sys.L5 # table_name +% i, j, k, L5 # name +% int, real, double, double # type +% 1, 15, 24, 24 # length +[ 1, NULL, 1, 1 ] +[ NULL, 2, 2, 3 ] +[ 3, 3, NULL, 5 ] +[ NULL, NULL, NULL, -3 ] +[ 5, 5, 5, 15 ] +#DROP FUNCTION capi14; +#DROP TABLE vals; +#ROLLBACK; + +# 09:44:32 > +# 09:44:32 > "Done." +# 09:44:32 > + diff --git a/sql/backends/monet5/UDF/capi/capi.c b/sql/backends/monet5/UDF/capi/capi.c --- a/sql/backends/monet5/UDF/capi/capi.c +++ b/sql/backends/monet5/UDF/capi/capi.c @@ -208,7 +208,10 @@ static void *wrapped_GDK_zalloc_nojump(s return add_allocated_region(ptr); } -#define GENERATE_NUMERIC_FUNCTIONS(type, tpename) \ +#define GENERATE_NUMERIC_IS_NULL(type, tpename) \ + static int tpename##_is_null(type value) { return value == tpename##_nil; } + +#define GENERATE_NUMERIC_INITIALIZE(type, tpename) \ static void tpename##_initialize(struct cudf_data_struct_##tpename *self, \ size_t count) \ { \ @@ -226,8 +229,11 @@ static void *wrapped_GDK_zalloc_nojump(s self->count = count; \ self->data = (type*) b->theap.base; \ BATsetcount(b, count); \ - } \ - static int tpename##_is_null(type value) { return value == tpename##_nil; } + } + +#define GENERATE_NUMERIC_ALL(type, tpename) \ + GENERATE_NUMERIC_INITIALIZE(type, tpename) \ + GENERATE_NUMERIC_IS_NULL(type, tpename) #define GENERATE_BASE_HEADERS(type, tpename) \ @@ -243,14 +249,22 @@ static void *wrapped_GDK_zalloc_nojump(s GENERATE_BASE_HEADERS(tpe, tpename); \ static int tpename##_is_null(tpe value) { return value == tpename##_nil; } -GENERATE_NUMERIC_FUNCTIONS(bit, bit); -GENERATE_NUMERIC_FUNCTIONS(bte, bte); -GENERATE_NUMERIC_FUNCTIONS(sht, sht); -GENERATE_NUMERIC_FUNCTIONS(int, int); -GENERATE_NUMERIC_FUNCTIONS(lng, lng); -GENERATE_NUMERIC_FUNCTIONS(flt, flt); -GENERATE_NUMERIC_FUNCTIONS(dbl, dbl); -GENERATE_NUMERIC_FUNCTIONS(oid, oid); +GENERATE_NUMERIC_ALL(bit, bit); +GENERATE_NUMERIC_ALL(bte, bte); +GENERATE_NUMERIC_ALL(sht, sht); +GENERATE_NUMERIC_ALL(int, int); +GENERATE_NUMERIC_ALL(lng, lng); +GENERATE_NUMERIC_INITIALIZE(flt, flt); +GENERATE_NUMERIC_INITIALIZE(dbl, dbl); +GENERATE_NUMERIC_ALL(oid, oid); + +static int flt_is_null(flt value) { + return is_flt_nil(value); +} + +static int dbl_is_null(dbl value) { + return is_dbl_nil(value); +} GENERATE_BASE_HEADERS(char *, str); GENERATE_BASE_HEADERS(cudf_data_date, date); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list