Nicer API.
-[executeCommand:parameters:] is now a variadic function instead of taking an array as argument. FossilOrigin-Name: d2fe40f16065b5ccf5ba135af1ec95f09ed2f8ee96e661a7a7d085da833e972e
This commit is contained in:
parent
f232e248cb
commit
6e1eda2f24
3 changed files with 18 additions and 10 deletions
|
@ -20,6 +20,6 @@
|
|||
- (void)reset;
|
||||
- (PGResult*)executeCommand: (OFString*)command;
|
||||
- (PGResult*)executeCommand: (OFString*)command
|
||||
parameters: (OFArray*)parameters;
|
||||
parameters: (id)firstParameter, ...;
|
||||
- (PGconn*)PG_connection;
|
||||
@end
|
||||
|
|
|
@ -78,28 +78,33 @@
|
|||
}
|
||||
|
||||
- (PGResult*)executeCommand: (OFString*)command
|
||||
parameters: (OFArray*)parameters_
|
||||
parameters: (id)parameter, ...
|
||||
{
|
||||
OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init];
|
||||
PGresult *result;
|
||||
const char **values;
|
||||
va_list args, args2;
|
||||
size_t argsCount;
|
||||
|
||||
va_start(args, parameter);
|
||||
va_copy(args2, args);
|
||||
|
||||
for (argsCount = 1; va_arg(args2, id) != nil; argsCount++);
|
||||
|
||||
values = [self allocMemoryWithSize: sizeof(*values)
|
||||
count: [parameters_ count]];
|
||||
count: argsCount];
|
||||
@try {
|
||||
OFEnumerator *enumerator = [parameters_ objectEnumerator];
|
||||
size_t i = 0;
|
||||
id parameter;
|
||||
|
||||
while ((parameter = [enumerator nextObject]) != nil) {
|
||||
do {
|
||||
if ([parameter isKindOfClass: [OFNull class]])
|
||||
values[i++] = NULL;
|
||||
else
|
||||
values[i++] = [parameter UTF8String];
|
||||
}
|
||||
} while ((parameter = va_arg(args, id)) != nil);
|
||||
|
||||
result = PQexecParams(conn, [command UTF8String],
|
||||
[parameters_ count], NULL, values, NULL, NULL, 0);
|
||||
argsCount, NULL, values, NULL, NULL, 0);
|
||||
} @finally {
|
||||
[self freeMemory: values];
|
||||
}
|
||||
|
|
7
test.m
7
test.m
|
@ -30,15 +30,18 @@ OF_APPLICATION_DELEGATE(Test)
|
|||
@")"];
|
||||
[connection executeCommand: @"INSERT INTO test (id, name, content) "
|
||||
@"VALUES($1, $2, $3)"
|
||||
parameters: @[@"1", @"foo", @"Hallo Welt!"]];
|
||||
parameters: @"1", @"foo", @"Hallo Welt!", nil];
|
||||
[connection executeCommand: @"INSERT INTO test (id, content) "
|
||||
@"VALUES($1, $2)"
|
||||
parameters: @[@"2", @"Blup!!"]];
|
||||
parameters: @"2", @"Blup!!", nil];
|
||||
|
||||
result = [connection executeCommand: @"SELECT * FROM test"];
|
||||
of_log(@"%@", result);
|
||||
of_log(@"JSON: %@", [result JSONRepresentation]);
|
||||
|
||||
result = [connection executeCommand: @"SELECT COUNT(*) FROM test"];
|
||||
of_log(@"%@", result);
|
||||
|
||||
[OFApplication terminate];
|
||||
}
|
||||
@end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue