summaryrefslogtreecommitdiffstats
path: root/database
diff options
context:
space:
mode:
authorDavid Sommerseth <dazo@users.sourceforge.net>2008-12-11 14:11:44 +0100
committerDavid Sommerseth <dazo@users.sourceforge.net>2008-12-11 14:11:44 +0100
commitc132838440c3f602283bf92146433800ee1bf9b2 (patch)
tree664857d975507e2631c471d4dd9b71cfc13d40ec /database
parentf60ecdff15cf48316b24a73b500c7f9083bd10dc (diff)
Enhanced table/field mapping and eDBmkMapping_USERINFO(...) to include possibility for table aliases
Diffstat (limited to 'database')
-rw-r--r--database/eurephiadb_mapping.c18
-rw-r--r--database/eurephiadb_mapping.h79
-rw-r--r--database/sqlite/fieldmapping.h14
-rw-r--r--database/sqlite/sqlite.c4
4 files changed, 62 insertions, 53 deletions
diff --git a/database/eurephiadb_mapping.c b/database/eurephiadb_mapping.c
index 4454e1b..1a2f6c6 100644
--- a/database/eurephiadb_mapping.c
+++ b/database/eurephiadb_mapping.c
@@ -31,7 +31,7 @@
#include <passwd.h>
-eDBfieldMap *eDBprepareFieldMap(eurephiaCTX *ctx, int table, long fields[]) {
+eDBfieldMap *eDBprepareFieldMap(eurephiaCTX *ctx, int table, const char *tblalias, long fields[]) {
eDBfieldMap *map = NULL, *ptr = NULL;
int i = 0;
@@ -39,10 +39,11 @@ eDBfieldMap *eDBprepareFieldMap(eurephiaCTX *ctx, int table, long fields[]) {
ptr = (eDBfieldMap *) malloc(sizeof(eDBfieldMap)+2);
memset(ptr, 0, sizeof(eDBfieldMap)+2);
- ptr->tableid = table;
- ptr->field_id = fields[i];
- ptr->field_name = NULL;
- ptr->value = NULL;
+ ptr->tableid = table;
+ ptr->table_alias = strdup_nullsafe(tblalias);
+ ptr->field_id = fields[i];
+ ptr->field_name = NULL;
+ ptr->value = NULL;
ptr->next = map;
map = ptr;
@@ -60,6 +61,7 @@ void eDBfreeMapping(eDBfieldMap *p) {
// Release value and this pointer.
// Do not attempt to release field_name, as it is a constant char *
free_nullsafe(p->value);
+ free_nullsafe(p->table_alias);
free(p);
}
@@ -104,13 +106,15 @@ void eDBcopyMapAttribs(eDBfieldMap *newmap, eDBfieldMap *dbmap, int field) {
}
-eDBfieldMap *eDBmkMapping_USERINFO(eurephiaCTX *ctx, eDBfieldMap *dbmap, eurephiaUSERINFO *user) {
+eDBfieldMap *eDBmkMapping_USERINFO(eurephiaCTX *ctx, eDBfieldMap *dbmap, const char *tblalias,
+ eurephiaUSERINFO *user)
+{
eDBfieldMap *map = NULL, *ptr = NULL;
char *uid_str = NULL;
long fields[] = {FIELD_LASTACCESS, FIELD_DEACTIVATED, FIELD_ACTIVATED,
FIELD_PASSWD, FIELD_UNAME, FIELD_RECID, FIELD_NONE};
- map = eDBprepareFieldMap(ctx, TABLE_USERS, fields);
+ map = eDBprepareFieldMap(ctx, TABLE_USERS, tblalias, fields);
assert( map != NULL );
// Convert uid from int to char *
diff --git a/database/eurephiadb_mapping.h b/database/eurephiadb_mapping.h
index e6f1134..5079490 100644
--- a/database/eurephiadb_mapping.h
+++ b/database/eurephiadb_mapping.h
@@ -28,6 +28,7 @@ typedef enum eDBfieldType_e { ft_UNDEF, ft_INT, ft_STRING, ft_DATETIME, ft_PASSW
typedef struct _eDBfieldMap_s {
int tableid;
+ char *table_alias;
long field_id;
eDBfieldType field_type;
char *field_name;
@@ -70,62 +71,62 @@ typedef struct _eDBfieldMap_s {
#ifdef EUREPHIADB_MAPPING_C
static eDBfieldMap eTblMap_user[] = {
- {TABLE_USERS, FIELD_RECID, ft_INT, "id"},
- {TABLE_USERS, FIELD_RECID, ft_INT, "uid"},
- {TABLE_USERS, FIELD_UNAME, ft_STRING, "username"},
- {TABLE_USERS, FIELD_ACTIVATED, ft_DATETIME, "activated"},
- {TABLE_USERS, FIELD_DEACTIVATED, ft_DATETIME, "deactivated"},
- {TABLE_USERS, FIELD_LASTACCESS, ft_DATETIME, "lastaccess"},
- {0, 0, ft_UNDEF, NULL}
+ {TABLE_USERS, NULL, FIELD_RECID, ft_INT, "id"},
+ {TABLE_USERS, NULL, FIELD_RECID, ft_INT, "uid"},
+ {TABLE_USERS, NULL, FIELD_UNAME, ft_STRING, "username"},
+ {TABLE_USERS, NULL, FIELD_ACTIVATED, ft_DATETIME, "activated"},
+ {TABLE_USERS, NULL, FIELD_DEACTIVATED, ft_DATETIME, "deactivated"},
+ {TABLE_USERS, NULL, FIELD_LASTACCESS, ft_DATETIME, "lastaccess"},
+ {0, NULL, 0, ft_UNDEF, NULL}
};
static eDBfieldMap eTblMap_certificates[] = {
- {TABLE_CERTS, FIELD_RECID, ft_INT, "id"},
- {TABLE_CERTS, FIELD_RECID, ft_INT, "certid"},
- {TABLE_CERTS, FIELD_CERTDEPTH, ft_INT, "depth"},
- {TABLE_CERTS, FIELD_CNAME, ft_STRING, "name"},
- {TABLE_CERTS, FIELD_ORG, ft_STRING, "org"},
- {TABLE_CERTS, FIELD_EMAIL, ft_STRING, "email"},
- {TABLE_CERTS, FIELD_REGISTERED, ft_DATETIME, "registered"},
- {0, 0, ft_UNDEF, NULL}
+ {TABLE_CERTS, NULL, FIELD_RECID, ft_INT, "id"},
+ {TABLE_CERTS, NULL, FIELD_RECID, ft_INT, "certid"},
+ {TABLE_CERTS, NULL, FIELD_CERTDEPTH, ft_INT, "depth"},
+ {TABLE_CERTS, NULL, FIELD_CNAME, ft_STRING, "name"},
+ {TABLE_CERTS, NULL, FIELD_ORG, ft_STRING, "org"},
+ {TABLE_CERTS, NULL, FIELD_EMAIL, ft_STRING, "email"},
+ {TABLE_CERTS, NULL, FIELD_REGISTERED, ft_DATETIME, "registered"},
+ {0, NULL, 0, ft_UNDEF, NULL}
};
static eDBfieldMap eTblMap_lastlog[] = {
- {TABLE_LASTLOG, FIELD_UID, ft_INT, "uid"},
- {TABLE_LASTLOG, FIELD_CERTID, ft_INT, "certid"},
- {TABLE_LASTLOG, FIELD_REMOTEIP, ft_STRING, "ip"},
- {TABLE_LASTLOG, FIELD_VPNIP, ft_STRING, "vpnip"},
- {TABLE_LASTLOG, FIELD_SESSTATUS, ft_STRING, "status"},
- {TABLE_LASTLOG, FIELD_LOGIN, ft_DATETIME, "login"},
- {TABLE_LASTLOG, FIELD_LOGOUT, ft_DATETIME, "logout"},
- {TABLE_LASTLOG, FIELD_RECID, ft_INT, "id"},
- {0, 0, ft_UNDEF, NULL}
+ {TABLE_LASTLOG, NULL, FIELD_UID, ft_INT, "uid"},
+ {TABLE_LASTLOG, NULL, FIELD_CERTID, ft_INT, "certid"},
+ {TABLE_LASTLOG, NULL, FIELD_REMOTEIP, ft_STRING, "ip"},
+ {TABLE_LASTLOG, NULL, FIELD_VPNIP, ft_STRING, "vpnip"},
+ {TABLE_LASTLOG, NULL, FIELD_SESSTATUS, ft_STRING, "status"},
+ {TABLE_LASTLOG, NULL, FIELD_LOGIN, ft_DATETIME, "login"},
+ {TABLE_LASTLOG, NULL, FIELD_LOGOUT, ft_DATETIME, "logout"},
+ {TABLE_LASTLOG, NULL, FIELD_RECID, ft_INT, "id"},
+ {0, NULL, 0, ft_UNDEF, NULL}
};
static eDBfieldMap eTblMap_attempts[] = {
- {TABLE_ATTEMPTS, FIELD_UNAME, ft_STRING, "username"},
- {TABLE_ATTEMPTS, FIELD_REMOTEIP, ft_STRING, "ip"},
- {TABLE_ATTEMPTS, FIELD_ATTEMPTS, ft_INT, "attempts"},
- {TABLE_ATTEMPTS, FIELD_REGISTERED, ft_DATETIME, "registered"},
- {TABLE_ATTEMPTS, FIELD_LASTATTEMPT, ft_DATETIME, "lastattempt"},
- {TABLE_ATTEMPTS, FIELD_RECID, ft_INT, "id"},
- {0, 0, ft_UNDEF, NULL}
+ {TABLE_ATTEMPTS, NULL, FIELD_UNAME, ft_STRING, "username"},
+ {TABLE_ATTEMPTS, NULL, FIELD_REMOTEIP, ft_STRING, "ip"},
+ {TABLE_ATTEMPTS, NULL, FIELD_ATTEMPTS, ft_INT, "attempts"},
+ {TABLE_ATTEMPTS, NULL, FIELD_REGISTERED, ft_DATETIME, "registered"},
+ {TABLE_ATTEMPTS, NULL, FIELD_LASTATTEMPT, ft_DATETIME, "lastattempt"},
+ {TABLE_ATTEMPTS, NULL, FIELD_RECID, ft_INT, "id"},
+ {0, NULL, 0, ft_UNDEF, NULL}
};
static eDBfieldMap eTblMap_blacklist[] = {
- {TABLE_BLACKLIST, FIELD_UNAME, ft_STRING, "username"},
- {TABLE_BLACKLIST, FIELD_REMOTEIP, ft_STRING, "ip"},
- {TABLE_BLACKLIST, FIELD_REGISTERED, ft_DATETIME, "registered"},
- {TABLE_BLACKLIST, FIELD_LASTACCESS, ft_DATETIME, "lastattempt"},
- {TABLE_BLACKLIST, FIELD_LASTACCESS, ft_DATETIME, "lastaccessed"},
- {TABLE_BLACKLIST, FIELD_RECID, ft_INT, "id"},
- {0, 0, ft_UNDEF, NULL}
+ {TABLE_BLACKLIST, NULL, FIELD_UNAME, ft_STRING, "username"},
+ {TABLE_BLACKLIST, NULL, FIELD_REMOTEIP, ft_STRING, "ip"},
+ {TABLE_BLACKLIST, NULL, FIELD_REGISTERED, ft_DATETIME, "registered"},
+ {TABLE_BLACKLIST, NULL, FIELD_LASTACCESS, ft_DATETIME, "lastattempt"},
+ {TABLE_BLACKLIST, NULL, FIELD_LASTACCESS, ft_DATETIME, "lastaccessed"},
+ {TABLE_BLACKLIST, NULL, FIELD_RECID, ft_INT, "id"},
+ {0, NULL, 0, ft_UNDEF, NULL}
};
#endif // #ifdef EUREPHIADB_MAPPING_C
void eDBfreeMapping(eDBfieldMap *p);
-eDBfieldMap *eDBmkMapping_USERINFO(eurephiaCTX *ctx, eDBfieldMap *dbmap, eurephiaUSERINFO *user);
+eDBfieldMap *eDBmkMapping_USERINFO(eurephiaCTX *ctx, eDBfieldMap *dbmap, const char *alias, eurephiaUSERINFO *user);
char *eDBmkSortKeyString(eDBfieldMap *tfmap, const char *skeys_str);
#endif // !EUREPHIADB_MAPPING_H
diff --git a/database/sqlite/fieldmapping.h b/database/sqlite/fieldmapping.h
index 7f06318..e1b9d3a 100644
--- a/database/sqlite/fieldmapping.h
+++ b/database/sqlite/fieldmapping.h
@@ -23,13 +23,13 @@
# define FIELDMAPPING_H_
static eDBfieldMap tbl_sqlite_users[] = {
- {TABLE_USERS, FIELD_RECID, ft_INT, "uid", NULL, NULL},
- {TABLE_USERS, FIELD_UNAME, ft_STRING, "username", NULL, NULL},
- {TABLE_USERS, FIELD_PASSWD, ft_PASSWD, "password", NULL, NULL},
- {TABLE_USERS, FIELD_ACTIVATED, ft_DATETIME, "activated", NULL, NULL},
- {TABLE_USERS, FIELD_DEACTIVATED, ft_DATETIME, "deactivated", NULL, NULL},
- {TABLE_USERS, FIELD_LASTACCESS, ft_DATETIME, "last_accessed", NULL, NULL},
- {TABLE_USERS, FIELD_NONE, ft_UNDEF, NULL, NULL, NULL}
+ {TABLE_USERS, NULL, FIELD_RECID, ft_INT, "uid", NULL, NULL},
+ {TABLE_USERS, NULL, FIELD_UNAME, ft_STRING, "username", NULL, NULL},
+ {TABLE_USERS, NULL, FIELD_PASSWD, ft_PASSWD, "password", NULL, NULL},
+ {TABLE_USERS, NULL, FIELD_ACTIVATED, ft_DATETIME, "activated", NULL, NULL},
+ {TABLE_USERS, NULL, FIELD_DEACTIVATED, ft_DATETIME, "deactivated", NULL, NULL},
+ {TABLE_USERS, NULL, FIELD_LASTACCESS, ft_DATETIME, "last_accessed", NULL, NULL},
+ {0, NULL, FIELD_NONE, ft_UNDEF, NULL, NULL, NULL}
};
#endif /* !FIELDMAPPING_H_ */
diff --git a/database/sqlite/sqlite.c b/database/sqlite/sqlite.c
index beb0b8e..f74b4d7 100644
--- a/database/sqlite/sqlite.c
+++ b/database/sqlite/sqlite.c
@@ -324,6 +324,10 @@ char *_build_sqlpart(int btyp, eDBfieldMap *map) {
// Put the pieces together and append it to the final result
val = _build_value_string(ptr);
+ if( ptr->table_alias != NULL ) {
+ append_str(buf, ptr->table_alias, 8192);
+ append_str(buf, ".", 8192);
+ }
append_str(buf, ptr->field_name, 8192);
append_str(buf, "=", 8192);
append_str(buf, val, 8192);