Overview
Context
Changes
Modified PGConnection.m
from [81c3c0036a]
to [d9f8dfd676].
︙ | | |
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
-
+
-
-
-
+
|
[connectionInfo appendFormat: @" %@=%@", key, object];
else
connectionInfo = [OFMutableString stringWithFormat:
@"%@=%@", key, object];
}
if ((_connnection = PQconnectdb([connectionInfo UTF8String])) == NULL)
@throw [OFOutOfMemoryException
@throw [OFOutOfMemoryException exception];
exceptionWithClass: [self class]];
if (PQstatus(_connnection) == CONNECTION_BAD)
@throw [PGConnectionFailedException
exceptionWithClass: [self class]
connection: self];
exceptionWithConnection: self];
[pool release];
}
- (void)reset
{
PQreset(_connnection);
|
︙ | | |
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
-
-
-
+
+
-
-
-
+
+
|
- (PGResult*)executeCommand: (OFConstantString*)command
{
PGresult *result = PQexec(_connnection, [command UTF8String]);
if (PQresultStatus(result) == PGRES_FATAL_ERROR) {
PQclear(result);
@throw [PGCommandFailedException
exceptionWithClass: [self class]
connection: self
command: command];
exceptionWithConnection: self
command: command];
}
switch (PQresultStatus(result)) {
case PGRES_TUPLES_OK:
return [PGResult PG_resultWithResult: result];
case PGRES_COMMAND_OK:
PQclear(result);
return nil;
default:
PQclear(result);
@throw [PGCommandFailedException
exceptionWithClass: [self class]
connection: self
command: command];
exceptionWithConnection: self
command: command];
}
}
- (PGResult*)executeCommand: (OFConstantString*)command
parameters: (id)parameter, ...
{
OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init];
|
︙ | | |
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
+
+
-
+
-
+
-
+
|
@try {
size_t i = 0;
do {
if ([parameter isKindOfClass: [OFString class]])
values[i++] = [parameter UTF8String];
else if ([parameter isKindOfClass: [OFNumber class]]) {
OFNumber *number = parameter;
switch ([parameter type]) {
switch ([number type]) {
case OF_NUMBER_BOOL:
if ([parameter boolValue])
if ([number boolValue])
values[i++] = "t";
else
values[i++] = "f";
break;
default:
values[i++] = [[parameter description]
values[i++] = [[number description]
UTF8String];
break;
}
} else if ([parameter isKindOfClass: [OFNull class]])
values[i++] = NULL;
else
values[i++] = [[parameter description]
|
︙ | | |
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
|
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
-
-
-
+
+
|
return [PGResult PG_resultWithResult: result];
case PGRES_COMMAND_OK:
PQclear(result);
return nil;
default:
PQclear(result);
@throw [PGCommandFailedException
exceptionWithClass: [self class]
connection: self
command: command];
exceptionWithConnection: self
command: command];
}
}
- (void)insertRow: (OFDictionary*)row
intoTable: (OFString*)table
{
OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init];
|
︙ | | |
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
|
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
|
-
-
-
+
+
|
}
[pool release];
if (PQresultStatus(result) != PGRES_COMMAND_OK) {
PQclear(result);
@throw [PGCommandFailedException
exceptionWithClass: [self class]
connection: self
command: command];
exceptionWithConnection: self
command: command];
}
PQclear(result);
}
- (void)insertRows: (OFArray*)rows
intoTable: (OFString*)table
|
︙ | | |
Modified PGResult.m
from [3b43b74b64]
to [a066a8eda5].
︙ | | |
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
-
+
-
|
{
return PQntuples(_result);
}
- (id)objectAtIndex: (size_t)index
{
if (index > PQntuples(_result))
@throw [OFOutOfRangeException
@throw [OFOutOfRangeException exception];
exceptionWithClass: [self class]];
return [PGResultRow rowWithResult: self
row: (int)index];
}
- (PGresult*)PG_result
{
|
︙ | | |
Modified PGResultRow.m
from [bf3d3626a7]
to [751cf4cc9f].
︙ | | |
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
-
+
|
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]];
@throw [OFOutOfRangeException exception];
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;
|
︙ | | |
Modified exceptions/PGCommandFailedException.h
from [bd6baa8db9]
to [4d78dea5a5].
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
-
-
-
+
+
-
-
-
+
+
|
#import "PGException.h"
@interface PGCommandFailedException: PGException
{
OFString *_command;
}
#ifdef OF_HAVE_PROPERTIES
@property (readonly, copy, nonatomic) OFString *command;
#endif
+ exceptionWithClass: (Class)class_
connection: (PGConnection*)connection
command: (OFString*)command;
+ (instancetype)exceptionWithConnection: (PGConnection*)connection
command: (OFString*)command;
- initWithClass: (Class)class_
connection: (PGConnection*)connection
command: (OFString*)command;
- initWithConnection: (PGConnection*)connection
command: (OFString*)command;
- (OFString*)command;
@end
|
Modified exceptions/PGCommandFailedException.m
from [6309f695e9]
to [2780d9067f].
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
-
-
-
+
+
-
+
-
-
+
-
-
-
+
+
-
+
-
-
+
-
-
-
+
|
#import "PGCommandFailedException.h"
@implementation PGCommandFailedException
+ exceptionWithClass: (Class)class
connection: (PGConnection*)connection
command: (OFString*)command
+ (instancetype)exceptionWithConnection: (PGConnection*)connection
command: (OFString*)command
{
return [[[self alloc] initWithClass: class
return [[[self alloc] initWithConnection: connection
connection: connection
command: command] autorelease];
command: command] autorelease];
}
- initWithClass: (Class)class
connection: (PGConnection*)connection
command: (OFString*)command
- initWithConnection: (PGConnection*)connection
command: (OFString*)command
{
self = [super initWithClass: class
self = [super initWithConnection: connection];
connection: connection];
@try {
_command = [command copy];
} @catch (id e) {
[self release];
@throw e;
}
return self;
}
- (void)dealloc
{
[_command release];
[super dealloc];
}
- (OFString*)description
{
return [OFString stringWithFormat:
return [OFString stringWithFormat: @"A PostgreSQL command failed: %@\n"
@"A PostgreSQL command in class %@ failed: %s\nCommand: %@",
[self inClass], PQerrorMessage([_connection PG_connection]),
_command];
@"Command: %@", _error, _command];
}
- (OFString*)command
{
OF_GETTER(_command, NO)
}
@end
|
Modified exceptions/PGConnectionFailedException.m
from [de24e68bdc]
to [b1115b7f5a].
1
2
3
4
5
6
7
8
9
10
11
12
|
1
2
3
4
5
6
7
8
9
10
|
-
+
-
-
-
+
|
#import "PGConnectionFailedException.h"
@implementation PGConnectionFailedException
- (OFString*)description
{
return [OFString stringWithFormat:
@"Establishing a PostgreSQL connection in class %@ failed:\n%s\n"
@"Establishing a PostgreSQL connection failed:\n%@\n"
"Parameters: %@", [self inClass],
PQerrorMessage([_connection PG_connection]),
[_connection parameters]];
"Parameters: %@", _error, [_connection parameters]];
}
@end
|
Modified exceptions/PGException.h
from [c9366d7488]
to [9572250036].
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
+
-
-
+
-
-
+
|
#import <ObjFW/ObjFW.h>
#import "PGConnection.h"
@interface PGException: OFException
{
PGConnection *_connection;
OFString *_error;
}
#ifdef OF_HAVE_PROPERTIES
@property (readonly, retain, nonatomic) PGConnection *connection;
#endif
+ exceptionWithClass: (Class)class_
connection: (PGConnection*)connection;
+ (instancetype)exceptionWithConnection: (PGConnection*)connection;
- initWithClass: (Class)class_
connection: (PGConnection*)connection;
- initWithConnection: (PGConnection*)connection;
- (PGConnection*)connection;
@end
|
Modified exceptions/PGException.m
from [603d30aa28]
to [63db1fe590].
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
-
-
+
-
+
-
-
-
+
-
+
+
-
+
+
+
+
+
+
+
+
+
-
+
-
-
+
|
#import "PGException.h"
@implementation PGException
+ exceptionWithClass: (Class)class
connection: (PGConnection*)connection
+ (instancetype)exceptionWithConnection: (PGConnection*)connection
{
return [[[self alloc] initWithClass: class
return [[[self alloc] initWithConnection: connection] autorelease];
connection: connection] autorelease];
}
- initWithClass: (Class)class
connection: (PGConnection*)connection
- initWithConnection: (PGConnection*)connection
{
self = [super initWithClass: class];
self = [super init];
@try {
_connection = [connection retain];
_connection = [connection retain];
_error = [[OFString alloc]
initWithCString: PQerrorMessage([_connection PG_connection])
encoding: OF_STRING_ENCODING_NATIVE];
} @catch (id e) {
[self release];
@throw e;
}
return self;
}
- (void)dealloc
{
[_connection release];
[_error release];
[super dealloc];
}
- (OFString*)description
{
return [OFString stringWithFormat:
return [OFString stringWithFormat: @"A PostgreSQL operation failed: %@",
@"A PostgreSQL operation in class %@ failed: %s", [self inClass],
PQerrorMessage([_connection PG_connection])];
_error];
}
- (PGConnection*)connection
{
OF_GETTER(_connection, NO)
}
@end
|