sqlite: Manage OIDs 33/167133/9
authorPaweł Szewczyk <p.szewczyk@samsung.com>
Fri, 16 Feb 2018 13:32:38 +0000 (14:32 +0100)
committerPaweł Szewczyk <p.szewczyk@samsung.com>
Fri, 16 Feb 2018 15:20:22 +0000 (16:20 +0100)
OIDs in sqlite adapter are pairs of integers: table id and row id.
Database handles both numbers internaly when table is created and when
row is inserted.

Change-Id: Ifa7d2a4c6ea822d86705494b26b913941e6c1b80
Signed-off-by: Paweł Szewczyk <p.szewczyk@samsung.com>
src/database/sqlite.c
src/util/common.h

index 2c5c5eab71dcc41cd9752a0eef294fac7bd3036e..6c43c31d999a76231aa88afe929028be1c5aee40 100644 (file)
 #define OBJ_TABLE_PREFIX "objects"
 #define ID_KEY "id"
 
+enum well_known_oids {
+       WK_OID_INVALID = 0,
+       WK_LAST_BOOT,
+       WK_OID_END,
+};
+
 enum prepared_stmts {
        STMT_GET_ALL_TABLES = 0,
        STMT_NUM,
@@ -127,12 +133,30 @@ static int sqlite_load(struct faultd_database_adapter *adapter, struct faultd_ob
 
 static int sqlite_get_well_known_oid(const char *name, faultd_oid_t *oid)
 {
+       int i;
+       static const struct {
+               const char *name;
+               int oid;
+       } oids[] = {
+               {FAULTD_LAST_BOOT_OID, WK_LAST_BOOT},
+               {NULL, 0}
+       };
+
+       for (i = 0; oids[i].name; ++i) {
+               if (strcmp(oids[i].name, name))
+                       continue;
+
+               oid->sqlite.table = 0; /*FIXME: get id by signature */
+               oid->sqlite.obj = oids[i].oid;
+               return 0;
+       }
+
        return -ENOENT;
 }
 
 static bool sqlite_is_oid_valid(faultd_oid_t *oid)
 {
-       return true;
+       return oid->sqlite.table > 0 && oid->sqlite.obj != WK_OID_INVALID;
 }
 
 static struct sqlite_adapter sqlite_adapter = {
index b72cfeefb7994880688db20bb6d3af82e78374e6..2f96dd04383a71010ff6cf0d9450a2e571058c6d 100644 (file)
@@ -83,6 +83,10 @@ typedef union {
        bson_oid_t bson;
        char nop[OID_NOP_SIZE];
        sd_id128_t uuid;
+       struct {
+               uint32_t table;
+               uint32_t obj;
+       } sqlite;
 } faultd_oid_t;
 
 struct faultd_object {