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;
|
- (void)reset;
|
||||||
- (PGResult*)executeCommand: (OFString*)command;
|
- (PGResult*)executeCommand: (OFString*)command;
|
||||||
- (PGResult*)executeCommand: (OFString*)command
|
- (PGResult*)executeCommand: (OFString*)command
|
||||||
parameters: (OFArray*)parameters;
|
parameters: (id)firstParameter, ...;
|
||||||
- (PGconn*)PG_connection;
|
- (PGconn*)PG_connection;
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -78,28 +78,33 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
- (PGResult*)executeCommand: (OFString*)command
|
- (PGResult*)executeCommand: (OFString*)command
|
||||||
parameters: (OFArray*)parameters_
|
parameters: (id)parameter, ...
|
||||||
{
|
{
|
||||||
OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init];
|
OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init];
|
||||||
PGresult *result;
|
PGresult *result;
|
||||||
const char **values;
|
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)
|
values = [self allocMemoryWithSize: sizeof(*values)
|
||||||
count: [parameters_ count]];
|
count: argsCount];
|
||||||
@try {
|
@try {
|
||||||
OFEnumerator *enumerator = [parameters_ objectEnumerator];
|
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
id parameter;
|
|
||||||
|
|
||||||
while ((parameter = [enumerator nextObject]) != nil) {
|
do {
|
||||||
if ([parameter isKindOfClass: [OFNull class]])
|
if ([parameter isKindOfClass: [OFNull class]])
|
||||||
values[i++] = NULL;
|
values[i++] = NULL;
|
||||||
else
|
else
|
||||||
values[i++] = [parameter UTF8String];
|
values[i++] = [parameter UTF8String];
|
||||||
}
|
} while ((parameter = va_arg(args, id)) != nil);
|
||||||
|
|
||||||
result = PQexecParams(conn, [command UTF8String],
|
result = PQexecParams(conn, [command UTF8String],
|
||||||
[parameters_ count], NULL, values, NULL, NULL, 0);
|
argsCount, NULL, values, NULL, NULL, 0);
|
||||||
} @finally {
|
} @finally {
|
||||||
[self freeMemory: values];
|
[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) "
|
[connection executeCommand: @"INSERT INTO test (id, name, content) "
|
||||||
@"VALUES($1, $2, $3)"
|
@"VALUES($1, $2, $3)"
|
||||||
parameters: @[@"1", @"foo", @"Hallo Welt!"]];
|
parameters: @"1", @"foo", @"Hallo Welt!", nil];
|
||||||
[connection executeCommand: @"INSERT INTO test (id, content) "
|
[connection executeCommand: @"INSERT INTO test (id, content) "
|
||||||
@"VALUES($1, $2)"
|
@"VALUES($1, $2)"
|
||||||
parameters: @[@"2", @"Blup!!"]];
|
parameters: @"2", @"Blup!!", nil];
|
||||||
|
|
||||||
result = [connection executeCommand: @"SELECT * FROM test"];
|
result = [connection executeCommand: @"SELECT * FROM test"];
|
||||||
of_log(@"%@", result);
|
of_log(@"%@", result);
|
||||||
of_log(@"JSON: %@", [result JSONRepresentation]);
|
of_log(@"JSON: %@", [result JSONRepresentation]);
|
||||||
|
|
||||||
|
result = [connection executeCommand: @"SELECT COUNT(*) FROM test"];
|
||||||
|
of_log(@"%@", result);
|
||||||
|
|
||||||
[OFApplication terminate];
|
[OFApplication terminate];
|
||||||
}
|
}
|
||||||
@end
|
@end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue