Пользовательская функция MonetDB с двумя двойными параметрами

Я пытаюсь оценить производительность MonetDB для аналитической рабочей нагрузки, которая содержит большое количество вычислений с плавающей запятой, которые используются в агрегации.

Я пытаюсь реализовать UDF на основе C в MonetDB для достижения этой цели, и я сталкиваюсь с ошибкой. Я не уверен, как правильно реализовать функцию на основе моей обязательной подписи, которая

double f(double,double);

Во-первых, я использую MonetDB-11.15.17, созданный на основе Ubuntu 13.04.

Я добавил следующие файлы в каталог./sql/backends/monet5/UDF, как показано ниже:

udf.c:

str UDFtest(flt *ret,flt *_p1,flt *_p2)
{
    *ret = *_p1+*_p2;
    return MAL_SUCCEED;
}

udf.h:

udf_export str UDFtest(flt *,flt*,flt*);

udf.mal:

module udf;
command calc_test(one:flt,two:flt):flt
address UDFtest
comment "udf floating point test";

80_udf.sql:

create function calc_test(one double,two double)
returns double external name udf.calc_test;

Я тогда побежал, бутстрап; делать; sudo make install; и набрал следующее в приглашении mclient:

declare f1 float;
declare f2 float;
set f1=0.1;
set f2=0.2;
select calc_test(f1,f2);

Это приводит к следующей ошибке:

TypeException:user.s1_1[6]:'udf.calc_test' undefined in: _9:any := udf.calc_test(_5:dbl, _8:dbl)
program contains errors

Я пытался собрать воедино все, что смогу из документации и источника, но сейчас застрял. Где я ошибся в этом процессе?

1 ответ

Решение

Я решил это. Я перепутал свои типы данных, предположив, что typedef flt эквивалентен double как float === double в SQL.

Тип flt в C эквивалентен "реальному" типу SQL. Это должно выглядеть так:

udf.c

str UDFtest(dbl *ret,dbl *_p1,dbl *_p2)
{
    *ret = *_p1+*_p2;
    return MAL_SUCCEED;
}

udf.h

udf_export str UDFtest(dbl *,dbl*,dbl*);

udf.mal

module udf;
command calc_test(one:dbl,two:dbl):dbl
address UDFtest
comment "udf floating point test";

80_udf.sql

create function calc_test(one double,two double)
returns double external name udf.calc_test;
Другие вопросы по тегам