diff options
| author | David Sommerseth <dazo@users.sourceforge.net> | 2008-12-11 14:11:44 +0100 |
|---|---|---|
| committer | David Sommerseth <dazo@users.sourceforge.net> | 2008-12-11 14:11:44 +0100 |
| commit | c132838440c3f602283bf92146433800ee1bf9b2 (patch) | |
| tree | 664857d975507e2631c471d4dd9b71cfc13d40ec /database | |
| parent | f60ecdff15cf48316b24a73b500c7f9083bd10dc (diff) | |
Enhanced table/field mapping and eDBmkMapping_USERINFO(...) to include possibility for table aliases
Diffstat (limited to 'database')
| -rw-r--r-- | database/eurephiadb_mapping.c | 18 | ||||
| -rw-r--r-- | database/eurephiadb_mapping.h | 79 | ||||
| -rw-r--r-- | database/sqlite/fieldmapping.h | 14 | ||||
| -rw-r--r-- | database/sqlite/sqlite.c | 4 |
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); |
