diff options
author | Kyungwook Tak <k.tak@samsung.com> | 2016-07-06 16:31:15 +0900 |
---|---|---|
committer | Kyungwook Tak <k.tak@samsung.com> | 2016-07-06 16:31:15 +0900 |
commit | 067623aa7360ba10377241f9588f161481cb0736 (patch) | |
tree | 6c0b5424f0df179b8ab409b0f3a2f0fff31dd085 | |
parent | a955555c81a28ed2a98b14d545f32bfd5467854c (diff) | |
download | csr-framework-067623aa7360ba10377241f9588f161481cb0736.tar.gz csr-framework-067623aa7360ba10377241f9588f161481cb0736.tar.bz2 csr-framework-067623aa7360ba10377241f9588f161481cb0736.zip |
Upgrade db schema version for adding constraint
Change-Id: I3c2293741b9f8ada70f0aa3ec7668610c9a7d631
Signed-off-by: Kyungwook Tak <k.tak@samsung.com>
-rw-r--r-- | data/scripts/create_schema.sql | 5 | ||||
-rw-r--r-- | data/scripts/migrate_1.sql | 53 | ||||
-rw-r--r-- | src/framework/db/manager.cpp | 7 |
3 files changed, 62 insertions, 3 deletions
diff --git a/data/scripts/create_schema.sql b/data/scripts/create_schema.sql index f690928..eadf6bf 100644 --- a/data/scripts/create_schema.sql +++ b/data/scripts/create_schema.sql @@ -16,7 +16,7 @@ /* * @file create_schema.sql * @author Kyungwook Tak (k.tak@samsung.com) - * @version 1.0 + * @version 2.0 * @brief DB schema */ CREATE TABLE IF NOT EXISTS SCHEMA_INFO ( @@ -72,7 +72,8 @@ CREATE TABLE IF NOT EXISTS DETECTED_MALWARE_CLOUD ( severity INTEGER NOT NULL, detected_time INTEGER NOT NULL, - FOREIGN KEY(idx) REFERENCES NAMES(idx) ON DELETE CASCADE + FOREIGN KEY(idx) REFERENCES NAMES(idx) ON DELETE CASCADE, + UNIQUE(idx) ); CREATE TABLE IF NOT EXISTS PACKAGE_INFO ( diff --git a/data/scripts/migrate_1.sql b/data/scripts/migrate_1.sql new file mode 100644 index 0000000..563daae --- /dev/null +++ b/data/scripts/migrate_1.sql @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ +/* + * @file migrate_1.sql + * @author Kyungwook Tak (k.tak@samsung.com) + * @version 1.0 + * @brief DB migration from schema version 1 to 2 + */ + +-- isolate old data +DROP INDEX c_name_index; +DROP VIEW join_detecteds_cloud_by_name; +ALTER TABLE DETECTED_MALWARE_CLOUD RENAME TO OLD_DETECTED_MALWARE_CLOUD; + +-- create new structure +CREATE TABLE DETECTED_MALWARE_CLOUD ( + idx INTEGER NOT NULL, + pkg_id TEXT NOT NULL, + data_version TEXT NOT NULL, + malware_name TEXT NOT NULL, + detailed_url TEXT NOT NULL, + severity INTEGER NOT NULL, + detected_time INTEGER NOT NULL, + + FOREIGN KEY(idx) REFERENCES NAMES(idx) ON DELETE CASCADE, + UNIQUE(idx) +); + +CREATE VIEW [join_detecteds_cloud_by_name] AS + SELECT N.name, D.data_version, D.malware_name, D.detailed_url, D.severity, + D.detected_time, D.pkg_id, N.is_ignored + FROM NAMES AS N INNER JOIN DETECTED_MALWARE_CLOUD AS D ON N.idx = D.idx; +CREATE INDEX c_name_index ON DETECTED_MALWARE_CLOUD(idx); + +-- move data +INSERT INTO DETECTED_MALWARE_CLOUD(idx, pkg_id, data_version, malware_name, detailed_url, severity, detected_time) + SELECT idx, pkg_id, data_version, malware_name, detailed_url, severity, MAX(detected_time) FROM OLD_DETECTED_MALWARE_CLOUD GROUP BY idx; + +-- cleanup +DROP TABLE OLD_DETECTED_MALWARE_CLOUD; diff --git a/src/framework/db/manager.cpp b/src/framework/db/manager.cpp index 1200f39..79d7454 100644 --- a/src/framework/db/manager.cpp +++ b/src/framework/db/manager.cpp @@ -37,7 +37,8 @@ namespace { enum SchemaVersion : int { NOT_EXIST = 0, _1 = 1, - LATEST = _1 + _2 = 2, + LATEST = _2 }; const std::string SCRIPT_CREATE_SCHEMA = "create_schema"; @@ -113,9 +114,13 @@ Manager::Manager(const std::string &dbfile, const std::string &scriptsDir) : INFO("Database migration! from[" << sv << "] to[" << SchemaVersion::LATEST << "]"); + this->m_conn.exec("PRAGMA foreign_keys = OFF;"); + for (int vi = sv; vi < SchemaVersion::LATEST; ++vi) this->m_conn.exec(this->getMigrationScript(vi).c_str()); + this->m_conn.exec("PRAGMA foreign_keys = ON;"); + this->setSchemaVersion(SchemaVersion::LATEST); } break; |