Change codes for performance
[platform/core/appfw/pkgmgr-info.git] / src / pkgmgrinfo_pkginfo.c
index 0531930..a9ba8db 100644 (file)
@@ -338,16 +338,16 @@ static int _pkginfo_get_packages(uid_t uid, const char *locale,
                pkgmgrinfo_filter_x *filter, int flag, GHashTable *packages)
 {
        static const char query_raw[] =
-               "SELECT DISTINCT pi.package, pi.package_version, "
-               "pi.install_location, pi.package_removable, "
-               "pi.package_preload, pi.package_readonly, pi.package_update, "
-               "pi.package_appsetting, pi.package_system, pi.package_type, "
-               "pi.package_size, pi.installed_time, pi.installed_storage, "
-               "pi.storeclient_id, pi.mainapp_id, pi.package_url, "
-               "pi.root_path, pi.csc_path, pi.package_nodisplay, "
-               "pi.package_api_version, pi.package_support_disable, "
-               "pi.package_tep_name, pi.package_zip_mount_file, pi.external_path, "
-               "pi.package_support_mode";
+               "SELECT DISTINCT pi.package, pi.installed_storage, pi.external_path";
+       static const char query_basic[] =
+               ", pi.package_version, pi.install_location, "
+               "pi.package_removable, pi.package_preload, pi.package_readonly, "
+               "pi.package_update, pi.package_appsetting, pi.package_system, "
+               "pi.package_type, pi.package_size, pi.installed_time, "
+               "pi.storeclient_id, pi.mainapp_id, pi.package_url, pi.root_path, "
+               "pi.csc_path, pi.package_nodisplay, pi.package_api_version, "
+               "pi.package_support_disable, pi.package_tep_name, "
+               "pi.package_zip_mount_file, pi.package_support_mode";
        static const char query_author[] =
                ", pi.author_name, pi.author_email, pi.author_href";
        static const char query_label[] =
@@ -377,6 +377,7 @@ static int _pkginfo_get_packages(uid_t uid, const char *locale,
        sqlite3_stmt *stmt = NULL;
        pkgmgrinfo_filter_x *tmp_filter = NULL;
        bool is_check_storage = true;
+       const uid_t global_user_uid = GLOBAL_USER;
 
        dbpath = getUserPkgParserDBPathUID(uid);
        if (dbpath == NULL)
@@ -404,6 +405,10 @@ static int _pkginfo_get_packages(uid_t uid, const char *locale,
 
        query_len = strlen(query_raw);
        snprintf(query, MAX_QUERY_LEN - 1, "%s", query_raw);
+       if (flag & PMINFO_APPINFO_GET_BASICINFO) {
+               strncat(query, query_basic, MAX_QUERY_LEN - query_len - 1);
+               query_len += strlen(query_basic);
+       }
        if (flag & PMINFO_PKGINFO_GET_AUTHOR) {
                strncat(query, query_author, MAX_QUERY_LEN - query_len - 1);
                query_len += strlen(query_author);
@@ -458,39 +463,36 @@ static int _pkginfo_get_packages(uid_t uid, const char *locale,
                }
                idx = 0;
                _save_column_str(stmt, idx++, &info->package);
-               if (g_hash_table_contains(packages,
-                                       (gconstpointer)info->package)) {
-                       free(info->package);
-                       free(info);
-                       info = NULL;
-                       continue;
-               }
-               _save_column_str(stmt, idx++, &info->version);
-               _save_column_str(stmt, idx++, &info->installlocation);
-               _save_column_str(stmt, idx++, &info->removable);
-               _save_column_str(stmt, idx++, &info->preload);
-               _save_column_str(stmt, idx++, &info->readonly);
-               _save_column_str(stmt, idx++, &info->update);
-               _save_column_str(stmt, idx++, &info->appsetting);
-               _save_column_str(stmt, idx++, &info->system);
-               _save_column_str(stmt, idx++, &info->type);
-               _save_column_str(stmt, idx++, &info->package_size);
-               _save_column_str(stmt, idx++, &info->installed_time);
                _save_column_str(stmt, idx++, &info->installed_storage);
-               _save_column_str(stmt, idx++, &info->storeclient_id);
-               _save_column_str(stmt, idx++, &info->mainapp_id);
-               _save_column_str(stmt, idx++, &info->package_url);
-               _save_column_str(stmt, idx++, &info->root_path);
-               _save_column_str(stmt, idx++, &info->csc_path);
-               _save_column_str(stmt, idx++, &info->nodisplay_setting);
-               _save_column_str(stmt, idx++, &info->api_version);
-               _save_column_str(stmt, idx++, &info->support_disable);
-               _save_column_str(stmt, idx++, &info->tep_name);
-               _save_column_str(stmt, idx++, &info->zip_mount_file);
                _save_column_str(stmt, idx++, &info->external_path);
-               _save_column_str(stmt, idx++, &info->support_mode);
+
+               if (flag & PMINFO_APPINFO_GET_BASICINFO) {
+                       _save_column_str(stmt, idx++, &info->version);
+                       _save_column_str(stmt, idx++, &info->installlocation);
+                       _save_column_str(stmt, idx++, &info->removable);
+                       _save_column_str(stmt, idx++, &info->preload);
+                       _save_column_str(stmt, idx++, &info->readonly);
+                       _save_column_str(stmt, idx++, &info->update);
+                       _save_column_str(stmt, idx++, &info->appsetting);
+                       _save_column_str(stmt, idx++, &info->system);
+                       _save_column_str(stmt, idx++, &info->type);
+                       _save_column_str(stmt, idx++, &info->package_size);
+                       _save_column_str(stmt, idx++, &info->installed_time);
+                       _save_column_str(stmt, idx++, &info->storeclient_id);
+                       _save_column_str(stmt, idx++, &info->mainapp_id);
+                       _save_column_str(stmt, idx++, &info->package_url);
+                       _save_column_str(stmt, idx++, &info->root_path);
+                       _save_column_str(stmt, idx++, &info->csc_path);
+                       _save_column_str(stmt, idx++, &info->nodisplay_setting);
+                       _save_column_str(stmt, idx++, &info->api_version);
+                       _save_column_str(stmt, idx++, &info->support_disable);
+                       _save_column_str(stmt, idx++, &info->tep_name);
+                       _save_column_str(stmt, idx++, &info->zip_mount_file);
+                       _save_column_str(stmt, idx++, &info->support_mode);
+               }
+
                info->for_all_users =
-                       strdup((uid != GLOBAL_USER) ? "false" : "true");
+                       strdup((uid != global_user_uid) ? "false" : "true");
 
                if (flag & PMINFO_PKGINFO_GET_AUTHOR) {
                        /* TODO : author should be retrieved at package_localized_info */
@@ -613,10 +615,11 @@ static int _pkginfo_get_filtered_foreach_pkginfo(uid_t uid,
                pkgmgrinfo_pkginfo_filter_add_bool(tmp_filter,
                                PMINFO_PKGINFO_PROP_PACKAGE_DISABLE, false);
 
-       ret = _pkginfo_get_packages(uid, locale, tmp_filter, flag, list);
+       ret = _pkginfo_get_packages(uid, locale, tmp_filter,
+                       flag | PMINFO_PKGINFO_GET_BASICINFO, list);
        if (ret == PMINFO_R_OK && uid != GLOBAL_USER)
                ret = _pkginfo_get_packages(GLOBAL_USER, locale, tmp_filter,
-                               flag, list);
+                               flag | PMINFO_PKGINFO_GET_BASICINFO, list);
 
        if (ret != PMINFO_R_OK) {
                g_hash_table_destroy(list);