Вам нужно будет протестировать предыдущую версию в коде и программно объединить их.
Примерно так:
- (void)merge {
NSString *dataDir = Doogie(@"data");
NSString *sqlDir = Doogie(@"sql");
NSString *dataPath = PathAppend(dataDir, @"name.db");
if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath]) {
ILogPlus(@"%@", @"No merge necessary");
return;
}
const char *oldDBPath = [dataPath UTF8String];
const char *mainDBPath = [PathAppend(sqlDir, @"name.db") UTF8String];
sqlite3 *mainDB;
if (sqlite3_open(mainDBPath, &mainDB) == SQLITE_OK) {
NSString *attachSQL = [NSString stringWithFormat: @"ATTACH DATABASE \'%s\' AS old_db", oldDBPath];
char *errorMessage;
if (sqlite3_exec(mainDB, [attachSQL UTF8String], NULL, NULL, &errorMessage) == SQLITE_OK) {
sqlite3_stmt *selectStmt;
NSString *selectSQL = @"insert into main.favorites select * from old_db.favorites";
if (sqlite3_prepare_v2(mainDB, [selectSQL UTF8String] , -1, &selectStmt, nil) == SQLITE_OK) {
while (sqlite3_step(selectStmt) == SQLITE_ROW) {
//do something
}
}
else {
NSLog(@"Error while creating select statement: '%s'", sqlite3_errmsg(mainDB));
}
selectSQL = @"insert into main.meals select * from old_db.meals";
if (sqlite3_prepare_v2(mainDB, [selectSQL UTF8String] , -1, &selectStmt, nil) == SQLITE_OK) {
while (sqlite3_step(selectStmt) == SQLITE_ROW) {
//do something
}
}
else {
NSLog(@"Error while creating select statement: '%s'", sqlite3_errmsg(mainDB));
}
selectSQL = @"insert or ignore into main.usda select * from old_db.usda";
if (sqlite3_prepare_v2(mainDB, [selectSQL UTF8String] , -1, &selectStmt, nil) == SQLITE_OK) {
while (sqlite3_step(selectStmt) == SQLITE_ROW) {
//do something
}
}
else {
NSLog(@"Error while creating select statement: '%s'", sqlite3_errmsg(mainDB));
}
}
else {
NSLog(@"Error while attaching databases: '%s'", errorMessage);
}
}
else {
NSLog(@"Failed to open database at %@ with error %s", mainDBPath, sqlite3_errmsg(mainDB));
sqlite3_close(mainDB);
}
}