summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJozsef Kadlecsik <kadlec@blackhole.kfki.hu>2012-01-15 13:16:01 +0100
committerJozsef Kadlecsik <kadlec@blackhole.kfki.hu>2012-01-16 16:56:17 +0100
commit56ab48677e9636e309e45794f7b516e3744731ac (patch)
treebe8c9ad5a42797fc2cba76212e4262f9ef6d4fae
parenteb6834109875d16b05f8b1990f28e10f3114cafd (diff)
Support stored mysql procedures besides stored functions
MySQL stored procedures must be invoked by the "CALL" SQL command and not by "SELECT". Add the convention that if the procedure name starts with "CALL", then the issued SQL command is "CALL procedurename(args)". The stored procedure support in MySQL automatically brings transaction support too. Signed-off-by: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
-rw-r--r--doc/ulogd.sgml4
-rw-r--r--util/db.c2
2 files changed, 6 insertions, 0 deletions
diff --git a/doc/ulogd.sgml b/doc/ulogd.sgml
index 547b56a..0f18611 100644
--- a/doc/ulogd.sgml
+++ b/doc/ulogd.sgml
@@ -471,6 +471,10 @@ If procedure name is:
"table" variable.</item>
<item>start with "INSERT ": Configuration has to specify the start of the INSERT query that will be used. For example,
a typical value is "INSERT INTO ulog2".</item>
+<item>start with "CALL": the named stored procedure is executed with
+the "CALL" MySQL command.</item>
+<item>Otherwise the named stored function is executed with
+the "SELECT" MySQL command.</item>
</itemize>
<tag>db</tag>
Name of the mysql database.
diff --git a/util/db.c b/util/db.c
index 8d812c7..54f8882 100644
--- a/util/db.c
+++ b/util/db.c
@@ -122,6 +122,8 @@ static int sql_createstmt(struct ulogd_pluginstance *upi)
*(mi->stmt_val - 1) = ')';
sprintf(mi->stmt_val, " values (");
+ } else if (strncasecmp(procedure,"CALL", strlen("CALL")) == 0) {
+ sprintf(mi->stmt, "CALL %s(", procedure);
} else {
sprintf(mi->stmt, "SELECT %s(", procedure);