#include "pkgmgr_parser_db_queries.h"
#include "pkgmgr_parser_debug.h"
#include "pkgmgr_parser_internal.h"
+#include "manager/pkginfo_manager.h"
#ifndef OWNER_ROOT
#define OWNER_ROOT 0
char *query = NULL;
GList *tmp;
plugin_x *plugin;
+ char **queries = NULL;
+ int idx = 0;
+ int i = 0;
if (!mfx->plugin)
return PM_PARSER_R_OK;
+ queries = calloc(g_list_length(mfx->plugin), sizeof (char *));
+ if (queries == NULL) {
+ _LOGE("Out of memory");
+ return PM_PARSER_R_ERROR;
+ }
+
for (tmp = mfx->plugin; tmp; tmp = tmp->next) {
plugin = (plugin_x *)tmp->data;
if (plugin == NULL)
plugin->plugin_type, plugin->plugin_name);
if (query == NULL) {
_LOGE("Out of memory");
+ for (i = 0; i < idx; ++i)
+ free(queries[i]);
+ free(queries);
return PM_PARSER_R_ERROR;
}
- // TODO: send query to server
- sqlite3_free(query);
- query = NULL;
+ queries[idx++] = query;
+ }
+
+ if (_parser_execute_write_queries((const char **)queries, idx, uid) < 0) {
+ _LOGE("Fail to write to db");
+ for (i = 0; i < idx; ++i)
+ free(queries[i]);
+ free(queries);
+ return PM_PARSER_R_ERROR;
}
+
+ for (i = 0; i < idx; ++i)
+ free(queries[i]);
+ free(queries);
+ free(query);
+
return PM_PARSER_R_OK;
}
return PM_PARSER_R_ERROR;
}
- // TODO: send query to server
+ if (_parser_execute_write_query(query, uid) < 0) {
+ _LOGE("Fail to write to db");
+ sqlite3_free(query);
+ return PM_PARSER_R_ERROR;
+ }
sqlite3_free(query);
return PM_PARSER_R_OK;
return PM_PARSER_R_ERROR;
}
- // TODO: send query to server
+ if (_parser_execute_write_query(query, uid) < 0) {
+ _LOGE("Fail to write to db");
+ sqlite3_free(query);
+ return PM_PARSER_R_ERROR;
+ }
sqlite3_free(query);
return PM_PARSER_R_OK;
return PM_PARSER_R_ERROR;
}
- // TODO: construct query and send it to server
+ if (_parser_execute_write_query(query, uid) < 0) {
+ _LOGE("Fail to write to db");
+ sqlite3_free(query);
+ return PM_PARSER_R_ERROR;
+ }
sqlite3_free(query);
return PM_PARSER_R_OK;
return PM_PARSER_R_ERROR;
}
- // TODO: construct query and send it to server
+ if (_parser_execute_write_query(query, uid) < 0) {
+ _LOGE("Fail to write to db");
+ sqlite3_free(query);
+ return PM_PARSER_R_ERROR;
+ }
sqlite3_free(query);
return PM_PARSER_R_OK;
return PM_PARSER_R_ERROR;
}
- // TODO: construct query and send it to server
+ if (_parser_execute_write_query(query, uid) < 0) {
+ _LOGE("Fail to write to db");
+ sqlite3_free(query);
+ return PM_PARSER_R_ERROR;
+ }
sqlite3_free(query);
return PM_PARSER_R_OK;
return PM_PARSER_R_ERROR;
}
- // TODO: construct query and send it to server
+ if (_parser_execute_write_query(query, uid) < 0) {
+ _LOGE("Fail to write to db");
+ sqlite3_free(query);
+ return PM_PARSER_R_ERROR;
+ }
sqlite3_free(query);
return PM_PARSER_R_OK;
return PM_PARSER_R_ERROR;
}
- // TODO: construct query and send it to server
+ if (_parser_execute_write_query(query, uid) < 0) {
+ _LOGE("Fail to write to db");
+ sqlite3_free(query);
+ return PM_PARSER_R_ERROR;
+ }
sqlite3_free(query);
return PM_PARSER_R_OK;
char *query = NULL;
query = sqlite3_mprintf("UPDATE package_app_localized_info SET app_icon=%Q "
- "WHERE app_id=TQ AND app_icon IS NOT NULL", icon_path, appid);
+ "WHERE app_id=%Q AND app_icon IS NOT NULL", icon_path, appid);
if (query == NULL) {
_LOGE("Out of memory");
return PM_PARSER_R_ERROR;
}
- // TODO: construct query and send it to server
+ if (_parser_execute_write_query(query, uid) < 0) {
+ _LOGE("Fail to write to db");
+ sqlite3_free(query);
+ return PM_PARSER_R_ERROR;
+ }
sqlite3_free(query);
return PM_PARSER_R_OK;
return PM_PARSER_R_ERROR;
}
- // TODO: construct query and send it to server
+ if (_parser_execute_write_query(query, uid) < 0) {
+ _LOGE("Fail to write to db");
+ sqlite3_free(query);
+ return PM_PARSER_R_ERROR;
+ }
sqlite3_free(query);
return PM_PARSER_R_OK;
}
static int __register_pkg_update_info(updateinfo_x *info,
- const char *update_type)
+ const char *update_type, uid_t uid)
{
char *query = NULL;
return PM_PARSER_R_ERROR;
}
- // TODO: send query to server
+ if (_parser_execute_write_query(query, uid) < 0) {
+ _LOGE("Fail to write to db");
+ sqlite3_free(query);
+ return PM_PARSER_R_ERROR;
+ }
sqlite3_free(query);
return PM_PARSER_R_OK;
}
pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo);
- return __register_pkg_update_info(update_info, update_type);
+ return __register_pkg_update_info(update_info, update_type, uid);
}
API int pkgmgr_parser_register_pkg_update_info_in_db(
return PM_PARSER_R_ERROR;
}
- // TODO: send query to server
+ if (_parser_execute_write_query(query, uid) < 0) {
+ _LOGE("Fail to write to db");
+ sqlite3_free(query);
+ return PM_PARSER_R_ERROR;
+ }
sqlite3_free(query);
return PM_PARSER_R_OK;
return PM_PARSER_R_ERROR;
}
- // TODO: send query to server
+ if (_parser_execute_write_query(query, uid) < 0) {
+ _LOGE("Fail to write to db");
+ sqlite3_free(query);
+ return PM_PARSER_R_ERROR;
+ }
sqlite3_free(query);
return PM_PARSER_R_OK;
return PMINFO_R_OK;
}
+
+extern "C" EXPORT_API int _parser_execute_write_query(const char *query, uid_t uid)
+{
+ std::shared_ptr<pkgmgr_common::parcel::AbstractParcelable> parcelable(
+ new pkgmgr_common::parcel::QueryParcelable(uid, query,
+ pkgmgr_common::database::AbstractDBHandler::DBType::DB_TYPE_FILE_PKGDB,
+ pkgmgr_common::database::AbstractDBHandler::OperationType::OPERATION_TYPE_WRITE));
+
+ pkgmgr_client::PkgInfoClient client(parcelable, uid,
+ pkgmgr_common::ReqType::QUERY);
+ if (!client.SendRequest()) {
+ return -1;
+ }
+
+ std::shared_ptr<pkgmgr_common::parcel::ResultParcelable> return_parcel(
+ std::static_pointer_cast<pkgmgr_common::parcel::ResultParcelable>(
+ client.GetResultParcel()));
+
+ auto result_list = return_parcel->GetResult();
+ if (result_list.size() != 1) {
+ LOG(ERROR) << "Invalid result";
+ return -1;
+ }
+
+ if (result_list[0].size() != 1) {
+ LOG(ERROR) << "Invalid result";
+ return -1;
+ }
+
+ LOG(ERROR) << "result : " << result_list[0][0];
+ if (result_list[0][0] != "SUCCESS")
+ return -1;
+
+ return 0;
+}
+
+extern "C" EXPORT_API int _parser_execute_write_queries(const char **queries, int len, uid_t uid)
+{
+ std::vector<std::string> query_vt;
+ for (int i = 0; i < len; ++i)
+ query_vt.emplace_back(queries[i]);
+
+ std::shared_ptr<pkgmgr_common::parcel::AbstractParcelable> parcelable(
+ new pkgmgr_common::parcel::QueryParcelable(uid, query_vt,
+ pkgmgr_common::database::AbstractDBHandler::DBType::DB_TYPE_FILE_PKGDB,
+ pkgmgr_common::database::AbstractDBHandler::OperationType::OPERATION_TYPE_WRITE));
+
+ pkgmgr_client::PkgInfoClient client(parcelable, uid,
+ pkgmgr_common::ReqType::QUERY);
+ if (!client.SendRequest()) {
+ return -1;
+ }
+
+ std::shared_ptr<pkgmgr_common::parcel::ResultParcelable> return_parcel(
+ std::static_pointer_cast<pkgmgr_common::parcel::ResultParcelable>(
+ client.GetResultParcel()));
+
+ auto result_list = return_parcel->GetResult();
+ if (result_list.size() != 1) {
+ LOG(ERROR) << "Invalid result";
+ return -1;
+ }
+
+ if (result_list[0].size() != 1) {
+ LOG(ERROR) << "Invalid result";
+ return -1;
+ }
+
+ LOG(ERROR) << "result : " << result_list[0][0];
+ if (result_list[0][0] != "SUCCESS")
+ return -1;
+
+ return 0;
+}