return ret;
}
+static int _parse_setup_appid(sqlite3 *db, const char *providerid,
+ const char *setup_appid)
+{
+ int ret;
+ sqlite3_stmt *stmt = NULL;
+
+ static const char query[] =
+ "INSERT INTO provider_setup_appid "
+ "(provider_id, setup_appid) "
+ "VALUES (?, ?)";
+
+ ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
+ if (ret != SQLITE_OK) {
+ LOGE("prepare error: %s", sqlite3_errmsg(db));
+ goto out;
+ }
+
+ sqlite3_bind_text(stmt, 1, providerid, -1, SQLITE_TRANSIENT);
+ sqlite3_bind_text(stmt, 2, setup_appid, -1, SQLITE_TRANSIENT);
+
+ ret = sqlite3_step(stmt);
+ if (ret != SQLITE_DONE) {
+ LOGE("step error: %s", sqlite3_errmsg(db));
+ goto out;
+ }
+
+ ret = 0;
+out:
+ if (stmt)
+ sqlite3_finalize(stmt);
+
+ return ret;
+}
+
static int _parse_complication(xmlNode *node, sqlite3 *db, const char *pkgid,
- const char *appid, const char *providerid)
+ const char *appid, const char *providerid, const char *setup_appid)
{
int period = -1;
return -1;
}
+ if (setup_appid) {
+ if (_parse_setup_appid(db, providerid, setup_appid)) {
+ LOGE("parse setup appid fail");
+ return -1;
+ }
+ }
+
if (_parse_support_type(support_type_node, db, pkgid,
appid, providerid, period)) {
LOGE("parse support type fail");
int result = -1;
char *appid;
char *providerid;
+ char *setup_appid;
xmlNode *tmp;
sqlite3 *db;
goto out;
}
+ setup_appid = _get_attribute(tmp, "setup-appid");
+
if (_parse_complication(tmp, db, pkgid, appid,
- providerid)) {
+ providerid, setup_appid)) {
LOGE("parse complication error");
sqlite3_exec(db, "ROLLBACK TRANSACTION", NULL, NULL, NULL);
- if (providerid)
- free(providerid);
+ free(providerid);
+
+ if (setup_appid)
+ free(setup_appid);
goto out;
}
- if (providerid)
- free(providerid);
+ free(providerid);
+
+ if (setup_appid)
+ free(setup_appid);
}
}
"DELETE FROM provider_localized_info WHERE provider_id IN "
"(SELECT DISTINCT provider_id FROM complication_provider "
"WHERE pkgid=?)",
+ "DELETE FROM provider_setup_appid WHERE provider_id IN "
+ "(SELECT DISTINCT provider_id FROM complication_provider "
+ "WHERE pkgid=?)",
"DELETE FROM complication_provider WHERE pkgid=?"
};
PRIMARY KEY (provider_id, support_type) \
); \
CREATE TABLE IF NOT EXISTS provider_localized_info ( \
- provider_id TEXT NOT NULL, \
- locale TEXT NOT NULL DEFAULT 'No Locale', \
- provider_label TEXT, \
+ provider_id TEXT NOT NULL, \
+ locale TEXT NOT NULL DEFAULT 'No Locale', \
+ provider_label TEXT, \
PRIMARY KEY (provider_id, locale) \
); \
CREATE TABLE IF NOT EXISTS provider_privilege ( \
privilege TEXT NOT NULL, \
PRIMARY KEY (provider_id, privilege) \
); \
+CREATE TABLE IF NOT EXISTS provider_setup_appid ( \
+ provider_id TEXT NOT NULL, \
+ setup_appid TEXT, \
+ PRIMARY KEY (provider_id) \
+); \
COMMIT TRANSACTION; "
#define COMPLICATION_TBL_COUNT 3
sqlite3_bind_text(stmt, 1, provider_id, -1, SQLITE_TRANSIENT);
- if (sqlite3_step(stmt) == SQLITE_ROW) {
+ if (sqlite3_step(stmt) == SQLITE_ROW)
appid = std::string((char *)sqlite3_column_text(stmt, 0));
- }
sqlite3_finalize(stmt);
CloseDB(db);
return label;
}
+std::string DBManager::GetSetupAppId(const char* provider_id) {
+ int ret;
+ std::string setup_appid;
+ sqlite3_stmt *stmt;
+ sqlite3* db;
+
+ static const char query[] =
+ "SELECT DISTINCT setup_appid FROM provider_setup_appid "
+ "WHERE provider_id=?";
+
+ db = OpenDB();
+ if (db == NULL) {
+ LOGE("parser db not exist");
+ return std::string();
+ }
+
+ ret = sqlite3_prepare_v2(db, query, strlen(query),
+ &stmt, NULL);
+ if (ret != SQLITE_OK) {
+ LOGE("prepare error: %s", sqlite3_errmsg(db));
+ CloseDB(db);
+ return std::string();
+ }
+
+ sqlite3_bind_text(stmt, 1, provider_id, -1, SQLITE_TRANSIENT);
+
+ if (sqlite3_step(stmt) == SQLITE_ROW)
+ setup_appid = std::string(reinterpret_cast<const char*>(
+ sqlite3_column_text(stmt, 0)));
+
+ sqlite3_finalize(stmt);
+ CloseDB(db);
+
+ return setup_appid;
+}
+
const char* DBManager::GetParserDataPath() {
uid_t target_uid;
const char *path;