- char *error_message = NULL;
- char query_attach[MAX_QUERY_LEN] = {'\0'};
- if(uid != GLOBAL_USER){
- snprintf(query_attach, MAX_QUERY_LEN - 1, QUERY_ATTACH, MANIFEST_DB);
- if (SQLITE_OK !=
- sqlite3_exec(handle, query_attach,
- NULL, NULL, &error_message)) {
- _LOGD("Don't execute query = %s error message = %s\n",
- query_attach, error_message);
- sqlite3_free(error_message);
- }
- if (SQLITE_OK !=
- sqlite3_exec(handle, QUERY_CREATE_VIEW_1,
- NULL, NULL, &error_message)) {
- _LOGD("Don't execute query = %s error message = %s\n",
- QUERY_CREATE_VIEW_1, error_message);
- sqlite3_free(error_message);
- }
- if (SQLITE_OK !=
- sqlite3_exec(handle, QUERY_CREATE_VIEW_2,
- NULL, NULL, &error_message)) {
- _LOGD("Don't execute query = %s error message = %s\n",
- QUERY_CREATE_VIEW_2, error_message);
- sqlite3_free(error_message);
- }
- if (SQLITE_OK !=
- sqlite3_exec(handle, QUERY_CREATE_VIEW_3,
- NULL, NULL, &error_message)) {
- _LOGD("Don't execute query = %s error message = %s\n",
- QUERY_CREATE_VIEW_3, error_message);
- sqlite3_free(error_message);
- }
- if (SQLITE_OK !=
- sqlite3_exec(handle, QUERY_CREATE_VIEW_4,
- NULL, NULL, &error_message)) {
- _LOGD("Don't execute query = %s error message = %s\n",
- QUERY_CREATE_VIEW_4, error_message);
- sqlite3_free(error_message);
- }
- if (SQLITE_OK !=
- sqlite3_exec(handle, QUERY_CREATE_VIEW_5,
- NULL, NULL, &error_message)) {
- _LOGD("Don't execute query = %s error message = %s\n",
- QUERY_CREATE_VIEW_5, error_message);
- sqlite3_free(error_message);
- }
- if (SQLITE_OK !=
- sqlite3_exec(handle, QUERY_CREATE_VIEW_6,
- NULL, NULL, &error_message)) {
- _LOGD("Don't execute query = %s error message = %s\n",
- QUERY_CREATE_VIEW_6, error_message);
- sqlite3_free(error_message);
- }
- if (SQLITE_OK !=
- sqlite3_exec(handle, QUERY_CREATE_VIEW_7,
- NULL, NULL, &error_message)) {
- _LOGD("Don't execute query = %s error message = %s\n",
- QUERY_CREATE_VIEW_7, error_message);
- sqlite3_free(error_message);
- }
- if (SQLITE_OK !=
- sqlite3_exec(handle, QUERY_CREATE_VIEW_8,
- NULL, NULL, &error_message)) {
- _LOGD("Don't execute query = %s error message = %s\n",
- QUERY_CREATE_VIEW_8, error_message);
- sqlite3_free(error_message);
- }
- if (SQLITE_OK !=
- sqlite3_exec(handle, QUERY_CREATE_VIEW_9,
- NULL, NULL, &error_message)) {
- _LOGD("Don't execute query = %s error message = %s\n",
- QUERY_CREATE_VIEW_9, error_message);
- sqlite3_free(error_message);
- }
- if (SQLITE_OK !=
- sqlite3_exec(handle, QUERY_CREATE_VIEW_10,
- NULL, NULL, &error_message)) {
- _LOGD("Don't execute query = %s error message = %s\n",
- QUERY_CREATE_VIEW_10, error_message);
- sqlite3_free(error_message);
- }
- if (SQLITE_OK !=
- sqlite3_exec(handle, QUERY_CREATE_VIEW_11,
- NULL, NULL, &error_message)) {
- _LOGD("Don't execute query = %s error message = %s\n",
- QUERY_CREATE_VIEW_11, error_message);
- sqlite3_free(error_message);
- }
- if (SQLITE_OK !=
- sqlite3_exec(handle, QUERY_CREATE_VIEW_12,
- NULL, NULL, &error_message)) {
- _LOGD("Don't execute query = %s error message = %s\n",
- QUERY_CREATE_VIEW_12, error_message);
- sqlite3_free(error_message);
- }
- if (SQLITE_OK !=
- sqlite3_exec(handle, QUERY_CREATE_VIEW_13,
- NULL, NULL, &error_message)) {
- _LOGD("Don't execute query = %s error message = %s\n",
- QUERY_CREATE_VIEW_13, error_message);
- sqlite3_free(error_message);
- }
- if (SQLITE_OK !=
- sqlite3_exec(handle, QUERY_CREATE_VIEW_14,
- NULL, NULL, &error_message)) {
- _LOGD("Don't execute query = %s error message = %s\n",
- QUERY_CREATE_VIEW_14, error_message);
- sqlite3_free(error_message);
+ int i;
+ char *err;
+ char query[MAX_QUERY_LEN];
+
+ if (uid == GLOBAL_USER || uid == ROOT_UID)
+ return SQLITE_OK;
+
+ snprintf(query, sizeof(query), "ATTACH DATABASE '%s' AS Global", db);
+ if (SQLITE_OK != sqlite3_exec(handle, query, NULL, NULL, &err)) {
+ _LOGD("Don't execute query = %s error message = %s\n", query, err);
+ sqlite3_free(err);
+ return SQLITE_ERROR;
+ }
+
+ for (i = 0; tables[i]; i++) {
+ snprintf(query, sizeof(query), "CREATE TEMP VIEW '%s' AS SELECT * \
+ FROM (SELECT *,0 AS for_all_users FROM main.'%s' UNION \
+ SELECT *,1 AS for_all_users FROM Global.'%s')",
+ tables[i], tables[i], tables[i]);
+ if (SQLITE_OK != sqlite3_exec(handle, query, NULL, NULL, &err)) {
+ _LOGD("Don't execute query = %s error message = %s\n", query, err);
+ sqlite3_free(err);