InterSystems Documentation 
Caché Maintenance Kit Release Notes Archive


Welcome and thank you for using Caché.
The current maintenance kit is Caché 5.2.3. This document is only part of the available maintenance kit documentation. The full set of documents is available in the \Docs subdirectory of your Caché installation as follows:

This document is a historical archive of changes in Caché since the original 5.2 release, but prior to the current maintenance kit. As you can see from the above list, changes unique to the current maintenance kit are described in relnotes.htm. This document, prenotes.htm, lists changes between 5.2 release and the last maintenance kit before the current one.
If you have installed Caché in the course of installing Ensemble, please also see the release notes for the Ensemble installation. These are in the \Docs directory under the subdirectory \relnotes\ensemble.

Description of a Change Report
The remaining topics in this document describe each modification in detail. The format for this description is a Change Report.
Each Change Report provides a table with the following information:


Change Reports for This Maintenance Kit Archive

Category: CSP
Platforms: All
DevKey: MAK1734
Summary: Upload via CSP filenames garbled when containing German umlauts

Description:

Previously, when you uploaded a file with CSP, and the filename contains non-ASCII characters, these were not being converted into the correct charset, unlike the other request parameters. This problem has been fixed.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: CSP
Platforms: All
DevKey: MAK1812
Summary: Problem loading CSP directories recursively on VMS

Description:

If you tried to load CSP files on VMS with:

s tSC = $$LoadPageDir^%apiCSP("/csp/user","c+d")

Then it would not recurse through any subdirectories as it should. Also it would not report any errors even though it generated an 'invalid directory' error. Now the error reporting is fixed, and the code to recurse subdirectories is also fixed.


Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: CSP
Platforms: All
DevKey: MXT867
Summary: Increase timeout for SOAP Client Wizard

Description:

Increase timeout to one hour for the SOAP Client Wizard page that generates and compiles the classes.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: MgtPortal
Platforms: All
DevKey: YSD1532
Summary: No classes found in Mgmt Portal

Description:

Fixed a bug where if query's ROWSPEC column name contains a caption, then a table may not be shown or an error may occur.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Networking.ECP
Platforms: 1
DevKey: GK514
Summary: ECP server to deliver answer asap during light load

Description:

As part of 5.2 ECP server optimization, the ECP server may not deliver the answer as soon it completes during light loads. The ECP server rarely may delay delivery of the answer for up to one second.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Networking.ECP
Platforms: 1
DevKey: GK522
Summary: Fixed the ECP dmn job types

Description:

The daemon jobs types were not set in the proper order; daemons may hang around on failure (incorrect type may prevent proper cleanup due to incorrect job type). I.e. The ECP server reconnection daemon may not go away when the security subsystem disables the ECP service-connections from a host.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Networking.ECP
Platforms: 1
DevKey: GK523
Summary: ECP client to detect and terminate the ECP connection ASAP.

Description:

In rare conditions, the ECP client may not detect the connection is dead and it may not drop the connection and reconnect to the ECP server.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object
Platforms: All
DevKey: MAK1779
Summary: Enforce read only collections

Description:

If you specify that a collection property of a class is read-only, Caché now enforces this in the collection object so any attempt to update this collection will return a %Status code saying the collection is read-only.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object
Platforms: All
DevKey: MAK1781
Summary: Support computed collection properties

Description:

This change allows list or array collections to be sql computed. The SQL compute code for list collections must return the data in this form:

$listbuild(item1,item2,item3,...)

For array collections the SQL compute code must return the data in this form:

$listbuild($listbuild(key1,item1),$listbuild(key2,items2),...)

For example:

Class Test.Pointer Extends %Persistent
{

Property Data As %Integer;

Property B As list Of %String [ SqlComputeCode = { s {B}=$lb({Data}) }, SqlComputed, SqlComputeOnChange = Data ];

}

This defines a computed property 'B' which has a single element in it of value equal to the property 'Data'. Note that you cannot define a calculated collection because the collection would have no in-memory storage.


Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object
Platforms: All
DevKey: MAK1807
Summary: Upgrade class dictionary version to modify return type of IsValidDT methods if they were returning a %Integer

Description:

Caché 5.1 corrected the return type of the IsValidDT method to return a %Boolean rather than a %Integer which was its return type in previous releases. To promote compatibility with this older change, Caché 5.2.2 updates all user IsValidDT methods to a return type of %Boolean if they were %Integer or %Library.Integer. This change avoids errors reported when compiling these classes because the superclass IsValidDT return type does not match the subclass's IsValidDT.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object
Platforms: All
DevKey: MAK1822
Summary: Set the modified bit for collection 'oref' slot when clearing a collection

Description:

When you call ..Collection.Clear() it now resets the modified bit on the collection 'oref' slot as well as the 'oid' slot. This is required by the bindings so they can detect the oref has changed.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object
Platforms: All
DevKey: MAK1827
Summary: Projects containing user defined document types exported incorrectly

Description:

If you insert a user defined document type into a project and then export the entire project then the user defined document will not be exported because if it was called 'test.abc' then the export code was trying to export 'test.abc.abc' rather than 'test.abc'.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object
Platforms: All
DevKey: MAK1832
Summary: When Clear() on a collection is called remove all the data, but keep the oref

Description:

When Clear() is called on a collection previously it would remove all the data and the oref and oid. Now it keeps the oref to avoid having to create a new oref if it is referenced again and incur the cost of the object creation. This also means that if you have a reference to this oref it is still valid.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object
Platforms: All
DevKey: MAK1842
Summary: When calling $system.OBJ.Load with the 'compile' flag user defined document types were not compiled

Description:

When calling $system.OBJ.Load with the 'c' flag to compile the items imported any user defined document types were not compiled even though they were loaded correctly. This problem has been fixed.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object
Platforms: All
DevKey: MXT886
Summary: CopyFrom method of %Stream.GlobalCharacter needs to copy LineTerminator

Description:

This change modifies the CopyFrom method of %Stream.GlobalCharacter and %Stream.TmpCharacter to work like %GlobalCharacterStream and copy the LineTerminator property.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object.Class Compiler
Platforms: All
DevKey: MAK1805
Summary: Unresolved dependency not detected

Description:

Previously, if you have a parent/child relationship and then some 'dependson' dependencies, the compiler was not making sure that both the parent and the child class were compiled together. This meant it would fully compile the parent class and only then start compiling the child class which is not possible and so led to another compiler error. Now Caché ensures that the parent and child are compiled together, and if this can not be done it reports a class compiler dependency error.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object.Jalapeno
Platforms: All
DevKey: JSL1976
Summary: POJO: non-functional buttons in wizard should be disabled

Description:

With this change, buttons are now enabled only when something is selected that they can operate on. The exception is "Add" for zipping or jar, since you can always add a new zip or jar regardless of mode.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object.Jalapeno
Platforms: All
DevKey: JSL1978
Summary: POJO: tab key disrupts user input

Description:

A problem with cursor movement via the TAB key has been corrected.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object.Jalapeno
Platforms: All
DevKey: JSL1979
Summary: POJO: Schema Wizard crashes

Description:

Previously, the key 'd' gave a state dump when typed in the Console. Caché no longer allows this. It does allow the key 'c' to clear the console.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object.Jalapeno
Platforms: All
DevKey: JSL1980
Summary: Don't save properties file on next from login Panel (POJO, SchemaBuilderWizard)

Description:

Previously, Caché saved the properties file upon a "Next" event from the login panel. It no longer does this.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object.Jalapeno
Platforms: All
DevKey: JSL1983
Summary: Show null pointer exception in SchemaBuilderWizard

Description:

When connection fails due to a null pointer exception Caché now show it rather than hiding it.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object.Jalapeno
Platforms: All
DevKey: JSL1991
Summary: POJO: no indication of existing configuration file in Wizard

Description:

Caché now displays, below the namespace list box, a text message about whether or not configuration file was read.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object.Jalapeno
Platforms: All
DevKey: MAB529
Summary: Cleaning stale references for many-to-many relationships

Description:

Attempting to emulate many-to-many relationship using an intermediate table in Jalapeño caused some stale objects to remain around. This problem has been fixed.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object.Jalapeno
Platforms: All
DevKey: MAB530
Summary: Cannot detach an object of Sample.Employee class in Full mode (CharacterStream problem)

Description:

Previously, there were problems with character streams in Jalapeño when the connection was in full mode. Also, ClassParameter annotation was ignored during schema building. These problems have been fixed.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object.Jalapeno
Platforms: All
DevKey: MAB531
Summary: Null pointer in ObjectManager.removeFromDatabase if doesn't exist

Description:

Jalapeño left some ghost objects inside ObjectManager when objects were first deleted and then resaved. The same happened if an object was deleted and then its clone saved. These problems have been fixed.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object.Java
Platforms: All
DevKey: MAB525
Summary: Adapt Java Binding to use ConnectionInfo class for $List

Description:

This change adds a method to use IEEE doubles in the class com.intersys.objects.SList (Java-side representation of Caché $List). By default they are not used, because old servers do not support them. To send doubles inside $list in IEEE format when using SList use this call:

useIEEEDouble (true);

It is also possible to call this static method:

SList.supportIEEEDouble (true);

Which causes all subsequently created instances of SList to use IEEE format for double.

Almost no other related functionality is changed, with the exception of the SysListProxy class. The latter is changed so that the user must always provide a ConnectionInfo object to create an instance of SysList.


Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object.Java
Platforms: All
DevKey: MAB532
Summary: Fix zero miliseconds saving timestamp in Full Java Binding

Description:

When using a zero value for milliseconds and nonoseconds in a Java timestamp value, the incorrect representation was sent to the server. This caused datatype validation errors. The problem is now fixed.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object.Java
Platforms: All
DevKey: MAB533
Summary: Add ability to inspect server-side $zobjval of an object in Full Java Binding Client.

Description:

Caché now has the ability to inspect the server-side $zobjval of an object in the Java debugger for the Full Java Binding client. For object obj try to evaluate the following expression:

obj.dumpZobjVal()

or:

obj.dumpZobjVal(true)

The former variant displays both server-side and client-side $zobjvalues while the latter skips the client-side and only displays the server-side. This change also adds a System Property that runs a permanent assertion that client and server values are exactly the same. The property is:

com.intersys.cache.assert

with valid values true and false. The default is false.


Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1974
Summary: If "Generate" pressed when there is no classes to generate, throw exception in the SchemaBuilderWizard

Description:

If "Generate" is pressed when there is no classes to generate, Caché now throws an exception in SchemaBuilderWizard.

Having no classes to generate can arise either because there are no classes picked in the right-hand side generation panel, or because the directory picked to generate is empty of classes (it and all of its subdirectories have no classes).


Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1975
Summary: Disable generate button when nothing in generate panel

Description:

The generate panel contains the classes, dirs, zips or jars for which Caché will be generating schemas. When it is empty, Caché now disables (grays out) the "Generate" button.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object.Library
Platforms: All
DevKey: MIT559
Summary: No compile error for %Double invalid scale value

Description:

A %Double scale can be 0-15. Previously, an incorrect %Double scale value did not cause a compilation error. This problem has been fixed.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object.Macro Preprocessor
Platforms: All
DevKey: DPV2707
Summary: SQL Fix ProdLog 52374: Compiling mac->int drops $C(1) embedded in strings

Description:

A problem has been fixed that was introduced in Caché 5.2 where an $c(1) value embedded within the MAC routine source text was stripped by the macro preprocessor. Now, if you have a line in a routine that contains every ASCII value from 0 through 255, a warning will be displayed and the routine map used for debugging will not be built.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object.Soap
Platforms: All
DevKey: MXT808
Summary: XMLNAME parameter allows invalid XML element names

Description:

Caché now performs a validity check on the value of XMLNAME to see that it is a valid XML name.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object.Soap
Platforms: All
DevKey: MXT830
Summary: Customize SOAP web service messages

Description:

In some cases, the user has a predefined client for which Caché needs to create a web service. To do this the user needs to be able to further customize the request and response messages. Specifying SoapAction for a WebMethod method specifies the SoapAction header for this method. If SoapAction is specified and not "", then SoapAction must be unique for this web service. Specifying SoapMessageName for a Webmethod method specifies the outer wrapping tag for the response message. The XMLNAME property parameter on the return type specifies the inner wrapper of the return value.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object.Soap
Platforms: All
DevKey: MXT841
Summary: Optionally use SAX's Http Requestor for SOAP requests

Description:

This change modifies the SOAP web client to optionally use SAX's built-in Http Requester which does the entire HTTP request in the SAX parser. To turn on the use of this feature, change the value of HttpRequester property of the web client class to "SAX". The default is "Cache" which uses the Caché %Net.HttpRequest class to issue the Http request.

The features available through the SAX Http Requester are somewhat limited. Thus, if any of the following properties are set %Net.HttpRequest will be used no matter what the value of the HttpRequester property:

In addition, if the message is a one way message (i.e. one without a return value), then %Net.HttpRequest will always be used.


Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object.XML
Platforms: All
DevKey: MXT815
Summary: Selective generation of XMLExport code for either literal or encoded format

Description:

A new parameter, XMLFORMAT, controls the generation of the XMLExport method for XML enabled classes to include code for only literal or only encoded format. This allows the generated routines to be significantly smaller since usually both formats are not needed.

If XMLFORMAT="Literal", then only support for literal format import and export is generated. If XMLFORMAT="Encoded", then only support for SOAP encoded format import and export is generated. The default is to generate support for both literal and encoded format.


Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Object.XML
Platforms: All
DevKey: MXT853
Summary: Optionally return error if unexpected attribute in an XML document

Description:

Add the XMLIGNOREINVALIDATTRIBUTE parameter to XML enabled classes to control error reporting for unexpected attributes in an XML document when reading the document with %XML.reader. The default value for XMLIGNOREINVALIDATTRIBUTE is 1 (true) which is the current behavior. If XMLIGNOREINVALIDATTRIBUTE = 0, then an error will be reported if an unexpected attribute is encountered.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Security
Platforms: All
DevKey: STC1006
Summary: Rename %Net.SSL.Configuration to Security.SSLConfigs

Description:

This change renames the %Net.SSL.Configuration class to Security.SSLConfigs. It also adds 2 new properties: description and enabled. It renames a previous property called Role to Type (Role is an SQL reserved word, and couldn't be used in queries.) It also exposes several API's to manage the SSL/TLS configurations. %NET.SSL.Configuration is deprecated and will be removed in the next version. Note that the name argument to %OpenID(name) needs to be lowercased with $zcvt(name,"L") before being called.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Security
Platforms: All
DevKey: STC1007
Summary: Expose import/export security API's

Description:

^SECURITY now has an additional option to import or export All security information into one file. Previously each type of security record had to be exported into different files. Prompting in ^SECURITY for IMPORT/EXPORT has changed.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: SQL
Platforms: All
DevKey: DPV2703
Summary: SQL Fix: Don't do TSTART for statement atomicity if NO_AUTO_TRANSACTION

Description:

A change has been made to SQL INSERT, UPDATE, and DELETE statement atomicity first introduced in Caché 5.1. Beginning in 5.1, the SQL Engine used a transaction internally to implement statement atomicity, which means the entire INSERT, UPDATE, or DELETE statement either occurs or does not occur. If any row failed to file for any reason, the entire statement fails. If the process is in NO_AUTO_TRANSACTION mode ($zu(115,1)=0), Caché will no longer start this internal transaction to implement statement atomicity. If you INSERT, UPDATE, or DELETE in this transaction mode and some row fails to update, other rows in the table may be modified by the statement.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: SQL.JDBC
Platforms: All
DevKey: MAB527
Summary: Double literal problem

Description:

This change converts floating numbers represented as a string (e.g. if IEEE double can not be used) to Caché Canonical form.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 


Category: SQL.Query Processing
Platforms: All
DevKey: JLF090
Summary: Make 'x <> ALL (SELECT y ...)' equivalent to 'x NOT IN (SELECT y ...)'

Description:

Previously there was a problem in that the following constructs have identical semantics in SQL:

x <> ALL (SELECT y ...) <=> x NOT IN (SELECT y ...)

<=> NOT (x = ANY (SELECT y ...))

However, treatment of NULL was not the same in these two cases. In particular, if either x or y are nullable and NOTs had been fully pushed down prior to the transformation, then the equivalent expression in both cases was:

NOT EXISTS (SELECT 1 ... WHERE x=y OR x IS NULL OR y IS NULL)

The semantics of x NOT IN (SELECT y ...) and x <> ALL (SELECT y ...) are now equivalent, under the condition that NOTs have been fully pushed down. To achieve this equivalence, the negation state is now maintained at parse time so that the appropriate NULL handling of ALL or NOT ANY or NOT IN inside the subquery can be generated properly.


Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: SQL.Query Processing
Platforms: All
DevKey: JLF110
Summary: $ZE=<ILLEGAL VALUE>zBuildValueArray+97^%Text.English

Description:

SQL queries on a property with LANGUAGECLASS = "%Text.English" triggered unexpected <ILLEGAL VALUE> errors when run from the System Management Portal. This problem has been fixed.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: SQL.Query Processing
Platforms: All
DevKey: JLF111
Summary: Execute time changed from 2 sec to 10 min for a datatypetest query

Description:

In all versions prior to Caché SQL 5.2, processing of NOT IN (SELECT ...), NOT EXISTS, etc., subqueries did not strictly follow the SQL standard with respect to NULL handling. This problem was addressed by JLF090 by transforming:

x NOT IN (SELECT y ... WHERE p)

into:

NOT EXISTS (SELECT 1 ... WHERE p AND (x = y OR x IS NULL OR y IS NULL))

This strictly follows the SQL standard, and if either x is not nullable or y is not nullable, then one or both of the IS NULL tests is removed. If both IS NULL tests are removed, then JLF090 would have no net effect.

However, if one or both of x or y is nullable, then the presence of the OR makes the query harder to optimize. Fortunately, with extensions provided in this devlog (JLF111), another optimization provided in previous Caché releases and known as the "Set Valued Subquery Optimization" (JLF005) can be used in this case to provide excellent performance.


Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Studio
Platforms: All
DevKey: MAK1813
Summary: Reset error count when importing user defined documents

Description:

When importing XML documents with user defined documents in them remember the error count before calling the user defined document and restore it afterwards including any errors returned from the user defined document method.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Studio
Platforms: All
DevKey: MAK1816
Summary: Work around VMS handling of file read on XML import

Description:

If you import an XML document with a user defined document in it, the import notices the location of the user defined document and then after importing everything else constructs a stream containing just this embedded document and passes this to the user defined document class to import it. This worked correctly on Windows and Unix but OpenVMS when reading lines of data will not report the line terminator (unlike the other platforms) so you do not know if you read an entire line or if the line was >32k of data and so you need to keep reading to get the full line. This OpenVMS problem has been fixed.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Studio
Platforms: All
DevKey: MAK1838
Summary: Handle collations where 'a' comes before 'A' for user defined documents

Description:

If you are running a collation where 'a' collates before 'A' then no user defined documents would show up in Studio because it was searching for the user defined documents which always have the extension in lowercase internally as collating after upper case letters. Now the code no longer relies on this collation at all.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Utilities
Platforms: All
DevKey: NGA127
Summary: Updated distributed mgstat for csv and async call support

Description:

The distributed mgstat utility has been updated.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No

 



Category: Utilities.Routines
Platforms: All
DevKey: NGA130
Summary: Fix missing comma in csv output format of mgstat

Description:

A comma was missed in the csv output format. This problem has been fixed.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No