У меня есть следующий код cpp, который определяет UDF в Netezza, который берет дату некоторого формата и изменяет ее на стандартный формат YYYYMMDD:
//dateconvert.cpp
#include <stdarg.h>
#include <string.h>
#include "udxinc.h"#include "udxhelpers.h"
using namespace nz::udx_ver2;
class Dateconvert: public Udf
{
public:
Dateconvert(UdxInit *pInit) : Udf(pInit){}
~Dateconvert(){}
static Udf* instantiate();
virtual ReturnValue evaluate()
{
StringReturn* ret = stringReturnInfo();
StringArg *str;
str = stringArg(0);
int lengths = str->length;
char *datas = str->data;
string data = datas;
data = "'" + data + "'";
string cmd="date -d " + data + " +%Y%m%d 2>/dev/null";
FILE *ls = popen(cmd.c_str(), "r");
char retval[100];
fgets(retval, sizeof(retval), ls);
if(!isdigit(retval[0]))
{
strcpy(retval,"99991231");
}
pclose(ls);
ret->size = sizeof(retval);
memcpy(ret->data, retval, sizeof(retval));
NZ_UDX_RETURN_STRING(ret);
}
};Udf* Dateconvert::instantiate(UdxInit *pInit)
{
return new Dateconvert(pInit);
}
Это команда, которую я использую для компиляции / регистрации UDF:
nzudxcompile /export/home/nz/dateconvert.cpp -o dateconvert.o --sig
"Dateconvert(VARCHAR(200))" --version 2 --return VARCHAR(200)
--class Dateconvert --user user1 --pw password1 --db db1
Когда я иду на компиляцию, я получаю ошибку:
-bash: syntax error near unexpected token `('
Как bash может генерировать ошибку компиляции при компиляции программы на c ++? Ошибка сохраняется даже при отключении самого файла cpp, поэтому я предполагаю, что проблема связана с командой компиляции.
Задача ещё не решена.
Других решений пока нет …