Objectivity Release Notes for CPP Version 6.0 SUPPORTED CONFIGURATIONS Objectivity Platform Name Vendor Hardware Operating System C++ Compiler ------------- ----------------- -------------- ---------------- ---------------- alphaosf1 Digital Equipment AXP (Alpha) DEC UNIX 4.0 Compaq C++ 6.1 hprisc Hewlett Packard HP9000 700/800 HP/UX 11.0 HP aCC A.03.13 ibmrs6000 IBM RS/6000 AIX 4.3 IBM xlC 3.6.6 iris Silicon Graphics MIPS III IRIX 6.5.9 C++ 7.3.1.1m linux86 Redhat Intel Linux 6.1 egcs 2.95.2 intelnt Microsoft Intel Windows NT 4.0 VC++ 6.0 SP3/SP4 Windows 98 VC++ 6.0 SP3/SP4 Windows 2000 VC++ 6.0 SP3/SP4 solaris4 Sun Microsystems SPARC Solaris 2.6 C++ 4.2 solaris7 Sun Microsystems SPARC Solaris 2.7, 2.8 C++ 5.0, 5.1 ************************** NEW AND CHANGED FEATURES ************************** Please refer to Objectivity Release Notes PDF file for the new and changed features. **************** FIXED PROBLEMS **************** (10854) ODMG persistent base class should be d_Object Symptom The class name `d_Persistent_Object' from ODMG version 1.1 was being supported instead of the name `d_Object' as specified in versions 1.2 and later. Objectivity Release 6.0 now supports both names. (11218, 11731) warning messages from Microsoft C++ compiler Symptom When Objectivity applications were compiled on Microsoft Windows, the compiler would issue several warning messages pertaining to Objectivity header files. The headers have been modified to avoid these warnings. (11905) Provide API to get the transaction ID from within an application Symptom No API to get transaction within an application. Now you can obtain the ID of the transaction you have started. (12250) Would like an API for oocheckls Symptom No API for oocheckls. The new function `ooCheckLS' provides a way for an application to test whether a lock server is running. (15089) Mmaximum allowable Container number message Symptom Error #2142: . . maximum allowable Container number (65535) is exceed. <-- should be 32000. (15260) oo.h should define ooGCContObj Symptom oo.h does not have definition of ooGCContObj. (15355) Adding object references to an ooTreeList can cause application crash Symptom A crash frequently happens when the ooTreeList was created to use small arrays such as ooTreeList(7). All ooCollection language bindings are affected by this: C++, Java and Smalltalk. (15370) ptr and delete_object are redefined as private in db, fd, and ap refhandles Symptom ooRef(ooObj) and ooHandle(ooObj) define methods ptr and delete_object. All subclasses of ooRefHandle(ooObj) appear to inherit these methods, including ooRefHandle(ooAPObj), ooRefHandle(ooDBObj) and ooRefHandle(ooFDObj). You get a unpredicted results including segmentation fault if you call delete_object or ptr methods. These methods really should not be available to db, fd, and ap refs and handles, and so are redefined as private in the relevant classes. (15407) Deleting an ooTreeList or an ooTreeMap may cause crash Symptom Deleting an ooTreeList or an ooTreeMap may cause crash (15465) Deleting an ooCollection does not delete the container. Symptom Deleting an ooCollection does not delete the container of the ooAdmin object if empty. (15271) "library=iostream, no%Cstd" in Solaris 7 CC5.0 Symptom Objy 5.2 on Sol7 CC5.0 should not be built with "library=iostream, no%Cstd" flag. The "library=iostream, no%Cstd" flag from builds. ********************** DOCUMENTATION ERRATA ********************** CHANGES TO INSTALLATION OF OBJECTIVITY/C++ ------------------------------------------ Installation and Platform Notes for Windows and Installation and Platform Notes for Unix have been reprinted for Release 6.0. CHANGES TO USING OBJECTIVITY/C++ BOOK ------------------------------------- The books Using Objectivity/C++ and Using Objectivity/C++ Supplement have been replaced in Release 6.0 by: Objectivity/C++ Programmer's Guide Objectivity/C++ Programmer's Reference An online version of these books is available in Portable Document Format (PDF), which you can view using the freely available Acrobat Reader software from Adobe Systems, Inc. You can obtain Acrobat Reader for your platform from Adobe's online services. Use your World Wide Web browser to access the web site www.adobe.com. On Windows, the online books are located in: installDir\doc\cxxGuide.pdf installDir\doc\cxxRef.pdf On UNIX, the online books are located in: installDir/arch/doc/cxxGuide.pdf installDir/arch/doc/cxxRef.pdf A more recently updated PDF version of this book may be available on Objectivity's InfoCenter. Use your World Wide Web browser to access the web site http://info.objy.com CHANGES TO OBJECTIVITY/C++ PROGRAMMER'S REFERENCE ================================================= (15542) ooKeyType has incorrect list of field types Errata Page 53 of the Objectivity/C++ Programmer's Reference incorrectly lists oocFloat32 and oocFloat64 as constants of ooKeyType, and incorrectly omits constants oocUint64 and oocInt64. Corrections The list of constants for ooKeyType should read as follows: oocUint16 Objectivity/C++ type uint16. oocUint32 Objectivity/C++ type uint32. oocUint64 <- Objectivity/C++ type uint64. <- oocInt16 Objectivity/C++ type int16. oocInt32 Objectivity/C++ type int32. oocInt64 <- Objectivity/C++ type int64. <- oocString A fixed array of characters (type char *). In a key structure, a value of this type must have a null terminator. If you specify a value containing multiple null characters, only the characters up to and including the first null character are used. oocCharArray Character array with no particular terminator character. In a key structure, a value of this type may include null characters. The length of the character array is determined by the size of the key field, which is specified in the key structure. *************** OPEN PROBLEMS *************** (4082) Iterator Returns a Deleted Object Symptom Rarely, an iterator will return a deleted object if the deleted object is the first entry in the iteration. For example, if you initialize an iterator using an object and subsequently delete that object, the iterator will return the deleted object when you call the next member function. (4144) isValid Member Function Return Status Symptom The isValid member function for handles and object references returns oocTrue outside of a transaction. Workaround Calling isValid outside of a transaction is not supported. (5207) Using Static Data Members Symptom Static data members of persistent-capable classes are not persistent data. Since C++ does not allow initialization of data member fields, you must explicitly initialize a static data member of a persistent-capable class to the value you desire at process startup. struct B : public ooObj { static int sb; - }; int B::sb = 7; // initialize at process start-up At the time of static initialization, the ooInit member function will not have been called and the federated database will not have been initialized. Therefore, you should initialize all data areas (including static data members) that have references to persistent data using program statements rather than static initializers. (6405) Predicate Query Limitations Symptom The query language used by the Query Browser and the predicate query forms of the scan and nameOfLink member functions has the following limitations: o The ooAccessMode parameter to the scan and nameOfLink member functions is ignored. o Members are always visible. o Elements within VArrays of object references are not accessible (6506, 7890, 11449) Moving Objects Referenced by a Map Dictionary Symptom If you move an object referenced in an ooMap using ooObj::move, the embedded object identifier reference in the corresponding ooMapElem is not updated (regardless of whether referential integrity is turned on). If the target of the move is an ooDBObj or ooContObj, your application will terminate abnormally (11449). (7607) Deleting ooKeyDesc Objects Symptom If you delete an ooKeyDesc object without first calling its removeIndexes member function, the associated index pages are never reclaimed. (7701) MROW and Lock Waiting Symptom If you specify that you do not want to wait for locks when you start an MROW transaction, the transaction will ignore this directive and wait for locks. Workaround To work around this problem, call ooSetLockWait explicitly after starting the transaction. (7797) Object Verification Debug Mode Symptom When OO_DEBUG_VERIFY_OBJECT is set, verification of an object fails in the system database. (7798, 7799) Page and Container Verification Debug Mode Symptom When OO_DEBUG_VER_FY_PAGE or OO_DEBUG_VERIFY_CONTAINER is set, no output is sent to OO_DEBUG_FILE. (8123) Debug Trace Output Symptom If you use the OO_DEBUG_TRACE_PAGE option, system pages are shown with container identifiers of -1. (8942) ooHandle(ooFDObj)::encodeSchema Symptom If you call the schema encoding method ooHandle(ooFDObj)::encodeSchema, your application will terminate abnormally. The ability to encode schemas will be removed in a future release. (9316) ooContObj::exist() does not set invoking handle Symptom ooContObj::exist() with an open mode of oocNoOpen returns oocSuccess, but does not set the invoking handle. (9444) d_database or ooRef(ooDBObj) as name scope specifiers Symptom d_database or ooRef(ooDBObj) cannot be used as scope name specifiers for nameObj() and lookupObj(). (9587) User-defined predicate query operator dies on an array of int16. Symptom If you pass in a structure which contains an array of int16 to a user-defined predicate query operator, your application will fail. Workaround Substituting int32 for int16 avoids the problem. (9622) sub_nameOfLink() fails to sub all associations specified for default associations Symptom The sub_nameOfLink() method cannot subtract more than 1/2 of the specified associations in a single invocation. (11201) Requirements for using transient ooVArray's in threaded programs Symptom Using transient ooVArrays can cause your application to terminate abnormally. Workaround (1) You must use ooInitThread/ooTermThread. (2) You must cause the transient ooVArray to be destructed before you call ooTermThread. (11466) Using ooInit in place of ooInitThread can cause your application to terminate abnormally Symptom If you use ooInit to initialize a thread (instead of ooInitThead) your application will terminate abnormally. Workaround Use ooInitThread. (11468) Commiting or Aborting Transactions after ooTermThread causes a core dump Symptom If you commit or abort a transaction after ooTermThread your application will terminate abnormally. Workaround Commit or abort the transaction before calling ooTermThread. C++ Compiler Template Problems Symptom Because of incomplete implementation of templates in certain C++ compilers, the following member functions are not supported: ooRef(USER_PERS_CAP_CLASS) & ooRef(USER_PERS_CAP_CLASS)::copy( const ooHandle(ooObj) &nearH, ooRef(USER_PERS_CAP_CLASS) &newObjId) const; ooHandle(USER_PERS_CAP_CLASS) & ooRef(USER_PERS_CAP_CLASS)::copy( const ooHandle(ooObj) &nearH, ooHandle(USER_PERS_CAP_CLASS) &newObjH) const; ooHandle(USER_PERS_CAP_CLASS) ooRef(USER_PERS_CAP_CLASS)::copy( const ooHandle(ooObj) &nearH) const; Also, the following member function: ooRef(ooContObj) & ooRef(ooContObj)::operator=(ooShortRef(ooContObj)); is changed to: ooRef(ooContObj) & ooRef(ooContObj)::operator=(ooShortId); Effects of Omitting a Return Statement Symptom With most cfront-based C++ compilers, adverse effects can occur when you omit a return statement at the end of a function that is a non-void type. Under some conditions, the omission of a return statement results in a corrupt handle stack. Committing a transaction in Objectivity/DB requires a clean handle stack; committing a transaction with a corrupt handle stack can result in a segmentation fault typically in opiSwizzleHList. The following C++ code illustrates the situation: // Assume A is a persistent-capable class int foo(ooHandle(ooContObj)& contH){ ooHandle(A) aH; int n; n = 10; aH = new(contH) A; if (n == 0) { return 0; } } The destructor for the handle aH will not be invoked before returning from the function foo. This behavior is caused by the lack of a return outside the if statement.