From: Junghyun Yeon Date: Thu, 17 Aug 2017 05:44:02 +0000 (+0900) Subject: Change mechanism of setting db version X-Git-Tag: accepted/tizen/4.0/unified/20170828.223919~2 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fappfw%2Fpkgmgr-info.git;a=commitdiff_plain;h=d59e4c2fe6fc204a534070a81c1a39880364cda1 Change mechanism of setting db version - Previously, DB version was defined at codes so scripts such as upgrade scripts cannot retrieve it for upgrade. - So, create new file which stores db version and read it at runtime to let codes and script read it properly. Change-Id: I3f643f421228026c38c8507c0af25928144a2ee7 Signed-off-by: Junghyun Yeon --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 203d872..03c002d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,6 +51,7 @@ CONFIGURE_FILE(parser_path.conf.in parser_path.conf @ONLY) CONFIGURE_FILE(mdparser_list.txt.in mdparser_list.txt @ONLY) CONFIGURE_FILE(category_parser_list.txt.in category_parser_list.txt @ONLY) CONFIGURE_FILE(tag_parser_list.txt.in tag_parser_list.txt @ONLY) +CONFIGURE_FILE(pkg_db_version.txt.in pkg_db_version.txt @ONLY) INSTALL(TARGETS pkgmgr-info DESTINATION ${LIB_INSTALL_DIR} COMPONENT RuntimeLibraries) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgmgr-info.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig) @@ -59,3 +60,4 @@ INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/parser_path.conf DESTINATION ${SYSCONF INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/mdparser_list.txt DESTINATION ${SYSCONFDIR}/package-manager/parserlib/metadata) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/category_parser_list.txt DESTINATION ${SYSCONFDIR}/package-manager/parserlib/category) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/tag_parser_list.txt DESTINATION ${SYSCONFDIR}/package-manager/parserlib) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/pkg_db_version.txt DESTINATION ${SYSCONFDIR}/package-manager/) diff --git a/packaging/pkgmgr-info.spec b/packaging/pkgmgr-info.spec index 9f38ae3..2f11fa4 100644 --- a/packaging/pkgmgr-info.spec +++ b/packaging/pkgmgr-info.spec @@ -95,6 +95,7 @@ ln -sf ../pkg-db-recovery.service %{buildroot}%{_unitdir}/multi-user.target.want %config %{_sysconfdir}/package-manager/parserlib/metadata/mdparser_list.txt %config %{_sysconfdir}/package-manager/parserlib/category/category_parser_list.txt %config %{_sysconfdir}/package-manager/parserlib/tag_parser_list.txt +%config %{_sysconfdir}/package-manager/pkg_db_version.txt %files parser-devel %manifest %{name}.manifest diff --git a/parser/src/pkgmgr_parser_db.c b/parser/src/pkgmgr_parser_db.c index 27abc3f..a525066 100644 --- a/parser/src/pkgmgr_parser_db.c +++ b/parser/src/pkgmgr_parser_db.c @@ -186,19 +186,36 @@ static const char *__get_cert_db_path(void) return tzplatform_mkpath(TZ_SYS_DB, ".pkgmgr_cert.db"); } +#define DB_VERSION_PATH SYSCONFDIR "/package-manager/pkg_db_version.txt" static int __set_db_version(sqlite3 *db) { - static const char query_raw[] = "PRAGMA user_version="; - char query[BUFSIZE]; int ret; + FILE *fp = NULL; + char version[PKG_STRING_LEN_MAX] = { 0 }; + char *query = NULL; - snprintf(query, sizeof(query), "%s%d", query_raw, PKG_DB_VERSION); + fp = fopen(DB_VERSION_PATH, "r"); + retvm_if(fp == NULL, -1, "Failed to open db version file"); + if (fgets(version, sizeof(version), fp) == NULL) { + _LOGE("Failed to get version information"); + fclose(fp); + return -1; + } + fclose(fp); + + query = sqlite3_mprintf("PRAGMA user_version=%Q", version); + if (!query) { + _LOGE("Out of memory"); + return -1; + } ret = sqlite3_exec(db, query, NULL, NULL, NULL); if (ret != SQLITE_OK) { _LOGE("exec failed: %s", sqlite3_errmsg(db)); + sqlite3_free(query); return -1; } + sqlite3_free(query); return 0; } diff --git a/parser/src/pkgmgr_parser_db_queries.h b/parser/src/pkgmgr_parser_db_queries.h index 924f8ac..67d3304 100644 --- a/parser/src/pkgmgr_parser_db_queries.h +++ b/parser/src/pkgmgr_parser_db_queries.h @@ -18,8 +18,6 @@ #ifndef __PKGMGR_PARSER_DB_QUERIES_H__ #define __PKGMGR_PARSER_DB_QUERIES_H__ -#define PKG_DB_VERSION 30001 - #define QUERY_CREATE_TABLE_PACKAGE_INFO \ "CREATE TABLE IF NOT EXISTS package_info (\n" \ " package TEXT PRIMARY KEY NOT NULL,\n" \ diff --git a/pkg_db_version.txt.in b/pkg_db_version.txt.in new file mode 100644 index 0000000..4b1526e --- /dev/null +++ b/pkg_db_version.txt.in @@ -0,0 +1 @@ +30001