tizen 2.4 release
[framework/security/key-manager.git] / data / scripts / migrate_2.sql
1 /*
2  *  Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  *  Licensed under the Apache License, Version 2.0 (the "License");
5  *  you may not use this file except in compliance with the License.
6  *  You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  *  Unless required by applicable law or agreed to in writing, software
11  *  distributed under the License is distributed on an "AS IS" BASIS,
12  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *  See the License for the specific language governing permissions and
14  *  limitations under the License
15  *
16  *
17  * @file        migrate_2.sql
18  * @author      Maciej Karpiuk (m.karpiuk2@samsung.com)
19  * @version     1.0
20  * @brief       DB migration script from schema version 2 to schema version 3.
21  */
22
23
24 -- isolate old data
25 DROP INDEX perm_index_idx;
26 DROP INDEX name_index_idx;
27
28
29 -- create new structure
30 CREATE TABLE SCHEMA_INFO(name TEXT PRIMARY KEY NOT NULL,
31                          value TEXT);
32 ALTER TABLE NAME_TABLE RENAME TO NAMES;
33 CREATE INDEX name_index_idx ON NAMES(idx);
34 -- need to create OBJECT table from scratch,
35 -- as SQLite does not support "ALTER COLUMN"
36 -- (REFERENCES NAME_TABLE --> NAMES)
37 CREATE TABLE OBJECTS(exportable INTEGER NOT NULL,
38                      dataType INTEGER NOT NULL,
39                      algorithmType INTEGER NOT NULL,
40                      encryptionScheme INTEGER NOT NULL,
41                      iv BLOB NOT NULL,
42                      dataSize INTEGER NOT NULL,
43                      data BLOB NOT NULL,
44                      tag BLOB NOT NULL,
45                      idx INTEGER NOT NULL,
46                      FOREIGN KEY(idx) REFERENCES NAMES(idx) ON DELETE CASCADE,
47                      PRIMARY KEY(idx, dataType));
48 ALTER TABLE KEY_TABLE RENAME TO KEYS;
49 CREATE TABLE PERMISSIONS(permissionLabel TEXT NOT NULL,
50                          permissionMask INTEGER NOT NULL,
51                          idx INTEGER NOT NULL,
52                          FOREIGN KEY(idx) REFERENCES NAMES(idx) ON DELETE CASCADE,
53                          PRIMARY KEY(permissionLabel, idx));
54 CREATE INDEX perm_index_idx ON PERMISSIONS(idx);
55 CREATE VIEW [join_name_object_tables] AS
56         SELECT N.name, N.label, O.* FROM NAMES AS N
57             JOIN OBJECTS AS O ON O.idx=N.idx;
58 CREATE VIEW [join_name_permission_tables] AS
59         SELECT N.name, N.label, P.permissionMask, P.permissionLabel FROM NAMES AS N
60             JOIN PERMISSIONS AS P ON P.idx=N.idx;
61 CREATE VIEW [join_all_tables] AS
62         SELECT N.*, P.permissionLabel, P.permissionMask, O.dataType FROM NAMES AS N
63             JOIN OBJECTS AS O ON O.idx=N.idx
64             JOIN PERMISSIONS AS P ON P.idx=N.idx;
65
66
67 -- move data
68 INSERT INTO OBJECTS SELECT * FROM OBJECT_TABLE;
69 INSERT INTO PERMISSIONS(permissionLabel, permissionMask, idx) SELECT label, 1, idx FROM PERMISSION_TABLE WHERE accessFlags='R';
70 INSERT INTO PERMISSIONS(permissionLabel, permissionMask, idx) SELECT label, 3, idx FROM PERMISSION_TABLE WHERE accessFlags='RD';
71 INSERT INTO PERMISSIONS(permissionLabel, permissionMask, idx) SELECT label, 3, idx FROM NAMES;
72
73
74 -- cleanup
75 DROP TABLE OBJECT_TABLE;
76 DROP TABLE PERMISSION_TABLE;
77