DIRECTORY Rope USING [ROPE]; DBEnvironment: CEDAR DEFINITIONS = BEGIN TupleObject: TYPE; FirstLast: TYPE = {First, Last}; Version: TYPE = {OldOnly, NewOnly, NewOrOld}; Error: SIGNAL[code: ErrorCode]; -- Exported to be same as DB.Error ErrorCode: TYPE = { AlreadyExists, -- DeclareEntity, DeclareRelship: already exists, but version=NewOnly BadUserPassword, -- User name and/or password invalid (from Alpine) CannotDefaultSegment, -- Segment name not built-in to Cypress, and no segment # given DatabaseNotInitialized, -- Attempt to perform operation without calling DB.Initialize DictionaryUpdate, -- Attempt to modify a dictionary relship or entity: EntityOrRelshipSetsOpen, -- Excessive Domain/RelationSubsets still open (CloseTransaction). DirectoryNotFound, -- Directory specified in segment name not found on file server FileNotFound, -- No existing segment found with given file name, and version=OldOnly IllegalAttribute, -- Attribute not of the given relship's Relation or not attribute IllegalDomain, -- Argument is not actually a domain IllegalFileName, -- No directory or machine given for segment, or invalid chars in name IllegalEntity, -- Argument to GetP, or etc., is not an Entity IllegalRelship, -- Argument to GetF, or etc., is not a Relship IllegalRelation, -- Argument is not a relation IllegalString, -- Nulls not allowed in ROPEs passed to the database system IllegalSuperType, -- Can't define subtype of domain that already has entities IllegalValue, -- Value is not REF INT, ROPE, REF BOOL, or Entity IllegalValueType, -- Type passed DeclareAttribute is not datatype or domain MismatchedProperty, -- aOf and aIs attribute not from the same relation MismatchedAttributeValueType, -- Value not same type as required (SetF) MismatchedExistingAttribute, -- Existing attribute is different (DeclareAttribute) MismatchedExistingSegment, -- Existing segment has different # or name MismatchedPropertyCardinality, -- Did GetP with aOf that is not a Key MismatchedSegment, -- Attempt to create reference across segment boundary (e.g., SetF) MismatchedValueType, -- value passed V2E, V2I, etc. not of expected type MultipleMatch, -- More than one relationship satisfied avl on DeclareRelship. MustSetKeyAttributeFirst, -- For now, must set key attribute of a Relship before others NonUniqueEntityName, -- Entity in domain with that name already exists NonUniqueKeyValue, -- Relship already exists with same value for a key attribute NotFound, -- Version is OldOnly but no such Entity, Relation, or etc found NotImplemented, -- Action requested is not currently implemented NILArgument, -- Attempt to perform operation on NIL argument NullifiedArgument, -- Entity or relationship has been deleted, or invalidated by trans abort ProtectionViolation, -- Read or write to segment file not permitted this user. QuotaExceeded, -- Database too big for Alpine page quota of segment's directory SegmentNotDeclared, -- Attempt to open transaction on segment with no DeclareSegment ServerNotFound, -- File server does not exist or does not respond TransactionNotOpen, -- Attempt to perform operation with no transaction open TransactionAlreadyOpen, -- Attempt to open transaction on segment already associated w/one WriteNotAllowed, -- Attempt to write data but DeclareSegment specified read-only Unknown -- Unknown or not yet assigned error code }; Aborted: ERROR [trans: REF ANY]; Failure: ERROR [trans: REF ANY, what: ATOM, info: Rope.ROPE_ NIL]; InternalError: ERROR; END. CHANGE LOG Changed by Cattell on January 14, 1983 1:28 pm: Changed by Willie-Sue on February 10, 1983: Changed by MBrown on February 10, 1983: Changed by Cattell on June 6, 1983: Changed by Cattell on July 18, 1983 12:27 pm: Changed by Cattell on November 8, 1983 10:46 am: Changed by Willie-Sue on February 14, 1985 vDBEnvironment.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Common definitions for public DB interface. This is the only Cypress interface upon which recompilation of the external DB interface is dependent. Last edited by MBrown on February 22, 1983 11:24 am Cattell on November 8, 1983 10:45 am Willie-Sue on February 15, 1985 11:07:55 am PST Entity and Relship object type Other useful types Cypress signal definitions (these signals are exported by DBModelSystemImpl to here and DB) The Error signal is generated when an illegal operation is requested by the Cypress client. This error may be due to a programming error, bad data in the database, etc. Error is defined as SIGNAL rather than ERROR so that database operations can sometimes be recovered by proceeding despite problems, but they are not generally RESUMEable unless specified to be such here. The client can CONTINUE from a signal and retry, if that makes any kind of sense for the particular kind of error. This signal is generated when a read or write operation is performed and the transaction trans is being aborted. Client must explicitly call AbortTransaction and OpenTransaction to proceed. Client must normally wants to block other database calls until this is done. Other database calls before AbortTransaction is complete will also get the Aborted signal. Other database calls after that but before OpenTransaction will get Error[NullifiedArgument]. Database calls after that but on entities or relationships which have not been re-initialized will also get Error[NullifiedArgument]. NOTE: trans is defined a REF ANY instead of defining type Transaction because the compiler confuses the latter with the Transaction interface (of Pilot). The errors which create this signal are not recoverable. Clients must abort the execution of the system. Argument "what" indicate the reason for the error. The other can be used to pass some piece of information about the error. Note that there are two kinds of fatal errors. One is machine malfunction such as a bad disk. The other is resource exhaustion, such as memory space exhausted. See Rick or Mark for current definition of "what"; so far alternatives include: $communication: can't talk to server $lockConflict: transactions keep aborting while opening file $serverBusy: can talk to server but it refuses to create a transaction $allCachePagesLocked: see Rick or Mark $segmentTableOverflow: see Rick or Mark $tooManyRefs: estimate of maximum domain refs in DeclareDomain too small This error should not be generated if there are no bugs in database system, all clients programs are safe, and there are no other system or hardware errors. Therefore, in normal use clients should not catch this signal, it is made visible for debugging purposes. No error code is passed; comment should be in code at point of error generation giving more information. Got rid of old DBException interface created January 4, 1980 (!), moved all references to its contents to reference here. Moved the Error signal from the DB interface to here. Took out references to Juniper Flushed references to UserPine in FatalCode. Commented-out all Alpine dependencies, since Alpine is not stable enough yet. Added CommunicationFailure. Added ErrorCodes: BadUserPassword CannotDefaultSegment DirectoryNotFound QuotaExceeded. Reconverted to Cedar 5.0 Added trans argumnet to Failure; added Tioga formatting ʘšœ™Jšœ Ïmœ1™<—JšœT™TJšœ>™>Jšœ™Jšœ$™$Jšœ$™$Jšœ/™/J˜šÏk ˜ Jšœžœžœ˜J˜—Jšœžœž œž˜(J˜J˜Jšœ™˜Jšœ žœ˜J˜—Jšœ™˜Jšœ žœ˜ Jšœ žœ ˜-J˜—Jšœ[™[J˜JšœžœÏc"˜BJ˜Jšœ[™[JšœL™LJ˜JšœL™LJšœQ™QJšœT™TJšœM™MJ˜šœ žœ˜JšœŸE˜TJšœŸ2˜CJšœŸ?˜UJšœŸ=˜UJšœŸ4˜FJšœŸB˜[JšœŸ?˜RJšœŸF˜TJšœŸA˜SJšœŸ$˜3JšœŸF˜WJšœŸ.˜=JšœŸ.˜>JšœŸ˜.JšœŸ;˜JJšœŸ;˜MJšœŸ2˜@JšœŸ9˜KJšœŸ3˜GJšœŸ)˜GJšœŸ5˜RJšœŸ+˜FJšœŸ&˜EJšœŸC˜VJšœŸ3˜HJšœŸ>˜MJšœŸ=˜WJšœŸ1˜FJšœŸ=˜PJšœ Ÿ@˜JJšœŸ0˜@Jšœ Ÿ/˜™>JšœL™LJšœG™GJ˜J˜—Jšžœ˜J˜Jšžœž˜ J˜J˜J˜/Jšœ°™°J˜J˜+Jšœ™J˜J˜'JšœT™TJšœ&™&J˜J˜#Jšœ™J˜J˜-JšœW™WJ˜J˜0Jšœ™J™J˜*J™8—…—ô ‰