diff options
author | David Sommerseth <dazo@users.sourceforge.net> | 2013-05-28 15:36:06 +0200 |
---|---|---|
committer | David Sommerseth <dazo@users.sourceforge.net> | 2013-05-28 15:51:12 +0200 |
commit | 85ad4bbb21e478b5b3699dfa14c97dccfd336f10 (patch) | |
tree | 1c80230a9868992c80fc6041a02533e55e7630f9 /database | |
parent | f9d6ec2ee6c547b9212be9320fb3bc4c13230e6f (diff) | |
download | eurephia-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.c | 23 | ||||
-rw-r--r-- | database/eurephiadb_mapping.h | 4 | ||||
-rw-r--r-- | database/sqlite/sqlite.c | 1 |
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: |