From: <svn...@op...> - 2009-11-13 16:16:55
|
Author: dgollub Date: Fri Nov 13 17:16:10 2009 New Revision: 5962 URL: http://www.opensync.org/changeset/5962 Log: Updated tbl_changelog columns names to make clear which IDs are used. This also fixes the issue that the information which member reported the entry, which gets ignored, had which changetype. Modified: trunk/opensync/archive/opensync_archive.c trunk/opensync/archive/opensync_archive_internals.h trunk/opensync/engine/opensync_mapping_engine.c trunk/opensync/engine/opensync_mapping_engine_internals.h trunk/opensync/engine/opensync_obj_engine.c trunk/opensync/mapping/opensync_mapping_entry_internals.h Modified: trunk/opensync/archive/opensync_archive.c ============================================================================== --- trunk/opensync/archive/opensync_archive.c Thu Nov 12 21:16:42 2009 (r5961) +++ trunk/opensync/archive/opensync_archive.c Fri Nov 13 17:16:10 2009 (r5962) @@ -94,7 +94,7 @@ return TRUE; } - query = "CREATE TABLE tbl_changelog (objtype VARCHAR(64), id INTEGER, entryid INTEGER, changetype INTEGER, PRIMARY KEY (objtype, id) )"; + query = "CREATE TABLE tbl_changelog (objtype VARCHAR(64) NOT NULL, memberid INTEGER NOT NULL, mappingid INTEGER NOT NULL, changetype INTEGER NOT NULL, PRIMARY KEY (objtype, memberid, mappingid) )"; if (!osync_db_query(db, query, error)) { goto error; } @@ -478,26 +478,27 @@ return FALSE; } -osync_bool osync_archive_load_ignored_conflicts(OSyncArchive *archive, const char *objtype, OSyncList **ids, OSyncList **changetypes, OSyncError **error) +osync_bool osync_archive_load_ignored_conflicts(OSyncArchive *archive, const char *objtype, OSyncList **memberids, OSyncList **mappingids, OSyncList **changetypes, OSyncError **error) { OSyncList *result = NULL, *row = NULL, *column = NULL; char *query = NULL; char *escaped_objtype = NULL; - long long int id = 0; + long long int mappingid = 0, memberid = 0; int changetype = 0; - osync_trace(TRACE_ENTRY, "%s(%p, %s, %p, %p)", __func__, archive, objtype, ids, error); + osync_trace(TRACE_ENTRY, "%s(%p, %s, %p, %p)", __func__, archive, objtype, mappingids, error); osync_assert(archive); osync_assert(objtype); - osync_assert(ids); + osync_assert(memberids); + osync_assert(mappingids); osync_assert(changetypes); if (!osync_archive_create_changelog(archive->db, objtype, error)) goto error; escaped_objtype = osync_db_sql_escape(objtype); - query = osync_strdup_printf("SELECT entryid, changetype FROM tbl_changelog WHERE objtype='%s' ORDER BY id", escaped_objtype); + query = osync_strdup_printf("SELECT memberid, mappingid, changetype FROM tbl_changelog WHERE objtype='%s' ORDER BY mappingid", escaped_objtype); osync_free(escaped_objtype); escaped_objtype = NULL; result = osync_db_query_table(archive->db, query, error); @@ -511,13 +512,15 @@ for (row = result; row; row = row->next) { column = row->data; - id = g_ascii_strtoull(osync_list_nth_data(column, 0), NULL, 0); - changetype = atoi(osync_list_nth_data(column, 1)); + memberid = g_ascii_strtoull(osync_list_nth_data(column, 0), NULL, 0); + mappingid = atoi(osync_list_nth_data(column, 1)); + changetype = atoi(osync_list_nth_data(column, 2)); - *ids = osync_list_append((*ids), GINT_TO_POINTER((int)id)); + *memberids = osync_list_append((*memberids), GINT_TO_POINTER((int)memberid)); + *mappingids = osync_list_append((*mappingids), GINT_TO_POINTER((int)mappingid)); *changetypes = osync_list_append((*changetypes), GINT_TO_POINTER((int)changetype)); - osync_trace(TRACE_INTERNAL, "Loaded ignored mapping with entryid %lli", id); + osync_trace(TRACE_INTERNAL, "Loaded ignored mapping with mappingid %lli", mappingid); } osync_db_free_list(result); @@ -529,11 +532,11 @@ return FALSE; } -osync_bool osync_archive_save_ignored_conflict(OSyncArchive *archive, const char *objtype, long long int id, OSyncChangeType changetype, OSyncError **error) +osync_bool osync_archive_save_ignored_conflict(OSyncArchive *archive, const char *objtype, long long int memberid, long long int mappingid, OSyncChangeType changetype, OSyncError **error) { char *query = NULL; char *escaped_objtype = NULL; - osync_trace(TRACE_ENTRY, "%s(%p, %s, %lli, %p)", __func__, archive, objtype, id, error); + osync_trace(TRACE_ENTRY, "%s(%p, %s, %lli, %lli, %p)", __func__, archive, objtype, memberid, mappingid, error); osync_assert(archive); osync_assert(objtype); @@ -542,7 +545,7 @@ goto error; escaped_objtype = osync_db_sql_escape(objtype); - query = osync_strdup_printf("INSERT INTO tbl_changelog (objtype, entryid, changetype) VALUES('%s', '%lli', '%i')", escaped_objtype, id, changetype); + query = osync_strdup_printf("INSERT INTO tbl_changelog (objtype, memberid, mappingid, changetype) VALUES('%s', '%lli', '%lli', '%i')", escaped_objtype, memberid, mappingid, changetype); osync_free(escaped_objtype); escaped_objtype = NULL; @@ -553,7 +556,7 @@ osync_free(query); - osync_trace(TRACE_EXIT, "%s: %lli", __func__, id); + osync_trace(TRACE_EXIT, "%s: %lli", __func__, mappingid); return TRUE; error: Modified: trunk/opensync/archive/opensync_archive_internals.h ============================================================================== --- trunk/opensync/archive/opensync_archive_internals.h Thu Nov 12 21:16:42 2009 (r5961) +++ trunk/opensync/archive/opensync_archive_internals.h Fri Nov 13 17:16:10 2009 (r5962) @@ -136,24 +136,26 @@ * * @param archive The group archive * @param objtype Requested object type - * @param mappingsids List to store the archive (database) ids of each entry + * @param memberids List to store the member ids of each entry + * @param mappingsids List to store the mapping ids of each entry * @param changetypes List to store the changetypes for each entry * @param error Pointer to an error struct * @return TRUE on when all changes successfully loaded otherwise FALSE */ -osync_bool osync_archive_load_ignored_conflicts(OSyncArchive *archive, const char *objtype, OSyncList **mappingsids, OSyncList **changetypes, OSyncError **error); +osync_bool osync_archive_load_ignored_conflicts(OSyncArchive *archive, const char *objtype, OSyncList **memberids, OSyncList **mappingsids, OSyncList **changetypes, OSyncError **error); /** * @brief Saves an entry in the ignored conflict list. * * @param archive The group archive * @param objtype Reported object type of entry + * @param memberid Member ID of entry * @param mappingid Mapping Entry ID of entry * @param changetype Changetype of entry * @param error Pointer to an error struct * @return Returns TRUE on success, FALSE otherwise */ -osync_bool osync_archive_save_ignored_conflict(OSyncArchive *archive, const char *objtype, long long int mappingid, OSyncChangeType changetype, OSyncError **error); +osync_bool osync_archive_save_ignored_conflict(OSyncArchive *archive, const char *objtype, long long int memberid, long long int mappingid, OSyncChangeType changetype, OSyncError **error); /** * @brief Deletes all ignored conflict entries of the changelog with the objtype. Modified: trunk/opensync/engine/opensync_mapping_engine.c ============================================================================== --- trunk/opensync/engine/opensync_mapping_engine.c Thu Nov 12 21:16:42 2009 (r5961) +++ trunk/opensync/engine/opensync_mapping_engine.c Fri Nov 13 17:16:10 2009 (r5962) @@ -126,6 +126,20 @@ } } +OSyncMappingEntryEngine *osync_mapping_engine_find_entry_by_memberid(OSyncMappingEngine *engine, long long int memberid) +{ + OSyncList *e; + for (e = engine->entries; e; e = e->next) { + OSyncMappingEntryEngine *entry = e->data; + + if (osync_mapping_entry_get_member_id(entry->entry) == memberid) + return entry; + } + + return NULL; +} + + static OSyncMappingEntryEngine *_osync_mapping_engine_find_entry(OSyncMappingEngine *engine, OSyncChange *change) { OSyncList *e; @@ -620,7 +634,7 @@ for (c = engine->entries; c; c = c->next) { OSyncMappingEntryEngine *entry = c->data; - osync_archive_save_ignored_conflict(archive, objtype, id, osync_change_get_changetype(entry->change), error); + osync_archive_save_ignored_conflict(archive, objtype, osync_mapping_entry_get_member_id(entry->entry), id, osync_change_get_changetype(entry->change), error); } osync_status_update_mapping(engine->parent->parent, engine, OSYNC_ENGINE_MAPPING_EVENT_SOLVED, NULL); Modified: trunk/opensync/engine/opensync_mapping_engine_internals.h ============================================================================== --- trunk/opensync/engine/opensync_mapping_engine_internals.h Thu Nov 12 21:16:42 2009 (r5961) +++ trunk/opensync/engine/opensync_mapping_engine_internals.h Fri Nov 13 17:16:10 2009 (r5962) @@ -65,6 +65,7 @@ osync_bool osync_mapping_engine_check_conflict(OSyncMappingEngine *engine); OSyncMappingEntryEngine *osync_mapping_engine_get_entry(OSyncMappingEngine *engine, OSyncSinkEngine *sinkengine); +OSyncMappingEntryEngine *osync_mapping_engine_find_entry_by_memberid(OSyncMappingEngine *engine, long long int memberid); OSYNC_TEST_EXPORT unsigned int osync_mapping_engine_num_changes(OSyncMappingEngine *engine); Modified: trunk/opensync/engine/opensync_obj_engine.c ============================================================================== --- trunk/opensync/engine/opensync_obj_engine.c Thu Nov 12 21:16:42 2009 (r5961) +++ trunk/opensync/engine/opensync_obj_engine.c Fri Nov 13 17:16:10 2009 (r5962) @@ -767,8 +767,8 @@ static osync_bool _inject_changelog_entries(OSyncObjEngine *engine, OSyncError **error) { OSyncList *ids = NULL; - OSyncList *changetypes = NULL; - OSyncList *j = NULL, *t = NULL; + OSyncList *changetypes = NULL, *memberids = NULL; + OSyncList *j = NULL, *t = NULL, *mid = NULL; osync_trace(TRACE_ENTRY, "%s(%p)", __func__, engine); @@ -776,12 +776,13 @@ osync_assert(engine->archive); osync_assert(engine->objtype); - if (!osync_archive_load_ignored_conflicts(engine->archive, engine->objtype, &ids, &changetypes, error)) { + if (!osync_archive_load_ignored_conflicts(engine->archive, engine->objtype, &memberids, &ids, &changetypes, error)) { osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); return FALSE; } t = changetypes; + mid = memberids; for (j = ids; j; j = j->next) { long long int id = (long long int)GPOINTER_TO_INT(j->data); @@ -793,8 +794,10 @@ if (mapping_engine->mapping == ignored_mapping) { OSyncList *m; + for (m = mapping_engine->entries; m; m = m->next) { - OSyncMappingEntryEngine *entry = m->data; + long long int memberid = (long long int)GPOINTER_TO_INT(mid->data); + OSyncMappingEntryEngine *entry = osync_mapping_engine_find_entry_by_memberid(mapping_engine, memberid); OSyncChangeType changetype = (OSyncChangeType) t->data; OSyncChange *ignored_change = osync_change_new(error); OSyncObjFormat *dummyformat = NULL; @@ -817,6 +820,7 @@ } t = t->next; + mid = mid->next; } osync_list_free(ids); Modified: trunk/opensync/mapping/opensync_mapping_entry_internals.h ============================================================================== --- trunk/opensync/mapping/opensync_mapping_entry_internals.h Thu Nov 12 21:16:42 2009 (r5961) +++ trunk/opensync/mapping/opensync_mapping_entry_internals.h Fri Nov 13 17:16:10 2009 (r5962) @@ -47,4 +47,6 @@ /*@}*/ +long long int osync_mapping_entry_get_member_id(OSyncMappingEntry *entry); + #endif /*OPENSYNC_MAPPING_ENTRY_INTERNALS_H_*/ |