|
|
1.1 root 1: /*
2: * MultiBinder.m
3: * A Binder for fetching multiple results sets from a stored procedure.
4: * You may freely copy, distribute, and reuse the code in this example.
5: * NeXT disclaims any warranty of any kind, expressed or implied, as to its
6: * fitness for any particular use.
7: * Written by Jack Greenfield
8: */
9:
10: #import "MultiBinder.h"
11:
12: @implementation MultiBinder
13:
14: - initFromPropertyLists:(List *)propLists
15: {
16: if ((self = [super init]) != nil)
17: {
18: currentResultSet = 0;
19: if (propLists) propListList = [propLists copyFromZone:[self zone]];
20: }
21:
22: return self;
23: }
24:
25: - (List *)getCurrentProperties:(List *)aList
26: {
27: return [super getProperties:aList];
28: }
29:
30: - (unsigned int)currentResultSet
31: {
32: return currentResultSet ? currentResultSet - 1 : [propListList count];
33: }
34:
35: - (List *)getProperties:(List *)aList
36: {
37: if (currentResultSet)
38: if ([delegate respondsTo:@selector(binderWillChangeResultSet:)])
39: [delegate binderWillChangeResultSet:self];
40:
41: [aList empty];
42: [aList appendList:[propListList objectAt:currentResultSet]];
43: [self setProperties:aList];
44: currentResultSet++;
45: if ([propListList count] && currentResultSet > [propListList count])
46: currentResultSet = [propListList count];
47: else
48: if ([delegate respondsTo:@selector(binderDidChangeResultSet:)])
49: [delegate binderDidChangeResultSet:self];
50:
51: return aList;
52: }
53:
54: - free
55: {
56: [[propListList freeObjects] free];
57: return [super free];
58: }
59:
60: @end
61:
62: @implementation DBBinder (MultiBinderMethods)
63:
64: - (List *)getCurrentProperties:(List *)aList
65: {
66: return([self getProperties:aList]);
67: }
68:
69: @end
70:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.