summaryrefslogtreecommitdiffstats
path: root/database
diff options
context:
space:
mode:
authorDavid Sommerseth <dazo@users.sourceforge.net>2013-05-28 15:36:06 +0200
committerDavid Sommerseth <dazo@users.sourceforge.net>2013-05-28 15:51:12 +0200
commit85ad4bbb21e478b5b3699dfa14c97dccfd336f10 (patch)
tree1c80230a9868992c80fc6041a02533e55e7630f9 /database
parentf9d6ec2ee6c547b9212be9320fb3bc4c13230e6f (diff)
downloadeurephia-85ad4bbb21e478b5b3699dfa14c97dccfd336f10.tar.gz
eurephia-85ad4bbb21e478b5b3699dfa14c97dccfd336f10.tar.xz
eurephia-85ad4bbb21e478b5b3699dfa14c97dccfd336f10.zip
database/field mapping: Introduce boolean field type
This field type ensures boolean values will be predictable when working in the database driver layer. Signed-off-by: David Sommerseth <dazo@users.sourceforge.net>
Diffstat (limited to 'database')
-rw-r--r--database/eurephiadb_mapping.c23
-rw-r--r--database/eurephiadb_mapping.h4
-rw-r--r--database/sqlite/sqlite.c1
3 files changed, 26 insertions, 2 deletions
diff --git a/database/eurephiadb_mapping.c b/database/eurephiadb_mapping.c
index 879c795..6ae289d 100644
--- a/database/eurephiadb_mapping.c
+++ b/database/eurephiadb_mapping.c
@@ -312,6 +312,29 @@ eDBfieldMap *eDBxmlMapping(eurephiaCTX *ctx, eDBfieldMap *dbmap, const char *tbl
NULL)
: strdup(""));
}
+
+ case ft_BOOL:
+ // Normalise boolean values.
+ //
+ // A boolean value will be either 't' (true) or 'f' (false)
+ // Unknonw/invalid values will be interpreted as false.
+ //
+ if( nptr->children != NULL ) {
+ switch (nptr->children->content[0]) {
+ case '1':
+ case 't':
+ case 'T':
+ case 'y':
+ case 'Y':
+ ptr->value = strdup("t");
+ break;
+ default:
+ ptr->value = strdup("f");
+ break;
+ }
+ } else {
+ ptr->value = strdup("f");
+ }
break;
default:
diff --git a/database/eurephiadb_mapping.h b/database/eurephiadb_mapping.h
index 556a6d0..8afeb34 100644
--- a/database/eurephiadb_mapping.h
+++ b/database/eurephiadb_mapping.h
@@ -43,7 +43,7 @@
/**
* Enumeration of different field types
*/
-typedef enum eDBfieldType_e { ft_UNDEF, ft_INT, ft_STRING, ft_STRING_LOWER, ft_DATETIME, ft_PASSWD, ft_SETNULL } eDBfieldType;
+typedef enum eDBfieldType_e { ft_UNDEF, ft_INT, ft_STRING, ft_STRING_LOWER, ft_DATETIME, ft_PASSWD, ft_SETNULL, ft_BOOL } eDBfieldType;
/**
* Enumeration of different SQL filter types (IS NULL, =, !=, <=, >=, >, <, etc)
@@ -268,7 +268,7 @@ static eDBfieldMap eTblMap_plugins[] = {
{TABLE_PLUGINS, NULL, FIELD_TYPE, ft_STRING , flt_EQ, "type", NULL, NULL},
{TABLE_PLUGINS, NULL, FIELD_FILE, ft_STRING , flt_EQ, "dsofile", NULL, NULL},
{TABLE_PLUGINS, NULL, FIELD_CONFIG, ft_STRING , flt_EQ, "config", NULL, NULL},
- {TABLE_PLUGINS, NULL, FIELD_ACTIVATED, ft_STRING , flt_EQ, "enabled", NULL, NULL},
+ {TABLE_PLUGINS, NULL, FIELD_ACTIVATED, ft_BOOL , flt_EQ, "enabled", NULL, NULL},
{TABLE_PLUGINS, NULL, FIELD_RECID, ft_INT , flt_EQ, "plugin_id", NULL, NULL},
{0, NULL, FIELD_NONE, ft_UNDEF, flt_NOTSET, NULL, NULL, NULL}
};
diff --git a/database/sqlite/sqlite.c b/database/sqlite/sqlite.c
index a17f4b0..2122885 100644
--- a/database/sqlite/sqlite.c
+++ b/database/sqlite/sqlite.c
@@ -495,6 +495,7 @@ static char *_build_value_string(eDBfieldMap *ptr) {
val = sqlite3_mprintf("lower('%q')", ptr->value);
break;
+ case ft_BOOL:
case ft_PASSWD:
case ft_STRING:
default: