Added a new type to allow NULL values to be part of queries
This commit is contained in:
parent
95c60145ef
commit
9f5531ac71
|
@ -27,7 +27,8 @@
|
|||
/* types */
|
||||
typedef enum _DatabaseType
|
||||
{
|
||||
DT_INTEGER = 0,
|
||||
DT_NULL = 0,
|
||||
DT_INTEGER,
|
||||
DT_TIMESTAMP,
|
||||
DT_VARCHAR
|
||||
} DatabaseType;
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include "database.h"
|
||||
#include "../../config.h"
|
||||
|
||||
/* constants */
|
||||
#ifndef PREFIX
|
||||
# define PREFIX "/usr/local"
|
||||
#endif
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue
Block a user