Caché Documentation  
Caché 5.0.3 Release Notes


Welcome and thank you for using Caché, the post-relational database. This document provides a listing of changes between Caché 5.0.2 and Caché 5.0.3.

For detailed information on getting started, see the Caché 5.0 Release Notes (located off the Caché installation directory in the file Docs/GCRN/GCRN.html); for information on previous 5.0 maintenance kits, see the file prenotes.html.

This document contains several sections:
Security Vulnerability Notice - 27 June 2003
Caché and write permissions on UNIX systems
Default installations of Caché for UNIX systems are configured with write permission on the Caché bin and csp directories enabled for all UNIX users. In addition, Caché can be installed in a configuration that allows UNIX users (other than "root") in a specified group to start and stop Caché. This can result in certain vulnerabilities if hostile users have access to the system. The following example assumes that Caché has been installed in /cachesys and that members of the "cachemgr" group are allowed to start and stop Caché.

Present Status

The installation defaults have been changed for Caché 4.1.16 and 5.0.3. For more information, please contact the InterSystems Worldwide Response Center.

Workaround for earlier releases

Log on as "root", change to the directory where Caché is installed, and issue the command:

chmod go-w bin
If Caché is not being used for CSP programming, and is not running in conjunction with a local Apache web server, issue the command:
chmod -R go-w csp
Description of a Change Report
To help you assess the impact of these changes on your applications, each change description contains a more detailed explanation of the modification.
All changes include a table giving pertinent information on the issue's likelihood, impact of the change, and whether this has already been used successfully in production by other customers. In order to make the information easy to assimilate visually, the tabular information has been simplified to a keyword or two and a value. The full explanation of the keyword meanings are:
Possible Compatibility Issues
PLEASE EXAMINE THE REFERENCES IN THIS SECTION CAREFULLY.
They document necessary modifications to Caché for this version that may affect the way your applications are designed, implemented, executed and/or administered.
If you need assistance in deciding whether any of these changes affect your application, please contact the InterSystems Worldwide Response Center for assistance.
Section Table of Contents

Category: Installation.Unix
Platforms: UNIX
DevKey: LRS697
Summary: Change permissions on csp and bin subdirectories
Description:
A new script is distributed with Caché, CSP_protect. This script, located in the <cachesys>/csp directory, allows you to disable or enable write access to the CSP directory and files after installation. For a description of the issues, please see the "Security Vulnerability Notice - 27 June 2003" that appears earlier in this document. The issues are a consequence of the permissions on directories created by the installation scripts for the Caché engine, and for the CSP network daemon, browser, and other files. Prior to this release, the installation used to create
The script does change the groupid and permissions on various scripts and executables that are intended for use only by the Caché manager, but has not previously restricted directory access. The CSP_protect script is meant to be run at any time, for any UNIX version of Caché.
If you disable write access, for security purposes, currently available CSP applications and pages may be used, but no modifications are permitted. For this to be effective, you should start Caché as a non-root user but start the CSP Network Services Daemon as root.
NOTE:
Write access to the CSP directory and files can be enabled again via dialog with the CSP_protect script. The dialog is self-explanatory.

If the CSPinstall script is rerun, or the Web Server is (re)configured for CSP during a Cache installation, CSP_protect must be rerun to again disable write access to the CSP directory and files.

It is possible that some users may find the permissions on the bin directory too restrictive, since not even the Caché manager will be able to perform maintenance on the files in it unless either the id or permissions are changed by the system administrator.

Impact:
Improved security on UNIX systems.
Likelihood Risk Ad Hoc Enhancement
High Low No No



Category: Object.Java
Platforms: All
DevKey: MAB178
Summary: Profiling added to the Java binding
Description:
Java Binding Profiling allows a user to count the number of calls to Caché Server and total time spent while waiting for server response.
There are 2 ways to use it:
  1. The user can always get the total number of calls to Caché Server and total time spent while waiting for server response with methods com.intersys.objects.Database.getNumberOfServerCalls() and com.intersys.objects.Database.getServerTime().
  2. It is possible use partial profiling. If the user desires to count calls and time only for particular segments of the program he should first call com.intersys.objects.Database.setProfileOn(i) method. Then, until com.intersys.objects.Database.setProfileOff(i) is called, the number of calls and time will be added to data for segment "i". At any time the user can retrieve this information by calling com.intersys.objects.Database.getNumberOfServerCalls(i) and com.intersys.objects.Database.getServerTime(i) methods.

By default there are two segments available for profiling. This number can be changed either by setting the system property com.intersys.profile.segments to the desired number. For example, the command line option -Dcom.intersys.profile.segments=5 will set this number to 5. Alternatively, the user may call the com.intersys.objects.CacheDatabase.setNumberOfProfiles(n) method before initializing the Database connection. System property value takes precedence over programmatic call.

Also, the method com.intersys.objects.DatabaseUtilities.importClass() previously loaded a file from the machine on which Caché Server was running, not the Java client. Now it is loaded from a client machine. There is another method com.intersys.objects.DatabaseUtilities.loadLocalFile() that loads file from the machine on which Caché is running. If user is certain that client and server are running on the same machine it may be preferable to use loadLocalFile() to avoid overhead of transporting file from one machine to another.

Impact:
Improved profiling and debugging information is now available.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: Object.Java
Platforms: All
DevKey: MAB184
Summary: Deprecate use of proprietary Java collection classes
Description:
The following classes are now deprecated:

Impact:
Applications using these classes should be re-worked to use java.Util.Map and Java.Util.List instead.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.Activate
Platforms: All
DevKey: JN115
Summary: Introduce AsStream() methods on %Activate.IDispatch to cope with strings > 32KB
Description:
Additional methods have been added to the class %Activate.IDispatch to handle character strings greater than 32KB. These methods have names that end in "AsStream" and return their values as instances of %GlobalCharacterStream.

Impact:
Applications can now be extended to process more than 32KB with %activate.IDispatch.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: Object.Java
Platforms: All
DevKey: JSL974
Summary: Remove "standard" classes from the generated dependencies
Description:
When the user requests generation with the "r" flag, we generate dependencies for a Class. For instance, for Sample.Person, Sample.Address is a generated dependency since Home is an attribute of Person with type Sample.Address. We generate supporting C++ or Java code for all generated dependencies. This change excludes classes whose package is "%Library" or "%XML".

Impact:
Prevents generation of superfluous client bindings for library classes.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.Java
Platforms: All
DevKey: JSL1027
Summary: Don't project superclasses that are not registered and have all methods server-only
Description:
Here is the algorithm we use:
We have a class
     A extends B
Here is how we determine "not projected" for B. Normally we project the superclass, so this is an algorithm for not-projecting the superclass.
B is not projected if and only if all the methods and properties in "B" are marked as server-only and "B" is not a subclass of %Registered.
We are then saying that if A extends such a class B, then we only project A if all of A's methods are class methods.
We also implement the following: we return a message if a class in the class list or the dependencies has a superclass which is not a registered object and this server has all methods flagged as serveronly and the class which has this superclass has a method which is not a class method. There is a new "not projectible" error message for this case.
Here is the error message:
ERROR #6626: Class <classname> is not projectible. Projection is aborting. If the superclass of a class is not a %RegisteredObject and all the methods of the superclass are server-only and the class has some methods that are not class methods then it is not projectible. If the superclass of a class is null then the class must contain only class methods.

Impact:
Unusable superclasses will be removed from projections.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.Java
Platforms: OpenVMS
DevKey: JSL1077
Summary: Support Java generator on OpenVMS
Description:
On OpenVMS we generate files with names in OpenVMS format.
If the ROOTDIR is [MyRootDir] and the package is Sample.Person then the files generated are:

Impact:
The Java interface now works on OpenVMS.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.Java
Platforms: All
DevKey: MAB180
Summary: Unexpected 'ResultSet closed'
Description:
This happened when CacheQuery object was garbage collected while ResultSet was still in use. Code similar to:
ResultSet result =
	((new CacheQuery(login, "Sample.Person", "ByName")).execute());
resulted in the CacheQuery object being destroyed as soon as it was executed. This no longer occurs.

Impact:
A spurious error has been eliminated.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1099
Summary: Project methods with conflicting signatures as comments in generated code
Description:
Suppose we have a Class A extends B, C, etc.
For such a class B is the primary superclass.
Suppose there are methods in the primary superclass (B) which have a different signature than methods in the compiled methods of A (these are methods with conflicting signatures due to multiple inheritance) then for each such method <M> in class <C> with primary superclass <S> in the generated code we will issue a comment:
   // In Class <C> method <M> not generated because
   // conflict with its signature in left-most super <S>.
We will not generate further code for such a method.

Impact:
The attempt at projection will fail. The class implementor will have to re-write one or more of the classes involved to resolve the conflict.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1100
Summary: Don't allow projection when properties have conflicting declarations
Description:
If a property is defined one way in its class but another way in its primary superclass, then don't allow projection.

Impact:
The attempt at projection will fail. The class implementor will have to re-write one or more of the classes involved to resolve the conflict.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1116
Summary: Don't project certain sorts of classes
Description:
Caché will now allow projection if a class is "static" and if it contains only class methods and no properties or instance methods.
There have been deficiencies in the Language bindings where the customer has been allowed to project certain class definitions that result in code that either does not compile or does not work.
Since the Caché projection mechanism is based on deriving information about a class from its primary superclass and it is extending this superclass in Java or C++ that provides so much functionality, we have to insist that this primary superclass be a %RegisteredObject. We deny projection if the class has a primary superclass that is NOT a %RegisteredObject and it is not "static." A "static" class has only class methods and no properties or instance methods.
In other words, if A extends B,C and B is not a %RegisteredObject and A is not "static" then A is not projectible and we cannot generate code for A in Java or C++.
Also, if a class is persistent then in Java the class must extend Persistent. There is a similar rule for C++ (d_persistent). So if a class is persistent, its primary superclass must be persistent.
So if A extends B,C and A is persistent, then B must be persistent for A to be projectible. Otherwise, we will refuse to project B with an error message.

Impact:
Some prior restrictions on class projections have been lifted.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1118
Summary: Don't allow projection of not up-to-date classes
Description:
In C++, Java and EJB bindings make a class not up-to-date by editing it but not compiling it. Users should compile the class before projecting it.

Impact:
The possibility of projecting an out-of-date class definition has been closed.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.Soap
Platforms: All
DevKey: MXT447
Summary: For SOAP allow types in a different namespace than methods
Description:
Add new TYPENAMESPACE class parameter for %SOAP.WebService and %SOAP.WebClient to control XML namespace of types used by SOAP Web methods. This new parameter works with the existing NAMESPACE class parameter and SoapNameSpace method keyword to determine the XML namespaces for the Web service or client.
NAMESPACE is the default XML namespace for the client or service.
SoapNameSpace is the XML namespace for the method definition in the WSDL. If SoapNameSpace is not specified for a method, then NAMESPACE is used as the method namespace.
TYPENAMESPACE is the XML namespace for the types used in the method arguments and return types in this Web client or Web service. If TYPENAMESPACE is not specified or is "", then the default namespace used for the types is from the NAMESPACE parameter.

Impact:
The handling of types and namespaces in SOAP has been improved.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: Object.XML
Platforms: All
DevKey: MXT450
Summary: Address issues with handling of xsi:nil attribute in XML import
Description:
The following changes were made:
  1. xsi:nil on a element that maps to a property that is an object reference currently sets the property to "". This is not correct, since the XML schema standard requires that any attributes be imported. Therefore, XMLImport now creates an object with default values and sets any specified attributes.
  2. Treat xsi:nil="1" the same as xsi:nil="true" per schema standard.
  3. Support xsi:null="1" for SOAP-encoded XML documents.
  4. Add namespace test for xsi:nil to correct errors during XML import.

Impact:
XMLImport now conforms more closely to the XML Schema standard.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: SQL
Platforms: All
DevKey: DPV1978
Summary: Address calculation of {fn WEEK(...)} function
Description:
Caché and SQL now use the same underlying algorithm to calculate WEEK. SQL was changed to use the Caché calculation.

Impact:
SQL applications using WEEK may get different (but now correct) results.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: SQL
Platforms: All
DevKey: DPV2036
Summary: %SQL.Manager.CatalogPriv.UserNamespace query lists all namespaces instead of "<ALL NAMESPACES>"
Description:
The %SQL.Manager.CatalogPriv.UserNamespace query used to return a single row of "<ALL NAMESPACES>" if a user had access to all namespaces. Now it actually lists all the namespaces that the user has access to.

Impact:
Applications which looked for the string "<ALL NAMESPACES>" will have to be re-coded.
Likelihood Risk Ad Hoc Enhancement
Low Moderate Yes No



Category: SQL.DDL
Platforms: All
DevKey: DPV2016
Summary: SQL DROP TABLE referenced by Foreign Key prohibited
Description:
A change has been made to SQL DDL DROP TABLE to not allow the DROP of the table if any external (defined on another table) Foreign Key constraints are defined which reference the table being dropped. This behavior is consistent with the RESTRICT form of DROP TABLE. At this time, Caché does not support the CASCADE behavior of DROP TABLE. This change in behavior might cause some applications to return an error on a DROP TABLE where the DROP TABLE used to succeed. Applications must now DROP all referencing Foreign Key constraints before dropping the table they reference. This avoids dangling Foreign Key constraints.
There is a new SQLCODE error.
If you attempt to drop a table which has a foreign key referencing the table from another table, the following error will be returned:
SQLCODE: -320
Cannot DROP table - One or more Foreign Key constraints reference this table
Impact:
A loophole which would allow DROP TABLE to create dangling foreign key references has been closed.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: SQL.DDL
Platforms: All
DevKey: DPV2035
Summary: Drop FKey should rebuild the Primary Key Index if collation changes
Description:
Prior to this change, when a Foreign Key is added to a table through DDL and the Foreign Key constraint references a key in the referenced table which is also the IDKEY, Caché turned the field specified in the Foreign Key constraint into a reference to the referenced table. Now Caché will no longer turn the field into a reference if there is already data in the table when the foreign key is added through DDL.
Also, when a Foreign Key is dropped from a table through DDL and the Foreign Key constraint references a key in the referenced table which is also the IDKEY, Caché turned the field specified in the Foreign Key constraint into a regular field, not a reference to the referenced table. In the case where the field was a %Library.String type, this might result in the field suddenly getting a new collation. This occurred because the default collation for a string field is SQLUpper, but the collation of an IDKEY string field is always EXACT. Now, if this reference is dropped because the foreign key is dropped through DDL and there is data in the table, Caché SQL retains the EXACT collation setting for the field.

Impact:
Changes which affect index ordering now cause indexes to be rebuilt.
Likelihood Risk Ad Hoc Enhancement
Low Low Yes No



Category: System.I/O
Platforms: OpenVMS
DevKey: LRS700
Summary: Address read terminator handling for OpenVMS stream mode
Description:
When reading sequential files in OpenVMS where the file open options are "WUN", Caché now correctly sets $XB with the record terminator.

Impact:
Applications reading from stream files on OpenVMS systems may experience different behavior at EOF.
Likelihood Risk Ad Hoc Enhancement
Low Low No No




Other changes in this version
The following changes are deemed unlikely to affect applications in any significant manner. Nonetheless, InterSystems recommends examining them in view of your own application and system needs.
If you need assistance in deciding whether any of these changes affect your application, please contact the InterSystems Worldwide Response Center for assistance.
Section Table of Contents

Category: Control Panel
Platforms: All
DevKey: CFL859
Summary: List more than 1000 processes in Control Panel
Description:
Previously, the Control Panel displayed only approximately the first 1000 processes. It nows displays all of them.

Impact:
The entire list of processes is visible from the control panel.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Control Panel
Platforms: All
DevKey: CFL930
Summary: Inadvertent deletion of locks via the Control Panel is now more difficult.
Description:
Caché now prompts for when a request is made to delete a lock from the Control Panel.

Impact:
Inadvertent deletion of locks via the Control Panel is a little harder.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: CSP
Platforms: All
DevKey: MAK738
Summary: Error in CSP if attribute name is very long
Description:
If you pass in a URL with an attribute name that is very long, then it would cause an error in CSP. We do not support attributes longer than 254 characters, so now it ignores this request to set a long attribute name.

Impact:
Error checking on attribute names in CSP is improved.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: CSP.Compiler
Platforms: All
DevKey: MXT452
Summary: Address issue in usage of #()# in href attribute of <a> tag
Description:
Correct a deficiency introduced in 5.0.1 where usage of #()# in href attribute of <a> tag no longer generates ..Link as needed. The ..Link is now produced as in 5.0 release version for #()# in href.

Impact:
The use of #()# in href attribute of <a> tag now works again.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: CSP.Net
Platforms: All
DevKey: MXT451
Summary: Change %Net.POP3 and %Net.SMTP to handle non-ASCII mail attachment filename
Description:
Address issue where attachment names which are not ASCII are being improperly decoded when downloaded using %Net.POP3, even though content-disposition properly returns the filename, that is msg.Filename was not converted correctly and now is.
Also change %Net.SMTP to properly encode non-ASCII filename.

Impact:
Non-ASCII filenames in attachments are now handled correctly.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: CSP.Web Server
Platforms: All
DevKey: MAK768
Summary: Built in Web server returns text fields incorrectly
Description:
An <input type=text name="txtName"> field in a form with ENCTYPE="multipart/form-data" is returned by the built in Web server in %request.MimeData("txtName",1) stream. It should be return in %request.Data("txtName",1) which is the way CSP Gateway works.

Impact:
Web server now returns proper datatype.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Explorer
Platforms: All
DevKey: CFL927
Summary: Prevent endless loop in Explorer (rtn compare)
Description:
An issue has been addressed that caused an endless loop in Explorer when comparing a routine from a sequential file with the one in the database.

Impact:
Explorer now operates properly.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Installation
Platforms: All
DevKey: ALE210
Summary: Load Caché Basic Tutorial into SAMPLES database
Description:
Bastutorial.xml is now loaded into SAMPLES database so users don't need to import this XML file to run the tutorial.

Impact:
No special action is needed by users to run the Caché Basic tutorial.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: Installation.UNIX
Platforms: AIX
DevKey: ALE195
Summary: Address platform detection issue on ppc systems that have CPU names different from proc[0-3]
Description:
We now obtain correctly identify the platform type as a PPC when processor names are not of the form, "proc0" to "proc3".

Impact:
Caché correctly identifies multiCPU systems.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Installation.Upgrade
Platforms: All
DevKey: LRS683
Summary: Address issue with merging old .def files into a new .cpf file
Description:
Caché sometimes failed to recognize old platform names when using the configuration file converter utility. This would only affect upgrades from Caché 2.1.9 or earlier versions. This now works properly.

Impact:
Upgrades from older versions are easier.
Likelihood Risk Ad Hoc Enhancement
Low Low Yes No



Category: Installation.VMS
Platforms: OpenVMS
DevKey: ALE212
Summary: Check if CSP is already configured for Caché and allow users to reconfigure it for new Caché installation
Description:
CSP install script now checks if Apache configuration files have a CSP section and, if so, asks if the user wants to update it for new Caché installation.

Impact:
Upgrades to Apache CSP on OpenVMS are now automatic.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: Installation.Windows
Platforms: Windows
DevKey: ALE194
Summary: Japanese error messages are now available on localized systems
Description:
There are 2 things you need to do in order to see the Japanese error message:
  1. Load the Japanese error messages. The command is:

    Do Import^%occMessages("c:\cachesys\bin\errors_ja.xml")

  2. Set the default locale of the server to be Japanese. The command is:

    Set ^%SYS("LANGUAGE","CURRENT")="ja"

After these 2 steps, you will be able to see error messages in Japanese.

Impact:
Users of Japanese systems now can see error messages in that language.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: Installation.Windows
Platforms: Windows
DevKey: ALE196
Summary: Localize CSP Gateway upon installation
Description:
Perviously, the CSP Gateway was not localized by default on non-English locale systems. In order to localize it, for example for Japanese, a user needed to perform manual operations.
This process is now done automatically upon installation.

Impact:
CSP recognizes locales and configures itself accordingly.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Installation.Windows
Platforms: Windows
DevKey: ALE198
Summary: Do not try to register ODBC driver when it is not selected to be installed
Description:
When any component under SQL Tools was selected, install erroneously detected ODBC components as selected (even if it was not).

Impact:
Install now checks only for conflicts with the software to be installed.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Installation.Windows
Platforms: Windows
DevKey: ALE199
Summary: Update description for ODBC component
Description:
Description for ODBC driver component was incorrect, there is actually no dependency on Caché Direct.

Impact:
An erroneous conflict message has been corrected.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Installation.Windows
Platforms: Windows
DevKey: ALE207
Summary: Address an issue with install not detecting IIS Scripts directory
Description:
Address an issue with install not detecting IIS Scripts directory which resulted in WebLink IIS module not being installed.

Impact:
Install properly handles IIS detection.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Installation.Windows
Platforms: Windows
DevKey: ALE211
Summary: Install all files required for ActiveX connectivity when it is selected to be installed
Description:
Some files required for ActiveX connectivity were not installed when this component was selected to be installed and Cache Tools was not selected. Also addressed another issue - shortcut to SQL Manager was not created when it was installed without Cache Tools.

Impact:
Improved install selection of components.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Languages
Platforms: All
DevKey: CDS422
Summary: <NOLINE> compile error will not overlay previous error
Description:
An issue in the ObjectScript compiler could prevent the proper splitting of large object routines into proper-sized smaller routines. This has been corrected.

Impact:
Some large routines that failed to compile now do so.
Likelihood Risk Ad Hoc Enhancement
Low Low Yes No



Category: Languages
Platforms: All
DevKey: CDS432
Summary: Support Caché Basic Copy/Merge for multidimensional properties
Description:
The Caché Basic COPY and MERGE commands now take multidimensional property references as operands.

Impact:
Caché Basic now works better with multidimensional data.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: Languages.Cache Basic
Platforms: All
DevKey: CDS433
Summary: Support Caché Basic Erase of multidimensional properties
Description:
The Caché Basic ERASE commands now take a multidimensional property reference as an operand.

Impact:
Caché Basic now works better with multidimensional data.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: Languages.Cache Basic
Platforms: All
DevKey: CDS434
Summary: Allow Caché Basic label and code on same line
Description:
A restriction in the Caché Basic compiler prevented a label and executable code from appearing on the same line. This has been removed.

Impact:
Caché Basic syntax processing for labels is improved.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Languages.Cache Basic
Platforms: All
DevKey: DAS439
Summary: Generate debug map for Caché Basic in debug mode
Description:
When Caché Basic code was generated and compiled in debug/line mode a debug map was not being generated. If an error occurred when executing a line of Caché Basic code in debug mode, then the caret pointer would just point to the beginning of the line and not the command which caused the error. This is changed.

Impact:
Debugging Caché Basic programs is improved.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Languages.Cache Basic
Platforms: All
DevKey: DAS456
Summary: Address Caché Basic compilation errors with labels on IF
Description:
Previously, if the program had a label and then the next line was an IF block, the compiler would give an error. This has been changed.

Impact:
Easier compilation of Caché Basic programs.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Languages.Cache Basic
Platforms: All
DevKey: JN111
Summary: Disallow bad assignment syntax
Description:
This syntax was currently allowed by the Caché Basic parser:
   #classcontext a
   call ME.PROPERTY = a
   #endclasscontext a
which is obviously incorrect. This syntax is now reported as an appropriate syntax error.

Impact:
Better syntax checking for Caché Basic.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Languages.Cache Basic
Platforms: All
DevKey: JN121
Summary: Caché Basic allows external procedures to be called even though label is a Caché Basic reserved word
Description:
In code such as this:
   ...
   target="Demo.DTL.ExampleOutput".%New()
   If target="" Then
      tSC=Error@%apiOBJ(5761,"Demo.DTL.ExampleOutput")
   Exit Do
   End If
   ...
The call to Error@%apiOBJ() was flagged as invalid use of a reserved word. The Caché Basic compiler/syntax checker now checks to see if the token following the presumed reserved word is an @sign. If so it goes on to validate an external call rather than just raising an invalid use of reserved word exception.

Impact:
Improved syntax checking in Caché Basic.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: Networking
Platforms: All
DevKey: GK220
Summary: Big Unicode strings over ECP cause access violation
Description:
64KB uncompressed Unicode big-string may cause a SEGV ECP in the client job. The string length was not maintained properly. This has been corrected.

Impact:
More reliable operation in the presence of long Unicode string usage.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Networking
Platforms: All
DevKey: GK221
Summary: Addressed ECP transaction bitmap array size.
Description:
The initial ECP pending transaction bitmap length wasn't calculated correctly. It corrupted data causing an error in the ECP client read daemon. In rare cases, ECP would fail. This has been corrected.

Impact:
Improved ECP reliability.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Networking
Platforms: All
DevKey: GK224
Summary: Sometimes, rollback over ECP would cause ECP activity to hang.
Description:
This change addresses an issue with ECP server hanging. There was an ordering issue with rollback across the network and ECP server pre-fetching. The ordering has been corrected.

Impact:
Improved ECP reliability.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Networking
Platforms: Linux
DevKey: GK227
Summary: Linux write daemon attaches network SHM at the wrong address
Description:
The write daemon method for allocating shared memory has been changed so it now works the same on Linux and other UNIX systems.

Impact:
improved reliability on Linux.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Networking
Platforms: All
DevKey: GK228
Summary: Added multiple NIC support for clusters using DCP
Description:
This changes solves two issues with multiple NICs.
  1. A cluster member may not register a proper IP and port in the PIJ file, and slaves cannot locate/ communicate with the master.
  2. Slaves may not locate a correct net port to communicate with the master, and may not join the cluster.
It is recommended to define and use this when the cluster node has multiple/ambiguous local addresses.

Impact:
Improved reliability of cluster failover with multiple NICs.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: Networking
Platforms: All
DevKey: PWC745
Summary: Replication over DCP with Caching turned off now really turns off caching
Description:
Corrected an issue with DCP that prevented the EnableCaching=0 operation from working properly on SET command references.

Impact:
DCP caching now performs as specified.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Networking
Platforms: All
DevKey: PWC748
Summary: Address "If $D(^gvn)" when mapped via subscript-level mapping to legacy DCP server such as DSM
Description:
Corrected an issue that could cause incorrect results for $DATA in the case where the data is accessed over DCP through a namespace that makes use of subscript-level mapping and the destination of the reference is a DSM system or other kind of older system using the backwards compatibility features of DCP.
Specifically, when the data server is a DSM system, and ^Global uses subscript-level mapping, and $Data(^Global(1)) would return 10 (children but no data node), then:
   If $Data(^Global(1)) DO STUFF
would skip doing the STUFF that follows the "if", even though it should succeed.

Impact:
Improved reliability using DCP.
Likelihood Risk Ad Hoc Enhancement
Low High Yes No



Category: Object
Platforms: All
DevKey: MAK682
Summary: Do not export time modified or checksum in XML format
Description:
When exporting classes to XML format no longer put the checksum in the file to detect when the file is modified by an external editor. Now the checksum is put in the class definition inside Cache. This also allows us to remove the time modified field from the XML export format. The logic is

If the checksum does not match then this is a different version so the modified date in the class is updated.

Impact:
Improved detection of class modification.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object
Platforms: All
DevKey: MAK737
Summary: $SYSTEM.OBJ.Export returns error if item not found
Description:
When exporting items with $system.OBJ.Export, if an item was not found it would report this to the terminal, but it would not return an error code. Now it returns a suitable error code you can detect if the export worked correctly.

Impact:
Improved error reporting.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object
Platforms: All
DevKey: MAK749
Summary: $system.OBJ.Export of global modifying CR/LF characters
Description:
The export and subsequent import of a global via the $system.OBJ.Export function would change CR/LF into just LF and CR into LF. This is caused by SAX normalizing CR/LF and CR to LF as it should. To avoid changing the structure of the global we now base64 encode any global that contains CR characters ($char(13)).

Impact:
Correct handling of special characters in GLOBAL export / import.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object
Platforms: All
DevKey: MC369
Summary: Prevent unexpected Studio shutdown when there are circular dependencies
Description:
A Studio issue when there are circular dependencies, such as two classes extending each other, has been addressed.

Impact:
Studio no longer fails in the presence of this situation.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object
Platforms: All
DevKey: MC414
Summary: Correct %ClassDefinition to not lose Storage definitions
Description:
When using %ClassDefinition to edit storage, some parts of the storage definition were lost. This change addresses that.

Impact:
Improved reliability for application development.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object
Platforms: All
DevKey: TAP007
Summary: Support more than three status parameters in DecomposeStatus
Description:
Currently the $$$ERROR() macro and the method it resolves to, $$Error^%apiOBJ(), only support 3 arguments. This has been extended.

Impact:
Improved application error reporting.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: Object.Activate
Platforms: All
DevKey: JN116
Summary: Detect when an WSDL message definition has an empty complex type
Description:
WSDL containing a snippet such as
   <s:element name="About">
        <s:complexType />
    </s:element>
was not handled correctly. The assumption was that a complex type would always have children. This is not the case so the code now guards against this condition.

Impact:
Improved WSDL reliability
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.Activate
Platforms: All
DevKey: JN119
Summary: Support Streams for Method Arguments/Properties > 32KB
Description:
Previously, streams could not be passed to Activate Methods or Set as Activate properties. This new functionality provides the ability to pass a character stream to an ActiveX object via the %Activate.GenericObject existing methods. The implementation detects if a Caché character-stream object has been passed and informs the underlying Activate DLL that it should treat the parameter as a stream rather than a string. At that point the DLL calls back to read the entire stream into a string before passing it to the ActiveX object. In this way strings of any size can be passed to ActiveX objects.
Passing these streams BY REFERENCE is NOT supported at this time.

Impact:
Improved stream handling as arguments to ActiveX
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: Object.Class Compiler
Platforms: All
DevKey: DLP1004
Summary: Change property superclass order
Description:
Properties have a superclass of the property class, %CacheProperty. By default, this is the type class, if it is a datatype. The order in which these classes are specified causes like-named parameters and methods in the type class to be overridden by the property class. Users cannot change property class behavior easily so that means no property class methods or parameters can be easily changed.
The order of the superclasses has been changed so the type class is second in the list which causes type class parameters and methods to override their property class counterpart.

Impact:
Improved flexibility and ease in class hierarchy design.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.Class Compiler
Platforms: All
DevKey: MAK639
Summary: Support list of items to import as subscripted array
Description:
In the XML, the import function accepts the list of items to import as a subscripted array as well as a comma-separated list. This allows the list to be over 32KB in size.
Also modify the CDL load to support subscripted array and the Load^%apiOBJ function as well.

Impact:
Improved handling of class imports.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: Object.Class Compiler
Platforms: All
DevKey: MAK701
Summary: Report all signature errors at once
Description:
When checking the class signature against the superclass to make sure it matches, if an error was found it would report that error and stop checking at that point. This meant that if a subclass had multiple signature errors then you would only see one at a time. This would slow down the process of addressing these. Now we report all the signature errors in one go, so they can be addressed at once.

Impact:
Improved error analysis in class inheritance.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.Class Compiler
Platforms: All
DevKey: MAK719
Summary: Do not count errors in class projection compiles
Description:
When compiling a class, we count the number of errors generated so we can give a summary of how many errors occurred when the compile finishes. If a projection calls $$$ERROR a lot but does not report any errors, these were being reported as errors by the class compiler. Now we do not count any errors that occur inside the projection, but if the projection returns a status code indicating an error condition, then this just counts as one error in the final summary.

Impact:
Improved error handling during class compilation.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.Class Compiler
Platforms: All
DevKey: MAK720
Summary: Add %Extends to %RegisteredObject
Description:
Add %Extends method that takes a classname and returns true if the current object extends this class as either a primary superclass or a secondary superclass.

Impact:
New functionality has been added to the class "reflective" methods.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: Object.Class Compiler
Platforms: All
DevKey: MAK721
Summary: Only allow subclasses of %RegisteredObject to be instantiated
Description:
Due to the way system OREF works it lead to a change that any class that was not explicitly marked as abstract could be instantiated with a
Set oref=##class(classname).%New()
Previously (in Caché 4.x and earlier), you could call %New on a class even though the class itself did not have such a method explicitly or derived from its superclasses. We do not support any type of objects other than ones derived from %RegisteredObject and so this left a potential hole which is now closed by this change.
This change prevents these other sorts of classes from being instantiated.

Impact:
Improved error detection in class compilation.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: Object.Class Compiler
Platforms: All
DevKey: MAK750
Summary: Method and property of the same name causes compiler to generate wrong syntax
Description:
If you have a class method called 'Test' and a property called 'Test' then in a method you write:
   Write ..Test
The compiler thought it was referring to the class method and called this, whereas it should detect there are no parentheses and so know that this is a property reference.
Note that:
   Write ..Test(1)
Is still ambiguous, however, as there could be a multidimensional property called 'Test' and a method called 'Test' and so in this case we call the method.

Impact:
Improved error detection in class compilation.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.Class Compiler
Platforms: All
DevKey: MAK765
Summary: Allow language of code generated code to be specified
Description:
Add a property to the method object generator '%code' object called 'Language'. This can be set in the generator to a different language mode than that of the language of the generator itself, so you can generate Caché Basic code with a Caché ObjectScript generator. For example, the follow ObjectScript method generator will generate Caché Basic output.
   Method Test() [ CodeMode = objectgenerator ]
   {
    Write %code.WriteLine("print 1")
    Set %code.Language="basic"
   }
Note the default language for the generated code is the same as the language specified for the generator itself.

Impact:
Improved flexibility in application development.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: Object.Class Compiler
Platforms: All
DevKey: MAK778
Summary: Allow some huge classes to compile
Description:
If a class has a very large number of properties, then the generated methods %NormalizeObject and %ValidateObject can become very large. If these methods get to more than 32KB of compiled code, we were not able to compile the class because these methods use procedureblock and so the code splitter could not split them into smaller chunks.
Now these two methods do not use procedureblock so the code splitter can split them. This will allow some classes with large numbers of properties to compile.

Impact:
Improved handling of compilation of large classes.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.Class Compiler
Platforms: All
DevKey: MAK779
Summary: Swizzling an object in a collection would set parent as modified erroneously
Description:
If you had a collection of objects (either a list or an array collection), then on an object in the database calling:
   Set oref=##class(MyClass).%OpenId(1)
   Write oref.Collection.GetAt(1)
   Write oref.%IsModified()
would say that this object was modified when it had not been. This was because the swizzle logic for the collection should not be setting the modified bit in the object.

Impact:
Improved performance due to not saving objects which have not been modified.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.Class Compiler
Platforms: All
DevKey: MAK781
Summary: Address issue with parsing instance variables with '%' in their name
Description:
The parsing of instance variables with '%' in their name, for example, i%%test was not working in some cases, which would result <SUBSCRIPT> errors during compilation.

Impact:
Improved syntax processing during compilation.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.C++
Platforms: All
DevKey: JSL1046
Summary: Generate code for a dynamic C++ binding
Description:
We now support generating C++ code in a dynamic mode.

Impact:
New functionality has been added.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: Object.C++
Platforms: All
DevKey: JSL1048
Summary: In dynamic C++ binding generate code for %Oid and %Save
Description:
If the compiled class contains %Oid or %Save methods, they become part of the dynamically generated object binding.

Impact:
Better representation of the class functionality in dynamically bound C++ classes.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.Java
Platforms: All
DevKey: JSL1053
Summary: Enhance dynamic C++ support
Description:
Exportdyncpplist now can contain a comma-separated list of query names.
   ExportDynCPPList(classes,dir,proplist,methodlist,querylist,qspec,
   		errorlog,usename)
The meaning of the comma-separated lists - proplist, methodlist, querylist has changed.
These lists can now be "*" which means generate all support for them. For example a proplist of "*" means generate support for all properties.
If the list is specific, for instance, the proplist is "Name,Age" then only support for the properties in the list will be generated: that is, only the support for Name and Age.
If the list is "" then no support will be generated. The default is "".
Here is an example where we generate support for the Mode property and the NormalizeDirectory method and don't generate any support for queries:

     Write $system.OBJ.ExportDynCPP("%Library.File","c:\temp","Mode",
     	"NormalizeDirectory")

Impact:
Improved functionality.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: Object.Java
Platforms: All
DevKey: MAB156
Summary: Addressed issues in SysList
Description:
Addressed several issues in SysList.toString() method. In particular, printing of empty lists and lists embedded in another list has been changed.
SysList.setParameter() has been changed to accept a SysList object.
The SysListProxy.setUndefined() method was added.

Impact:
Removed an unneeded restriction.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.Java
Platforms: All
DevKey: MAB158
Summary: Bulk load and create in Java Binding
Description:
Added several methods to com.intersys.objects.Database:
To load all objects satisfying given condition into Java client:
To save a collection of objects:

Impact:
Improved functionality.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: Object.Java
Platforms: All
DevKey: MAB182
Summary: SList#clear() and #remove() implemented
Description:
Added method clear() to com.intersys.objects.SList. Method remove() retains default implementation, that is throws UnsupportedOperationException, because the underlying SysList does not support removing elements.

Impact:
Enhanced functionality.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: Object.Java
Platforms: All
DevKey: MAB183
Summary: Correct Java projection generation on the client side in 5.0
Description:
Two changes:

Impact:
Makes it possible to generate Java code on the developer's system (if connected to a different server system).
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.Java
Platforms: All
DevKey: MAB189
Summary: generateClassLocal() and generateClassRemote() behavior is opposite to expected
Description:
generateClassRemote is now generateClassLocal and vice versa.

Impact:
Prevent confusion by naming these new methods correctly.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.Java
Platforms: All
DevKey: JSL957
Summary: Support queries and stored procedures in Java binding
Description:
This change enables support for generated queries and stored procedures. For each method that is also an SQL stored procedure, a method of type java.sql.CallableStatement with a name of prepare_<SqlName> will be generated.
For each query with the name <QueryName>, a corresponding stored procedure with type java.sql.CallableStatement and name <SqlName> will be generated.

Impact:
Lets the Java binding make use of storedprocedures and class queries.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.Java
Platforms: All
DevKey: JSL988
Summary: Make classLoader variable local to routine
Description:
When more than one relationship is defined, the code we generate in bean fails to compile because classLoader is used more than once. This change makes the reference to classLoader local to each routine.

Impact:
Improves Java binding for certain classes.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.Java
Platforms: All
DevKey: JSL1039
Summary: Add Stream interface to ExportJava
Description:
One can have the Java generator write code to streams where it can later be retrieved from Caché.
The following illustrates this new interface:
   Set coln=##class(%Compiler.LG.JavaCodeStreamColn).%New()
   Set coln.dir="c:\personjava"
   Zn "SAMPLES"
   Set Status=##class(%Compiler.LG.LGCPP).ExportJava("Sample.Person",coln)
   If 'Status Do DecomposeStatus^%occSystem(Status,.Err)
   {
       Write !,Err(Err)
   }
   Write !,Status

Impact:
Internal mechanism needed for remote generation of Java binding code.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.Java
Platforms: All
DevKey: JSL1049
Summary: Don't automatically project new collection types that appear in properties
Description:
In the dependency calculator for the Language Generators, we walk the types of properties and generate class support for those types unless they are filtered out. The filter is now changed so that if the types are the new collection types we don't attempt to generate code for these new types.

Impact:
Projection of collections is improved for bindings.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.Java
Platforms: All
DevKey: JSL1065
Summary: New Java Generator collection support
Description:
This change implements the following:
  1. If a property is collection, it has no set method. This is true even if the JAVATYPE is overridden.
  2. A property with collection type list has a return type of java.util.List, unless another return type is specified by JAVATYPE.
  3. A property with a collection type array has a return type of java.util.Map, unless another return type is specified by JAVATYPE.
  4. If a user creates a custom collection class by extending library collection classes, the projection of the used class behaves as it does now. This will involve a new algorithm for calculating superclass, for instance, if A extends %ListOfDataTypes in Caché ObjectScript, then A should extend SysListOfDataTypes in Java. If B extends %Collection.ListOfDT in ObjectScript, then B should extend SysListOfDataTypes in Java too. If C extends D and D extends %Compiler.AbstractListOfDataTypes in ObjectScript, then C should extend SysListOfDataTypes in Java again.

Impact:
Projection of collections is improved for bindings.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1082
Summary: Export Stub Methods of the form <XXX>Open and <XXX>Exists
Description:
If a stub method is of form <XXX>Open or <XXX>Exists we export it to the Java and C++ Language Bindings.

Impact:
Some additional methods are available to Java/C++ clients.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1090
Summary: Don't generate get method or set method for property if private
Description:
A property may have its set or get methods overridden and though it is public, it may be the case that these overridden methods are private. If the Get method is private, we don't generate a Get method. If the Set method is private we don't generate a Set Method.

Impact:
Improved generation of Java/C++ clients.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1093
Summary: Package of classname is used for classes in CLASSLIST In EJB projection
Description:
If a class in the CLASSLIST does not have a specified package name, for instance,
     CLASSLIST="C1,C2"
then the package name is derived from the package name of the class in which the projection resides.

Impact:
Simplifies EJB projection.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1095
Summary: Produce clearer error message when APPSERVERHOME is not specified
Description:
Appserverhome must be specified. When it is not, the error message says "App Server" is required. This isn't clear.
Also clarify error message which says that you need at least one persistent class that is not a session bean.

Impact:
Improved rollout of EJB applications
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1097
Summary: Allow sqlproc to compile even if method does not return a value
Description:
Only generate SQLException catch if there are output arguments.

Impact:
Relaxes some restrictions on Stored Procedure methods.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1101
Summary: Address calculation of principal and index fields in EJB when dealing with child tables
Description:
The issue was that set and get accessors were not properly generated when a class contains arrays of datatypes. This happened for all child tables when the principal field was not in column 3 and the index field in column 4. This can easily happen, for instance, when the property name of the array begins in lower case.

Impact:
Improved generation of EJB code.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1102
Summary: Create right serial constructor when serial only appears in child tables
Description:
Constructor was missing loading of serial field:
     public EJBSerial5(Object list, QuickStatement qs,
     			boolean isLoadedFromChildTable)
     throws SQLException
        {
          m_s1 = qs.getString(list); <-- was missing
         }
For class,
 Class User.EJB5 Extends %Persistent [ ProcedureBlock ]
  {
   Projection EJB As %Projection.EJB(
                                   APPLICATIONDIR = "appDir",
                                   APPSERVERHOME = "ASH",
                                   BEANNAME = "Bean",
                                   JAVAHOME = "javaHome",
                                   ROOTDIR = "c:\19");

   Projection EJBJBoss3 As %Projection.EJB(
                                APPSERVERHOME = "c:\jboss-3.0.6_tomcat-4.1.18",
                                BEANNAME = "EJB5",
                                CLASSLIST = "User.EJB5",
                                JAVAHOME = "c:\jdk1.3.1_01",
                                ROOTDIR = "l:\EJB5",
                                SERVERTYPE = "JBOSS3",
                                USEPRIMARYKEYS = 1,
                                PERSISTENCETYPE="BMP",
                                APPSERVERCONTROLSCONCURRENCY=1);

   Property pc1 As %String [ Collection = array ];

   //Property s As User.Serial5;

   Property a1 As User.Serial5 [ Collection = array ];

   Property pc2 As %String [ Collection = list ];

   ClassMethod MyPopulate()
    {
     #define RUN(%c) Set Status=(%c) If $$$ISERR(Status) Do $SYSTEM.OBJ.DisplayError( %objlasterror) ZTimeStamp

     $$$RUN(##class(User.EJB5).%KillExtent())
     Set o=##class(User.EJB5).%New()
     If o="" d $SYSTEM.OBJ.DisplayError( %objlasterror) zt
     $$$RUN(o.pc1.SetAt("hello",1))
     $$$RUN(o.pc1.SetAt("goodbye",2))
     Set a=##class(User.Serial5).%New()
     Set a.s1="my favorite serial"
     $$$RUN(o.a1.SetAt(a,1))
     $$$RUN(o.%Save())
    }
  }

Impact:
Improved generation of EJB code when using serial objects.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1104
Summary: Let DATASOURCENAME override res-ref-name
Description:
Res-ref-name was set to <NAMESPACE>Database. However DATASOURCENAME should override res-ref-name.

Impact:
Improved generation of EJB code.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1105
Summary: Don't generate import of the superclass since the superclass is fully qualified
Description:
If a class called NewISC.Person extends ISC.Person, then the generated class does not compile because of the import of ISC.Person. However, not importing this class addresses the issue, so we now don't import superclasses.
The superclass is fully qualified in the Extends so it does not need to be imported.

Impact:
Corrects client binding for classes with the same name and different package.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1106
Summary: Allow CMP projection to happen even if superclass does not have primary key
Description:
If a superclass did not have a primary key then the CMP projection failed, with the error message "primary key required." This change allows CMP projection to succeed even though the superclass lacks a primary key.

Impact:
EJB CMP mode now works for classes without a designated Primary Key.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1107
Summary: Address <METHOD DOES NOT EXIST> error when a class was not %RegisteredObject
Description:
Previously, it was acceptable to call %New() on a class that was not a %RegisteredObject. Because this is no longer true, we have to ensure a class inherits from %RegisteredObject before calling %New on it.

Impact:
Prevents non-instantiable objects from being instantiated.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1109
Summary: Correct Java code generation for method with output parameter type
Description:
Java code generation was incorrect for a method with an output parameter type.
We didn't properly calculate number of references when output parameters were involved. This is now changed.

Impact:
Corrects handling of output parameters for methods in client bindings.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1111
Summary: Change how getClassProperties and getClassMethods are called in Java binding
Description:
GetClassProperties and getClassMethods have changed their signatures. This needs to be reflected in JDBCAdapter.java.
This issue arose because of changes added for the C++ binding.

Impact:
Internal change needed by code generator.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1113
Summary: If a property is not "insertable", it should not be present in CMP create
Description:
In the ejbCreate and ejbPostCreate we generate for CMP, there should not be present non-insertable properties. This is now true.

Impact:
EJB CMP no longer project fields that cannot be inserted.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1114
Summary: Add "public" to list of Java reserved words used by the Java generator
Description:
A user was unable to name a class "public". This corrects that oversight.

Impact:
You can now create a Java class named "public".
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1119
Summary: Don't project "set" methods for read only properties
Description:
We did not recognize read-only properties as a special case in the Language Generator, where "set" methods should not be generated. Now we do. These will no longer be generated for read-only properties.

Impact:
Better support for read-only properties in client binding.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1120
Summary: Don't allow property name case to affect CMP compilation adversely
Description:
There is an issue where a serial object being named could cause the accessors for the serial object to not compile. This was only for CMP generation.

Impact:
EJB CMP works better with serial objects.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1122
Summary: Restore old-style Java collection projection in 5.0.3
Description:
Collections will project in the previous way. A list is projected as ListOfDataTypes or ListOfObjects. An array is projected as ArrayOfDataTypes or ArrayOfObjects.

Impact:
Older Java applications can continue to use old collection API.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1123
Summary: Allow exists(...oid...) method to generate in 5.0.3
Description:
We put a guard around "exists", so that it would only be projected if the primary superclass were %Persistent. In this release, the %Persistent class is not itself persistent.
The code now looks for equality with %Library.Persistent.

Impact:
Correct projection of Exists method to Java client.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1124
Summary: Protect conflicting signature test against a null superclass
Description:
There was an issue where the conflicting signature test should not have been performed if the superclass was null. This is corrected.

Impact:
Improved code generation for client bindings.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1125
Summary: Set appropriate package for superclass
Description:
The superclass was miscalculated. If the superclass in the superclasses list did not have a package, package was incorrectly set to "User".

Impact:
Improved code generation for client bindings.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1126
Summary: Do not allow projection to EJB when child tables are invalid
Description:
We now validate the child tables since the child tables are used in the EJB projection.
If the child table is not valid we produce an error message for instance:

ERROR #6633: Class <Class> is not projectible to EJB. Projection is aborting. For a class to be projectible all its child tables must be valid. Child table <Childtable> is not valid.

Impact:
Gives an error message if classes cannot be projected to EJB.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1127
Summary: Allow pathological case of serial with no properties to project in EJB
Description:
A customer may define a serial class with no properties. An array of these projects as a child table with no properties from the serial projection. Allow these to project to EJB.
In this pathological case, we generate an EJB dependent object to represent the serial object that is essentially empty. Since the Caché serial object has no fields, the dependent object representation has no Caché fields.

Impact:
EJB projection now supports empty serial objects.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1128
Summary: Don't add classes in methods to dependencies in EJB projection
Description:
EJB projection used to add to "import" list all classes used by methods in persistent classes. This was incorrect. Now we don't import such classes.

Impact:
Improved code generation for EJB binding.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.Library
Platforms: All
DevKey: MAK652
Summary: Prevent infinite loop in %ClassDefinition:SubclassOf query
Description:
The %ClassDefinition:SubclassOf query returns a list of all classes that are subclasses from a particular class. However if there was a loop because class A was a subclass of class B and class B was a subclass of class A, this would cause this query to go into an infinite loop. This is now detected — if a loop is found, then one class is not reported as a subclass of the other.

Impact:
SubclassOf query is improved.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.Library
Platforms: All
DevKey: MAK716
Summary: Change error message if a class lock in %Routine fails.
Description:
Change the error message when the Lock method on a %Routine class fails because the item is locked by another user so it does not say 'Item is locked by another user, it will be opened read only' as the 'read only' part only applies to Studio and not to use of this class directly.

Impact:
Message displayed by Studio is now clearer.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.Library
Platforms: All
DevKey: MAK725
Summary: Prevent potential looping in MSM-Activate server when socket closes executing a command
Description:
In the MSM-Activate server if the client requests the server to execute a command and, while this is executing, the socket is closed it was possible that this would cause the server to start looping trying to write the error back to the client. Now it will trap out and close the process gracefully.

Impact:
Corrects a problem in the MSM-Activate server.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.Library
Platforms: All
DevKey: MAK764
Summary: %Dictionary.PackageDefinitionQuery:SubPackage query not working correctly
Description:
The query in PackageDefinitionQuery:SubPackage when you called the FetchRows entry point would return hundreds of rows when there were only a few package definitions.

Impact:
SubPackage query is improved.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.Relationships
Platforms: All
DevKey: BJB266
Summary: %IsModifed is set because of Relate code
Description:
A rare issue with %IsModified has been corrected. If you had a class that had an independent pointer to a parent class and a child class of the parent and you swizzled in both, then the child would think some values had changed and it would call the %Save code.

Impact:
%IsModified behavior improved in certain cases.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.Soap
Platforms: All
DevKey: MXT446
Summary: Properly report unable to create stream error in SOAP Web client
Description:
Caché now passes back an error return from stream.Write for a temporary stream. Previously this error was being ignored.

Impact:
SOAP client gives a better error message.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.XML
Platforms: All
DevKey: MAK616
Summary: Schema change for CSP file exported as XML
Description:
The schema we use to validate XML files that contain CSP data did not have the application and default attributes defined and so would refuse to load an exported CSP file. This has been corrected.

Impact:
XML Schema for class definitions is improved.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.XML
Platforms: All
DevKey: MAK740
Summary: XML export of a class definition must export all defined items
Description:
When exporting a class to XML format, if a keyword was the default value, we were not exporting this item. However, this has the potential to cause issues with inheritance. If an item is defined to be the default value and then this class is exported and imported, then the class definition node for this value will not be set.
If you subclass from another class that has a non-default value for this node and include this class as a secondary superclass, the default value will not override the primary superclass' value because it is not set in the class definition node.
So Caché always exports all defined values even if they match the default value when XML exporting a class.

Impact:
Exported class definitions will not lose overridden default values when re-imported.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.XML
Platforms: All
DevKey: MXT448
Summary: Address XML import issues
Description:
This change makes four corrections:
  1. Web Service should specify charset as utf-8 in HTTP headers.
  2. String of white space should be imported unchanged. The issue was that it was always changed to $c(0) on import.
  3. Ignore SAXMask property of %XML.Reader, since SAXMask is computed by the %XML.SAX.Parser.
  4. Remove duplicated location information in fatal import errors.

Impact:
XML Import is improved.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Object.XML
Platforms: All
DevKey: MXT449
Summary: XMLExport all keys for a relationship
Description:
Use $ORDER to loop over elements of a list or relationship to make sure to get all elements of a relationship. This is needed because relationships have an array interface, but Caché exports them to XML as lists.

Impact:
XML Export of relationships is improved.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: SQL
Platforms: All
DevKey: DPV1982
Summary: Prevent $system.SQL.TuneTable() from failing with <NOROUTINE> error
Description:
Consider the following simple class:
   Class User.NewClass1 Extends %Persistent [ ClassType = persistent ]
    {
      Property pad As %Library.String;
    }
The 'pad' property compiles successfully by setting 'support delimited identifiers' in Configuration Manager. But the TuneTable fails on this class.
     -----
      USER>d $system.SQL.TuneTable("NewClass1",1,1,.err)

      TABLE: SQLUser.NewClass1
           An error occurred processing the table:
           		<NOROUTINE>CalculateSelectivity+61
      ^%qarTune
      USER>w err
      qaqperr
      -----
A correction was made for the condition where TuneTable was run on a table with a column that had a non-Exact collation and the column name required a delimited identifier be used when specified in an SQL statement.

Impact:
TuneTable utility no longer gives an error.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: SQL
Platforms: All
DevKey: DPV1994
Summary: Add ROWID_FIELD column to %Library.SQLCatalog.SQLFields query
Description:
The description for %Library.SQLCatalog.SQLFields query has been changed. Refer to the class documentation for the new format.

Impact:
Additional information is available in SQL Catalog tables.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: SQL
Platforms: All
DevKey: DPV2001
Summary: Add support for ODBC Scalar functions {fn USER()} and {fn DATABASE()}
Description:
Support has been added for the following two ODBC Scalar functions:

Impact:
SQL supports additional scalar functions.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: SQL
Platforms: All
DevKey: DPV2003
Summary: Don't output error message in Query Processor if displaylog is disabled
Description:
Caché has been changed to avoid attempts to output error messages from the Query Processor when such attempts will fail.

Impact:
Error message not displayed is error display is turned off.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: SQL
Platforms: All
DevKey: DPV2005
Summary: DDL API: Return error properly if BuildExtRoutine fails
Description:
Previously, there was an issue where a very large stored procedure statement failed to compile, but did not report an error.
When a CREATE PROC results in a method of > 32KB of code, we put the code in an external routine and create a procedure which simply calls this routine. The code in BuildExtRoutine^%apiDDL is responsible for building and compiling this routine. It sets SQL code to -400 if the compilation of the external routine fails.
The error return was being checked improperly, but now this test is correct.

Impact:
An error message is returned if a stored procedure is too big to compile.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: SQL
Platforms: All
DevKey: DPV2021
Summary: SQL Enhancement - Add support for {fn CONVERT(value, SQL_DOUBLE) }
Description:
Caché SQL now supports the following datatype conversion when using the ODBC explicit datatype conversion function CONVERT:
{fn CONVERT(value, SQL_DOUBLE)}  => Converts to ODBC type DOUBLE
Impact:
SQL CONVERT now converts to DOUBLE.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: SQL
Platforms: All
DevKey: MIT249
Summary: UPDATE with unbalanced quotes not rejected
Description:
Previously, an UPDATE with unbalanced quotes would update the selected fields with a text string containing the remainder of the SQL statement. This no longer happens.

Impact:
JDBC/ODBC queries with unbalanced quotation marks are now handled correctly.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: SQL.GateWay
Platforms: All
DevKey: MIT250
Summary: Only try DSNConnect if user and password are empty
Description:
A number of issues were reported when DSNConnect was attempted for a DBMS which do not support it. Now Caché skips an attempt to run DSNConnect if the user or password are not empty.

Impact:
Improvement to SQL Gateway connection logic so that requests to foreign databases no longer fail.
Likelihood Risk Ad Hoc Enhancement
Low Low Yes No



Category: SQL.JDBC
Platforms: All
DevKey: AND335
Summary: JDBC: Remove support for get/setUnicodeStream
Description:
The ResultSet.getUnicodeStream and PreparedStatement.setUnicodeStream APIs have been deprecated for years. They are now removed.

Impact:
Deprecated API calls removed from JDBC.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: SQL.JDBC
Platforms: All
DevKey: AND338
Summary: XDBC: Use ^CacheTemp instead of local variables for bulk operations
Description:
In some JDBC benchmarks, we noticed a performance degradation when a number of bulk inserts/updates became very large. When making a bulk insert/update of around 100 rows, performance was much better than 100 individual inserts/updates. However, as the number grew, performance was getting worse and worse.
This turned out to be due to the use of a large number of local variables. These were changed to use ^CacheTemp, and performance significantly improved.

Impact:
Improve performance of JDBC bulk operations.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: SQL.JDBC
Platforms: All
DevKey: DPV2012
Summary: Address <UNDEFINED>SPFetch2+1^%qserver> error
Description:
The calling of a procedure through ODBC or JDBC which was a Class Query projected as Stored Procedure caused an error when the Class Query was an SQL statement which contained an SQL User Defined Function. The calling of this Procedure would fail with an <UNDEFINED> error in the %qserver process. This issue existed in Caché versions 5.0 through 5.0.2.

Impact:
Correct xDBC errors related to user-defined SQL functions.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: SQL.JDBC
Platforms: All
DevKey: MAB173
Summary: Leading zero in ResultSet.getString() with DOUBLE
Description:
CacheResultSet.getString(int) returns
     .9800000190734863
while Double.valueOf(".9800000190734863").toString() returns
     0.9800000190734863

CacheResultSet.getString() should return the leading zero so that ResultSet.getString(int) and ResultSet.getDouble(int).toString() agree.

Impact:
Corrects an inconsistency in JDBC numeric conversion.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: SQL.ODBC
Platforms: All
DevKey: JCN397
Summary: Changes for WTS (Windows Terminal Server) licensing in ODBC
Description:
WTS license was using too many slots because there is no IP address for the client to match up with. This has been corrected.

Impact:
Better license detection for Windows Terminal Server and ODBC.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: SQL.ODBC
Platforms: All
DevKey: JCN402
Summary: Use input buffer length when calculating number of Unicode characters
Description:
Caché did not use the input length of the multibyte string to calculate the converted Unicode character length. If the length given fell in the middle of a multibyte character, that partial character would not be added to the length of the calculated Unicode characters. This no longer happens.

Impact:
Better UNICODE support for ODBC.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: SQL.Query Processing
Platforms: All
DevKey: MIT251
Summary: An IN clause with one parameter causes multiple CachedQuery entries
Description:
In case of: ... IN (<const>), processing of this construct was changed to replace the constant with a "?" even though normally a constant in parentheses prevents this. If the user really doesn't want to replace this constant with "?", then the user needs to use one additional pair of parentheses, as in: ... IN ((<const>))

Impact:
Improved query parsing in ODBC client.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: SQL.Query Processing
Platforms: All
DevKey: AK571
Summary: Push conditions into UNION subqueries
Description:
WHERE conditions on a FROM-subquery (e.g. with UNION) are now moved inside the sub-clauses of the query to apply them at an earlier point in processing. In the case of UNION, it is moved into each of the UNION's subqueries. This optimization could save significant amount of processing time by testing conditions earlier, and also by reducing the size of temp-files for virtual streams.
The exceptions to this are:
In the subquery(ies), the conditions are added to the WHERE or to the HAVING clause, as follows:

Impact:
Most subqueries with UNION now run faster
Likelihood Risk Ad Hoc Enhancement
Moderate Moderate Yes Yes



Category: Studio
Platforms: All
DevKey: DVU683
Summary: File -> Open URL gets "Unable to connect" message
Description:
Previously, selecting File followed by Open URL reported an error in trying to connect as cn_iptcp:127.0.0.1[1972]:csp. Once you canceled the message, the page opened via URL. This now works properly.

Impact:
Studio is improved.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Studio
Platforms: All
DevKey: DVU685
Summary: Initialize document if default is missing
Description:
Prior to this, if the default document was missing, Studio failed to correctly initialize the editor. This has been addressed.

Impact:
Studio is improved.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Studio
Platforms: All
DevKey: DVU687
Summary: Support for XML, JS and CCS files
Description:
This change allows JavaScript editing in Studio.

Impact:
Studio now supports editing of XML, JavaScript, and CSS files.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: Studio
Platforms: All
DevKey: DVU688
Summary: Do not lock class if user clicks on inspector's left column
Description:
If the user clicks on left (name) column in inspector, the class will not be locked. A click on the right column is considered to be editing and the class will be locked.

Impact:
Studio is improved.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Studio
Platforms: All
DevKey: DVU689
Summary: Make connection string compliance case insensitive
Description:
Studio now checks for previously known connections in a case-insensitive manner.

Impact:
Studio is improved.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: Studio
Platforms: All
DevKey: DVU717
Summary: Issues with 'Windows' window in Studio
Description:
A number of minor changes were made to the handling of the "Windows" window to improve usability, file selection, document switching and so on.

Impact:
Studio is improved.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Studio
Platforms: All
DevKey: DVU735
Summary: Rename "Project" window to "Workspace"
Description:
The window title has been renamed and the View-> menu selection has also been changed accordingly.

Impact:
Studio is improved.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: System
Platforms: All
DevKey: CDS392
Summary: HALT command within $ZTRAP will execute $HALT routine
Description:
Prior to this change, the $ZTRAP frame unwinding code incorrectly stopped before discovering the $HALT frame. Now the $HALT code is executed.

Impact:
Improved handling of shutdown when errors occur.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: System
Platforms: All
DevKey: CDS403
Summary: Address issues with auto recompile
Description:
Under some circumstances, running a set of routines from an older version of Caché that require automatic recompilation will result in a <SYSTEM> error. This change corrects the error and allows the routines to run normally after they are automatically recompiled.

Impact:
Removed an unnecessary upgrade error.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: System
Platforms: All
DevKey: CDS415
Summary: Prevent <SYNTAX> error in $TEXT()
Description:
$TEXT(label^routine) could give a <SYNTAX> error in a system with too few routine buffers, or when it appeared in a routine in an older database that is using the auto-recompile feature to upgrade the old object code at the time the routine is executed. With this change, the error no longer happens.

Impact:
Improved reliability when using $TEXT().
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: System
Platforms: All
DevKey: CDS418
Summary: Avoid invalid NEW frame following a <STORE> error
Description:
If a <STORE> error happened while executing a NEW command, an access violation could happen during the subsequent error processing. This no longer occurs in this situation.

Impact:
Improved reliability.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: System
Platforms: All
DevKey: JO1705
Summary: Ignore partial Write Image Journal (SFFORCEIMJ flag) and always use "full" mode
Description:
The setting of the Write Image Journal Mode parameter in the Configuration Manager's Advanced tab, Journal section, is now ignored. Partial Write Image Journal mode is no longer supported. All systems run as if this were set to "All". This was the default so this should not be a change for most, if not all, systems.
The issue with "Partial" mode is that while a failed write will not cause database degradation, we cannot guarantee that all of a block (such as all 8192 or 2048 bytes) will be written to disk if the system fails while the write is in progress. If only part of the block is written to disk then there will be degradation when the system is restarted.

Impact:
Improved availability and integrity following a crisis.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: System
Platforms: All
DevKey: JO1706
Summary: Caché generates a console log entry with an error when it sets wdstop
Description:
If Caché freezes because some process encounters an error (such as a <FILEFULL>) in the middle of a multiblock global operation, a console log message will be generated that looks like:

Suspending system due to <FILEFULL> error.

Impact:
Improved error detection and logging.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: System
Platforms: All
DevKey: JO1708
Summary: Automatically raise maximum database size to prevent a <FILEFULL> from hanging the system
Description:
Caché will no longer freeze the system due to a <FILEFULL> error when the error occurs because a database has reached its maximum size.
There are three situations in which case a <FILEFULL> can still result in freezing the system:
  1. The filesystem is full and the database cannot be expanded
  2. There is a special situation involving 2-KB databases where there are insufficient incremental backup bitmap blocks to support a larger maximum size. The maximum size of a database can be increased by a minimum of 128MB and a maximum of 255MB without requiring additional bitmap blocks so in practice this should not be an issue. If the system cannot automatically raise the maximum size this may result in a <FILEFULL> suspending the system.
  3. The database has reaches its maximum allowed size. For an 8-KB database this is 32TB and for a 2-KB database this is 16GB.

Once a database has been marked as FULL it remains marked full until either the maximum size is modified with MSU or a significant number of blocks are freed by killing globals. A significant number is defined as 12% of the total size of the database or 10MB, whichever is smaller.

Adding an additional volume set member "counts" as modifying the maximum size of the database. Restarting the system, dismounting and remounting a database and restoring an incremental backup to the database will also remove the indication that it is full.
Certain Caché systems such as journal restore during startup and transaction rollback make use of this facility to prevent <FILEFULL> errors while they are running. This means that these systems are allowed to expand a database by as much as is needed to complete their work. In the past if a <FILEFULL> in a database which was being journaled froze the system, it would be very hard to bring the system back up as the startup code would often freeze the system again when it attempted to restore the pending journal entries. This will no longer occur.

Impact:
Improved reliability and recovery.
Likelihood Risk Ad Hoc Enhancement
Moderate Moderate No Yes



Category: System
Platforms: All
DevKey: JO1713
Summary: Update Caché to add to (not replace) the existing write daemon queue
Description:
An issue has been resolved where if cachetemp is deleted while the system is active, buffers from other databases queued to be written can be dropped from the write queue. The result of this is that the system will not quiesce which means that BACKUPs and SHUTDOWN will not complete. Additionally when the system is restarted, there will be database degradation because the blocks which were dropped from the write queue were never written to disk.

Impact:
The (possibly tragic) consequences of removing CACHETEMP from a live running system are slightly lessened.
Likelihood Risk Ad Hoc Enhancement
Moderate Moderate Yes No



Category: System
Platforms: All
DevKey: JO1719
Summary: Address display for 4 digit years in showdata and test for starting journal file in findfiles
Description:
The display of the journal files which will be restored for a cluster journal restore has been changed to prevent lines from wrapping with 4 digit years. The code that finds the starting place during a cluster journal restore following a cluster backup restore has been corrected to work in the case where the journal files are not in the same place as when the backup was performed.

Impact:
Journal restore is more tolerant of operational changes.
Likelihood Risk Ad Hoc Enhancement
Low Low Yes Yes



Category: System
Platforms: OpenVMS
DevKey: JO1720
Summary: Add access mode so Caché can use the correct exit handler
Description:
The OpenVMS exit handler code has been changed to avoid logging system service exceptions in certain circumstances when a Caché process exits on systems running OpenVMS 7.3-1.

Impact:
Caché can now use the correct exit handler.
Likelihood Risk Ad Hoc Enhancement
Low Low Yes No



Category: System
Platforms: OpenVMS
DevKey: JO1721
Summary: Add code to exit handler to shut down process when its invoked
Description:
The Caché exit handler on OpenVMS has been updated to simulate a RESJOB if the exit handler decides not to exit. This generally relates only to batch jobs which are terminated with delete/entry.

Impact:
Improved control over process shutdown.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: System
Platforms: All
DevKey: JO1722
Summary: Correct string stack discipline in Caché
Description:
An issue with transaction rollback has been resolved. This involved kills when the old data was a large string (such as 32KB). Previously, this could generate a <STRINGSTACK> error which could result in a system freeze. This was most often seen rolling back a transaction which involved saving a binary stream in a Caché object.

Impact:
Avoids a system hang.
Likelihood Risk Ad Hoc Enhancement
Low Low Yes No



Category: System
Platforms: All
DevKey: RFD078
Summary: Address system interruption from starting PATROL after %MONLBL is started/stopped
Description:
This change addresses a process interruption which can occur if the Patrol server is started after starting and stopping the ^%MONLBL monitor.

Impact:
Improve reliability with BMC Patrol
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: System
Platforms: All
DevKey: RFD079
Summary: Add performance warning to ^%MONLBL
Description:
This change adds warning text to the beginning of ^%MONLBL to notify users of the impact its use will have on system performance.

Impact:
Improved message reliability.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: System
Platforms: All
DevKey: RFD080
Summary: Address possible access violations from interaction of ^%MONLBL and ^PERFMON
Description:
This change addresses a potential access violation which can occur when the performance monitor (^PERFMON or $SYSTEM.Monitor) is used after the line-by-line monitor (^%MONLBL).

Impact:
Resolved a system hang.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: System
Platforms: All
DevKey: SJ1412
Summary: Address issue with journaling $BIT sets
Description:
This change addresses some cases where a $BIT set might not get journaled correctly.

Impact:
Improved journaling accuracy.
Likelihood Risk Ad Hoc Enhancement
Moderate Low No No



Category: System
Platforms: All
DevKey: SML368
Summary: Pass smaller convert count to client if necessary to improve network lock fairness.
Description:
This optimizes the lock conversion algorithm to favor the parent locks over child locks.

Impact:
Improved lock performance and decreased contention.
Likelihood Risk Ad Hoc Enhancement
Low Low Yes Yes



Category: System
Platforms: All
DevKey: SML369
Summary: Prevent cluster slave job's $INCR blocking ENQ10 or ENQ13 on backup operation.
Description:
Without this change, when users do backups on a Caché Cluster environment, it may not get the system to be quiesce if there is job on slave nodes waiting for a $INCR answer from master node.

Impact:
Eliminates delays when attempting backups.
Likelihood Risk Ad Hoc Enhancement
Low Low Yes No



Category: System
Platforms: All
DevKey: SML370
Summary: Prevent DDP Daemon crash over DCP cluster connection when the cluster DCP connection is down.
Description:
This addressed an issue for DCP clusters. When a DSM/MSM system locked a global in clustered database on a slave node, and when the DCP connection to the master was down, then the DDP daemon on the slave node could get an access violation interruption.

Impact:
Improved system reliability in the presence of network errors.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: System
Platforms: All
DevKey: SML374
Summary: Journal $INCR on ECP server if in transaction.
Description:
For $INCR on ECP, without this change the $INCR won't be journaled on ECP server when it is in a transaction. It now works as DCP did.

Impact:
Resolved residual journal omission.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: System
Platforms: All
DevKey: SML376
Summary: Address possible stranded lock in DELOCK_NEED state.
Description:
This addressed a possible stranded lock in DELOCK_NEED state on DCP client after a DCP connection is re-established.

Impact:
Improved recoverability.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: System.Cluster Specific
Platforms: All
DevKey: JO1703
Summary: Track which system set a switch in a cluster so we can clear it during failover
Description:
The Caché cluster code contains a facility to set a switch (such as the switches manipulated by the SWSET utility) cluster wide. In the past the cluster members did not track which of the other members asked it to set a switch so that if the cluster member which set the switch failed, the cluster would end up with the switch set until it was cleared manually. Now the cluster tracks which member told it to set a particular switch and if those switches are automatically cleared during cluster failover. This is mostly of interest when a cluster member running BACKUP failed as this could result in switch 13 being left set after cluster failover completed.

Impact:
Improved recoverability.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: System.I/O
Platforms: All
DevKey: NGA108
Summary: Allow entry into environment when terminal is held by an abnormally terminated process.
Description:
An issue where processes that terminate abnormally leave their terminal in the ttyhash table preventing subsequent login on that terminal device has been corrected. Subsequent jobs will now successfully login. When this occurs a message will be logged in the cconsole.log file.

Impact:
Improved resiliency.
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes



Category: System.Journaling
Platforms: All
DevKey: HYY770
Summary: Address an issue with clustered journal sequence numbers version network server and client
Description:
Addressed a potential issue in a cluster environment in 5.0. The scenario leading to the issue involves mixing SETs and $INCR on the same global on a slave node of the cluster. For example,
   Lock +^x
   Set ^x=0
   If $i(^x)
   Set ^x=2
   Lock -^x
The issue occurs when you cluster restore the entries from journal files — the resulting value of ^x from the restore may be incorrect.
Note: Only applications that mix SETs and $INCR on the same global are affected by the issue.

Impact:
Improved reliability of clustered databases.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: System.Licensing
Platforms: All
DevKey: RJW747
Summary: Un-deprecate $$inquire^LMFCLI
Description:
$$inquire^LMFCLI(server) is restored. The argument if present is ignored. It returns lu1;lu2;lu3, where lu1 is purchased license units in the active key, lu2 is the currently available license units, and lu3 is the lowest level of available license units.

Impact:
$$inquire^LMFCLI functionality is restored.
Likelihood Risk Ad Hoc Enhancement
Low Low Yes No



Category: System.Shutdown
Platforms: All
DevKey: RJW692
Summary: Cstop.exe on windows encounters Run-time error '62' with UNIX format key
Description:
This change allows start and stop to recognize keys in either format.

Impact:
Improved reliability of system shutdown.
Likelihood Risk Ad Hoc Enhancement
Low Low No No



Category: Utilities
Platforms: All
DevKey: PWC746
Summary: GBLOCKCOPY translates collation into an subscript-level-mapped destination (such as ROUTINE global)
Description:
An issue was corrected that caused GBLOCKCOPY to corrupt a global. For the issue to occur,
  1. the GBLOCKCOPY must be translating the global from one collation to another, and
  2. the destination of the GBLOCKCOPY must be a namespace where the global uses subscript-level mapping.
In particular, this addresses an issue with copying the ^ROUTINE global from an ISM system to a Caché namespace.

Impact:
A possibility for data corruption has been eliminated.
Likelihood Risk Ad Hoc Enhancement
Low Low Yes No



Category: Utilities
Platforms: All
DevKey: JLC510
Summary: Create /raw mnemonic for %CHARWIN
Description:
/RAW(str) allows %CHARWIN to send arbitrary character sequences to the terminal, where "str" is an arbitrary string which may contain control characters and escape sequences. It will be sent directly to the terminal and will not be retained in the internal buffers. This mnemonic can potentially change the screen in ways that %CHARWIN will not detect and this may result in undesirable effects. Therefore it's the user's responsibility to make sure that its use will not change the screen.
This mnemonic is intended for special purposes only, like sending printer information to a terminal emulator.

Impact:
Add "raw" capability to %CHARWIN
Likelihood Risk Ad Hoc Enhancement
Low Low No Yes