diff options
author | Alexander Sulfrian <alexander@sulfrian.net> | 2011-12-07 05:08:46 +0100 |
---|---|---|
committer | Alexander Sulfrian <alexander@sulfrian.net> | 2011-12-07 05:09:15 +0100 |
commit | 895b47c26ea681c0e09e7c9f468a2934cb6f452b (patch) | |
tree | 17f61b3d7aec2f3127f63b8473897bd839def1dc | |
parent | 1ef57f73e7a8d8de32587e27a5b3ed35cf64ac99 (diff) | |
download | ts3db_postgres-895b47c26ea681c0e09e7c9f468a2934cb6f452b.tar.gz ts3db_postgres-895b47c26ea681c0e09e7c9f468a2934cb6f452b.tar.xz ts3db_postgres-895b47c26ea681c0e09e7c9f468a2934cb6f452b.zip |
fix last inserted id
pg insert should return the serial field as last_inserted_id
-rw-r--r-- | ts3db.c | 16 |
1 files changed, 10 insertions, 6 deletions
@@ -1,6 +1,7 @@ #include "ts3db.h" #include <libpq-fe.h> #include <stdbool.h> +#include <string.h> #define MAX_CONNECTIONS 100 @@ -182,15 +183,18 @@ unsigned long long ts3dbplugin_getlastinsertid(unsigned int connection_nr) { log("getlastinsertid", LOG_DEVELOP); const PGresult *result = get_last_result(connection_nr); - Oid value = PQoidValue(result); - fprintf(stderr, "%llu\n", value); - if (value == InvalidOid) { - log("0", LOG_DEVELOP); - return 0; + if (PQnfields(result) == 1) { + if (strcmp(PQfname(result, 0), "last_inserted_id") == 0) { + const char *count = PQgetvalue(result, 0, 0); + unsigned long long number; + + sscanf(count, "%llu", &number); + return number; + } } - return value; + return 0; } unsigned int ts3dbplugin_open(unsigned int connection_nr, const char* query, |