|
|
|
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.
Impact:
Improved error analysis in class inheritance.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK719
Summary: Do not count errors in class projection compiles
Description:
When compiling a class, we count the
number of errors generated so we can give a summary of
how many errors occurred when the compile finishes. If a
projection calls $$$ERROR a lot but does not report any
errors, these were being reported as errors by the class
compiler. Now we do not count any errors that occur inside
the projection, but if the projection returns a status
code indicating an error condition, then this just counts
as one error in the final summary.
Impact:
Improved error handling during class compilation.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK720
Summary: Add %Extends to %RegisteredObject
Description:
Add %Extends method that takes a
classname and returns true if the current object extends
this class as either a primary superclass or a secondary
superclass.
Impact:
New functionality has been added to the class
"reflective" methods.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
Yes |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK721
Summary: Only allow subclasses of %RegisteredObject to be instantiated
Description:
Due to the way system OREF works it
lead to a change that any class that was not explicitly
marked as abstract could be instantiated with a
Set oref=##class(classname).%New()
Previously (in Caché 4.x and earlier), you could call %New on a
class even though the class itself did not have such a method explicitly
or derived from its superclasses.
We do not support any type of objects other than
ones derived from %RegisteredObject and so this left a potential
hole which is now closed by this change.
This change prevents these other sorts of
classes from being instantiated.
Impact:
Improved error detection in class compilation.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
Yes |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK750
Summary: Method and property of the same name causes compiler to generate wrong syntax
Description:
If you have a class method called 'Test' and
a property called 'Test' then in a method you write:
The compiler thought it was referring to the class method and called
this,
whereas it should detect there are no parentheses and so know that this is a property reference.
Note that:
Is still ambiguous,
however, as there could be a multidimensional property
called 'Test' and a method called 'Test' and so in this case
we call the method.
Impact:
Improved error detection in class compilation.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK765
Summary: Allow language of code generated code to be specified
Description:
Add a property to the method object generator '%code' object called 'Language'. This can be set in the generator to a different language mode than that of the language of the generator itself, so you can generate Caché Basic code with a Caché ObjectScript generator. For example, the follow ObjectScript method generator will generate Caché Basic output.
Method Test() [ CodeMode = objectgenerator ]
{
Write %code.WriteLine("print 1")
Set %code.Language="basic"
}
Note the default language for the generated code is the same as the language specified for the generator itself.
Impact:
Improved flexibility in application development.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
Yes |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK778
Summary: Allow some huge classes to compile
Description:
If a class has a very large number of
properties, then the generated methods %NormalizeObject
and %ValidateObject can become very large. If these methods
get to more than 32KB of compiled code, we were not able to compile the
class because these methods use procedureblock and so the
code splitter could not split them into smaller chunks.
Now these two methods do not use procedureblock so the
code splitter can split them. This will allow some classes
with large numbers of properties to compile.
Impact:
Improved handling of compilation of large classes.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK779
Summary: Swizzling an object in a collection would set parent as modified erroneously
Description:
If you had a collection of objects
(either a list or an array collection), then on an object in the database calling:
Set oref=##class(MyClass).%OpenId(1)
Write oref.Collection.GetAt(1)
Write oref.%IsModified()
would say that this object was modified
when it had not been. This was because the swizzle
logic for the collection should not be setting the
modified bit in the object.
Impact:
Improved performance due to not saving objects which
have not been modified.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK781
Summary: Address issue with parsing instance variables with '%' in their name
Description:
The parsing of instance variables with '%' in their
name,
for example, i%%test was not working in some cases, which would result
<SUBSCRIPT> errors during compilation.
Impact:
Improved syntax processing during compilation.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.C++
Platforms: All
DevKey: JSL1046
Summary: Generate code for a dynamic C++ binding
Description:
We now support generating C++ code in a dynamic mode.
Impact:
New functionality has been added.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
Yes |
Category: Object.C++
Platforms: All
DevKey: JSL1048
Summary: In dynamic C++ binding generate code for %Oid and %Save
Description:
If the compiled class
contains %Oid or %Save methods,
they become part of the dynamically generated object binding.
Impact:
Better representation of the class functionality in
dynamically bound C++ classes.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL1053
Summary: Enhance dynamic C++ support
Description:
Exportdyncpplist now can contain a comma-separated list of query names.
ExportDynCPPList(classes,dir,proplist,methodlist,querylist,qspec,
errorlog,usename)
The meaning of the comma-separated lists - proplist, methodlist, querylist has changed.
These lists can now be "*" which means generate all support for them. For example a proplist of "*" means generate support for all properties.
If the list is specific, for instance, the proplist is "Name,Age" then only support for the properties in the list will be generated: that is, only the support for Name and Age.
If the list is "" then no support will be generated. The default is "".
Here is an example where we generate support for the Mode property and the NormalizeDirectory method and don't generate any support for queries:
Write $system.OBJ.ExportDynCPP("%Library.File","c:\temp","Mode",
"NormalizeDirectory")
Impact:
Improved functionality.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
Yes |
Category: Object.Java
Platforms: All
DevKey: MAB156
Summary: Addressed issues in SysList
Description:
Addressed several issues in SysList.toString()
method. In particular, printing of empty lists and lists
embedded in another list has been changed.
SysList.setParameter() has been changed to accept a SysList object.
The SysListProxy.setUndefined() method was added.
Impact:
Removed an unneeded restriction.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: MAB158
Summary: Bulk load and create in Java Binding
Description:
Added several methods to com.intersys.objects.Database:
To load all objects satisfying given condition into Java client:
- Iterator openByQuery(String cacheClassName, String condition);
- Iterator openByQuery(String cacheClassName, String condition, Object[] args);
- Iterator openByQuery(String query);
- Iterator openByQuery(String query, Object[] args);
To save a collection of objects:
- void saveObjects(String cacheClassName, Collection objects);
- void createObjects(String cacheClassName, Collection objects);
Impact:
Improved functionality.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
Yes |
Category: Object.Java
Platforms: All
DevKey: MAB182
Summary: SList#clear() and #remove() implemented
Description:
Added method clear() to com.intersys.objects.SList.
Method remove() retains default implementation, that is throws
UnsupportedOperationException, because the underlying SysList
does not support removing elements.
Impact:
Enhanced functionality.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
Yes |
Category: Object.Java
Platforms: All
DevKey: MAB183
Summary: Correct Java projection generation on the client side in 5.0
Description:
Two changes:
- Client now allows remote projection generation with Server version 5.0.3 and above.
- Addressed minor issue in remote class generation.
Impact:
Makes it possible to generate Java code on the developer's system (if connected to a different server system).
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: MAB189
Summary: generateClassLocal() and generateClassRemote() behavior is opposite to expected
Description:
generateClassRemote is now generateClassLocal and vice versa.
Impact:
Prevent confusion by naming these new methods correctly.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL957
Summary: Support queries and stored procedures in Java binding
Description:
This change enables support for generated queries and
stored procedures. For each method that is also an SQL stored
procedure, a method of type java.sql.CallableStatement with a name of
prepare_<SqlName>
will be generated.
For each query with the name <QueryName>, a
corresponding stored procedure
with type java.sql.CallableStatement and
name <SqlName> will be generated.
Impact:
Lets the Java binding make use of storedprocedures and class queries.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL988
Summary: Make classLoader variable local to routine
Description:
When more than one relationship is defined,
the code we generate in bean fails to compile because classLoader is used more than once.
This change makes the reference to classLoader local to each routine.
Impact:
Improves Java binding for certain classes.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL1039
Summary: Add Stream interface to ExportJava
Description:
One can have the Java generator write code to streams where it can later be retrieved from Caché.
The following illustrates this new interface:
Set coln=##class(%Compiler.LG.JavaCodeStreamColn).%New()
Set coln.dir="c:\personjava"
Zn "SAMPLES"
Set Status=##class(%Compiler.LG.LGCPP).ExportJava("Sample.Person",coln)
If 'Status Do DecomposeStatus^%occSystem(Status,.Err)
{
Write !,Err(Err)
}
Write !,Status
Impact:
Internal mechanism needed for remote generation of Java binding code.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL1049
Summary: Don't automatically project new collection types that appear in properties
Description:
In the dependency calculator for the Language
Generators,
we walk the types of properties and generate class support for
those types unless they are filtered out. The filter is now
changed so that if the types are the new collection types we don't attempt to generate code for these new types.
Impact:
Projection of collections is improved for bindings.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL1065
Summary: New Java Generator collection support
Description:
This change implements the following:
- If a property is collection, it has no set method. This is true even if the JAVATYPE is overridden.
- A property with collection type list has a return type of java.util.List, unless
another return type is specified by JAVATYPE.
- A property with a collection type array has a return type of java.util.Map, unless
another return type is specified by JAVATYPE.
- If a user creates a custom collection class by extending library collection
classes, the projection of the used class behaves as it does now.
This will involve a new algorithm for calculating superclass, for instance,
if A extends %ListOfDataTypes in Caché ObjectScript, then A should extend
SysListOfDataTypes in Java. If B extends %Collection.ListOfDT in ObjectScript,
then B should extend SysListOfDataTypes in Java too. If C extends D
and D extends %Compiler.AbstractListOfDataTypes in ObjectScript, then C should
extend SysListOfDataTypes in Java again.
Impact:
Projection of collections is improved for bindings.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1082
Summary: Export Stub Methods of the form <XXX>Open and <XXX>Exists
Description:
If a stub method is of form <XXX>Open
or <XXX>Exists we export it to the Java and C++ Language Bindings.
Impact:
Some additional methods are available to Java/C++ clients.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1090
Summary: Don't generate get method or set method for property if private
Description:
A property may have its set or get methods
overridden and though it is public, it may be the case that
these overridden methods are private. If the Get method is
private, we don't generate a Get method. If the
Set method is private we don't generate a Set Method.
Impact:
Improved generation of Java/C++ clients.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
Yes |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1093
Summary: Package of classname is used for classes in CLASSLIST In EJB projection
Description:
If a class in the CLASSLIST does not
have a specified package name, for instance,
then the package name is derived
from the package name of the class in which the projection resides.
Impact:
Simplifies EJB projection.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1095
Summary: Produce clearer error message when APPSERVERHOME is not specified
Description:
Appserverhome must be specified. When it is not,
the error message says "App Server" is required. This isn't clear.
Also clarify error message which
says that you need at least one persistent class that is not a session bean.
Impact:
Improved rollout of EJB applications
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1097
Summary: Allow sqlproc to compile even if method does not return a value
Description:
Only generate SQLException catch if there are output arguments.
Impact:
Relaxes some restrictions on Stored Procedure methods.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1101
Summary: Address calculation of principal and index fields in EJB when dealing with child tables
Description:
The issue was that set and
get accessors were not properly generated when a
class contains arrays of datatypes. This happened for all child tables
when the principal field was not in column 3 and the
index field in column 4. This can easily happen, for
instance, when the property name of the array begins in lower case.
Impact:
Improved generation of EJB code.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1102
Summary: Create right serial constructor when serial only appears in child tables
Description:
Constructor was missing loading of serial field:
public EJBSerial5(Object list, QuickStatement qs,
boolean isLoadedFromChildTable)
throws SQLException
{
m_s1 = qs.getString(list); <-- was missing
}
For class,
Class User.EJB5 Extends %Persistent [ ProcedureBlock ]
{
Projection EJB As %Projection.EJB(
APPLICATIONDIR = "appDir",
APPSERVERHOME = "ASH",
BEANNAME = "Bean",
JAVAHOME = "javaHome",
ROOTDIR = "c:\19");
Projection EJBJBoss3 As %Projection.EJB(
APPSERVERHOME = "c:\jboss-3.0.6_tomcat-4.1.18",
BEANNAME = "EJB5",
CLASSLIST = "User.EJB5",
JAVAHOME = "c:\jdk1.3.1_01",
ROOTDIR = "l:\EJB5",
SERVERTYPE = "JBOSS3",
USEPRIMARYKEYS = 1,
PERSISTENCETYPE="BMP",
APPSERVERCONTROLSCONCURRENCY=1);
Property pc1 As %String [ Collection = array ];
//Property s As User.Serial5;
Property a1 As User.Serial5 [ Collection = array ];
Property pc2 As %String [ Collection = list ];
ClassMethod MyPopulate()
{
#define RUN(%c) Set Status=(%c) If $$$ISERR(Status) Do $SYSTEM.OBJ.DisplayError( %objlasterror) ZTimeStamp
$$$RUN(##class(User.EJB5).%KillExtent())
Set o=##class(User.EJB5).%New()
If o="" d $SYSTEM.OBJ.DisplayError( %objlasterror) zt
$$$RUN(o.pc1.SetAt("hello",1))
$$$RUN(o.pc1.SetAt("goodbye",2))
Set a=##class(User.Serial5).%New()
Set a.s1="my favorite serial"
$$$RUN(o.a1.SetAt(a,1))
$$$RUN(o.%Save())
}
}
Impact:
Improved generation of EJB code when using serial objects.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1104
Summary: Let DATASOURCENAME override res-ref-name
Description:
Res-ref-name was set to <NAMESPACE>Database. However DATASOURCENAME should override res-ref-name.
Impact:
Improved generation of EJB code.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1105
Summary: Don't generate import of the superclass
since the superclass is fully qualified
Description:
If a class called NewISC.Person extends ISC.Person,
then the generated class does not compile because of the import of
ISC.Person. However, not importing this class addresses the issue,
so we now don't import superclasses.
The superclass is fully qualified in the
Extends so it does not need to be imported.
Impact:
Corrects client binding for classes with the same name and different package.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1106
Summary: Allow CMP projection to happen even if superclass does not have primary key
Description:
If a superclass did not have a primary key then the
CMP projection failed, with the error message "primary key required."
This change allows CMP projection to succeed even though the superclass lacks a primary key.
Impact:
EJB CMP mode now works for classes without a designated Primary Key.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1107
Summary: Address <METHOD DOES NOT EXIST> error when a class was not %RegisteredObject
Description:
Previously, it was acceptable to call %New() on a class that was not a
%RegisteredObject. Because this is no longer true, we have to ensure a class inherits from
%RegisteredObject before calling %New on it.
Impact:
Prevents non-instantiable objects from being instantiated.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1109
Summary: Correct Java code generation for method with output parameter type
Description:
Java code generation was incorrect for a method with
an output parameter type.
We didn't properly calculate number of
references when output parameters were involved. This is now changed.
Impact:
Corrects handling of output parameters for methods in client bindings.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1111
Summary: Change how getClassProperties and getClassMethods are called in Java binding
Description:
GetClassProperties and getClassMethods have changed
their signatures.
This needs to be reflected in JDBCAdapter.java.
This issue arose because of changes added for the C++ binding.
Impact:
Internal change needed by code generator.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1113
Summary: If a property is not "insertable", it should not be present in CMP create
Description:
In the ejbCreate and ejbPostCreate we generate for
CMP,
there should not be present non-insertable properties. This is now true.
Impact:
EJB CMP no longer project fields that cannot be inserted.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1114
Summary: Add "public" to list of Java reserved words used by the Java generator
Description:
A user was unable to name a class
"public".
This corrects that oversight.
Impact:
You can now create a Java class named "public".
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1119
Summary: Don't project "set" methods for read only properties
Description:
We did not recognize read-only properties as a
special case in the Language Generator, where "set" methods
should not be generated. Now we do.
These will no longer be generated for read-only properties.
Impact:
Better support for read-only properties in client binding.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
Yes |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1120
Summary: Don't allow property name case to affect CMP compilation adversely
Description:
There is an issue where a serial object being named
could cause the accessors for the serial object to not compile.
This was only for CMP generation.
Impact:
EJB CMP works better with serial objects.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1122
Summary: Restore old-style Java collection projection in 5.0.3
Description:
Collections will project in the previous way.
A list is projected as ListOfDataTypes or ListOfObjects.
An array is projected as ArrayOfDataTypes or ArrayOfObjects.
Impact:
Older Java applications can continue to use old collection API.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1123
Summary: Allow exists(...oid...) method to generate in 5.0.3
Description:
We put a guard around "exists",
so that it would only be projected if the primary superclass were
%Persistent.
In this release, the %Persistent class is not itself persistent.
The code now looks for equality with %Library.Persistent.
Impact:
Correct projection of Exists method to Java client.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1124
Summary: Protect conflicting signature test against a null superclass
Description:
There was an issue where the conflicting
signature test should not have been performed if the superclass was null.
This is corrected.
Impact:
Improved code generation for client bindings.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1125
Summary: Set appropriate package for superclass
Description:
The superclass was miscalculated.
If the superclass in the superclasses list did not have a package,
package was incorrectly set to "User".
Impact:
Improved code generation for client bindings.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1126
Summary: Do not allow projection to EJB when child tables are invalid
Description:
We now validate the child tables since the child tables are used in the EJB projection.
If the child table is not valid we produce an error message for instance:
ERROR #6633: Class <Class> is not projectible to EJB. Projection is aborting.
For a class to be projectible all its child tables must be valid. Child table
<Childtable> is not valid.
Impact:
Gives an error message if classes cannot be projected to EJB.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1127
Summary: Allow pathological case of serial with no properties to project in EJB
Description:
A customer may define a serial class with no properties. An array of these projects as a child table with no properties from the serial projection. Allow these to project to EJB.
In this pathological case, we generate an EJB
dependent object to represent the serial object that is essentially empty.
Since the Caché serial object has no fields, the dependent object representation has no Caché fields.
Impact:
EJB projection now supports empty serial objects.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1128
Summary: Don't add classes in methods to dependencies in EJB projection
Description:
EJB projection used to add to "import" list all
classes used by methods in persistent classes.
This was incorrect. Now we don't import such classes.
Impact:
Improved code generation for EJB binding.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.Library
Platforms: All
DevKey: MAK652
Summary: Prevent infinite loop in %ClassDefinition:SubclassOf query
Description:
The %ClassDefinition:SubclassOf query
returns a list of all classes that are subclasses from
a particular class. However if there was a loop because
class A was a subclass of class B and class B was a
subclass of class A, this would cause this query to go
into an infinite loop. This is now detected — if a
loop is found, then one class is not reported as a subclass of the other.
Impact:
SubclassOf query is improved.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.Library
Platforms: All
DevKey: MAK716
Summary: Change error message if a class lock in %Routine fails.
Description:
Change the error message when the
Lock method on a %Routine class fails because the
item is locked by another user so it does not
say 'Item is locked by another user, it will be opened read only'
as the 'read only' part only applies to Studio and not to use of this class directly.
Impact:
Message displayed by Studio is now clearer.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.Library
Platforms: All
DevKey: MAK725
Summary: Prevent potential looping in MSM-Activate server when socket closes executing a command
Description:
In the MSM-Activate server if the client
requests the server to execute a command and, while this is
executing, the socket is closed it was possible that this
would cause the server to start looping trying to write the
error back to the client. Now it will trap out and close the process gracefully.
Impact:
Corrects a problem in the MSM-Activate server.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.Library
Platforms: All
DevKey: MAK764
Summary: %Dictionary.PackageDefinitionQuery:SubPackage query not working correctly
Description:
The query in PackageDefinitionQuery:SubPackage
when you called the FetchRows entry point would return
hundreds of rows when there were only a few package definitions.
Impact:
SubPackage query is improved.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.Relationships
Platforms: All
DevKey: BJB266
Summary: %IsModifed is set because of Relate code
Description:
A rare issue with %IsModified has
been corrected. If you had a class that had an independent
pointer to a parent class and a child class of the parent and
you swizzled in both, then the child would think some
values had changed and it would call the %Save code.
Impact:
%IsModified behavior improved in certain cases.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.Soap
Platforms: All
DevKey: MXT446
Summary: Properly report unable to create stream error in SOAP Web client
Description:
Caché now passes back an error return from
stream.Write for a temporary stream.
Previously this error was being ignored.
Impact:
SOAP client gives a better error message.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.XML
Platforms: All
DevKey: MAK616
Summary: Schema change for CSP file exported as XML
Description:
The schema we use to validate XML files that
contain CSP data did not have the application and default
attributes defined and so would refuse to load an exported CSP file.
This has been corrected.
Impact:
XML Schema for class definitions is improved.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.XML
Platforms: All
DevKey: MAK740
Summary: XML export of a class definition must export all defined items
Description:
When exporting a class to XML format,
if a keyword was the default value, we were not exporting
this item. However, this has the potential to cause issues
with inheritance. If an item is defined to be the
default value and then this class is exported and imported,
then the class definition node for this value will not
be set.
If you subclass from another class that has a
non-default value for this node and include this class as
a secondary superclass, the default value will not override the
primary superclass' value because it is not set in the class definition node.
So Caché always exports all defined
values even if they match the default value when XML exporting a class.
Impact:
Exported class definitions will not lose overridden default values when re-imported.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.XML
Platforms: All
DevKey: MXT448
Summary: Address XML import issues
Description:
This change makes four corrections:
- Web Service should specify charset as utf-8 in HTTP headers.
- String of white space should be imported unchanged. The issue was that it was always changed to $c(0) on import.
- Ignore SAXMask property of %XML.Reader, since SAXMask is computed by the %XML.SAX.Parser.
- Remove duplicated location information in fatal import
errors.
Impact:
XML Import is improved.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Object.XML
Platforms: All
DevKey: MXT449
Summary: XMLExport all keys for a relationship
Description:
Use $ORDER to loop over elements of a list or
relationship to make sure to get all elements of a relationship.
This is needed because relationships have an array interface, but
Caché exports them to XML as lists.
Impact:
XML Export of relationships is improved.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: SQL
Platforms: All
DevKey: DPV1982
Summary: Prevent $system.SQL.TuneTable() from failing with <NOROUTINE> error
Description:
Consider the following simple class:
Class User.NewClass1 Extends %Persistent [ ClassType = persistent ]
{
Property pad As %Library.String;
}
The 'pad' property compiles successfully by setting 'support delimited identifiers' in Configuration Manager. But the TuneTable fails on this class.
-----
USER>d $system.SQL.TuneTable("NewClass1",1,1,.err)
TABLE: SQLUser.NewClass1
An error occurred processing the table:
<NOROUTINE>CalculateSelectivity+61
^%qarTune
USER>w err
qaqperr
-----
A correction was made for the condition where TuneTable was run on a table with a column that had a non-Exact collation and the column name required a delimited identifier be used when specified in an SQL statement.
Impact:
TuneTable utility no longer gives an error.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: SQL
Platforms: All
DevKey: DPV1994
Summary: Add ROWID_FIELD column to %Library.SQLCatalog.SQLFields query
Description:
The description for %Library.SQLCatalog.SQLFields query
has been changed. Refer to the class documentation for the new format.
Impact:
Additional information is available in SQL Catalog tables.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
Yes |
Category: SQL
Platforms: All
DevKey: DPV2001
Summary: Add support for ODBC Scalar functions {fn USER()} and {fn DATABASE()}
Description:
Support has been added for the following two ODBC Scalar functions:
- {fn USER()} - Returns the user's authorization name. This is the same as the USER function.
- {fn DATABASE()} - Returns the name of the database corresponding
to the connection handle. This is the same as the
SQL_CURRENT_QUALIFIER, which is always NULL in Caché.
Impact:
SQL supports additional scalar functions.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
Yes |
Category: SQL
Platforms: All
DevKey: DPV2003
Summary: Don't output error message in Query
Processor if displaylog is disabled
Description:
Caché has been changed to avoid attempts to
output error messages from the Query Processor when such attempts
will fail.
Impact:
Error message not displayed is error display is turned off.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: SQL
Platforms: All
DevKey: DPV2005
Summary: DDL API: Return error properly if BuildExtRoutine fails
Description:
Previously, there was an issue where a very
large stored procedure statement failed to compile, but did not report
an error.
When a CREATE PROC results in a method of > 32KB
of code,
we put the code in an external routine and create a procedure which simply calls this routine.
The code in BuildExtRoutine^%apiDDL is responsible for building and
compiling this routine.
It sets SQL code to -400 if the compilation of the external routine
fails.
The error return was being checked improperly, but
now this test is correct.
Impact:
An error message is returned if a stored procedure is too big to compile.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: SQL
Platforms: All
DevKey: DPV2021
Summary: SQL Enhancement - Add support for {fn CONVERT(value, SQL_DOUBLE) }
Description:
Caché SQL now supports the following datatype conversion when using the ODBC explicit datatype conversion function CONVERT:
{fn CONVERT(value, SQL_DOUBLE)} => Converts to ODBC type DOUBLE
Impact:
SQL CONVERT now converts to DOUBLE.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
Yes |
Category: SQL
Platforms: All
DevKey: MIT249
Summary: UPDATE with unbalanced quotes not rejected
Description:
Previously, an UPDATE with unbalanced quotes would
update the selected fields with a text string containing the remainder
of the
SQL statement. This no longer happens.
Impact:
JDBC/ODBC queries with unbalanced quotation marks are now handled correctly.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: SQL.GateWay
Platforms: All
DevKey: MIT250
Summary: Only try DSNConnect if user and password are empty
Description:
A number of issues were reported
when DSNConnect was attempted for a DBMS which do not support it. Now
Caché skips an attempt to run DSNConnect if the user or password are not empty.
Impact:
Improvement to SQL Gateway connection logic so that
requests to foreign databases no longer fail.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
Yes |
No |
Category: SQL.JDBC
Platforms: All
DevKey: AND335
Summary: JDBC: Remove support for get/setUnicodeStream
Description:
The ResultSet.getUnicodeStream and PreparedStatement.setUnicodeStream APIs
have been deprecated for years. They are now removed.
Impact:
Deprecated API calls removed from JDBC.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: SQL.JDBC
Platforms: All
DevKey: AND338
Summary: XDBC: Use ^CacheTemp instead of local variables for bulk operations
Description:
In some JDBC benchmarks, we
noticed a performance degradation when a number of bulk inserts/updates
became very large. When making a bulk insert/update of around 100 rows,
performance was much better than 100 individual inserts/updates. However,
as the number grew, performance was getting worse and worse.
This turned out to be due to the use of a large
number of local variables. These were changed to use ^CacheTemp,
and performance significantly improved.
Impact:
Improve performance of JDBC bulk operations.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
Yes |
Category: SQL.JDBC
Platforms: All
DevKey: DPV2012
Summary: Address
<UNDEFINED>SPFetch2+1^%qserver> error
Description:
The
calling of a procedure through ODBC or JDBC which was a
Class Query projected as Stored Procedure caused an error
when
the Class
Query was an SQL statement which contained an SQL User Defined
Function.
The calling of this Procedure would fail with an <UNDEFINED> error in the %qserver process.
This issue existed in Caché versions 5.0 through 5.0.2.
Impact:
Correct xDBC errors related to user-defined SQL functions.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: SQL.JDBC
Platforms: All
DevKey: MAB173
Summary: Leading zero in ResultSet.getString() with DOUBLE
Description:
CacheResultSet.getString(int) returns
while
Double.valueOf(".9800000190734863").toString() returns
CacheResultSet.getString() should return the
leading zero so that ResultSet.getString(int) and ResultSet.getDouble(int).toString() agree.
Impact:
Corrects an inconsistency in JDBC numeric conversion.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
Yes |
Category: SQL.ODBC
Platforms: All
DevKey: JCN397
Summary: Changes for WTS (Windows Terminal Server) licensing in ODBC
Description:
WTS license was using too many slots
because there is no IP address for the client to match up with.
This has been corrected.
Impact:
Better license detection for Windows Terminal Server and ODBC.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: SQL.ODBC
Platforms: All
DevKey: JCN402
Summary: Use input buffer length when calculating number of Unicode characters
Description:
Caché did not use the input
length of the multibyte string to calculate the converted
Unicode character length. If the length given fell in the
middle of a multibyte character, that partial character would
not be added to the length of the calculated Unicode characters.
This no longer happens.
Impact:
Better UNICODE support for ODBC.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: MIT251
Summary: An IN clause with one parameter causes multiple CachedQuery entries
Description:
In case of: ... IN (<const>), processing of this
construct was changed to replace the constant with a
"?" even though normally a constant in parentheses prevents this. If
the user really doesn't want to replace this constant with "?", then
the user
needs to use one additional pair of parentheses, as in: ... IN ((<const>))
Impact:
Improved query parsing in ODBC client.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: AK571
Summary: Push conditions into UNION subqueries
Description:
WHERE conditions on a FROM-subquery (e.g. with UNION) are now
moved inside the sub-clauses of the query to apply them
at an earlier point in processing.
In the case of UNION, it is moved into each of the UNION's subqueries.
This optimization could save significant amount of processing time by
testing conditions earlier, and also by reducing the size of temp-files
for virtual streams.
The exceptions to this are:
- It is not done for a view on the right side of a LEFT OUTER JOIN, as that
would not be correct.
- It is not applied if the original condition
involves any subqueries.
In the subquery(ies), the conditions are added to the WHERE or to the
HAVING clause, as follows:
- If the subquery has no aggregates, add it to WHERE.
- If the resulting subquery condition includes an aggregate, add it to HAVING.
- Otherwise, if all subquery fields in the condition are listed in the
GROUP BY clause, add it to the WHERE clause.
- Otherwise, add it to HAVING, because conditions on the non-GROUPed fields
may incorrectly affect the result of the aggregates.
Impact:
Most subqueries with UNION now run faster
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Moderate |
Moderate |
Yes |
Yes |
Category: Studio
Platforms: All
DevKey: DVU683
Summary: File -> Open URL gets "Unable to connect" message
Description:
Previously, selecting File followed by Open URL reported an
error in trying to connect as cn_iptcp:127.0.0.1[1972]:csp.
Once you canceled the message, the page opened via URL. This now works properly.
Impact:
Studio is improved.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Studio
Platforms: All
DevKey: DVU685
Summary: Initialize document if default is missing
Description:
Prior to this, if the default document was missing, Studio failed to
correctly initialize the editor. This has been addressed.
Impact:
Studio is improved.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Studio
Platforms: All
DevKey: DVU687
Summary: Support for XML, JS and CCS files
Description:
This change allows JavaScript editing in Studio.
Impact:
Studio now supports editing of XML, JavaScript, and CSS files.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
Yes |
Category: Studio
Platforms: All
DevKey: DVU688
Summary: Do not lock class if user clicks on inspector's left column
Description:
If the user clicks on left (name) column in
inspector, the class will not be locked. A click on the right column
is considered to be editing and the class will be locked.
Impact:
Studio is improved.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Studio
Platforms: All
DevKey: DVU689
Summary: Make connection string compliance case insensitive
Description:
Studio now checks for previously known connections
in a
case-insensitive manner.
Impact:
Studio is improved.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
Yes |
Category: Studio
Platforms: All
DevKey: DVU717
Summary: Issues with 'Windows' window in Studio
Description:
A number of minor changes were made to the handling of the
"Windows" window to improve usability, file selection, document
switching and so on.
Impact:
Studio is improved.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Studio
Platforms: All
DevKey: DVU735
Summary: Rename "Project" window to "Workspace"
Description:
The window title has been renamed and the View->
menu selection has also been changed accordingly.
Impact:
Studio is improved.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: System
Platforms: All
DevKey: CDS392
Summary: HALT command within $ZTRAP will execute $HALT routine
Description:
Prior to this change, the $ZTRAP frame unwinding
code incorrectly stopped before discovering the $HALT frame. Now the
$HALT code is executed.
Impact:
Improved handling of shutdown when errors occur.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: System
Platforms: All
DevKey: CDS403
Summary: Address issues with auto recompile
Description:
Under some circumstances,
running a set of routines from an older version of
Caché that require automatic recompilation will
result in a <SYSTEM> error. This change
corrects the error and allows the routines to
run normally after they are automatically recompiled.
Impact:
Removed an unnecessary upgrade error.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: System
Platforms: All
DevKey: CDS415
Summary: Prevent <SYNTAX> error in $TEXT()
Description:
$TEXT(label^routine) could give
a <SYNTAX> error in a system with too few
routine buffers, or when it appeared in a
routine in an older database that
is using the auto-recompile feature to
upgrade the old object code at the
time the routine is executed. With this change,
the error no
longer happens.
Impact:
Improved reliability when using $TEXT().
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: System
Platforms: All
DevKey: CDS418
Summary: Avoid invalid NEW frame following a <STORE> error
Description:
If a <STORE> error happened
while executing a NEW command, an access violation
could happen during the subsequent error processing.
This no longer occurs in this situation.
Impact:
Improved reliability.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: System
Platforms: All
DevKey: JO1705
Summary: Ignore partial Write Image Journal (SFFORCEIMJ flag) and always use "full" mode
Description:
The setting of the Write Image Journal Mode
parameter in the Configuration Manager's Advanced tab,
Journal section, is now ignored.
Partial Write Image Journal mode is no longer supported.
All systems run as if this
were set to "All". This was the default so this should not
be a change for most, if not all, systems.
The issue with "Partial" mode is that while a failed
write will not cause database degradation, we cannot guarantee
that all of a block (such as all 8192 or 2048 bytes) will be
written to disk if the system fails while the write is in progress.
If only part of the block is written to disk then there will
be degradation when the system is restarted.
Impact:
Improved availability and integrity following a crisis.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: System
Platforms: All
DevKey: JO1706
Summary: Caché generates a console log entry
with an error when it sets wdstop
Description:
If Caché freezes because some process
encounters an error (such as a <FILEFULL>) in the
middle of a multiblock global operation, a console log message will
be generated that looks like:
Suspending system due to <FILEFULL> error.
Impact:
Improved error detection and logging.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: System
Platforms: All
DevKey: JO1708
Summary: Automatically raise maximum
database size to prevent a <FILEFULL> from hanging the system
Description:
Caché will no longer freeze the system
due to a <FILEFULL> error when the error occurs
because a database has reached its maximum size.
There are three situations in which case
a <FILEFULL> can still result in freezing the system:
- The filesystem is full and the database
cannot be expanded
- There is a special situation
involving 2-KB databases where there are insufficient
incremental backup bitmap blocks to support a larger maximum
size. The maximum size of a database can be increased by a
minimum of 128MB and a maximum of 255MB without requiring
additional bitmap blocks so in practice this should not be an
issue. If the system cannot automatically raise the maximum
size this may result in a <FILEFULL> suspending the system.
- The database has reaches its maximum
allowed size. For an 8-KB database this is 32TB and for a 2-KB
database this is 16GB.
Once a database has been marked as FULL it
remains marked full until either the maximum size is modified
with MSU or a significant number of blocks are freed by killing
globals. A significant number
is defined as 12% of the total size of the database or 10MB,
whichever is smaller.
Adding an additional volume set member "counts" as
modifying the maximum size of the database. Restarting the system,
dismounting and remounting a database and restoring an incremental
backup to the database will also remove the indication that it is full.
Certain Caché systems such as journal restore
during startup and transaction rollback make use of this
facility to prevent <FILEFULL> errors while they are running.
This means that these systems are allowed to expand a database
by as much as is needed to complete their work. In the past
if a <FILEFULL> in a database which was being journaled
froze the system, it would be very hard to bring the system back
up as the startup code would often freeze the system again when
it attempted to restore the pending journal entries.
This will no longer occur.
Impact:
Improved reliability and recovery.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Moderate |
Moderate |
No |
Yes |
Category: System
Platforms: All
DevKey: JO1713
Summary: Update Caché to add to (not replace) the existing write daemon queue
Description:
An issue has been resolved where if
cachetemp is deleted while the system is active, buffers
from other databases queued to be written can be dropped
from the write queue. The result of this is that the system
will not quiesce which means that BACKUPs and SHUTDOWN will
not complete. Additionally when the system is restarted,
there will be database degradation because the blocks which
were dropped from the write queue were never written to disk.
Impact:
The (possibly tragic) consequences of removing CACHETEMP from a live
running system are slightly lessened.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Moderate |
Moderate |
Yes |
No |
Category: System
Platforms: All
DevKey: JO1719
Summary: Address display for 4 digit years
in showdata and test for starting journal file in findfiles
Description:
The display of the journal files which
will be restored for a cluster journal restore has been
changed to prevent lines from wrapping with 4 digit years.
The code that finds the starting place during a cluster
journal restore following a cluster backup restore has
been corrected to work in the case where the journal
files are not in the same place as when the backup was performed.
Impact:
Journal restore is more tolerant of operational changes.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
Yes |
Yes |
Category: System
Platforms: OpenVMS
DevKey: JO1720
Summary: Add access mode so Caché can use the correct exit handler
Description:
The OpenVMS exit handler code has
been changed to avoid logging system service exceptions
in certain circumstances when a Caché process
exits on systems running OpenVMS 7.3-1.
Impact:
Caché can now use the correct exit handler.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
Yes |
No |
Category: System
Platforms: OpenVMS
DevKey: JO1721
Summary: Add code to exit handler to shut down process when its invoked
Description:
The Caché exit handler on OpenVMS
has been updated to simulate a RESJOB if the exit handler
decides not to exit. This generally relates only to batch
jobs which are terminated with delete/entry.
Impact:
Improved control over process shutdown.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
Yes |
Category: System
Platforms: All
DevKey: JO1722
Summary: Correct string stack discipline in Caché
Description:
An issue with transaction rollback has been resolved.
This involved kills when the old data was a large string
(such as 32KB). Previously, this could generate
a <STRINGSTACK> error which could result in a system
freeze. This was most often seen rolling back a transaction
which involved saving a binary stream in a Caché object.
Impact:
Avoids a system hang.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
Yes |
No |
Category: System
Platforms: All
DevKey: RFD078
Summary: Address system interruption from starting PATROL after %MONLBL is started/stopped
Description:
This change addresses a process interruption which can occur if the Patrol server is started after starting and stopping the ^%MONLBL monitor.
Impact:
Improve reliability with BMC Patrol
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: System
Platforms: All
DevKey: RFD079
Summary: Add performance warning to ^%MONLBL
Description:
This change adds warning text to the
beginning of ^%MONLBL to notify users of the impact its use will have on system performance.
Impact:
Improved message reliability.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
Yes |
Category: System
Platforms: All
DevKey: RFD080
Summary: Address possible access violations from interaction of ^%MONLBL and ^PERFMON
Description:
This change addresses a potential access violation which can occur when the performance monitor (^PERFMON or $SYSTEM.Monitor) is used after the line-by-line monitor (
^%MONLBL).
Impact:
Resolved a system hang.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: System
Platforms: All
DevKey: SJ1412
Summary: Address issue with journaling $BIT sets
Description:
This change addresses some cases where a $BIT set might not get journaled correctly.
Impact:
Improved journaling accuracy.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Moderate |
Low |
No |
No |
Category: System
Platforms: All
DevKey: SML368
Summary: Pass smaller convert count to client if necessary to improve network lock fairness.
Description:
This optimizes the lock conversion algorithm
to favor the parent locks over child locks.
Impact:
Improved lock performance and decreased contention.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
Yes |
Yes |
Category: System
Platforms: All
DevKey: SML369
Summary: Prevent cluster slave job's $INCR blocking ENQ10 or ENQ13 on backup operation.
Description:
Without this change, when users do backups on a Caché
Cluster environment,
it may not get the system to be quiesce if there is job on slave nodes waiting for a $INCR answer from master node.
Impact:
Eliminates delays when attempting backups.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
Yes |
No |
Category: System
Platforms: All
DevKey: SML370
Summary: Prevent DDP Daemon crash over DCP cluster connection when the cluster DCP connection is down.
Description:
This addressed an issue for DCP clusters. When a
DSM/MSM system locked a global in clustered database on a slave node, and when
the DCP connection to the master was down, then the DDP daemon on the slave node
could get an access violation interruption.
Impact:
Improved system reliability in the presence of
network errors.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: System
Platforms: All
DevKey: SML374
Summary: Journal $INCR on ECP server if in transaction.
Description:
For $INCR on ECP, without this change the $INCR
won't be journaled on ECP server when it is in a transaction. It now
works as DCP did.
Impact:
Resolved residual journal omission.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: System
Platforms: All
DevKey: SML376
Summary: Address possible stranded lock in DELOCK_NEED state.
Description:
This addressed a possible stranded lock in
DELOCK_NEED state on DCP client after a DCP connection is re-established.
Impact:
Improved recoverability.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: System.Cluster Specific
Platforms: All
DevKey: JO1703
Summary: Track which system set a
switch in a cluster so we can clear it during failover
Description:
The Caché cluster code contains a
facility to set a switch (such as the switches manipulated
by the SWSET utility) cluster wide. In the past the
cluster members did not track which of the other members
asked it to set a switch so that if the cluster member
which set the switch failed, the cluster would end up
with the switch set until it was cleared manually.
Now the cluster tracks which member told it to set a
particular switch and if those switches are automatically
cleared during cluster failover. This is mostly of interest
when a cluster member running BACKUP failed as this could
result in switch 13 being left set after cluster failover completed.
Impact:
Improved recoverability.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
Yes |
Category: System.I/O
Platforms: All
DevKey: NGA108
Summary: Allow entry into environment when terminal
is held by an abnormally terminated process.
Description:
An issue where processes that terminate abnormally
leave their terminal in the ttyhash table preventing subsequent
login on that terminal device has been corrected. Subsequent
jobs will now successfully login. When this occurs a message
will be logged in the cconsole.log file.
Impact:
Improved resiliency.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
Yes |
Category: System.Journaling
Platforms: All
DevKey: HYY770
Summary: Address an issue with clustered journal
sequence numbers version network server and client
Description:
Addressed a potential issue in a cluster environment
in 5.0.
The scenario leading to the issue involves mixing SETs and
$INCR on the same global on a slave node of the cluster. For example,
Lock +^x
Set ^x=0
If $i(^x)
Set ^x=2
Lock -^x
The issue occurs when you cluster
restore the entries from journal files —
the resulting value of ^x from the restore may be incorrect.
Note: Only applications that mix SETs and $INCR on the same global are affected by the issue.
Impact:
Improved reliability of clustered databases.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: System.Licensing
Platforms: All
DevKey: RJW747
Summary: Un-deprecate $$inquire^LMFCLI
Description:
$$inquire^LMFCLI(server) is restored.
The argument if present is ignored.
It returns lu1;lu2;lu3, where lu1 is purchased
license units in the active key, lu2 is the currently
available license units, and lu3 is the lowest level of available license units.
Impact:
$$inquire^LMFCLI functionality is restored.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
Yes |
No |
Category: System.Shutdown
Platforms: All
DevKey: RJW692
Summary: Cstop.exe on windows encounters Run-time error '62' with UNIX format key
Description:
This change allows start and stop to recognize keys
in either format.
Impact:
Improved reliability of system shutdown.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
No |
Category: Utilities
Platforms: All
DevKey: PWC746
Summary: GBLOCKCOPY translates collation into an subscript-level-mapped destination (such as ROUTINE global)
Description:
An issue was corrected that caused GBLOCKCOPY to
corrupt a global. For the issue to occur,
- the GBLOCKCOPY must be translating the global from one collation
to another, and
- the destination of the GBLOCKCOPY must be a namespace where the
global uses subscript-level mapping.
In particular, this addresses an issue with copying the ^ROUTINE global from an ISM system to a Caché namespace.
Impact:
A possibility for data corruption has been eliminated.
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
Yes |
No |
Category: Utilities
Platforms: All
DevKey: JLC510
Summary: Create /raw mnemonic for %CHARWIN
Description:
/RAW(str) allows %CHARWIN to send arbitrary character sequences to the terminal,
where "str" is an arbitrary string which may contain control characters and
escape sequences. It will be sent directly to the terminal
and will not be retained in the internal buffers. This mnemonic
can potentially change the screen in ways that %CHARWIN will not
detect and this may result in undesirable effects. Therefore it's
the user's responsibility to make sure that its use will not change
the screen.
This mnemonic is intended for special purposes only, like sending
printer information to a terminal emulator.
Impact:
Add "raw" capability to %CHARWIN
| Likelihood |
Risk |
Ad Hoc |
Enhancement |
| Low |
Low |
No |
Yes |