Implement fast enumeration.
FossilOrigin-Name: 2da674855b3d179b7524f02132638c404a62952fce04cc7a97907d133939c826
This commit is contained in:
parent
a5aa71484f
commit
74aa01c7cd
2 changed files with 36 additions and 0 deletions
|
@ -108,6 +108,38 @@ convert_type(PGresult *res, int col, OFString *str)
|
||||||
initWithResult: result
|
initWithResult: result
|
||||||
row: row] autorelease];
|
row: row] autorelease];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (int)countByEnumeratingWithState: (of_fast_enumeration_state_t*)state
|
||||||
|
objects: (id*)objects
|
||||||
|
count: (int)count
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
|
||||||
|
if (state->extra[0] == 0) {
|
||||||
|
state->extra[0] = 1;
|
||||||
|
state->extra[1] = PQnfields(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count > SIZE_MAX - state->state)
|
||||||
|
@throw [OFOutOfRangeException exceptionWithClass: [self class]];
|
||||||
|
|
||||||
|
if (state->state + count > state->extra[1])
|
||||||
|
count = state->extra[1] - state->state;
|
||||||
|
|
||||||
|
for (i = j = 0; i < count; i++) {
|
||||||
|
if (PQgetisnull(res, row, state->state + i))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
objects[j++] = [OFString stringWithUTF8String:
|
||||||
|
PQfname(res, state->state + i)];
|
||||||
|
}
|
||||||
|
|
||||||
|
state->state += count;
|
||||||
|
state->itemsPtr = objects;
|
||||||
|
state->mutationsPtr = (unsigned long*)self;
|
||||||
|
|
||||||
|
return j;
|
||||||
|
}
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation PGResultRowEnumerator
|
@implementation PGResultRowEnumerator
|
||||||
|
|
4
test.m
4
test.m
|
@ -42,6 +42,10 @@ OF_APPLICATION_DELEGATE(Test)
|
||||||
of_log(@"%@", result);
|
of_log(@"%@", result);
|
||||||
of_log(@"JSON: %@", [result JSONRepresentation]);
|
of_log(@"JSON: %@", [result JSONRepresentation]);
|
||||||
|
|
||||||
|
for (id row in result)
|
||||||
|
for (id col in row)
|
||||||
|
of_log(@"%@", col);
|
||||||
|
|
||||||
result = [connection executeCommand: @"SELECT COUNT(*) FROM test"];
|
result = [connection executeCommand: @"SELECT COUNT(*) FROM test"];
|
||||||
of_log(@"%@", result);
|
of_log(@"%@", result);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue