以下のメソッドは、sqlite3 データベースに対して実行されます。これは、パラメータ (flds) として渡された配列内の各外部キーに一致するレコードのすべての主キーをフェッチすることを目的としています。
- (NSArray*) columnPrimaryKeysForFields:(NSArray*)flds
{
NSMutableArray* retval = [[NSMutableArray alloc] init];
NSString* query = @"SELECT ID FROM Pages WHERE FieldID = ? ORDER BY ID";
sqlite3_stmt* statement;
if (sqlite3_prepare_v2(_database, [query UTF8String], -1, &statement, nil) == SQLITE_OK)
{
for (NSNumber* fieldID in flds)
{
sqlite3_bind_int64(statement, 1, (int)[fieldID longValue]);
while (sqlite3_step(statement) == SQLITE_ROW)
{
[retval addObject:[NSNumber numberWithInteger:sqlite3_column_int(statement, 0)]];
}
}
sqlite3_finalize(statement);
}
else
{
NSLog(@"SQL PREPARE columnPrimaryKeysForFields failed");
}
return [NSArray arrayWithArray:retval];
}
データベースには、flds の各キーを含む複数のレコードがあります。メソッドが実行されると、flds の最初のキーを含むすべてのレコードがフェッチされますが、flds の後続の各キーを含む最初のレコードのみがフェッチされます。flds の最初のキーが正しい数のレコードを取得するのに、後続のキーが取得しない理由がわかりません。
よろしくお願いします。