tizen 2.4 release
[framework/security/key-manager.git] / src / manager / service / db-crypto.cpp
index 04f4022..1fcf77a 100644 (file)
@@ -63,7 +63,7 @@ namespace {
             "   VALUES(?101, ?103);";
 
     const char *DB_CMD_SCHEMA_GET =
-            "SELECT * FROM SCHEMA_INFO WHERE name=?101;";
+            "SELECT * FROM SCHEMA_INFO WHERE name IS ?101;";
 
     const char *DB_SCHEMA_VERSION_FIELD = "schema_version";
 
@@ -74,13 +74,13 @@ namespace {
             "   VALUES(?101, ?102);";
 
     const char *DB_CMD_NAME_COUNT_ROWS =
-            "SELECT COUNT(idx) FROM NAMES WHERE name=?101 AND label=?102;";
+            "SELECT COUNT(idx) FROM NAMES WHERE name IS ?101 AND label IS ?102;";
 
     const char *DB_CMD_NAME_DELETE =
-            "DELETE FROM NAMES WHERE name=?101 AND label=?102;";
+            "DELETE FROM NAMES WHERE name IS ?101 AND label IS ?102;";
 
     const char *DB_CMD_NAME_DELETE_BY_LABEL =
-            "DELETE FROM NAMES WHERE label=?102;";
+            "DELETE FROM NAMES WHERE label IS ?102;";
 
 
     const char *DB_CMD_OBJECT_INSERT =
@@ -90,35 +90,35 @@ namespace {
             "   iv, dataSize, data, tag, idx) "
             "   VALUES(?001, ?002, ?003, ?004, ?005, "
             "          ?006, ?007, ?008,"
-            "          (SELECT idx FROM NAMES WHERE name=?101 and label=?102)"
+            "          (SELECT idx FROM NAMES WHERE name IS ?101 and label IS ?102)"
             "         );";
 
     const char *DB_CMD_OBJECT_SELECT_BY_NAME_AND_LABEL =
             "SELECT * FROM [join_name_object_tables] "
             " WHERE (dataType BETWEEN ?001 AND ?002) "
-            " AND name=?101 and label=?102;";
+            " AND name IS ?101 and label IS ?102;";
 
 
     const char *DB_CMD_KEY_INSERT =
             "INSERT INTO KEYS(label, key) VALUES (?, ?);";
     const char *DB_CMD_KEY_SELECT =
-            "SELECT key FROM KEYS WHERE label=?;";
+            "SELECT key FROM KEYS WHERE label IS ?;";
     const char *DB_CMD_KEY_DELETE =
-            "DELETE FROM KEYS WHERE label=?";
+            "DELETE FROM KEYS WHERE label IS ?;";
 
 
     const char *DB_CMD_PERMISSION_SET = // SQLite does not support updating views
             "REPLACE INTO PERMISSIONS(permissionLabel, permissionMask, idx) "
-            " VALUES (?104, ?105, (SELECT idx FROM NAMES WHERE name=?101 and label=?102));";
+            " VALUES (?104, ?105, (SELECT idx FROM NAMES WHERE name IS ?101 and label IS ?102));";
 
     const char *DB_CMD_PERMISSION_SELECT =
             "SELECT permissionMask FROM [join_name_permission_tables] "
-            " WHERE permissionLabel=?104 "
-            " AND name=?101 and label=?102;";
+            " WHERE permissionLabel IS ?104 "
+            " AND name IS ?101 AND label IS ?102;";
 
     const char *DB_CMD_PERMISSION_DELETE = // SQLite does not support updating views
-            "DELETE FROM PERMISSIONS WHERE permissionLabel=?104 AND "
-            " idx=(SELECT idx FROM NAMES WHERE name=?101 and label=?102);";
+            "DELETE FROM PERMISSIONS WHERE permissionLabel IS ?104 AND "
+            " idx IS (SELECT idx FROM NAMES WHERE name IS ?101 AND label IS ?102);";
 
 
     /*
@@ -129,8 +129,8 @@ namespace {
      */
     const char *DB_CMD_NAME_SELECT_BY_TYPE_AND_PERMISSION =
             "SELECT label, name FROM [join_all_tables] "
-            " WHERE dataType>=?001 AND dataType<=?002 "
-            " AND permissionLabel=?104 AND permissionMask&?004!=0 GROUP BY idx;";
+            " WHERE (dataType BETWEEN ?001 AND ?002) "
+            " AND permissionLabel IS ?104 AND permissionMask&?004 IS NOT 0 GROUP BY idx;";
 }
 
 namespace CKM {
@@ -217,26 +217,37 @@ namespace DB {
     bool Crypto::getDBVersion(int & schemaVersion)
     {
         SchemaInfo SchemaInfo(this);
-        if(SchemaInfo.getVersionInfo(schemaVersion)) {
+
+        /*
+         *  SCHEMA_INFO (o)
+         *  SCHEMA_INFO exists from schema version 3
+         */
+        if (m_connection->CheckTableExist("SCHEMA_INFO")
+           && SchemaInfo.getVersionInfo(schemaVersion)) {
             LogDebug("Current DB version: " << schemaVersion);
             return true;
         }
-        else
-        {
-            LogDebug("No DB version known or DB not present");
 
-            // special case: old CKM_TABLE exists
-            if(m_connection->CheckTableExist("CKM_TABLE")) {
-                schemaVersion = DB_VERSION_1;
-                return true;
-            }
+        /*
+         *  SCHEMA_INFO (x) / CKM_TABLE (o)
+         *  CKM_TABLE exists only in schema version 1
+         *  -> schema version 1
+         */
+        if (m_connection->CheckTableExist("CKM_TABLE")) {
+            schemaVersion = DB_VERSION_1;
+            return true;
+        }
 
-            // special case: new scheme exists, but no SCHEMA_INFO table present
-            else if(m_connection->CheckTableExist("NAME_TABLE")) {
-                schemaVersion = DB_VERSION_2;
-                return true;
-            }
+        /*
+         *  SCHEMA_INFO (x) / CKM_TABLE (x) / NAME_TABLE (o)
+         *  NAME_TABLE exists only in schema version 2
+         *  -> schema version 2
+         */
+        if (m_connection->CheckTableExist("NAME_TABLE")) {
+            schemaVersion = DB_VERSION_2;
+            return true;
         }
+
         // not recognized - proceed with an empty DBs
         return false;
     }