To upgrade database files properly, the user version is added to database files.
From Tizen 6.5, the schema of the appsvc was changed. The invalid foreign key
was removed. The 1_appsvc_db_upgrade.sh file is for upgrading the appsvc db file.
Adds:
- 501.appsvc_db_upgrade.sh
- 1_appsvc_db_upgrade.sh
Change-Id: I173929f757799d9e7bc25361a37b4a6e3847b9fd
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
ADD_DEFINITIONS("-DSHARE_PREFIX=\"${SHARE_INSTALL_PREFIX}/aul\"")
+ADD_DEFINITIONS("-DAPPSVC_DB_VERSION=\"${APPSVC_DB_VERSION}\"")
+ADD_DEFINITIONS("-DCOMPONENT_DB_VERSION=\"${COMPONENT_DB_VERSION}\"")
+
## Compile flags
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-zdefs -fvisibility=hidden -g -Wall -Werror -fpic ")
SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
# pkgconfig file
CONFIGURE_FILE(aul.pc.in aul.pc @ONLY)
CONFIGURE_FILE(feature/preexec_list.txt.in feature/preexec_list.txt @ONLY)
-
+CONFIGURE_FILE(data/appsvc_db.sql.in data/appsvc_db.sql @ONLY)
+CONFIGURE_FILE(scripts/501.appsvc_db_upgrade.sh.in scripts/501.appsvc_db_upgrade.sh @ONLY)
+CONFIGURE_FILE(scripts/upgrade/1_appsvc_db_upgrade.sh.in scripts/upgrade/1_appsvc_db_upgrade.sh @ONLY)
+
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/scripts/501.appsvc_db_upgrade.sh
+ DESTINATION /usr/share/upgrade/scripts)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/scripts/upgrade/1_appsvc_db_upgrade.sh
+ DESTINATION /etc/aul/upgrade/scripts)
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/aul.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/feature/preexec_list.txt DESTINATION ${SHARE_INSTALL_PREFIX}/aul )
INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data/miregex DESTINATION ${SHARE_INSTALL_PREFIX}/aul )
PRAGMA journal_mode = PERSIST;
+PRAGMA user_version = @APPSVC_DB_VERSION@;
CREATE TABLE IF NOT EXISTS appsvc (
operation TEXT,
%endif
%define _aulresdir /opt/usr/home/owner/share/aul/res
+%define appsvc_db_version 1
+%define component_db_version 1
%prep
%setup -q
-DMAJORVER=${MAJORVER} \
-D_TIZEN_FEATURE_PRELINK:BOOL=${_TIZEN_FEATURE_PRELINK} \
-DAUL_RES_DIR=%{_aulresdir} \
+ -DAPPSVC_DB_VERSION=%{appsvc_db_version} \
+ -DCOMPONENT_DB_VERSION=%{component_db_version} \
.
%__make %{?_smp_mflags}
%attr(0755,root,root) %{_sysconfdir}/gumd/useradd.d/*
%attr(0755,root,root) %{_datadir}/upgrade/scripts/501.component_upgrade.sh
+%attr(0755,root,root) %{_datadir}/upgrade/scripts/501.appsvc_db_upgrade.sh
+%attr(0755,root,root) %{_sysconfdir}/aul/upgrade/scripts/*
%files exec-checker-plugin
%manifest %{name}-exec-checker-plugin.manifest
SQLITE3_DEPS
)
+CONFIGURE_FILE(data/component_db.sql.in data/component_db.sql @ONLY)
+CONFIGURE_FILE(script/14_component-add.post.in
+ script/14_component-add.post @ONLY)
+CONFIGURE_FILE(script/501.component_upgrade.sh.in
+ script/501.component_upgrade.sh @ONLY)
+
INSTALL(TARGETS ${TARGET_COMPONENT_PLUGIN_PARSER}
DESTINATION ${SYSCONF_INSTALL_DIR}/package-manager/parserlib)
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/data/component.info
PRAGMA journal_mode = PERSIST;
+PRAGMA user_version = @COMPONENT_DB_VERSION@;
CREATE TABLE IF NOT EXISTS component_info (
package TEXT NOT NULL,
# Create DB
sqlite3 /opt/dbspace/user/$2/.component.db << EOF
PRAGMA journal_mode = PERSIST;
+PAAGMA user_version = @COMPONENT_DB_VERSION@;
CREATE TABLE IF NOT EXISTS component_info (
package TEXT NOT NULL,
# Create DB
sqlite3 $GLOBAL_USER_DB << EOF
PRAGMA journal_mode = PERSIST;
+PRAGMA user_version = @COMPONENT_DB_VERSION@;
CREATE TABLE IF NOT EXISTS component_info (
package TEXT NOT NULL,
--- /dev/null
+#!/bin/sh
+PATH="/usr/bin:/bin:/usr/sbin:/sbin"
+
+DB_VERSION="@APPSVC_DB_VERSION@"
+
+FILE_DB=".appsvc.db"
+PATH_SYS_DB="/opt/dbspace/${FILE_DB}"
+PATH_USER_DB_DIR="/opt/dbspace/user"
+PATH_UPGRADE_SCRIPT_DIR="/etc/aul/upgrade/scripts"
+NAME_UPGRADE_SCRIPT="appsvc_db_upgrade.sh"
+CURRENT_DB_VERSION=0
+
+CompareDBVersion() {
+ PATH_DB=$1
+ CURRENT_DB_VERSION=`sqlite3 ${PATH_DB} 'PRAGMA user_version;'`
+
+ echo "## Compare DB version"
+ echo " - Path: ${PATH_DB}"
+ echo " - Current DB version: ${CURRENT_DB_VERSION}"
+
+ if [ "${DB_VERSION}" -eq "${CURRENT_DB_VERSION}" ]; then
+ echo " - DB version[${DB_VERSION}] is equal to current DB version[${CURRENT_DB_VERSION}]"
+ return 0
+ elif [ "${DB_VERSION}" -gt "${CURRENT_DB_VERSION}" ]; then
+ echo " - DB version[${DB_VERSION}] is greater than current DB version[${CURRENT_DB_VERSION}]"
+ return 1
+ else
+ echo " - DB version[${DB_VERSION}] is less than current DB version[${CURRENT_DB_VERSION}]"
+ return 0
+ fi
+ echo "## Compare DB version [Done]"
+}
+
+UpgradeDB() {
+ PATH_DB=$1
+ VERSION=$2
+ echo "## UpgradeDB Path[${PATH_DB}] Version[${VERSION}]"
+ i=${VERSION}
+ while [ ${i} -le ${DB_VERSION} ]; do
+ FILE_SCRIPT="${i}_${NAME_UPGRADE_SCRIPT}"
+ PATH_SCRIPT="${PATH_UPGRADE_SCRIPT_DIR}/${FILE_SCRIPT}"
+ if [ -e "${PATH_SCRIPT}" ]; then
+ echo " - Script: ${PATH_SCRIPT}"
+ ${PATH_SCRIPT} ${PATH_DB}
+ fi
+
+ i=`expr ${i} + 1`
+ done
+ echo "## UpgradeDB Path[${PATH_DB}] Version[${VERSION}] [Done]"
+}
+
+CheckAndUpgradeDB() {
+ echo "### Check and upgrade DB"
+
+ CompareDBVersion ${PATH_SYS_DB}
+ RESULT=$?
+ if [ "${RESULT}" -eq 1 ]; then
+ VERSION=`expr ${CURRENT_DB_VERSION} + 1`
+ UpgradeDB ${PATH_SYS_DB} ${VERSION}
+ fi
+
+ for DIR in ${PATH_USER_DB_DIR}/*; do
+ echo " - Directory: ${DIR}"
+ if [ -d "${DIR}" ]; then
+ PATH_DB="${DIR}/${FILE_DB}"
+ CompareDBVersion ${PATH_DB}
+ RESULT=$?
+ if [ "${RESULT}" -eq 1 ]; then
+ VERSION=`expr ${CURRENT_DB_VERSION} + 1`
+ UpgradeDB ${PATH_DB} ${VERSION}
+ fi
+ fi
+ done
+ echo "### Check and upgrade DB [Done]"
+}
+
+echo "#### Upgrade appsvc db ####"
+CheckAndUpgradeDB
+echo "#### Upgrade appsvc db [Done] ####"
--- /dev/null
+#!/bin/sh
+
+#------------------------------------------#
+# appsvc db upgrade ver.1 #
+#------------------------------------------#
+
+# Macro
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+
+PATH_DB="$1"
+PATH_NEW_DB="${PATH_DB}.new"
+PATH_BACKUP_DB="${PATH_DB}.bak"
+
+Init() {
+ echo "### Initialize"
+ cp ${PATH_DB} ${PATH_BACKUP_DB}
+ cp ${PATH_DB}-journal ${PATH_BACKUP_DB}-journal
+
+ if [ -e "${PATH_NEW_DB}" ]; then
+ rm ${PATH_NEW_DB}
+ fi
+
+ if [ -e "${PATH_NEW_DB}-journal" ]; then
+ rm ${PATH_NEW_DB}-journal
+ fi
+}
+
+# Create new DB
+CreateNewDB() {
+ echo " - Create new DB: ${PATH_NEW_DB}"
+
+sqlite3 ${PATH_NEW_DB} << EOF
+PRAGMA journal_mode = PERSIST;
+PRAGMA user_version = 1;
+
+CREATE TABLE IF NOT EXISTS appsvc (
+ operation TEXT,
+ mime_type TEXT DEFAULT 'NULL',
+ uri TEXT DEFAULT 'NULL',
+ pkg_name TEXT,
+ PRIMARY KEY (operation,mime_type,uri)
+);
+
+CREATE TABLE IF NOT EXISTS alias_info (
+ alias_appid TEXT NOT NULL,
+ appid TEXT NOT NULL,
+ enable TEXT NOT NULL DEFAULT 'true',
+ PRIMARY KEY (alias_appid)
+);
+
+CREATE TABLE IF NOT EXISTS alias_info_for_uid (
+ appid TEXT NOT NULL,
+ uid INTEGER NOT NULL,
+ is_enabled TEXT NOT NULL DEFAULT 'false',
+ PRIMARY KEY (appid, uid)
+);
+
+CREATE TRIGGER IF NOT EXISTS update_alias_info_for_uid
+ AFTER UPDATE ON alias_info_for_uid
+ BEGIN
+ DELETE FROM alias_info_for_uid
+ WHERE is_enabled='true';
+ END;
+
+CREATE TABLE IF NOT EXISTS allowed_info (
+ appid TEXT NOT NULL,
+ allowed_appid TEXT NOT NULL,
+ PRIMARY KEY (appid, allowed_appid)
+);
+EOF
+}
+
+# Insert old data into new DB
+InsertAppsvc() {
+ echo " - Insert appsvc"
+ TABLE=`sqlite3 ${PATH_DB} 'SELECT operation, mime_type, uri, pkg_name FROM appsvc;'`
+ for ROW in ${TABLE}; do
+ IFS='|' read -ra VALUE <<< "${ROW}";
+ QUERY="INSERT INTO appsvc(operation, mime_type, uri, pkg_name) VALUES('${VALUE[0]}', '${VALUE[1]}', '${VALUE[2]}', '${VALUE[3]}');"
+ echo " + Query: ${QUERY}"
+ sqlite3 ${PATH_NEW_DB} "${QUERY}"
+ done
+}
+
+InsertAliasInfo() {
+ echo " - Insert alias_info"
+ TABLE=`sqlite3 ${PATH_DB} 'SELECT alias_appid, appid, enable FROM alias_info;'`
+ for ROW in ${TABLE}; do
+ IFS='|' read -ra VALUE <<< "${ROW}";
+ QUERY="INSERT INTO alias_info(alias_appid, appid, enable) VALUES('${VALUE[0]}', '${VALUE[1]}', '${VALUE[2]}');"
+ echo " + Query: ${QUERY}"
+ sqlite3 ${PATH_NEW_DB} "${QUERY}"
+ done
+}
+
+InsertAliasInfoForUid() {
+ echo " - Insert alias_info_for_uid"
+ TABLE=`sqlite3 ${PATH_DB} 'SELECT appid, uid, is_enabled FROM alias_info_for_uid;'`
+ for ROW in ${TABLE}; do
+ IFS='|' read -ra VALUE <<< "${ROW}";
+ QUERY="INSERT INTO alias_info_for_uid(appid, uid, is_enabled) VALUES('${VALUE[0]}', '${VALUE[1]}', '${VALUE[2]}');"
+ echo " + Query: ${QUERY}"
+ sqlite3 ${PATH_NEW_DB} "${QUERY}"
+ done
+}
+
+InsertAllowedInfo() {
+ echo " - Insert allowed_info"
+ TABLE=`sqlite3 ${PATH_DB} 'SELECT appid, allowed_appid FROM allowed_info;'`
+ for ROW in ${TABLE}; do
+ IFS='|' read -ra VALUE <<< "${ROW}";
+ QUERY="INSERT INTO allowed_info(appid, allowed_appid) VALUES('${VALUE[0]}', '${VALUE[1]}');"
+ echo " + Query: ${QUERY}"
+ sqlite3 ${PATH_NEW_DB} "${QUERY}"
+ done
+}
+
+Upgrade() {
+ echo "### Upgrade"
+ CreateNewDB
+
+ InsertAppsvc
+ InsertAliasInfo
+ InsertAliasInfoForUid
+ InsertAllowedInfo
+
+ cp ${PATH_NEW_DB} ${PATH_DB}
+ cp ${PATH_NEW_DB}-journal ${PATH_DB}-journal
+}
+
+Fini() {
+ echo "### Finish"
+ rm ${PATH_NEW_DB}
+ rm ${PATH_NEW_DB}-journal
+
+ rm ${PATH_BACKUP_DB}
+ rm ${PATH_BACKUP_DB}-journal
+}
+
+echo "#### 1. Upgrade appsvc db ####"
+Init
+Upgrade
+Fini
+echo "#### 1. Upgrade appsvc db [Done] ####"
#define QUERY_CREATE_APPSVC \
"PRAGMA journal_mode = PERSIST;\n" \
+ "PRAGMA user_version = " APPSVC_DB_VERSION ";\n" \
"CREATE TABLE IF NOT EXISTS appsvc (\n" \
" operation TEXT,\n" \
" mime_type TEXT DEFAULT 'NULL',\n" \
#define QUERY_CREATE_COMPONENT \
"PRAGMA journal_mode = PERSIST;\n" \
+ "PRAGMA user_version = " COMPONENT_DB_VERSION ";\n" \
"CREATE TABLE IF NOT EXISTS component_info (\n" \
" package TEXT NOT NULL,\n" \
" app_id TEXT NOT NULL,\n" \