Выполнять запросы в самой пользовательской функции допустимо? И что для этого нужно сделать? Как в клиентском приложении соединится с сервером (т.е. самим собой)?
Википедия - ORM (англ. Object-relational mapping), (русск. Объектно-реляционная проекция) — технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных».
Я к тому, что всю работу с базой на уровне SQL лучше выносить в отдельный слой, в своём приложении вообще абстрагируясь от его синтаксиса. Понятно же, что `Entry.objects.filter(private=0)[:5]` гораздо выше уровнем, чем `SELECT * FROM entry WHERE private=0 LIMIT 5;`. Когда поменяется хранилище, тебе понадобится только поправить орм, а функции не тронешь.
char *metaphon(UDF_INIT *initid __attribute__((unused)),
UDF_ARGS *args, char *result, unsigned long *length,
char *is_null, char *error __attribute__((unused)))
{
int cid = ((int*)args->args[0])[0];
int gid = ((int*)args->args[1])[0];
const char *text = args->args[2];
if (!text) /* Null argument */
{
*is_null=1;
return 0;
}
result[0]=0;
strcpy( result, text );
//SELECT name FROM table2 WHERE id=cid... и т.п.
*length= strlen(result);
return result;
}
Вот такая переделка стандартного udf_example.c, и в этой функции нужно выполнить ряд запросов по базе данных и на выходе дать сумарную строку. И собственно не понятно как работать с самим сервером. Просто подключаться через libmysqclient к самому же себе выглядит глупо, ведь этот код и так в самом сервере исполняется.