первое сообщение здесь! Этот сайт оказал первостепенную помощь по огромному количеству предыдущих технических вопросов. Спасибо за вашу напряженную работу, все вместе.sqlite3 C пользователь определяемая функция не называемый
И теперь я пришел к своей проблеме.
Я хотел бы написать C sqlite3 UDF (User Defined Function). Предположим, что имя функции - «myFunc».
Я работаю над малиной PI 3B - по-русски (по-русски).
test_table имеет следующую схему:
create table test_table (
a integer,
b integer
);
мини-программа (для проверки подхода) открывает БД и устанавливает функцию. Затем ждет неопределенное время для событий триггера.
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
#include <signal.h>
#include <stdbool.h>
#include <unistd.h>
#include <sys/stat.h>
static void myFuncBody(sqlite3_context *context, int argc, sqlite3_value **argv)
{
printf("myFunc fired!\n");
fflush(stdout);
}
int main(int argc, char** argv)
{
sqlite3 *db_handler;
char *errMsg;
int error;
error = sqlite3_open("test.db", &db_handler);
if (error)
{
printf("Error opening the DB.\n");
exit(-2);
}
error = sqlite3_create_function(
db_handler,
"myFunc",
0,
SQLITE_UTF8,
NULL,
myFuncBody,
NULL,
NULL
);
if (error != SQLITE_OK)
{
printf("Error creating the function.\n");
}
for (;;);
return 0;
}
я затем открыть отдельно test.db на консоли sqlite3:
$ sqlite3 test.db
$ sqlite> select myFunc();
Error: no such function: myFunc
Я думаю MyFunc должны быть видны, но это, кажется, не так.
Я мог бы создать триггер, но результат, очевидно, не изменится.
$ sqlite> create trigger trigger1 after insert on test_table begin select myFunc(); end;
$ sqlite> insert into test_table values(-100, -150);
Error: no such function: myFunc
Моя цель - просто получить уведомление о вставке на test_table.
Является ли что-то в основном неправильным с моим подходом?
Любая помощь будет очень удовлетворительной.
С уважением, mopyot
Спасибо за быстрый ответ. Понял, попробовал и проверил. Итак, есть ли способ получить уведомление о вставках, выполненных другими актерами? – mopyot
@mopyot Если вы говорите о отдельных процессах: механизм sqlite3 не существует, вам нужно будет использовать другое средство interprocess-communication для достижения этого. – Ctx