Added a new type to allow NULL values to be part of queries

This commit is contained in:
Pierre Pronchery 2012-11-30 01:23:53 +01:00
parent 95c60145ef
commit 9f5531ac71
4 changed files with 27 additions and 5 deletions

View File

@ -27,7 +27,8 @@
/* types */
typedef enum _DatabaseType
{
DT_INTEGER = 0,
DT_NULL = 0,
DT_INTEGER,
DT_TIMESTAMP,
DT_VARCHAR
} DatabaseType;

View File

@ -25,6 +25,7 @@
#include "database.h"
#include "../../config.h"
/* constants */
#ifndef PREFIX
# define PREFIX "/usr/local"
#endif

View File

@ -257,6 +257,11 @@ static int _pgsql_prepare_query(PgSQL * pgsql, PgSQLStatement * statement,
v[cnt] = NULL;
switch(type)
{
case DT_NULL:
if((v[cnt] = va_arg(args, void *)) != NULL)
ret = -error_set_code(1, "%s",
strerror(EINVAL));
break;
case DT_INTEGER:
l = va_arg(args, int);
snprintf(buf, sizeof(buf), "%d", l);
@ -277,13 +282,16 @@ static int _pgsql_prepare_query(PgSQL * pgsql, PgSQLStatement * statement,
break;
case DT_VARCHAR:
s = va_arg(args, char const *);
if(s != NULL && (v[cnt] = strdup(s)) == NULL)
if(s == NULL)
ret = -error_set_code(1, "%s",
strerror(EINVAL));
else if((v[cnt] = strdup(s)) == NULL)
ret = -error_set_code(1, "%s",
strerror(errno));
break;
default:
ret = -error_set_code(1, "%s",
strerror(ENOSYS));
ret = -error_set_code(1, "%s (%d)",
"Unsupported type", type);
break;
}
#ifdef DEBUG

View File

@ -190,6 +190,13 @@ static int _sqlite3_prepare_query(SQLite3 * sqlite3,
}
switch(type)
{
case DT_NULL:
if((s = va_arg(args, void *)) != NULL)
ret = -error_set_code(1, "%s",
strerror(EINVAL));
else
sqlite3_bind_null(statement->stmt, i);
break;
case DT_INTEGER:
l = va_arg(args, int);
#ifdef DEBUG
@ -221,7 +228,12 @@ static int _sqlite3_prepare_query(SQLite3 * sqlite3,
sqlite3->handle));
break;
case DT_VARCHAR:
s = va_arg(args, char const *);
if((s = va_arg(args, char const *)) == NULL)
{
ret = -error_set_code(1, "%s",
strerror(EINVAL));
break;
}
#ifdef DEBUG
fprintf(stderr, "DEBUG: %s() %s=\"%s\" (%d)\n",
__func__, name, s, i);