system_content printf %OS% if $system_content == Windows_NT then return 0; endi system sh/stop_dnodes.sh system sh/deploy.sh -n dnode1 -i 1 system sh/cfg.sh -n dnode1 -c udf -v 1 system sh/exec.sh -n dnode1 -s start sql connect print ======== step1 udf system sh/compile_udf.sh sql create database udf vgroups 3; sql use udf; sql select * from information_schema.ins_databases; sql create table t (ts timestamp, f int); sql insert into t values(now, 1)(now+1s, 2); system_content printf %OS% if $system_content == Windows_NT then return 0; endi if $system_content == Windows_NT then sql create function bit_and as 'C:\\Windows\\Temp\\bitand.dll' outputtype int; sql create aggregate function l2norm as 'C:\\Windows\\Temp\\l2norm.dll' outputtype double bufSize 8; else sql create function bit_and as '/tmp/udf/libbitand.so' outputtype int; sql create aggregate function l2norm as '/tmp/udf/libl2norm.so' outputtype double bufSize 8; endi sql_error create function bit_and as '/tmp/udf/libbitand.so' oputtype json; sql show functions; if $rows != 2 then return -1 endi sql select bit_and(f, f) from t; if $rows != 2 then return -1 endi if $data00 != 1 then return -1 endi if $data10 != 2 then return -1 endi sql select l2norm(f) from t; if $rows != 1 then print expect 1, actual $rows return -1 endi if $data00 != 2.236067977 then return -1 endi sql create table t2 (ts timestamp, f1 int, f2 int); sql insert into t2 values(now, 0, 0)(now+1s, 1, 1); sql select bit_and(f1, f2) from t2; if $rows != 2 then return -1 endi if $data00 != 0 then return -1 endi if $data10 != 1 then return -1 endi sql select l2norm(f1, f2) from t2; if $rows != 1 then return -1 endi if $data00 != 1.414213562 then return -1 endi sql insert into t2 values(now+2s, 1, null)(now+3s, null, 2); sql select bit_and(f1, f2) from t2; print $rows , $data00 , $data10 , $data20 , $data30 if $rows != 4 then return -1 endi if $data00 != 0 then return -1 endi if $data10 != 1 then return -1 endi if $data20 != NULL then return -1 endi if $data30 != NULL then return -1 endi sql select l2norm(f1, f2) from t2; print $rows, $data00 if $rows != 1 then return -1 endi if $data00 != 2.645751311 then return -1 endi sql insert into t2 values(now+4s, 4, 8)(now+5s, 5, 9); sql select l2norm(f1-f2), l2norm(f1+f2) from t2; print $rows , $data00 , $data01 if $rows != 1 then return -1; endi if $data00 != 5.656854249 then return -1 endi if $data01 != 18.547236991 then return -1 endi sql select l2norm(bit_and(f2, f1)), l2norm(bit_and(f1, f2)) from t2; print $rows , $data00 , $data01 if $rows != 1 then return -1 endi if $data00 != 1.414213562 then return -1 endi if $data01 != 1.414213562 then return -1 endi sql select l2norm(f2) from udf.t2 group by 1-bit_and(f1, f2) order by 1-bit_and(f1,f2); print $rows , $data00 , $data10 , $data20 if $rows != 3 then return -1 endi if $data00 != 2.000000000 then return -1 endi if $data10 != 9.055385138 then return -1 endi if $data20 != 8.000000000 then return -1 endi #sql drop function bit_and; #sql show functions; #if $rows != 1 then # return -1 #endi #if $data00 != @l2norm@ then # return -1 # endi #sql drop function l2norm; #sql show functions; #if $rows != 0 then # return -1 #endi system sh/exec.sh -n dnode1 -s stop -x SIGINT