|
|
|
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é.
- Vulnerability #1:
Caché startup utilizes a setuid-root wrapper program, cuxs. A hostile
user who is a member of the "cachemgr" group could overwrite
/cachesys/bin/cache with arbitrary code, and cause that code to be
executed as "root" by invoking /cachesys/bin/cuxs.
- Vulnerability #2:
Caché Server Pages (CSP) technology is for building and deploying Web
applications. Caché executes CSP content using the UID of the user
that started Caché, which could be "root". A hostile user could insert
arbitrary code into subdirectories under /cachesys/csp and cause that
code to be executed by Caché by accessing it using a Web browser (or
other user agent).
Workaround for earlier releases
Log on as "root", change to the directory where Caché is
installed, and issue the command:
If Caché is not being used for CSP programming, and is not running in
conjunction with a local Apache web server, issue the command:
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:
- Likelihood - The probability that a user on the affected
platform will encounter this issue.
- Risks - An assessment of how likely this change is to
introduce additional issues into the application environment.
- Ad Hoc - This item indicates whether this change has previously been
deployed in an ad hoc release and successfully used by customers in production.
- Enhancement - This notes whether this change provides new
features or capabilities.
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.
Section Table of Contents
- Installation.Unix
- Object.Activate
- Object.Java
- Object.LanguageBindings
- Object.Soap
- Object.XML
- SQL
- SQL.DDL
- System.I/O
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
- <cachesys>/bin with default -rwxrwxrwx
- <cachesys>/csp with -rwxrwxrwx (0777)
- csp subdirectories and files with -rwxrwxr-x (0775)
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:
- 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().
- 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:
- Use java.util.Map instead of:
- com.intersys.classes.AbstractCacheArray
- com.intersys.classes.ArrayOfDataTypes
- com.intersys.classes.ArrayOfObjects
- com.intersys.classes.ArrayOfObjectsWithClassName
- Use java.util.List instead of:
- com.intersys.classes.AbstractCacheList
- com.intersys.classes.ListOfDataTypes
- com.intersys.classes.ListOfObjects
- com.intersys.classes.ListOfObjectsWithClassName
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
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:
- [MyRootDir.Sample]Person.java
- [MyRootDir.Sample]Address.java
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:
- 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.
- Treat xsi:nil="1" the same as xsi:nil="true" per schema standard.
- Support xsi:null="1" for SOAP-encoded XML documents.
- 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.
Section Table of Contents
- Control Panel
- CSP
- CSP.Compiler
- CSP.Net
- CSP.Web Server
- Explorer
- Installation
- Installation.UNIX
- Installation.Upgrade
- Installation.VMS
- Installation.Windows
- Languages
- Languages.Cache Basic
- Networking
- Object
- Object.Activate
- Object.Class Compiler
- Object.C++
- Object.Java
- Object.LanguageBindings
- Object.Library
- Object.Relationships
- Object.Soap
- Object.XML
- SQL
- SQL.GateWay
- SQL.JDBC
- SQL.ODBC
- SQL.Query Processing
- Studio
- System
- System.Cluster Specific
- System.I/O
- System.Journaling
- System.Licensing
- System.Shutdown
- Utilities
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:
- Load the Japanese error messages. The command is:
Do Import^%occMessages("c:\cachesys\bin\errors_ja.xml")
- 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.
- A cluster member may not register a proper IP and port in the PIJ file, and slaves cannot locate/ communicate with the master.
- 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
- On export, the classes that are exported are updated with the checksum of the file created after the export is complete.
- On import, if importing a class and the checksum in the class matches the one in the file, then the definition must be the same so the time changed in the class is kept.
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.