Как выполнить SQL-запрос, выполнить операции в зависимости от результата запроса и выполнить обновление? - PullRequest
0 голосов
/ 02 января 2019

Для упрощения у меня есть таблица URL и данные их закладок.

Вот как я создаю таблицу, вставляю записи, получаю закладки из URL и URL из закладки:

- (void)createTableForDatabase:(FMDatabase*)db {
    NSString* createTableSQL = @"CREATE BookmarkURLs (url TEXT, bookmark BLOB)";
    [db executeUpdate:createTableSQL];
}

- (void)insertNewRecordWithURL:(NSURL*)url forDatabase:(FMDatabase*)db {
    NSData* bookmarkData = [self bookmarkForURL:url];
    NSString* insertSQL = @"INSERT INTO BookmarkURLs (url, bookmark) VALUES(?,?)";
    [db executeUpdate:insertSQL withArgumentsInArray:@[url.absoluteString, bookmark]];
    }

- (NSData*)bookmarkForURL:(NSURL*)url {
    return [url bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope | NSURLBookmarkResolutionWithoutUI
         includingResourceValuesForKeys:nil
                          relativeToURL:nil
                                  error:nil];
}

- (NSURL*)urlForBookmark:(NSData*)bookmark {
    BOOL bookmarkIsStale = NO;
    NSError* theError = nil;
    NSURL* bookmarkURL = [NSURL URLByResolvingBookmarkData:bookmark
                                            options:NSURLBookmarkResolutionWithoutUI
                                            relativeToURL:nil
                                            bookmarkDataIsStale:&bookmarkIsStale
                                            error:&theError];

    if (bookmarkIsStale || (theError != nil)) {
        // Handle any errors
        return nil;
    }
    return bookmarkURL;
}

Теперь время от времени я хочу обойти все записи, разрешить закладки и проверить, были ли файлы переименованы / перемещены, и обновить URL-адреса.Одна из причин, по которой это нужно сделать, - запросить все закладки, затем для каждой закладки разрешить ее URL-адрес и обновить его запись.Я думаю, что это не лучшее решение с точки зрения производительности.Есть ли способ сделать это с одним выполнением SQL и как?

...