home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
NeXTSTEP 3.2 (Developer)
/
NS_dev_3.2.iso
/
NextDeveloper
/
Headers
/
dbkit
/
DBRecordStream.h
< prev
next >
Wrap
Text File
|
1992-09-08
|
5KB
|
174 lines
/*
** DBRecordStream.h
** Database Kit, Release 3.0
** Copyright (c) 1992, NeXT Computer, Inc. All rights reserved.
*/
#import <objc/Object.h>
#import <dbkit/protocols.h>
#import <dbkit/enums.h>
@class List;
@class DBDatabase;
@class DBQualifier;
@class DBValue;
@interface DBRecordStream : Object
{
@public
id delegate;
id source;
id properties;
id database;
@private
id _keys;
id _sorts;
int _qualifierMark;
@protected
id _selectBinder;
id _modifyBinder;
id _private;
short _status;
struct {
#if __BIG_ENDIAN__
BOOL isModified:1;
BOOL newRecord:1;
BOOL freeSource:1;
BOOL freeQualifier:1;
int _RESERVED:12;
#else __BIG_ENDIAN__
int _RESERVED:12;
BOOL freeQualifier:1;
BOOL freeSource:1;
BOOL newRecord:1;
BOOL isModified:1;
#endif __BIG_ENDIAN__
} _flags;
}
/*
** clear causes the entire RecordStream to be reset. Empty will leave the
** orderings, keys, and properties intact.
*/
- init;
- empty;
- clear;
- free;
/*
** Any binders used by the recordStream will have the binderDelegate as
** their delegate.
*/
- delegate;
- binderDelegate;
- setDelegate:newDelegate;
- setBinderDelegate:newDelegate;
/*
** setProperties: will reset the keys list to contain any properties that
** respond YES to isKey -- the keys can be read and modified after this
** by calling getKeys and/or setKeys:
**
** The entity for every property in the list submitted must match the entity
** of the RecordList, otherwise the entire operation fails.
*/
- (List*)getProperties:(List*)returnList;
- (List*)setProperties:(List*)aPropertyList ofSource:aSource;
- (List*)getKeyProperties:(List*)returnList;
- (List*)setKeyProperties:(List*)aPropertyList;
- addRetrieveOrder:(DBRetrieveOrder)anOrder for:(id<DBProperties>)aProperty;
- fetchUsingQualifier:(DBQualifier*)aQualifier;
- cancelFetch;
- (BOOL)isModified;
- (BOOL)isNewRecord;
- (BOOL)isReadOnly;
- (DBRecordRetrieveStatus)currentRetrieveStatus;
/*
** saveModifications returns the number of records successfully modified and
** sent to the database. For the RecordStream, this will always be either
** 0, 1, or -1 on failure.
*/
- (unsigned)saveModifications;
/*
** These methods are the only way to access the contents of the record
*/
- getValue:(DBValue*)aValue forProperty:aProperty;
- setValue:(DBValue*)aValue forProperty:aProperty;
- getRecordKeyValue:(DBValue*)aValue;
/*
** Record management --
** Both newRecord and deleteRecord will return nil if they failed (and that
** failure was not condoned or caught by the delegate). If they return
** nil, then the cursor has NOT been advanced; it still points at the
** same record!!! In the same way, setNext will return nil
** if the cursor has not advanced due to a failure.
**
** The delegate has the option of "approving" a failure, by returning
** YES from recordStream:willFailForReason: If YES is returned, the cursor
** will advance and the failure will be ignored. In this event, if there
** is an active transaction context, its up to the application to deal with
** commit/abort. Otherwise, the failed record will NOT have been committed
** to the database.
**
** If there is no delegate, or the delegate returns NO from
** recordStream:willFailForReason:, then the cursor will not advance and
** whatever action is underway will not occur.
**
** setNext returns self if there are more records, and nil if at end.
*/
- newRecord;
- deleteRecord;
- setNext;
@end
@interface Object (DBRecordStreamDelegate)
/*
** The delegate of the RecordStream is given the opportunity to continue
** the transaction or abort. If the delegate returns YES from its
** recordList:willFailAt:reason: method, the list will attempt to abort
** a local transaction. If the transaction is not "owned" by the recordList,
** it is the responsibility of the app to either rollback or commit.
** If YES is returned, the list will attempt the rest of its modifications.
**
** If the database being accessed supports transactions, they
** should always be enabled before saving modifications. It is, in general,
** both safer for the integrity of the data involved and much more
** efficient to do this.
*/
- (BOOL)recordStream:aRecordStream willFailForReason:(DBFailureCode)aCode;
/*
** The recordStream normally verifies that a record still exists and is
** unique before modifying or deleting it. The default mechanism is to
** do a "confirming select" on the DBDatabase using the key value, and
** then to compare all properties to see that they haven't changed. (The
** select is usually a locking select.)
**
** This entire mechanism can be replaced by implementing the following
** delegate method. In this case, verification and locking are up to the
** delegate object -- if YES is returned, the record is considered to
** be verified, and modification will proceed. If NO is returned, the
** record will not be modified. This may also cause the entire containing
** saveModifications: to fail, depending on the transaction model being
** used.
**
** The only recordStream/recordList method that should be called during this
** delegate method is getValue:forProperty:
*/
- (BOOL)recordStreamPrepareCurrentRecordForModification:aRecordStream;
@end