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 */
|
/* types */
|
||||||
typedef enum _DatabaseType
|
typedef enum _DatabaseType
|
||||||
{
|
{
|
||||||
DT_INTEGER = 0,
|
DT_NULL = 0,
|
||||||
|
DT_INTEGER,
|
||||||
DT_TIMESTAMP,
|
DT_TIMESTAMP,
|
||||||
DT_VARCHAR
|
DT_VARCHAR
|
||||||
} DatabaseType;
|
} DatabaseType;
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include "database.h"
|
#include "database.h"
|
||||||
#include "../../config.h"
|
#include "../../config.h"
|
||||||
|
|
||||||
|
/* constants */
|
||||||
#ifndef PREFIX
|
#ifndef PREFIX
|
||||||
# define PREFIX "/usr/local"
|
# define PREFIX "/usr/local"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -257,6 +257,11 @@ static int _pgsql_prepare_query(PgSQL * pgsql, PgSQLStatement * statement,
|
||||||
v[cnt] = NULL;
|
v[cnt] = NULL;
|
||||||
switch(type)
|
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:
|
case DT_INTEGER:
|
||||||
l = va_arg(args, int);
|
l = va_arg(args, int);
|
||||||
snprintf(buf, sizeof(buf), "%d", l);
|
snprintf(buf, sizeof(buf), "%d", l);
|
||||||
|
@ -277,13 +282,16 @@ static int _pgsql_prepare_query(PgSQL * pgsql, PgSQLStatement * statement,
|
||||||
break;
|
break;
|
||||||
case DT_VARCHAR:
|
case DT_VARCHAR:
|
||||||
s = va_arg(args, char const *);
|
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",
|
ret = -error_set_code(1, "%s",
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ret = -error_set_code(1, "%s",
|
ret = -error_set_code(1, "%s (%d)",
|
||||||
strerror(ENOSYS));
|
"Unsupported type", type);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
|
@ -190,6 +190,13 @@ static int _sqlite3_prepare_query(SQLite3 * sqlite3,
|
||||||
}
|
}
|
||||||
switch(type)
|
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:
|
case DT_INTEGER:
|
||||||
l = va_arg(args, int);
|
l = va_arg(args, int);
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
@ -221,7 +228,12 @@ static int _sqlite3_prepare_query(SQLite3 * sqlite3,
|
||||||
sqlite3->handle));
|
sqlite3->handle));
|
||||||
break;
|
break;
|
||||||
case DT_VARCHAR:
|
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
|
#ifdef DEBUG
|
||||||
fprintf(stderr, "DEBUG: %s() %s=\"%s\" (%d)\n",
|
fprintf(stderr, "DEBUG: %s() %s=\"%s\" (%d)\n",
|
||||||
__func__, name, s, i);
|
__func__, name, s, i);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user