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.