Welcome and thank you for using Caché, the post-relational database.
This document has a section for each 5.0.x maintenance kit:
There is no section for 5.0.6.
InterSystems advises all users to recompile their applications as part
of the upgrade process so as to take advantage of all the performance
improvements as well as other changes that may affect them in this release.
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:
This change adds code to handle the case where the
characters $c(13) and $c(10) occur inside the #server directive.
This change always forces JavaScript conversion of #server arguments
to strings which will always use periods in a decimal number.
Previously, when using the Java applet, #server relied on Java
LiveConnect conversion of a number to a string. Internet Explorer used the current
locale for this conversion (for example, ",", for non-English locales) and Mozilla
used JavaScript conversion (always "."). Now all browsers consistently
use JavaScript conversion.
In prior versions, the logic in DriveListFetch caused the
last item not to be returned. This is fixed.
This fixes a bug that occurred when or'ing two
bitlists, where one was in bit list
format (as opposed to bit map format), and the other one had a shorter
logical length and was all ones and had no body.
This change alters the
optimization which determines the optimal number of open files for
network daemons by eliminating it for OpenVMS. The
optimization addressed a performance problem on NT only and
is not an issue on OpenVMS.
Summary: Added protection to prevent buffer overrun when invalid blocks are viewed across ECP
Applications can only view global directory blocks across ECP, other
blocks may fail or not arrive completely. This change modifies
the view across ECP to protect ECP and application from buffer
overruns.
Summary: Refresh remote class descriptors after ECP failover.
When a remote class is in use and there is an ECP
server failover, sometimes the method invocation fails with an
unexpected remote class recompiled error. This has been corrected.
Sometimes the ECP client read daemon didn't exit on
shutdown.
This is now fixed.
Summary: NWDS (Net Wide Domain Server) activation to preserve ECP client sessions
This changes the NWDS master to preserve ECP client configuration after master
reactivation. Without this fix any reference to a remote DB via ECP
may cause an access violation.
Activate did not properly discriminate between
interface-based and enumerated user-defined types. This led to access
violations when attempting to use some ActiveX Objects. The situation has been
corrected to treat these types appropriately.
Note: This fix has
introduced a backwards incompatibility for *some* ActiveX objects. Use
of the generated classes remains the same so it is not necessary for
users to update their applications per se, but to ensure continued
proper operation, existing users of Activate should re-import their
classes using the Activate wizard.
Additionally, to help identify those ActiveX objects which cannot be
handled by Activate, the classes %Activate.SafeArray and
%Activate.UserDefined (which are subclasses of %Activate.Unsupported)
have been introduced. Those ActiveX objects that have method/property
parameters or return values of these types are not supported.
Some classes have recursive references that allow simple structures
such as linked lists to be represented. Under some circumstances, a relatively small number of
objects that are linked can cause a
<FRAMESTACK> error when triggers fire during a save if all objects have been swizzled. A
change has been made to %Save() that recognizes simple recursive
references and chooses a different mechanism for including each
swizzled reference to the save set.
Summary: If an error occurs when importing an XML class definition, keep the old class
This change, originally introduced in Caché 5.0.17, had issues related
to importing OBJ code stored in an XML file. These have been addressed.
Summary: Fix infinite loop when a recursive reference cycle is encountered during save
Some object references result in a circularly linked list. This
structure caused an infinite loop. This change detects that situation
and prevents the loop.
This change adds an OutputTypeAttribute property to
%SOAP.WSDL.Reader class. If OutputTypeAttribute = 1 when the Process
method is called, then the OUTPUTTYPEATTRIBUTE will be added to the
Web Client which is created.
The variable, %msg, is now set to the error text when an ID counter
validation check failure occurs. This makes object behavior consistent with SQL error reporting.
An error was fixed where an <INVALIDOREF> error is
reported when a property that originates in a superclass is
subsequently inherited from a different superclass.
%BuildIndices and %PurgeIndices is now supported for
classes using %CacheSQLStorage. Previously these methods were only
implemented for classes using %CacheStorage. %CustomStorage does not
implement these methods.
Note: This change does not solve the problem of user-initiated
transactions and rollbacks, only update failures due to non-existent
objects.
If the idkey definition includes the parent reference then, with this
change, it will not
be automatically added to the idkey by the class compiler.
Summary:
Address infinite loop in %AddToSaveSet when saving an object containing a reference to a self-referencing object
Previously, it was possible for an infinite loop to occur when saving an object that contained a reference to a self-referencing object (also known as a reflexive object); this loop occurred in %AddToSaveSet. This has been addressed.
A recursive class is a class that has a property whose type is that same class. A recursive object is an instance of a recursive class such that one instance of the recursive class has reference to another instance. A self-referencing or reflexive object is a special type of recursive object — one that has a reference to itself.
Prior to this change, if a stream is saved as part of a transaction, and
the transaction is rolled back because another object in this
transaction failed to save, the stream was not rolling back its
internal state and so would lose the stream data. This is now fixed.
Summary: Add option to always include xsi:type attribute for elements output for a class
Summary: Improvements to handling $Piece maps with Overridden DataAccess expressions
A problem has been fixed where a table that could
not generate filing code due to a non-filable %CacheSQLStorage mapping
might get a <NULL VALUE> error during the compilation of the
table.
A correction has been made to the SQL Manager. If
TuneTable was invoked from SQL Manager and ended up with a very small
Selectivity, first 5 decimal places all 0, the SQL Manager would file
the wrong value.
A previous change (AND453) made parameter resetting impossible. This caused issues when
SQLExecDirect was called. Hence, the behavior has been reversed, so that Caché now pays
attention to user-supplied parameter types.
This change corrects a problem that occurs in child table when the
parent table rowid has
more than 10 physical components, for example, more than 10 generations
of parents/grandparents. This problem exists in all versions of the product.
might not update any rows due to concurrency issues if multiple
processes where attempting the update at the same time.
This change, originally introduced in Caché 5.0.17, had issues related
to importing OBJ code stored in an XML file. These have been addressed.
If a routine being debugged by one process is updated by another process,
the system could attempt to use an invalid address to resume execution in the debugger.
This gives invalid results or an access violation for the process
being debugged. The situation is now corrected.
The ECP client sends its connection name to the
server. Currently the name is
If the cli sys name is too long it will not prevent ECP from recovery,
(The server identifies the connection by the connection name + the
client GUID). Also, the server entry in the control panel will have
the connection name followed by the host name; it makes the connection
name be more useable since most sites are configuring multiple
connections to the same server.
Summary: ECP client to display the connected host IP.
This change adds a console log msg with the destination host IP
when an ECP client establishes a connection
Summary: TCP read to honor PSW2OLDTCPXY switch.
This change makes TCP disable x/y calculation when a process's $zu(68,55,1) switch is set.
A rare problem which can result in memory exceptions
has been resolved. The problem is most likely to be seen in
application which reference more than 8 namespaces (often) or rarely
when the system reloads the namespace configuration.
This fixes a problem on the import side of
$zobjexport when using function 13 and UTF8.
If the source of cluster shadowing has a
CACHEJRN.LOG whose last entry for a particular cluster system number
is a journal file that doesn't exist, a message like the following
message would be logged repeatedly to the cconsole.log:
The most common reason for this situation would be if a former member
of a cluster has been removed from the cluster. With this correction,
the message will be logged only once.
Corrects a problem where shadow processes would consume excessive cpu
on client systems because of excessive polling. This problem was most
evident on AIX.
Addressed an issue where running journal utilities (such as JRNDUMP or JRNINFO) might
result in an access violation (accvio) or a core dump in some circumstances.
It affected mainly clustered Caché systems.
it will eventually hang.
Summary: Handle unlock locks to more than 8 different remote servers.
This change addresses a concurrency issue in cluster
shadow that could cause an
<ACCVIO> error.
This change corrects a problem in 5.0.13 and later where, under
some rare circumstances, shadow processes might terminate unexpectedly
for no obvious reason (i.e., no error message indicating what went
wrong).
A problem that could cause the shadow set/kill process to get a
<DIRECTORY> error during namespace reactivation has been corrected.
The error had caused shadow dejournaling to stop on the shadow
client.
This fixes a problem using REPAIR to allocate and
free blocks in a map. The problem occurs if the database has more
than one map and the block number is not in the first map.
An issue was introduced with Caché 5.0.17 where the free space calculations
of the %FREECNT utility and the Caché Control Panel's Local Databases display
caused all free block values to be displayed as zero. This has been corrected.
InterSystems advises all users to recompile their applications as part
of the upgrade process so as to take advantage of all the performance
improvements as well as other changes that may affect them in this release.
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:
Summary: Cstat shows a dead process as alive if Windows has reused the process id
This change corrects a situation where, under
certain circumstances, an attempt to send a broadcast message to all
mailboxes could result in an access violation error.
A correction has been made
for the situation where an object ID based on a
simple integer property might be inappropriately detected as modified
when set to itself. For example, 'set obj.Prop=6' would report the
object as modified when the original value of obj.Prop had previously been
6.
Summary: If an error occurs when importing an XML class definition, keep the old class
Prior to this change,
if you had a class on your system, and
then an attempt to import another version of that class failed,
Caché would delete the existing class.
Now it correctly leaves the existing class present if there during import.
A prior change discarded the value of the EXTENTSIZE
parameter when loading a class from XML or CDL. This change reverses
that. If you are replacing an existing class with
XML or CDL that does NOT contain EXTENTSIZE
the EXTENTSIZE of the replaced class will be retained.
A new configuration option now makes it possible to
validate system-assigned ID values for new instances of objects.
The option is activated by
During SQL INSERT, if the SQL filer needs to start a
transaction, the transaction will now start earlier in the filer than
it used to. The transaction will now start before any default values
are assigned, including the $Increment(^glo) default value of the
RowID field (if applicable). This allows the $Increment of any
globals in default values to be recorded in the journal file.
The default file parameters when sending the output of %r to a file are now "WNS".
A problem has been corrected where under certain
rare circumstances the same cached query routine could be associated
with
and invoked by
two different SQL statements.
Summary: Join condition following IN type condition on each of its operands produces wrong result
The Studio COS parser now colors legacy list
functions: $ZLENGTH, $ZLIST, $ZELEMENT, and $ZSUBLIST.
Added Tools->Source Control->Add to the Source
Control menu item which will cause to add the active document to source
control.
A previous change introduced support for the new
#[]# syntax, which allows ObjectScript commands to be embedded.
This adds it to the &html(...) processor.
In prior versions, importing a routine from Studio was not working
correctly because Studio lost the extension type of the item it had
imported. The item would be imported correctly but it would not get
compiled. This is now fixed.
This change fixes a problem importing and compiling
a BAS routine.
It also improves support for importing large
numbers of items into Studio.
Summary: Allow open dialog to respond faster in namespace with huge numbers of routines
The Studio Open dialog displays items sorted case
insensitively.
When a user opens up a namespace with a huge number of
routines, Studio must scan the whole list to find the correct order to
place these routines in. This can cause delays when there are hundreds
of thousands of routines in a namespace. In order to allow these
namespaces to be usable you can now set a flag:
This will force Studio in this namespace to work in a case insensitive
manner which allows it to list the items as they are found rather
than having to sort them all first. The routines are
all listed at the root level rather than the standard approach which
is the list routines from a class compile along with that class.
This change modifies the import/export functions so that they will
also call the source control hooks when a user imports items.
This permits
the source control hooks to export them to a
source control system.
When a process has set $HALT, it should be effective only for normal
process termination. This fix corrects a problem that caused the system
to attempt to locate and run the $HALT routine in situations such as RESJOB
and system errors when the process should be halted immediately without
attempting the $HALT.
The %STACK debugger utility could display unprintable characters if the
routine object code is modified while the routine is being debugged.
This is no longer the case.
If a routine sets $HALT to an entry point in a different routine, and the
halt trap returns back to the original routine because of a QUIT command
or a trapped error, the original routine context is not restored correctly.
Prior to this change, this situation could
cause invalid execution results or memory access violations.
A memory access violation could occur during error processing if there was
an unexpected additional error while trying to read the routine source.
With this fix, the system will continue without providing source information
about the original error.
This changes corrects a rare problem where Caché may get
suspended in a system function while holding database blocks under a lock.
A problem which could cause an exception (core file,
dump file, etc) where an <EDITED> error should have been
generated has been resolved. This involved cases where the program is
returning after evaluating the result of an indirection that involved
invoking another routine and the routine it is returning to has been
recompiled. An example of where this could occur is a reference of the
form:
where $$ent goes off to another routine which causes the calling routine to be recompiled.
This fixes possible access violations during
shutdown in situations where the process table has been expanding.
This is on Windows only.
This correct a problem in $zobjexport with
exporting long strings in a Unicode encoding.
Allow users to select "0" process count for less overhead in collection.
This change corrects issues with interactions between ^PATROL and
^PERFMON (MONITOR), and also removes unnecessary overhead (STATISTICS resource
locking) when running PATROL.
This change adds ECP operations to the MONITOR
(i.e. ^PERFMON and $System.Monitor) network
statistics.
This change displays the
correct client name for server statistics in MONITOR.
ECP shows the name of client, as opposed to the address for DCP statistics.
This change corrects network MONITOR statistics, including proper display of ECP and DCP node names.
This change adds all network related counters (total
requests, cache hits/misses for client, etc.) to the ECP MONITOR
metrics.
They now parallel DCP metrics.
This corrects a situation where, on Windows XP after the Control Process has
crashed,
the system can not be cleanly halted, even by cforce.
A process performing %SS or any mailbox send may
hang forever if the destination process has gotten in a state where
the mailbox lock is permanently held.
With this change, the calling process will exit the mailbox code after
trying and failing to get the mailbox lock 10 times (total wait of 1
second).
This corrects a situation where,
if you change the priority of one process other than
the current one, using $SYSTEM.Util.SetPrio(prio, processid), then all
process priorities may be changed by the same amount.
This will not happen if the current process priority is changed, using
^PRIO or $system.Util.SetPrio(n).
This corrects a problem where a fault could occur
during use of the $VIEW function to view data in the process partition.
This change adds a new daemon called the 'Clean
Daemon' (CLNDMN). This daemon wakes up every 10 minutes to scan the system
pid table to see if any dead jobs are pending. It will reclaim any dead job
pid slot it finds. This daemon takes over the duty used to be
done by Control Daemon.
This change fixes a potential problem on 64-bit platforms where trying
to load a user DLL or shared library via $ZF(-4)/$ZF(-5) might result in an error
depending on previous memory allocations.
Summary: Add an option to ignore default journal directories during journal restore
Note that there must be at least one entry on the directory search list
or
Caché will issue a warning:
unless one hits Ctrl-C to abort journal restore.
To avoid accidental deletion of a sequential file due to incorrect
keyword syntax specification in the OPEN command, this change nows
causes a syntax error to be reported if there is a "/" (slash) anywhere in the mode
parameter string (the first positional device parameter).
Summary: In %Buttons, do not delete cstat output file(s) if not appended to the HTML report
In calculating free space, this change causes
Caché to examine secondary map blocks first to
determine which maps are full maps. This avoids the need to read in
those blocks for maps that are known to be full.
This change allows
$$RebuildIndex^%R(impliednamespacereference) to work correctly.
Prior to this, it would return an error.
This changes corrects errors in looking at the bitmaps on big-endian databases.
If KeepAlive is used, a 'content length' header field must be
supplied. If the response header generated by the application
indicates that KeepAlive should be used but does not contain a
'content length', WebLink will automatically buffer the response
content, determine its size, and insert the length header before
dispatching the whole response to the client.
InterSystems advises all users to recompile their applications as part
of the upgrade process so as to take advantage of all the performance
improvements as well as other changes that may affect them in this release.
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:
Summary: Fix a race condition in the UNIX Apache API modules that resulted in the Gateway configuration not being correctly read and initialized.
This changes fixes a race condition in the
initialization procedures for the UNIX Apache API modules
which could result in
the Gateway not correctly reading and initializing its configuration.
Summary: Fix a problem that resulted in the PATH_INFO CGI environment variable not being correctly set for Apache-based installations.
This build fixes a problem that resulted in the
PATH_INFO CGI environment variable not being correctly set for
Apache-based installations.
InterSystems recommends that configurations should not use period
characters (.) in the paths.
This change makes CSP pages used for studio
templates compliant with HTML 4.0.
This corrects a problem where incorrect code
was being generated under certain circumstances for expression
involving the EQV, IMP, and XOR operators.
This fixes a bug in the CacheBasic XOR and EQV
operators where they were being handled as bitwise and not logical
operators.
Summary: Init "Language" section of .cpf before SuperServer startup.
During startup, before finishing system
initialization, ECP connections are accepted to be recovered. If the
ECP client connection is accepted before the initialization is
complete, the ECP daemons are started with incorrectly enabled
NullSubscripts values.
This change enables clean up of temporary stream
globals in %Dictionary classes; an %OnClose() method calls the Clear()
method for each stream property.
Early incarnations of OLE objects in Caché defined properties
as variables in the type library. This technique is almost obsolete
and as such the Activate Wizard (type library reader) did not
recognize them. The reader has been updated to recognize these
variables as properties.
This change corrects an error where multi-level
dependencies among classes where not detected by the class compiler.
The compiler now correcting interprets the dependencies and compiles
all the affected classes/
Summary: Strip trailing zeroes after the decimal point in %TimeStamp normalization
This corrects a problem where trailing zeroes after
fractional parts of seconds prevented correct comparison for
%Timestamp values.
Change the SOAP web client (SOAP.DemoProxy) and web
service (SOAP.Demo) samples in the SAMPLES namespace to be
instantiable, i. e. to use Methods instead of ClassMethods.
Summary: Fix bug in returning application SOAP faults from web service.
This fix corrects an issue where
the ReturnFault method of web service was not properly
preventing creation of SOAP body after a fault was generated.
This change causes .NET to escape the URL in the SOAPACTION header that is
sent to a web service. For example, "%Studio" becomes "%25Studio". We
need to URL unescape the SOAPACTION when it is received.
Soap:binding element is specified by WSDL schema to
be the first element contained in the wsdl:binding element. However, JAX makes
it last. This change adjusts the WSDL reader to handle this difference.
Errors during web method execution were not returned
correctly in HTTP test page. This is now fixed.
Summary: Add sample web method to SOAP.Demo sample that shows return of list of objects
This change adds a GetListByName query to SOAP.Demo
which returns a query result as a list of objects.
This corrects the message returned to the SOAP web client when the message
contains an empty body.
method of %SOAP.WebClient.
Summary: %SOAP.WebService and %SOAP.WebClient no longer have persistent properties
Normally web clients (subclasses of %Web.Client) and
web services (%SOAP.WebService) should not be made persistent. In the
rare case when they are, the properties of the base SOAP classes
should be transient. This change implements that position.
%XML.DataSet generated schema must include
elementFormDefault="qualified" which it did not previously. Microsoft
.NET 1.0 did not catch this problem. .NET 1.1 does catch the problem
and no data was loaded for typed datasets. This has been corrected in
Caché.
Summary: Support %XML.DataSet as either input argument or return value or web service or client
The XML Schema Wizard and the SOAP Client Wizard no
longer add the XMLNAME parameter to datatype classes. The XMLNAME
parameter on the datatype class was being treated as a property
parameter and thus incorrectly overriding the property name.
Now a dummy type is created for SOAP encoded array if no
arrayType attribute is defined. This changes the name of the dummy
type to UndefinedSoapArrayType to make the problem easier to
spot.
Summary: Various extensions and fixups of SOAP Client Wizard.
Summary: Multiple <s:simpleType> occurrences are generated within a WSDL of a service using a custom datatype
Summary: Make web service generator methods not ProcedureBlock to allow splitting
Large methods generated for %SOAP.WebService are marked as ProcedureBlock by
default and thus cannot be split.
Summary: Long clean up after XMLExport.
Cache now unswizzles each list or array of persistent objects after it is
exported via XMLExport with literal format.
This change makes Caché ignore the result tag prefix/namespace in a SOAP
response message because all external web services are not consistent
in usage for this tag especially for RPC documents.
Summary: Allow SOAP web method arguments to be marked as required.
This correction allows XMLIGNORENULL specified in a SOAP class already
to influence the SOAP messages used for each web method. See
%XML.Adaptor for behavior of XMLIGNORENULL. However, XMLIGNORENULL
did not appear in the inherited class parameter list for SOAP classes.
It will now appear as an inherited parameter.
This change corrects problems in our support of a schema which does
not have a targetNamespace attribute that is contained in a
WSDL.
This change allows XMLPATTERN property parameter for properties
within XML enabled classes. XMLPATTERN is generated by the XML Schema
Wizard for the pattern facet within XML schemas. The XMLPATTERN
parameter just documents the pattern facet and is not implemented in
Caché.
This change adds an option to the SOAP Client Wizard to make the
created classes (except for the client itself) registered, persistent
or serial. This is implemented by adding a MakeSerial property to
%XML.Utils.SchemaReader and %SOAP.WSDL.Reader.
With this addition, the RPC/literal WSDL created by Axis will use the
parameter as the input and output of a message. However, the types
are different. Caché treats the output parameter as the return value of the
web method.
The SOAP client was opening the response stream
twice. This still worked, but was fixed to get a slight performance
improvement.
This change allows the input XML dataset format that
has only diffgram element with no child elements and interprets this
to be a dataset with no rows.
This change adds support for the %BuildIndices and
%PurgeIndices
methods in
classes using %CacheSQLStorage. Previously these methods were only
implemented for classes using %CacheStorage. %CustomStorage does not
implement these methods.
While the SAX parser makes sure that callbacks to
content handler methods do not contain character strings longer than
32k, the %XML.SAX.Utils.Sequencer was attempting to put 32k of Unicode
characters into a $List. $List only supports 16k of
Unicode characters so <MAXSTRING> could be encountered. This
has been corrected.
Summary: Fix XML schema wizard not to reduce a collection that references a collection
XML schema wizard was incorrectly combining a class
that contained only a collection with a referencing collection
property. This reduction is no longer done.
If an element has an unexpected (invalid in this
context) type specified using xsi:type, then give a clear, unique
error message.
It
returns an error %Status if the result string > 32K.
Summary: %XML.DataSet has INVALID OREF error when executing %Resultset functionality
This change adds the OpenURL(url,...) method to
%XML.Reader class. The input XML document is specified by a
URL.
Summary: Fix bug: XML Schema wizard does not display non-ascii characters correctly when displaying schema source
This change modifies the XML Schema wizard and SOAP
Client Wizard to handle XML document that is encoded in other than
utf-8.
to classes created for inline elements so that they are not used as
subclasses for choice list or types. This parameter does not
need to be generated for direct subclasses of %XML.Adaptor,
%RegisteredObject, %SerialObject or %Persistent.
With this change, the complete set of built-in schema types is now
supported, since a few missing ones have been added. These additional
types all map to %String.
The change fixes a compile error in XML enabled classes when
XMLCHOICELIST property parameter is used with one of the classes in
the list being a subclass of another class in the list.
This writes arbitrary text in the XML document without any escaping being
done. This method can be used in any part of the XML document where
Text is the character data to output and is of type of %String or
%CharacterStream.
This encodes the specified binary bytes as base64 and writes out the resulting text.
This method encodes the specified binary bytes as binhex and writes out the resulting text.
This method writes out its argument as a comment <!--...--> containing the specified text.
This methods Writes the DOCTYPE declaration with the specified name and optional attributes.
This method writes out a processing instruction with a space between
the name and text as follows: <?name text?>.
This change add an error check for the case of an incomplete form loaded on
namespaces page. This fixes an issue that has only appeared for the OpenVMS
web server.
In XML Schema wizard and SOAP client wizard, this
change improves
support for maxOccurs="unbounded" in sequence or choice element. The
maxOccurs="unbounded" will be pushed onto any contained element tags
and will override the maxOccurs specification for the contained
element. This extended support is correct for sequence or choice
that contains exactly one element -- a fairly common case.
When XMLExport is outputting an array of objects or
list of objects property as an ID or OID (XMLREFERNCE="ID" OR "OID"),
the generated code uses GetNext to loop over the objects which causes
unnecessary swizzling. This change uses GetObjectNext for the
loop.
Summary: In XML schema and SOAP client wizard, cleanup unused classes created for %XML.String properties
Previously an unused class named "mix" was also being created for the
complexType in the mix property. This class is totally unnecessary
and is no longer created.
The Soap Client Wizard and the XML Schema Wizard
will now recognize the proprietary Microsoft .NET dataset
representation in XML schemas. These will be mapped to %XML.DataSet
for untyped datasets or a subclass of %XML.DataSet for typed
datasets.
Summary: Can't generate class with element name start with underscore and number in XML Schema Wizard
If property name or class name begins with a digit
after removing leading _, then this changes appends "X" to the name. For example,
XML name _-1a becomes Caché name X1a.
When importing XML data in %XML.DataSet, IsValid
does not need to be called to check the logical value since only
datatype classes in which the XSDToLogical method generates a valid
logical value are used. This change removes the call.
Summary: Change %XML.Writer default to not add XML declaration for strings and character streams
After this change, if the NoXMLDeclaration property of %XML.Writer is 1
(true), then the XML declaration will not be written. The default is
to write the XML declaration unless the Charset property is not
specified and the output is directed to a string or character stream
in which case no XML declaration is written.
This corrects an error where maxOccurs was being ignored for
sequence or choice schema element that was the immediate child of a
complexType schema element.
Summary: Generate correct class for mixed complex type that contains an attribute
If an element definition has an inline complexType
with mixed="true" that contains an attribute, Caché now generates the
correct class for the complex type.
This change causes Caché to use relative
font-size values for XML Schema Wizard, SOAP Client Wizard and New Web
Service Wizard.
This change corrects an error that occurs When
property names in a relationship are reduced to 31 characters. It also
reduces the Inverse attribute of the relationship property.
On XML import, Caché now allows either SOAP encoding format for
arrays (includes arrayType attribute) or literal format. This change
also effects input of SOAP requests by a web service or input of a
SOAP response by a web client.
This change fixes the XMLExport and XMLImport methods of %XML.DataSet
(and it's subclasses) so that export of an imported dataset works properly.
This problem arises in SOAP web service that is attempting to return
an %XML.DataSet that was retrieved using a web client.
This change adds a SQL feature (..Features("SQL")="") to
%XML.Utils.SchemaReader to have columns displayed in the same order as
properties in Studio. The same feature is also added to the Schema
wizard.
This change corrects problems in validation and conversion from XML for %Float,
%xsd.float and %xsd.double to handle values close to 0.
Summary: Fix bug: <ILLEGAL VALUE> when %XML.Writer.Charset="Windows-1251" on 8-bit Caché
This change eliminates an <ILLEGAL VALUE> error
when the Charset
property of %XML.Writer is set to a charset that does not have the
corresponding translate table loaded. %XML.Writer will now return a
%Status error from the first output to the document.
Summary: Typed .NET format datasets come up as %XML.String when schema is imported via Schema Wizard
This change fixes the XML Schema Wizard to use
the underlying support for creating typed datasets as subclass of %XML.DataSet.
This change allows the support XMLExport of calculated properties with XMLPROJECTION="content".
This change installs improved error return checking
from the Write method of stream,
since this can fail because of file permission issues.
Use of the href attribute has special meaning for
SOAP encoded format XML document. Fix literal format XML support to
allow href attribute to correctly map to
This change adds a new "No Sequence Check" feature
to the XML Schema
Wizard which forces XMLSEQUENCE parameter in generated classes to
always have value of 0. The purpose of this feature is to deal with
some situations in which the customer's XML file does not have
elements in the same order as the XML schema.
This change exports %Status type properties using base64
encoding, since value is binary and can thus include octets that are
not valid characters in XML.
If a subclass of %RegisteredObject has file streams
that are created by %XML.Reader on XML import, then these streams were
not being deleted when the object is deleted. This change corrects
that issue and
the streams are deleted.
Summary: Gunlock2 syntax error with No Subscript class.
If you have a class that has CacheSQLStorage and no
subscripts, Caché would generate an incorrect line of code in the gunlock2
procedure of the Table routine. This is now fixed.
Users are cautioned to build/purge indices only when no one else is
performing inserts, updates, or deletes, on the table.
A problem has been fixed where a class with a single field IDKEY/PRINARY KEY index like:
was not projected to ODBC/JDBC as a unique index when using the SQLStatistics catalog query.
Summary: Undefined in Trigger Code trying to read a {Name} variable not used in dynamic query
A problem has been fixed where a {Field} referenced
in an INSERT trigger, but not in an UPDATE or DELETE trigger resulted in
an <UNDEFINED> error upon insert, if a value was not specified
for the field.
A problem has been fixed where the SQL UPDATE of a
serial sub-field value from a non-NULL to a NULL value might not file
properly.
Summary: Don't generate setting of default value in SQL filer for virtual computed fields
A correction has been made to the SQL Manager. If
you ran TuneTable from SQL Manager and ended up with a vary small
Selectivity, first 5 decimal places all 0, the SQL Manager would file
the wrong value.
This change corrects a regression in functionality
that prevented the JDBC parser from recognizing intrinsic functions.
It now allows the first character of an identifier to be '$', and
accepts '$' and '^' as possible values for subsequent characters.
Summary: Correct handling of Japanese full-width space character in JDBC preparser
Japanese full-width space character "\u3000"($c(12288)) was not recognized by JDBC preparser. This is now fixed and it is treated as any other whitespace.
This change fixes a problem where a query with an id
field was referenced in the case of an aliased external table.
Support for CAST and TODATE was added for external
tables with this change.
Binding a Character Stream to a parameter and
inserting it into Caché would fail on Streams >32K. We do handle
large character streams if they are inserted using SQLPutData, which
sends them in smaller chunks. This now works in both cases.
Summary: Fix for SQLGetData with 0 buffer size, to return length of data to convert
VBScript used in an HTML document would make two
calls to SQLGetData on the same column. The first call had a buffer
length of zero, with the intent of getting back from SQLGetData the
length of the buffer needed after converting the data. This is important for
Character conversion and possibly retrieving binary data types.
This change fixed a problem where a query specifying DESC sort on the ID would
sometimes return the results in ASCending order when a multi-index
access path is used.
When using UNIQUE keys to determine whether a field is functionally
determined by a set of fields for DISTINCT purposes, Caché now ignores
UNIQUE keys that have NULLable (not required) fields, since in the
DISTINCT semantics all NULLs are one NULL, while for UNIQUE semantics
each NULL is different (so DISTINCT requires a stronger dependency).
This change fixed a problem with a %ID or IDKEY field that has an IN condition and an
ORDER BY DESC .
This changes fixes the Back button to return to previous screen in XML Schema wizard.
This change causes Caché to ignore empty
lines and check method names in method name text area of Web Service
Wizard
Summary: Schema Wizard cannot read xsd file from directory which contains non-ascii character
This change fixes the XML Schema wizard and SOAP
Client Wizard to correctly display files with paths that have Unicode
characters that are not in the ISO-8859-1 charset.
When $ZTRAP is set to a non-empty value, it will now
take precedence over any
existing $ETRAP error handler. Caché will implicitly perform a NEW $ETRAP
command and will set $ETRAP="".
This fixes a problem that could lead to a process crash if a second error
was encountered while the system was collecting stack information about
the first error. The most vulnerable type of error would be problems
accessing routine source. The problem could also occur if there was an
error while executing a $STACK() function call.
This fixes a memory access violation that could occur during a debugging
session. After an <EDITED> error is received, a QUIT command
removes some, but not all, of the levels on the execution stack causing a GOTO
command to resume execution at an invalid location instead of issuing
another <EDITED> error.
Summary: Speed up ECP client connection.
This change improves the time required to
make a connection to the ECP client. The server no longer does a DNS
lookup for the client name; it uses the specified hostname or IP
address.
Furthermore, it registers itself with the superserver much earlier in the
connection sequence.
Summary: Address issue of routine referencing purged namespace cache that caused <ERTRAP>
This change addressed an issue where Caché
startup with a small routine buffer pool may get <ERTRAP>.
This change fixes an error in $NORMALIZE where 0
(zero) would be incorrectly returned for certain input values.
This fixes a problem introduced in 5.0.15 which could prevent
access to databases hosted on NAS (network attached storage) on Windows
systems.
$ZUTIL(178) for creating globals was not checking
the global name for validity. This could corrupt the global
directory. It has been corrected.
Counts in ^%MONLBL were being displayed as signed
integers, which caused larger numbers to appear as negative numbers.
This has been corrected.
A long view string could overwrite the mailbox
queue, causing possible access violation.
It has been fixed.
This change corrects a circumstance
which could hang Caché job
servers. The problem would show up after a number of JOB commands had
been executed by a given jobserver process when the routines being run
uses more than 64KB of local symbol table space.
Summary: Fix errors in generation of Caché Basic XOR, EQV, and IMPLIES logical operators
This change corrects instances where the Caché Basic compiler
may generate incorrect code for the logical operators mentioned above.
The code generator for these operators now is the same as for $ZBOOLEAN.
Summary: Acquire exclusive rather than shared ownership of clustered blocks with a NL lock
A problem has been corrected where a cluster member acting as an ECP
server for non-cluster members could "freeze" Caché.
Terminal input on AIX has been made more efficient
to bring it in line with the implementation on other UNIX
platforms.
An error in Caché for OpenVMS has been fixed that could keep an RMS file
open even after a <NOTOPEN> error caused by insufficient partition
memory space to allocate an I/O buffer.
This change addressed a problem with cluster shadowing that
caused an error such as <VALUE OUT OF RANGE>updseqinfo+7^JRNINFO
to be generated on the source side. The error itself is recoverable
and may or may not affect the database integrity on the shadow.
Summary: Fix cluster shadow inconsistency caused by copier setting "jrnend" value back
This change addresses a problem that can cause
inconsistency between a source and a cluster shadow in version 5.0.14
and upward.
Non-cluster shadowing situations are not affected.
This change prohibits global updates once a journal daemon dies with <ACCVIO>.
Summary: Improve lock management when the number of locks for a specific job is over 32 KB
When a job owned many locks (when the locks could
not fit in a 32 KB chunk of memory), a JOBEXAM to that job may cause
job been examined to hang because a needed resource is not released
by the JOBEXAM codes.
This change corrects that situation.
This change addresses an issue on cluster shadow
where a shadow logged a <NOTOPEN> error on exit. The error was
actually generated (and trapped) during shadow dejournaling.
This change corrects a <SUBSCRIPT> error during shadowing
(5.0.13 and forward) in the scenario where the collation of the global
from the journal doesn't match that of the shadow database.
Summary: Start cluster shadowing at the location specified by the user (not earlier than that)
With this change, when a <STORE> error is
handled by the %ETN error trap routine, it will save
some minimum information to identify where the error happened in a %ERN
error log entry. It will then try to acquire more memory from the system and
create a normal %ERN log entry.
This change adds code to the Caché upgrade
procedure to convert eventual custom UnicodeBig and UnicodeLittle
locale tables to the new format used by current and future
Caché releases. Additionally, importing a locale with the old
format will automatically convert it to the new one.
This fixes a problem using the
$SYSTEM.Process:ALLFIELDS query. In prior releases, if there is a
hung process somewhere
when this query is run, the query will hang.
This corrects a problem where %FREECNT /
GetFreeCount^%DM would report several more free data blocks than were
really available.
This change will disable Dead Job Cleanup as the
default setting when Caché is started.
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:
Summary: Hide the Config Manager main form when Database Wizard called from Control Panel
Under certain conditions, when the Control Panel launched the Database
Wizard, a portion of the Config Manager window remained visible in the screen. This
change corrects that problem.
A bug has been fixed where ^%utility($J) was not
killed by the return code from the Control Panel. The left-over
nodes in this global can lead to undesirable database expansion.
If an application issues an HTTP request on Caché 5.0 for a
method other than GET/POST/HEAD, Caché would report this as an
error. However the error handler for this was getting a further error
which caused the session to be closed. Now we report this error
correctly.
Summary: Prevent a hyperevent for a session that is closed from taking a new license out
If an application runs a hyperevent for a session that has
expired, Caché warns that the session is timed out and the
hyperevent can not be processed. However, notifying the application takes out a
license in order to report this error. This changes corrects the
problem; a hyperevent
that cannot be run will not use another license to report the error.
Summary: End of file $zeof reset at the end of every CSP page, so it does not reflect system default
At the end of every CSP request, the CSP server
cleans up the session for the next request. This resets the end
of file/$zeof setting so that it always generated an <ENDOFFILE>
error when the end of a file was reached, even when the system default
was set to $zeof. Now it respects the system default
correctly.
Summary: Ensure that a session token received as a cookie (CSPSESSIONID) will always take precedence over a token received as a form variable (CSPCHD) for cases where both are present in the request
Summary: Add extra processing to protect against the effect of SIGHUP (hang-up) signals in the AIX environment
This change fixes an issue where the ECP server daemon may
get an access violation after processing many (about 135168) 'JOB'
requests from the ECP client.
This corrects an issue where attempting to load an
XML file with a relative pathname on Mac OS X would result in an
error although
absolute pathnames worked
properly.
With this change, they both work.
This corrects a problem where large integers in
$LISTs
would be incorrectly converted for COM output.
This corrects a problem where trailing zeroes were
incorrectly dropped when converting large numeric values to display
format.
This change suppresses adding a decimal point when
converting integer values for display.
This change corrects a problem where numeric values
used as string arguments had trailing $c(0) appended to them.
This corrects problems in the use of the %Float and %Currency
data types when the locale is not the United States. The thousands
separator for numbers was not honored properly.
This corrects problems resulting in loss of
precision when converting numbers to %Library.Float.
The problem with an incorrect environment setting
on UNIX in the case of Unicode Caché was corrected.
Summary: Enable DataDirect driver connections in the Connect method of %SQLGatewayConnection
DataDirect drivers require setting a special option
and supplying a password in order to be functional. This change
modifies our connection code to detect that we are using DataDirect drivers
and to set the necessary options
Conversions from an
8-bit Caché required a specific Unicode conversion call when the
client locale does not match Caché. This change adds the
necessary call.
The $LIST() function could cause an access violation if the input list
happens to be exactly at the end of a memory page and the following page
has never been allocated. This is now corrected.
In some rare situations, during error processing involving routines that are
automatically recompiled because of old object code, the process could
crash with a memory access violation. This vulnerability has been
corrected.
Applications using a ZQUIT 1 command to pop execution levels could encounter
<FRAMESTACK> errors after upgrading to 5.0.12. This has been corrected.
When a routine is modified on the server, and a job in the
application server has a reference to the invalidated routine buffer,
the error handler may corrupt the routine buffer list if errors occur
while returning from a call to the routine. This has been corrected.
If auto-recompiled network routines are shared by
more than one job on the client, then on routine completion they may
corrupt or lock the routine queue. This has been fixed.
This change correctly detects the number of physical
CPUs on SuSE 8.2 and Red Hat 7.3 for licensing purposes when
HyperThreading is enabled. Previous versions of Caché worked
only on Red Hat 8.x and later.
An error was fixed in $NORMALIZE that could cause
incorrect results for some combinations of input number and
scale. Only 32-bit platforms were affected by this change,
64-bit platforms did not have the problem.
^MSU now allows the default collation for new globals
to be changed.
A rare problem on OpenVMS systems which could result in
a Caché process entering an infinite loop while opening an
application mode LAT device has been resolved.
Summary: Fix problem where a Caché job started via SYSMAN could enter a spin loop
Summary: Use operating system file info to prevent assigning two SFNs to a database
Note: Make sure that all affected databases are
dismounted before changing any links.
Error handling and viewing the execution stack of
another process has been enhanced in the case
where a process enables null subscripts, but null subscripts are not
enabled for the job viewing the information.
This change fixes an occasional problem where the SuperServer
daemon for Caché would crash generating a core dump on AIX and
Linux. It was due to the generation of an invalid file
descriptor created for the SuperServer's TCP device.
Summary: Fix CVENDIAN to flush previous written map blocks before reading a converted map block
This change fixes a problem for CVENDIAN running
over a networked (NFS) database.
This change addresses an issue where quiescing the master after
the last pass of backup could not complete due to the RECEIVE daemon
checking connections to remote servers.
This change corrects a problem during concurrent external
backup where quiescing system activity might fail, resulting in backup
failure.
Summary: Allow ENQ daemon to exit without hanging system due to daemon termination
This corrects two problems in specifying an existing
journal log to use in cluster journal restore after one selects the
option
A bug has been fixed where having an "Extend by:"
setting for a database of greater than 2047MB will cause the Control Panel
to generate a run-time error '6' Overflow when exiting the database
properties window.
Summary: In the Control Panel, a security-enabled check-mark momentarily appears incorrectly
An error has been fixed in the Control Panel where the
context menu in the Caché Direct Users window can momentarily
show the Security Checking Enabled setting incorrectly.
An error has been fixed which prevented the Control
Panel from
suspending and resuming user processes on OpenVMS servers.
This change adds a non-interactive entry-point into
%FREECNT.
In both of these routines, entering a "^" will now take you back to the
"Device" prompt; and entering a "?" will provide help text or tell you
there is no help text available.
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:
Summary: %cspServer processors were not timing out correctly for Preserve=0 sessions
In the CSP gateway, there is a timeout value for
%cspServer processors that have not had a request for a while. This
value was being lost on the server which prevented these %cspServer
processors from timing out. This is not serious as they do not consume
licenses or use any significant resources. However, this logic is now
fixed to time these jobs out.
Summary: Report error if you continue a session by passing CSPCHD argument to a cookie based session
When an HTTPS connection is used for a CSP page with #call in it, then we insert the HTML line:
Summary: Increased max number of DBs that ECP can recover.
ECP recovery was limiting the total of all remote DB
path lengths to 4KB.
ECP server would deny recovery if the total of all DB paths exceeded 4KB.
This change increases that length to 65KB.
A problem with ECP configurations involving 2-KB
databases on the server has been resolved. The symptom was spurious
database errors or other errors on a client referencing globals with single
character names after a global with the same first character has been
killed.
Exception with message "No serial storage information available" was raised in some cases in Light Java Binding for valid serial classes. This happened when objects of the class were initially loaded from child tables and then from embedded objects. This is fixed now.
Performance tests indicated that creating single object in
Light Java Binding had become about 15% slower compared with Caché version 5.0.5.
This is fixed now and it is actually slightly faster.
Summary: %Date and %Time values get corrupt when serialized in collection properties
The %Date and %Time data types are now converted
to logical representations when they are serialized on Java client.
This prevents their being corrupted.
Summary: %File:FileSet query could get a <STORE> error if a large number of files involved
If there were a very large number of files to report
in a %File:FileSet query, it was possible to get a <STORE>
error. Now instead of using a local array to sort the files, Caché uses a
global to avoid this problem.
The performance of the optimized multi-index algorithms was improved
in certain cases where there are conditions on the rowid or its
components, for example:
In these cases, the use of an additional temp file was avoided, resulting
in overall better speed as well as possibly a faster retrieval time for
the first row.
might not work through ODBC from an Microsoft Query client. This change
corrects that issue.
Summary: Allow larger number of different active classes and release inactive classes from process table
This change allows for a process to have more
different classes active at any one time, and more efficiently deals
with classes that are not in active use by the process.
This change corrects a cause of <NOLINE> and <UNDEFINED> errors in cluster backup.
This change corrects a situation that can occur during concurrent external
backup where an attempt to quiesce system activity might fail resulting in backup
failure.
This change addresses a problem with updating the
write-image journal information
after journaling is stopped and started. The problem could prevent
journal recovery from running at startup.
Summary: Correct <ACCVIO> when CPU count exceeds license capacity.
If an Entree license key is used on a Windows or
Linux system with more than two CPUs, the garbage collector process
encountered an access violation and the system would not start up
properly. Although the Entree product type does not support this type
of system, the configuration should start in diagnostic mode which
permits a single user to log in and diagnose the problem. With this
change it now does.
Summary: Send out ECP de-lock request right away even though it is an asynchronous request
This fixes an issue when there is only one job on an
ECP
client doing lock and unlock. The unlock request may be delayed for
one second before being sent to the ECP server. This may cause a performance
problem on another non-ECP client talking to the ECP server.
This change fixes an issue with sharing a lock
on a non-subscripted node. For example:
Change SML490 fixed the case where Process C lock ^A#"S".
When a DCP client job is in an open transaction,
the 'Immediate' unlock a node (for example, L -^a(1)#"I") over DCP only removes
the lock entry in client site. The lock stays in DCP server. This
change fixes this problem.
This change fixes a possible lock structure
corruption on the network server side when jobs lock parent and child
nodes, for example
This change fixes a problem on non-subscripted
share lock in addition to the problems solved by SML490 and
SML494. For example:
Summary: Fix a performance/correctness problem with cluster shadowing and fast shadow de-journaling
Summary: ECP client change state to NOT CONNECTED or DISABLE didn't cleanup all blocked processes
When appropriate, InterSystems adds general improvements to the
features and functions of Caché beyond those required by
critical fixes.
Such improvements are contained in this version.
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:
This change ensures uniqueness in server names and address fields
when a new server is added.
This change corrects an issue with the Control Panel. Prior to the modification,
every time a Local Database was expanded a new entry was added to the
lock table.
These lock entries were removed only when the Control Panel was
closed.
With the correction, the lock is released when the expansion is finished.
Summary: If posting >32k of data in a form to CSP create a stream object to hold information
And the text area contained more than 32k of data then the CSP server
was crashing. Now it creates a stream to hold all the data and when
you access %request.Data("txt",1) you will get the stream oref. This
means that for any fields that could be larger than 32KB, you should
code something like:
Summary: Resolve an issue in which the Gateway's
Systems Management suite would not operate for cases where the path to the IIS root contained a period.
This change resolves an issue in which the Gateway's Systems
Management suite would not operate for cases where the path to the IIS
root contained a period. For example:
Prior to this change, when you run Tune Table
through SQL Manager, if the calculated Extentsize is zero, the
selectivity functions will still be called and updated. After this
change, if the calculated Extentsize is zero (meaning there is no
data), then the selectivity functions will not be called resulting
in no
changes saved to the table. A message will display:
With this change, Caché rebuilds its routine index global only
when it is needed.
Prior to the modification, the index was often rebuilt unnecessarily
which resulted in a performance slowdown.
This change avoids installation conflicts with
Caché running on a different node. It applies to UNIX and OpenVMS
installation procedures.
When a $CASE function was used as the argument for a GOTO command, there
could be an access violation when compiling the routine or an unexpected
error when executing it.
This change removes that possibility.
A Caché process could get an access violation when compiling a $ZSORT()
function which had an invalid second parameter.
This correction eliminates that situation.
This corrects a typographic error in a label that
could cause ECP recovery to fail.
Caché on OpenVMS logged a SYSLOG entry for every
LAT session start and stop.
This change modifies Caché not to log an entry on session enter and exit.
An error has been fixed where a unique constraint was
inherited by a subclass and an INSERT was allowed into the subclass's table such that the unique
constraint as defined in the base class was violated.
Both of these problems resulted in incorrect syntax generated for the table filing routines.
An error has been fixed where an INSERT/SELECT
statement would crash with an <INVALID OREF> error if the table
being inserted into had a stream field that was not specified in the
insert column list.
Summary: DDL Import which gets <ROUTINE TOO BIG TO SAVE> gets Caché Internal Error
A problem has been corrected in the Caché Macro Preprocessor where a
<UNDEFINED> error might occur in the preprocessor's error trapping,
masking the real error it was attempting to report.
A error was corrected where a view with a sub-query
in the view query's WHERE clause was incorrectly treated as a
potentially updatable view causing an <UNDEFINED> error
during compilation.
This change makes Caché SQL views with any subqueries in the view's query not
updatable.
Previous speed improvements for queries with GROUP BY or DISTINCT
have been extended to apply in more cases, and also to work
correctly in a few cases in which problems occurred, for example where an indexed
property containing NULL values had caused a <SUBSCRIPT> error or an
infinite loop when running certain queries.
When TOP and ORDER BY are specified, this change promotes the choice of
access paths that do not build temp-files. This produces the
first few rows faster (for example, by using an index that matches the
ORDER BY), rather than choosing the access path that is judged to be the
fastest in returning ALL the rows that satisfy the query.
A problem has been corrected in the table compiler when compiling
large tables where an <UNDEFINED> error would occur in some cases when
splitting the generated table filing code into multiple routines.
An error has been fixed where an SQL UPDATE statement
might not save the data correctly if the class used %CacheStorage, and
had about 185 fields in the table, when all were stored on the same node in the
data (master) map.
This changes SQL Manager's QueryPlan to use
"/csp/docbook/" instead of "/apps/documatic/" in the
URL. The former will not consume an extra license and will clean
up CSP session correctly.
This change corrects a problem with SELECTIVITY where
a property may be indicated incorrectly when you switch tables under certain conditions.
Now, after the table fields are loaded,
the selectivity box and label will be set to null. These two fields will be filled when you click on any row.
This fixes a possible access violation when attempting to run a routine
that received a <ROUTINE TOO BIG TO SAVE> error.
This change addresses an issue on Caché for OpenVMS systems
configured with the option SwitchOSdir=1 set, where the OS directory
of a user login process didn't get passed on to a jobbed job.
Addressed an issue on Caché systems
configured with the option SwitchOSdir=1 set, where the OS directory
of a user login process didn't get passed on to a jobbed job.
Internal retry loops were added to fsync() calls for
UNIX platforms to wait for a successful completion if there is an
error. fsync() is used on UNIX during database expansion, writing the
journal file and when writing database blocks to the WIJ and cache.dat
files to flush the UNIX buffer pool out to disk so the writes are
known to be persistent.
Operating system calls to sync data to disk during file expansion
for 8-KB databases on UNIX systems have been enhanced to avoid possible
problems on certain types of devices. Prior to this change, problems in
this area would show up as a serious disk write error occurring in the write
daemon following an expansion which appeared to succeed even though there
really wasn't enough disk space available for the newly allocated
blocks.
This prevents accidentally setting the New Global Pointer Block to 0.
This change corrects an error in COM port handling
that caused memory leaks with JOB servers as well as
an previous problem with JOB servers.
Prior to this correction, running Caché backup on an instance
of
Caché with more than 256
databases mounted could cause the label block and incremental bitmap
blocks of one database to overwrite blocks of another database. This
problem affects Caché 5.0 on all platforms except for OpenVMS and Tru64
UNIX.
Summary: Remove confusing error messages on Windows startup if %ZSTART needs a long time
A confusing and spurious error message that was
reported to the Windows event log if Caché required a long time
(>10 minutes) to start (due to a long running ^ZSTU routine) has
been removed. The message read:
The message is spurious because Caché did indeed start.
This fixes a situation where a control process
crash prevented cforce from completing on Windows systems
due to events not being available to Caché processes. Now cforce
halts processes even if all events are not available.
This corrects a problem where cforce fails to terminate by force jobs that
cannot be terminated cleanly during shutdown, possibly leaving jobs
behind after cstop or cforce.
ECP daemons were running at low priority (5 on Windows and 2 on UNIX).
This change now has the daemon run at normal user priority (7 on Windows, 0 on UNIX).
Summary: Fix DCP lock uploading problem when DCP server shutdown and restarted.
Summary: Fix DCP lock uploading problem when DCP server shutdown and restarted.
Summary: Fix a lock memory corruption on ECP lock.
This change fixes a lock memory corruption problem
when an ECP client locks the server node and the ECP server node has SWITCH 10
or 13 turned on (for example on Caché backup).
Previously, it only failed when a
child node already been locked and it tried to lock the parent
node.
This change corrects a problem with
the non-interactive API for restoring backups,
$$EXTSELCT^DBREST.
Under some circumstances, an <UNDEFINED> error would be reported
when attempting to skip over a database entry not
flagged for restore in the directory list (that is, excluded from restore
in a multiple database backup archive).
This change addresses an issue where a shadow configured to start at
startup could cause <UNDEFINED> error when it began.
This fixes a problem using %RI. Prior to the
change,
it would allow you
to unintentionally overwrite object-code-only routines. This change
refuses to load a routine if you say YES to Compile? and NO to
Replace? and the object code version of the routine still
exists.
This fixes a problem where a wrong routine list may
be produced by routine utilities because the ^mtemp indices become inconsistent.
Summary: Improve the exception handling and automatic recovery mechanisms in the core Event Broker service.
In addition to critical fixes, this version of Caché
contains improvements to specific areas of the product.
They area summarized by area as follows:
This version of Caché nows installs and executes natively on
Macintosh OS X 10.3.
The installation kit is a standard ".dmg" distribution produced by PackageMaker.
Journal restore has been made more robust in this
version.
Among the more noteworthy changes are these:
- The journal restore now selects the proper file to start with
in the case where there exists a file whose name collates
after that of the last journal file AND doesn't end with YYYYMMDD.NNN
(excluding the trailing version # on OpenVMS).
In prior versions, it would
choose the latter (that is, wrong) name as the name of the journal file.
-
In rare circumstances, a shadow in fast mode (also called block mode) may fail to
apply updates from databases that are newly mounted on the main server
for the first time since Caché started. The problem is present on all
platforms in all prior Caché versions. This is now fixed.
-
This version addresses a problem where purging of shadow journal files
would fail if the shadow and the server run on “different”
operating systems. (For purposes of this fix, all flavors of Windows
are considered
the same operating system, and all flavors
of UNIX, including Linux, are considered the same.
-
On prior versions, in the unusual case where the journal daemon
failed to open a journal file, it would quit. The only recourse was to
restart Caché since the daemon does not restart. This has been
changed to treat failure to open a journal file as an I/O error so
the journal daemon remains active while the problem is addressed.
-
If the last remaining node of a cluster crashes, restarting the
cluster (that is, the first node of the cluster) involves cluster journal
recovery, which includes rolling back any transactions that were open
(uncommitted) at the time of crash.
This version addresses a problem
where the rollbacks in this case were not visible to cluster journal
restore or cluster shadowing, and could lead to incorrect result on
the restored or shadow databases.
-
At the end of journal restore, this version of Caché has more
informative operator messages during journal recovery. It now
indicates when all records have been read from the journal, and then
display progress messages as the application of journal records to the
database proceeds, until completion.
Previously, it misleadingly
indicated that
the journal processing was complete when all records had been read,
but before they had all been applied.
Performance Enhancements for Shadowing
This version of Caché includes a number of
improvements in shadowing performance:
-
Performance of shadow dejournaling, especially that of fast-mode
shadow, has been improved by
moving the dejournaling code to the Caché kernel from Caché
ObjectScript routines.
In addition, Caché now employs separate jobs to read the journal and apply database
updates. For example, for a fast-mode shadow, there is a job fetching journal
files from data server (the "source"), a job ("journal reader")
reading journal files copied over, one or more jobs ("database
updaters") applying journal updates to databases and, optionally, one
or more jobs prefetching globals from databases.
Warning: Since the journal reader and database updaters communicate via
shared memory allocated from the generic memory heap, it is
important that one configures the generic heap as large as possible for the optimal
performance of shadow dejournaling. The minimum requirement is 4
pages for shadowing. Shadowing may fail to start if there is
insufficient space in the general memory heap.
Depending on the data sample and platform, the performance of
dejournaling (including rollback) is on par with the previous performance
in the worst case scenario and can be several times as fast in the
best case scenario. There are no changes required in existing Caché applications.
-
Shadowing has been changed so that it is interruptible.
In prior versions, shadow journaling a large file would cause long delays in
responding to requests because it would not process the request until
the file had been fully processed.
-
In prior versions, the global node used to store
the
cluster shadow checkpoint info could grow indefinitely and might eventually
consume a substantial amount of database space.
The change in this version removes nodes that are no longer needed
during processing.
Note: To take full advantage of the improvements to shadowing,
the Generic Memory Heap size in a Cache configuration should be
increased by 2MB per CPU
on systems where a shadow is expected to run.
Increases larger than 2MB per CPU may improve performance eve further, but
this is dependent on the nature of the shadowing demands.
Support for BigInt
Support has been added to Caché for the BigInt datatype,
that is, integers in the range -9223372036854775808 to
9223372036854775807 inclusive. This support includes:
- adding a BigInt datatype class to the %Library package
- proper handling of data in this format by SQL, ODBC and JDBC
- adding support for this type in the various %XML classes
- adding code to handle BigInt variables in Caché objects
Documentation Updates
The content of the Caché documentation evolves from release to
release in response to editorial improvements, updates to existing
material, and addition of new information. The following is a summary
of the most noteworthy changes to the Caché documentation
since the previous release:
- Caché I/O Device Guide
- Clarified the explanations of TCP devicename and port number.
- Added new information regarding how OpenVMS handles files opened
in modes "H", "F", and "B".
- ObjectScript Reference Manual
- Added a table of abbreviations to the beginning of the book to
collect all of them in one place.
- Added documentation of the $LISTSAME function which compares two
lists for equality.
- Added documentation describing %ZLANG and its use in extending
ObjectScript's "builtin" functions and special variables.
- Expanded the description of ZSAVE to include cautionary material
regarding the potential for name conflicts in networked systems
because
of concurrency.
- Added an explanation of the possible performance effects of using
$DATA to access globals on non-local systems in a networked
environment.
- Updated the documentation on the ZBOOLEAN function to better
explain its use with mixed number and string arguments and the forced
conversions that take place; added its abbreviation, $ZB.
- Clarified the interactions (and dangers) of using KILL
commands to delete Caché objects rather than removing them using
object methods.
- Added symbols used by embedded Java and HTML to the table of symbols.
- SQL Reference Manual
- Clarified the handling of NULL values in conjunction with the
following:
CREATE TABLE,
ORDER BY,
SELECT DISTINCT, and arithmetic computation in formulas.
- Added references to equivalent methods calls in the $SYSTEM.SQL
class for:
ABS,
ALPHAUP,
CEILING,
DAYNAME,
DAYOFMONTH
DAYOFWEEK,
DAYOFYEAR,
FLOOR,
HOUR,
MINUTE,
MONTH,
QUARTER,
SECOND
SQLSTRING,
SQLUPPER,
STRING,
TOCHAR,
TODATE,
WEEK,
and
YEAR;
added information on how to invoke the methods generally.
- Added information on the default behavior and specifications for
ALTER TABLE,
CREATE USER,
and
%EXTERNAL (datatype).
- Updated the information on
COMMIT/ROLLBACK/START TRANSACTION;
transaction size limitations;
lock escalation on INSERT, DELETE and UPDATE;
and how uncommitted data is handled.
- Added information on how fractional precision is handled in date
and time functions.
- Added information on the use of “{...}”,
“::” in trigger code, and integer division to the Symbols
section;
updated the related material in CREATE TRIGGER and elsewhere.
- Using Caché Multi-Dimensional Storage
- Updated and edited the material for improved clarity.
These are in addition to minor enhancements in examples, as well as
corrections and improvements to grammar and spelling.
This section provides a listing of changes between Caché
5.0.11
and
Caché
5.0.12.
This document contains several sections:
Caché News, Alerts and Advisories
From time to time, InterSystems publishes items of immediate
importance to
users of our software. These include
alerts, mission critical issues, important updates, fixes, and releases
of Caché.
The most current list can be obtained from the
InterSystems Website.
Users should check this list periodically to obtain the latest information on
issues that may have an effect on the operation of their site.
Online Documentation
As a convenience to our users, InterSystems provides
online access to documentation for recent versions of
Caché at the
InterSystems Website.
From the home page choose the "Caché" tab, and on the "Downloads" menu,
select "Documentation and Help Updates" or follow
this link.
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.
- CSP
- CSP.Gateway
- Languages
- Networking
- Object
- Object.Class Compiler
- Object.Relationships
- Object.Storage.Default
- Object.XML
- SQL
- SQL.DDL
- SQL.GateWay
- SQL.ODBC
- SQL.Query Processing
- SQLManager
- System
- System.Backup/Restore
- System.Cluster Specific
- System.Journaling
- System.Shadowing
- System.Shutdown
- Utilities
Category: CSP
Platforms: All
DevKey: MAK1153
Summary: %CSP.SysConnection exposes session data to client
Description:
Make sure that %CSP.SysConnection (which is used to
test connectivity from the CSP gateway to the Caché server) can
only be
called from the gateway. If it is called from somewhere other than the
gateway, it returns an HTTP error - Page Not Found.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: CSP
Platforms: All
DevKey: MAK1177
Summary: If charset and content type are specified then always write out the 'charset=' header and use this charset
Description:
If a CSP page specifies a 'ContentType' and
also a 'CharSet' then Caché always outputs the
'charset=<charset>' header and uses the requested charset to
write the page out.
%CSP.Page does not define a CharSet by default. So this change will only
effect pages where ContentType and a CharSet are explicitly defined.
Prior to this change, CSP would only write the 'charset' header out
if the ContentType contained 'text/'.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Category: CSP.Gateway
Platforms: All
DevKey: CMT204
Summary: Resolve a problem whereby state-aware sessions would occasionally lock-up under Linux
Description:
This change corrects a situation
where state-aware sessions (preserve
mode 1) would occasionally lock-up, especially on Linux systems.
In extreme cases, the Gateway could become unresponsive to
other users.
The cause was an internal memory access violation when
responding to a session close or timeout event.
The integrity checking for state-aware connections has been improved
and the logic for detecting and responding to closed sessions has been
reworked.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Languages
Platforms: All
DevKey: CDS587
Summary: Provide switch so exponent must be upper case 'E'
Description:
Since Release 4.1, Caché has allowed the exponent designator for a number
in scientific notation to be either upper or lower case, 'E' or 'e'.
However, this is not compatible with some programs written in other dialects
of the M language, which recognize only upper case 'E'. Those programs use
lower case 'e' as a string delimiter. This change provides a switch which
restores the behavior of recognizing only upper case 'E' as the exponent
designator. The default behavior will continue to allow lower case
'e'.
To change the value of the switch for the current process, issue
SET oldvalue=$ZUTIL(68,63,newvalue)
To change the default value of the switch for all processes which start
after this command is executed, issue
SET oldvalue=$ZUTIL(69,63,newvalue)
If newvalue is 1, both uppercase 'E' and lower case 'e' will be recognized
as the exponent designator.
If newvalue is 0, only uppercase 'E' will be recognized.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Networking
Platforms: All
DevKey: GK301
Summary: ECP failed node recovery to scan for all possible ECP sessions
Description:
During ECP recovery, all ECP sessions should be reset.
This change fixes a problem where some of the previous sessions would
not be correctly identified and therefore not reset upon recovery.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Networking
Platforms: All
DevKey: GK314
Summary: Fixed ECP client shutdown wait loop
Description:
In prior versions, ECP client shutdown didn't wait for all connections to drop, and it
didn't handle free nodes properly.
This change causes client shutdown to scan for all allocated
slots.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Networking
Platforms: All
DevKey: GK317
Summary: ECP recovery to cleanup sessions with no open transactions
Description:
ECP recovery didn't remove ECP sessions info if the session didn't
have any open transactions. Because the session slot was not cleared,
on the next system restart it would wait unnecessarily for that client to
reconnect.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Networking
Platforms: All
DevKey: GK324
Summary: Fixed a timing problem which prevented the write daemon from joining cluster failover.
Description:
Prior to this change, on slow machines, the write
daemon might not join the
cluster failover promptly which caused the failover to hang forever.
This was due to intercluster synchronization overwriting the write daemon
recovery state, which prevented the new cluster master from resuming
the recovery. This now operates properly.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Networking
Platforms: All
DevKey: GK325
Summary: Reset the ECP client session on unexpected errors during recovery
Description:
This change corrects a circumstance
where unexpected database errors that occurred during ECP client recovery
could cause the recovery to hang.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Networking
Platforms: All
DevKey: GK326
Summary: Add new ECP connection states to handle hang in connection-in-progress state
Description:
This change corrects the way ECP handles
connection states.
Prior to this, unexpected errors could result in ECP being hung
waiting for a re-connect and the only way to clear it was to restart Caché.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Networking
Platforms: All
DevKey: GK349
Summary: Clear ECP pending transaction bits on halt or dead job cleanup
Description:
If a job exited unexpectedly (for example, with an access violation),
ECP did not clear the pending open transactions for that client.
The next job that got assigned to the same process slot
inherited these transactions, causing confusion between the client and
server states. This change correctly handles the cleanup.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: Networking
Platforms: All
DevKey: GK350
Summary: %HALT to handle ECP open transactions
Description:
%HALT didn't rollback ECP open transactions when the
client journaling was disabled. This change corrects the behavior to rollback ECP open
transactions.
Note: rollback returns <ROLLFAIL> error if application server
journaling is disabled. %HALT will rollback ECP transactions first,
then it will raise <ROLLFAIL> error.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: Object
Platforms: All
DevKey: BJB291
Summary: Selectivity not saved in the class if KeepClassUpToDate = 1
Description:
If you run $SYSTEM.SQL.TuneTable("Schema.Table",1,1)
the Selectivity was not getting saved as part of the Class
definition.
This has been fixed.
Likelihood |
High |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: DLP1025
Summary: Don't use preconstructed inheritance tree for inheritance resolution
Description:
In some rare cases, "method does not exist" errors would be reported
when compiling classes. This was caused by an error in determining
which methods are inherited from the superclasses. It is now fixed.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK1042
Summary: Prevent <MAXSTRING> when importing classes from XML with very large implementation blocks
Description:
When importing a class from an XML file into Caché
with a very long implementation (over 64k of data), it was
possible to get a MAXSTRING error.
The import routine tried to concatenate the
beginning of the last line from the first 32k block with the next
block and this pushed it just over the 32k limit.
Now it keeps the
beginning of the last line in a separate buffer and only concatenates
this with the rest of the first line from the next 32k block rather
than the entire block.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Object.Relationships
Platforms: All
DevKey: DLP1064
Summary: Don't set modified bits when swizzling related objects
Description:
When a reference is swizzled, the modbit for that property is not
supposed to change. This changes corrects the behavior;
the value of the modbit is unchanged for simple
swizzling.
Likelihood |
High |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Object.Storage.Default
Platforms: All
DevKey: DLP1288
Summary: Clean up empty index globals in %DeleteExtent
Description:
The bitmap extent index for a class is automatically built whenever
any index is built and the bitmap extent has never been built. When
all instances are deleted from an extent there was a situation that caused
the system to incorrectly assume that the bitmap extent index was
already built.
This has been fixed by assuring that indices are purged whenever
extents are removed.
If any instances fail to be deleted successfully, the indices remain.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: Object.XML
Platforms: All
DevKey: JN228
Summary: Release Stream OREFS following parse
Description:
The SAX parser caches the XML parser it uses for
performance reasons. During entity resolution, CacheStreams may be
created via callbacks to %XML.SAX.EntityResolver and its
subclasses. As a side effect of parser caching, the OREFS of these
stream objects are also cached. (They are eventually garbage collected,
but in a non-deterministic manner). This causes a problem if the
user of the parser were to change namespaces before garbage collection
of the stream occurs.
This modification corrects the error by reclaiming the streams as soon as the
parse is completed.
Likelihood |
Low |
Risk |
Medium |
Ad Hoc |
No |
Enhancement |
No |
Category: Object.XML
Platforms: All
DevKey: JN229
Summary: Return LocalName For EndElement NodeType %XML.TextReader
Description:
When the XML Reader NodeType was 'endelement', the LocalName property
returned empty string.
This correction makes it return the proper value.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: SQL
Platforms: All
DevKey: DPV2248
Summary: Use fields in subscripts when determining MapBlocks
Description:
An enhancement has been made to the calculation of a Map's estimated
block usage to include information about the fields in map subscripts
for the map. Now an index of the form:
^glo("index",Field1,Field2,ID)=""
will have a higher "cost" than an index of the form:
^glo("index",Field1,ID)=""
If the query optimizer can use an index on Field1, the second index should now be chosen.
Likelihood |
Low |
Risk |
Medium |
Ad Hoc |
Yes |
Enhancement |
Yes |
Category: SQL
Platforms: All
DevKey: DPV2252
Summary: Tune Table via SQL Manager was not updating map statistics
Description:
An oversight has been corrected where a table's query optimizer
information was not fully updated until the class was recompiled.
This was missed when
the extentsize of the table was calculated through SQL Manager's
tuning facility.
Likelihood |
High |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: SQL
Platforms: All
DevKey: DPV2255
Summary: Use $Get() for invalid condition / NEXT code with piece map when needed
Description:
In the situation where the last subscript defined in a storagemap for
%CacheSQLStorage
was a
constant,
attempts to execute a runtime query against this table
could result in an <UNDEFINED> error.
Whether the error occurred or not depended on the details of the
global structure for the storage.
The possibility of this error has now been removed.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: SQL
Platforms: All
DevKey: DPV2267
Summary: ASC does not work correctly
Description:
Prior to this change, a query that JOINs two
tables in a WHERE condition and has an ORDER BY <f1> DESC,
<f2> ASC might not return the rows in the correct order.
This has now been corrected.
Likelihood |
Low |
Risk |
Medium |
Ad Hoc |
Yes |
Enhancement |
No |
Category: SQL
Platforms: All
DevKey: DPV2270
Summary: GetCachedQueryInfo gets <NULLVALUE> error
Description:
In prior versions,
Caché might fail to display the text of a
cached query when listing the queries of a namespace.
This change corrects that error.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: SQL
Platforms: All
DevKey: DPV2278
Summary: Correct query generation for RowID mapping
Description:
This change corrects a situation where a table which
uses %CacheSQLStorage and specifies its own Map RowID Specifications
might generate improper map definition code. This causes
improperly generated query code for queries against the table.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: SQL.DDL
Platforms: All
DevKey: DPV2283
Summary: Fix <UNDEFINED> error When InvalidCondition in Map
Description:
This change corrects an error in constraint checking.
Under some circumstances, the checking of a unique constraint
or a foreign key referential integrity check by SQL might
produce an <UNDEFINED> error.
This happened when an SQL query was needed to check
the constraint, and the constraint was on the IDKey field.
Likelihood |
Medium |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
Yes |
Category: SQL.GateWay
Platforms: All
DevKey: MIT356
Summary: Infinite loop in CEnvironment::DisconnectAll()
Description:
Under some circumstances,
Caché processes could
generate a high CPU load after the user has closed them.
The symptom was caused by an infinite loop in the process disconnect
logic.
This change eliminates that circumstance.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: SQL.ODBC
Platforms: All
DevKey: JCN482
Summary: Use localized decimal separator
Description:
A new checkbox has been added to the DSN
configuration screen: "Use Locale Decimal Symbol". By default,
CacheODBC sets the default decimal separator to "." to provide legacy
support for some customers.
Unfortunately, this causes some difficulties with
applications like PowerBuilder that prefer to use the
decimal separator as defined for the current locale.
Checking the
checkbox "Use Locale Decimal Symbol" will use the decimal separator in
process and leave its value unchanged. Leaving this unchecked
will give the old default behavior of setting the decimal separator in
the process to "." regardless of the locale.
This setting is defined
for all DSNs on a system as it is a property of the driver when it is
loaded.
On UNIX, setting the environment variable CACHEODBCLOCALEDECIMAL = 1
lets the driver use the Locale's decimal separator value.
Likelihood |
Low |
Risk |
Medium |
Ad Hoc |
No |
Enhancement |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: DPV2260
Summary: Fix line-too-long issue with 16 map subscripts and overriding data access expressions
Description:
Under some circumstances,
an SQL query might
generate code in a single line which is too long (longer than 4095
characters).
This can happen when there are many subscript levels (greater than 15) in
the map definition and overriding data access expressions are used in
the map definition.
This change corrects the problem.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: PVA070
Summary: A SELECT * query with joins on single column idkey columns does not work properly
Description:
An error has been fixed where conditions (especially JOINs) on
single column idkey columns did not behave properly if the
SELECT clause were 'SELECT *'.
The suspect behavior could be poorly performing plans or SQLCODE= -400
when the query executes.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: SQLManager
Platforms: All
DevKey: YSD768
Summary: Menu options don't work in SQLMgr/Object/Execute/Query
Description:
In prior versions,
choosing to execute a query from SQL Manager, but selecting an option
from the menu after the query had been typed but not run, would
not execute the query. The option choice and query execution would
run properly, however, if you used the keyboard shortcuts to execute
it instead.
This circumstance has been corrected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System
Platforms: All
DevKey: CDS427
Summary: Fix ZQUIT 1 when $ZT=""
Description:
This corrects a problem that would cause an error handler to be skipped
when a lower level error handler issued
The
problem happened when the lower level error handler set $ZT="". This
would cause the ZQUIT 1 command to bypass the next error handler.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System
Platforms: All
DevKey: JO1825
Summary: Fix dead job cleanup to release global buffers
Description:
The code which cleans up after dead jobs in
Caché will now check to see if the job has retained a global
buffer and if so, it will free it.
Note: This does not mean that any global
buffers owned by the dead job will be released. In many circumstances
it is not safe to release the buffer as doing so might result in
database degradation getting written to disk.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System
Platforms: All
DevKey: JO1826
Summary: Write image restore refuses to run if Caché shared memory section exists
Description:
The write image restore program will now refuse to run
if Caché appears to be running from the manager's directory
specified as part of the restore. A message noting this will be logged in the
console log.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System
Platforms: UNIX
DevKey: LRS813
Summary: Fix TCP read and accept timeout handling under UNIX
Description:
A bug in timeout handling for TCP read requests under Caché/UNIX has
been corrected. It could cause the READ to continue waiting past the
specified timeout if the process were probed by ^%SS, ^JOBEXAM, or
similar interrupting utility programs.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System
Platforms: Windows
DevKey: RJW753
Summary: Logging off windows causes dead cache processes
Description:
On Windows systems, Caché processes running in a
Windows Command Prompt window or running from a local Caché terminal
(the title bar will contain Caché TRM:processId) will be improperly
terminated when the user who started them logs out of the Windows
Workstation. This improper termination also occurs in Caché processes
started via the job command from these processes. This problem has
existed since Caché 4.0.
This change corrects this problem by establishing a console control
handler to catch the Windows Logoff event and exit Caché normally. It
also changes the way processes started by the job command are created so
they will persist following logout from the Windows Console.
Users may encounter one different behavior in processes started by the
job command. Since the process is started by the Caché control
process at the request of the Caché foreground process, the jobbed
process no longer runs in the login session of the user at the console
who created the process with the job command. This means that on
Windows XP, the process created by the job command will not be able to
access network devices using the drive letter mappings defined for the
user logged into the Windows console. You should use the UNC naming
convention (that is \\server\share...) instead of the local drive
mapping (for example w:\...) in your code to access network shares from
processes started by the job command.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System
Platforms: All
DevKey: SJ1560
Summary: Fix JOBEXAM causing access violations later
Description:
This corrects a rarely occurring situation where using JOBEXAM to view a
process could cause that process to crash and get an access
violation. This happened in the case where the examined
process was completely out of process-private memory.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System
Platforms: All
DevKey: SML472
Summary: Fix missing one DDP job array allocation
Description:
When an MSM job with a large internal job number accesses a remote
Caché system using DDP, it may get <DSTDB> error.
This change fixes this problem.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System
Platforms: All
DevKey: SML475
Summary: Fix missing wake up on write daemon lock complete, and avoid forcing ENQ daemon while shutting down master
Description:
This change corrects a problem with cluster failover failure when the master node is
shut down. The source of the issue is that write daemon failed to notify the shutdown requestor when it
finished
causing a long delay.
Also, the ENQ daemon has to be
forced down when the cluster node is shutdown.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.Backup/Restore
Platforms: All
DevKey: HYY885
Summary: Correct switch setting propagation in clusters
Description:
On a cluster platform, a situation may occur during backup
if the procedure to block and quiesce updates/accesses gets an error or fails to quiesce.
The problem is that switches set locally
but outside the backup program may get cleared during backup.
This change corrects the issue.
Likelihood |
Medium |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
Yes |
Category: System
Platforms: All
DevKey: SML476
Summary: Fix ACCVIO on scan through lock table
Description:
This change eliminates a small timing window
where a ^LOCKTAB or ^$LOCK SSVN could get an access
violations when there is a large volume of lock table activity.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System.Cluster Specific
Platforms: All
DevKey: JO1798
Summary: Suspend lock timeouts over ECP during cluster failover and cluster backups
Description:
CLU^SWSET, ENQ10^DBACK and ENQ13^DBACK have been
enhanced so that timed locks will not time out while switch 10 or 13
is set in a cluster.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System.Journaling
Platforms: All
DevKey: HYY762
Summary: Enable null subscript support in journal restore and rollback
Description:
This change eliminates potential <SUBSCRIPT> errors during journal restore and transaction rollback.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.Journaling
Platforms: All
DevKey: HYY928
Summary: Allow transaction rollback in journal restore even when current journal file is not involved
Description:
In interactive mode, journal restore prompts for
transaction rollback if some transactions remain incomplete at the end
of restore.
This happens even if the current journal file is not involved in the
restore.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.Journaling
Platforms: All
DevKey: HYY944
Summary: Fix a problem in locating next journal file
Description:
This change addresses a problem with locating the
next journal
file.
In earlier versions, Caché could incorrectly compute the next
journal
file name. This has now been corrected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System.Journaling
Platforms: Tru64, OpenVMS
DevKey: HYY952
Summary: Address issues updating cachejrn.log
Description:
Cluster journal files are logged in cachejrn.log in the pij directory
of a Caché cluster. This log, cachejrn.log, is used by cluster journal restore
and cluster shadowing to locate every journal file used by any past or
present node of a Caché cluster.
This change causes
failures in logging the journal file name in cachejrn.log
to be reported in cconsole.log.
On VMS, updating cachejrn.log allows read sharing, eliminating a
potential cause of update failure in lieu of cluster shadowing.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System.Journaling
Platforms: All
DevKey: HYY960
Summary: Update transaction index properly
Description:
This change corrects a
circumstance where
the beginning offset of an open transaction was set to a value smaller
than it should be. This did not affect transaction rollback
but could affect those applications
that assume the return value points to a valid
journal record.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.Journaling
Platforms: OpenVMS
DevKey: HYY964
Summary: Fix an <ENDOFFILE> problem with reading journal files using sequential I/O on VMS
Description:
This corrects an issue on OpenVMS that may cause a copier on
the source side of fast-mode shadowing to get occasional
<ENDOFFILE> errors when reading a very small journal file.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System.Journaling
Platforms: All
DevKey: HYY966
Summary: Retry journal expansion with smaller size, rather than switching to a new file, if bigger size fails
Description:
This corrects an issue that could result in unnecessarily
many small journal files when the amount of free space on the journal
disk is less than the expansion size of the journal file.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.Shadowing
Platforms: All
DevKey: HYY603
Summary: Maintaining transaction states on the shadow (fast-mode only)
Description:
Fast-mode (aka "block-mode") shadows are now
transaction aware and maintain a list of incomplete transactions that
are applied on the shadow. To roll back incomplete transactions, stop
shadowing and execute
SET rc=$$ROLLBACK^SHDWCBLK(ShadowID)
where ShadowID is the name of the shadow, and "rc" is the result code
for the operation:
1 = success and 0 = failure.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System.Shadowing
Platforms: All
DevKey: HYY834
Summary: Correct a problem that caused shadow source nodes to be mistakenly deleted
Description:
This corrects an instance where choosing "this system as
source" in control panel may not show any server info (and may get an
<UNDEFINED> error) even if there is a running server servicing a
shadow.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System.Shadowing
Platforms: All
DevKey: HYY835
Summary: Improve error recovery in shadowing
Description:
This change improves the error recovery
processing in shadowing by addressing an issue affecting how stack was unwound
when errors are passed on to upper level routines.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.Shadowing
Platforms: Tru64, OpenVMS
DevKey: HYY946
Summary: Address a couple of issues of opening cachejrn.log in JRNINFO
Description:
This change does two things:
- It prevents occasional <NOTOPEN> errors
(generated from updjrninfo^JRNINFO) on the cluster data server
("source") of shadowing.
- It allows multiple jobs on the source to open CACHEJRN.LOG file for
READ simultaneously, resulting in some degree of performance
improvement on journaling and shadowing.
Note:
The latter item affects VMS clusters only. Read sharing is
already in use on Tru64 clusters.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System.Shadowing
Platforms: OpenVMS
DevKey: HYY951
Summary: Address <ENDOFFILE> errors in shadowing on VMS
Description:
This change corrects a problem where the source of fast-mode
shadowing (i.e., data server) on OpenVMS might get occasional
<ENDOFFILE> errors.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System.Shadowing
Platforms: All
DevKey: HYY953
Summary: Address a partition issue in cluster shadowing
Description:
This change corrects an issue that some component of cluster
shadowing might use more process memory than specified in Caché
configuration.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System.Shadowing
Platforms: All
DevKey: HYY956
Summary: Disable journaling ^%SYS("JRNINFO") (for cluster shadowing)
Description:
Updates to ^%SYS("JRNINFO") by JRNINFO server are no longer journaled.
This addresses an issue of cluster shadowing where the shadow of a
source server with no user activity is constantly seen as busy if
^%SYS("JRNINFO") is marked journaled (or "journal all globals" is set
in 5.0.x).
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System.Shadowing
Platforms: All
DevKey: HYY957
Summary: Cluster shadow keeps device open for the same JRNINFO server whenever possible
Description:
This change corrects a performance issue where each cluster
shadow request resulted in a JRNINFO server being jobbed off. Now,
JRNINFO servers corresponding to a cluster shadow stay around whenever
possible.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System.Shadowing
Platforms: All
DevKey: HYY986
Summary: Allow cluster shadow GUI on non-cluster platforms
Description:
This change corrects a situation where the control panel could report
an <UNDEFINED> error when attempting to manage a cluster shadow,
if the system running the shadow was different
in kind from the system running the cluster. An example of this would be
a Windows system shadowing a VMS cluster.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.Shadowing
Platforms: All
DevKey: RJF022
Summary: Compatibility-mode shadow should avoid reading beyond end of current journal
Description:
A correction to compatible-mode (record-mode)
shadowing has been made to prevent the source of shadowing from
sending journal records to the shadow destination which have not yet
been written to the current journal file
This corrects a problem
where the source of shadowing could get transient <FUNCTION> (or
other error) while processing the current journal file during a journal
switch. It also corrects an issue where, if the source of
compatible-mode shadowing crashes, the shadow destination may have
more recent completed transactions than what is available on the
source after recovery.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System.Shutdown
Platforms: All
DevKey: RJW945
Summary: Extra process started during shutdown for Windows 2003
Description:
Shutting down Caché on a Windows Terminal Server
system can leave a cache.exe process attached to the shared memory
object if ^SHUTDOWN takes more than about 3 minutes.
This residual
cache.exe process prevents the configuration shared memory from being
destroyed at shutdown. This prevents Caché from being restarted
without either rebooting Windows or terminating the residual process
with the Windows task manager.
This change properly shuts down all the processes.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: Utilities
Platforms: All
DevKey: CFL1150
Summary: Allow defining a cluster shadow on a system that doesn't support clustering
Description:
Prior to this change, Caché would refuse an attempt
to define the shadow for a cluster to be a machine type that did
not itself support clustering.
This has been corrected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: Utilities
Platforms: All
DevKey: LFT1292
Summary: Handle 2k corrupt directory better
Description:
This fixes a problem in integrity checking of very
old ISM databases. Running INTEGRIT would give false errors when
global name is not in the top pointer block.
This corrects the issue so that the
error is only given when there really are duplicate pointers in the
global directory.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: Utilities
Platforms: All
DevKey: MAK1123
Summary: rMACSAVE data is inconsistent
Description:
In prior versions, when saving MAC/INC from Studio, the data stored in
^rMACSAVE or ^rINCSAVE had the root node incorrectly formatted.
This
should be the $horolog value of the time this MAC/INC was last
changed.
This change sets the proper value in place.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Documentation Updates
The content of the Caché documentation evolves from release to
release in response to editorial improvements, updates to existing
material, and addition of new information. The following is a summary
of the most noteworthy changes to the Caché documentation
since the previous release:
- Caché I/O Device Guide
- Added further explanation of RMS file open mode parameter restrictions
- Caché ObjectScript Reference
- OPEN command: removed the RMS file subsection
- $ZSEARCH function: Windows-specific behavior
- Caché SQL Reference
- Corrected NULL and empty string usage/representation throughout
- CAST
- CHAR_LENGTH
- CHARACTER_LENGTH
- LTRIM
- RTRIM
- Clarified case-conversion functions functionality and use throughout
- %ALPHAUP: added Unicode and cautionary examples
- ALTER TABLE - added 5 restrictions:
- alter column with streams data
- add primary key constraints for IDKey and index
- drop constraints for foreign key and IDKey
- ALTER VIEW:
- added WITH READ ONLY and WITH CHECK OPTION to syntax
- explained privileges requirements
- CALL: added embedded SQL support
- CHAR: corrected for Unicode characters, non-numerics
- COALESCE: clarified string and number handling
- CONCAT: replaced the prior description with a new one
- CONVERT:
- added second syntactical form
- added description for SQL_DOUBLE data type
- CREATE INDEX, DROP INDEX: added descriptions of the restrictions when there is existing data
- CREATE FUNCTION, CREATE METHOD, CREATE PROCEDURE, CREATE QUERY: detailed description of SELECTMODE and RESULTS clauses, when PROCEDURE keyword unnecessary
- CREATE TABLE: added all 9 collations, more no-op keywords, and security configuration
- CREATE TRIGGER: updated the description of the ORDER algorithm
- CREATE VIEW:
- fixed WITH CHECK OPTION error in syntax
- added privileges requirements and security configuration
- DROP TABLE: added privileges requirements and foreign key restriction
- DROP VIEW: documented the restriction when the view is non-existent
- GRANT: SQL security configuration options added
- INSERT: RowID restriction described
- LENGTH: added second syntactical form
- ROLLBACK: Cached Query exception explained
- SELECT: expanded extrinsic functions description; reworded SELECT * note
- TRUNCATE: documented the handling of numeric literals that represent numbers too large or too small
- WEEK: fixed the algorithm for calculating the week of the year
- SQL Concepts:
- Comments: added the list of variables in .INT code
- Data Types: added BIGINT and notes on streams
- Host Variables: added notes on undefined variables, OREF dot syntax, and listings in .INT code comments
- Identifiers: Added the description of the IsValidRegularIdentifier method and its invocation as procedure call
- Literals: Completely rewrote the material
- NULL: added new page on NULL and empty string usage
- Reserved Words: documented the $SYSTEM.SQL.IsReservedWord method as procedure call
- Transaction: described the conditions under which cached queries are excluded; described the uniqueness lock
- Error Codes:
- added 16 new code values to list and to descriptions of commands
- added $SYSTEM.SQL.SQLCODE() method and procedure call
These are in addition to minor enhancements in examples, as well as
corrections and improvements to grammar and spelling.
This section provides a listing of changes between Caché
5.0.10
and
Caché
5.0.11.
This document contains several sections:
Caché News, Alerts and Advisories
From time to time, InterSystems publishes items of immediate
importance to
users of our software. These include
alerts, mission critical issues, important updates, fixes, and releases
of Caché.
The most current list can be obtained from the
InterSystems Website.
Users should check this list periodically to obtain the latest information on
issues that may have an effect on the operation of their site.
Online Documentation
As a convenience to our users, InterSystems provides
online access to documentation for recent versions of
Caché at the
InterSystems Website.
From the home page choose the "Caché" tab, and on the "Downloads" menu,
select "Documentation and Help Updates" or follow
this link.
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.
- Config Mgr
- CSP
- CSP.Gateway
- CSP.Tags
- Installation.Windows
- Networking
- Object
- Object.CDL
- Object.Class Compiler
- Object.Library
- Object.Storage.Default
- Object.Storage.SQL
- Object.Stream
- SQL.GateWay
- SQL.ODBC
- SQL.Query Processing
- System
- System.Backup/Restore
- System.StartUp
- Utilities
Category: Config Mgr
Platforms: All
DevKey: CFL993
Summary: Add Hyperevent Implementation to Config Manager
Description:
A new CSP parameter, Hyperevent Implementation, has been added.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: Config Mgr
Platforms: All
DevKey: CFL999
Summary: Convert Hyperevent parameter from old CSP apps on upgrade
Description:
New CSP Applications will be created with the Hyperevent
Implementation parameter equal to "Select on server". On upgrade,
existing CSP Applications whose Hyperevent Implementation parameter is
missing will have it created with the value "Use Java applet".
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: CSP
Platforms: All
DevKey: MXT525
Summary: Use XMLHttpRequest browser object instead of Java for hyperevents
Description:
This change introduces the optional use of the
XMLHttpRequest JavaScript object to implement #server. The actual
method used to implement #server is determined by a new Configuration
Manager parameter for CSP applications,
called "Hyperevent Implementation". "Hyperevent Implementation" has
four possible values that determine how #server is implemented:
- Use Java applet for #server
- Use XMLHttpRequest JavaScript object for #server
- Select implementation using browser JavaScript
- Select implementation using HTTP_USER_AGENT on server
where:
- "Select on server" means CSP pages that use #server will include
either an applet tag OR JavaScript to use the XMLHttpRequest object;
the selection will depend on the server HTTP_USER_AGENT CGI variable.
This option, "Select on server", is the default.
- "Use Java applet" states CSP pages using #server will always supply an
applet tag identifying the CSP Java broker applet; #server will always
use this applet.
- "Use XMLHttpRequest object" indicates CSP pages that use #server will
always include JavaScript that uses the XMLHttpRequest object to
implement #server.
- "Select in browser" means CSP pages that use #server will include BOTH
an applet tag and JavaScript to use XMLHttpRequest. The method used
will be chosen based on the availability of the XMLHttpRequest object
to the JavaScript code in the browser.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
Yes |
Category: CSP
Platforms: All
DevKey: MXT635
Summary: In 3.2 compatibility mode, &html will ignore < and > within <%...%>
Description:
In &html 3.2 compatibility mode, CSP will ignore < or
> within <% ... %>. This is meant to handle constructs like
&html< <% w "first->last" %> >
which are
encountered in Cache 3.2 WebLink applications.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: CSP.Gateway
Platforms: All
DevKey: CMT118
Summary: Improve the validation of the session token's fields after a failover/restart situation.
Description:
This change improves the validation of the session token's fields after
a failover (or web server/NSD restart) situation.
Previously, a request could be directed to an incorrect (or
unexpected) Caché server after a web server/NSD restart. This issue
could also result in requests in Virtual Host configurations being
directed to incorrect (or unexpected) Caché servers. The term, 'unexpected'
Caché servers, means a Caché server configured as an alternative to
the main (or default) server).
Editing the Gateway's server and/or application configuration on web
server/NSD startup would make problems of this nature more likely to
occur.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: CSP.Gateway
Platforms: All
DevKey: CMT192
Summary: Fix a problem in the transmission of form data in which CSP* variables (for example CSPToken) were placed at the end of a form posting more than 8K of data.
Description:
This change corrects an issue in the transmission of form data in which
CSP* variables (for example CSPToken) were placed at the end of a form
posting more than 8K of data. The problem manifested itself as such
forms failing validation checks on submission ('Illegal CSP Request'
errors).
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: CSP.Gateway
Platforms: All
DevKey: CMT193
Summary: Ensure that Gateway error messages sent in response to SOAP-based requests are formatted as SOAP fault messages (as opposed to HTML).
Description:
This change ensures that Gateway error messages sent in response to
SOAP-based requests are formatted as SOAP fault messages (as opposed
to HTML).
For example, if the Gateway is unable to connect to the Caché server
for the purpose of servicing a SOAP request, the following SOAP fault
will be returned:
HTTP/1.1 200 OK
Content-type: text/xml
Connection: close
Expires: Thu, 29 Oct 1998 17:04:19 GMT
Cache-Control: no-cache
Pragma: no-cache
<?xml version='1.0' encoding='UTF-8' standalone='no' ?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:s='http://www.w3.org/2001/XMLSchema'
SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'>
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring>CSP Gateway Error (version:5.1.0.423.0 build:663.775)</faultstring>
<detail>
<error xmlns='http://tempuri.org' >
<special>
Server Availability Error
</special>
<text>
Server is currently unavailable
</text>
</error>
</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
It should be noted that this facility can only work if the Gateway can
identify the incoming HTTP request as a SOAP-based request for
information. This may not be possible if a request for a SOAP-based
response is made via the HTTP GET method. It is, however, recommended
that requests for SOAP-based services be made through HTTP POST (or
related) methods. If the HTTP POST method is used, the Gateway can
identify SOAP-based requests by the associated content type.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: CSP.Tags
Platforms: All
DevKey: MXT543
Summary: Don't display argument in argument too long message for HyperEvent
Description:
A message is displayed when a HyperEvent method's
argument length is > 32000 characters.
With this change, the argument will not be
displayed since
it detracts from the clarity of the error message.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: Installation.Windows
Platforms: All
DevKey: TTS082
Summary: Packet-driver doesn't bind to multiple NICs
Description:
This changes corrects a situation where the packet-driver for Windows
2000/XP and 2003 Server
did not properly report all the network cards it had bound to.
Likelihood |
High |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Networking
Platforms: All
DevKey: GK323
Summary: $ORDER across ECP to restore the global vector when there is no answer
Description:
When $ORDER didn't find an answer across ECP, it sometimes left the
global vector naked reference invalid. This caused a
subsequent $ZREFERENCE to fail with wide character
error.
This change prevents that from happening.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Networking
Platforms: Windows
DevKey: TTS083
Summary: Fix Windows fatal error caused by packet driver on SMP systems
Description:
Prior to this change, the Caché packet driver would
cause a fatal Windows error when invoked on systems containing more
the two processors. This no longer happens.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Object
Platforms: All
DevKey: DLP1220
Summary: Index on %ID fails
Description:
This change corrects a problem where attempting to define an index
involving the %ID token would fail.
Likelihood |
Low |
Risk |
Medium |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Object.CDL
Platforms: All
DevKey: DLP1128
Summary: Change max routine size to 32k
Description:
The maximum routine size has been changed
from 40k to 32k. This will result in smaller OBJ routines and, for
large source files, more routines generated. This adjustment was
necessary in order to load files with methods with more than 32k of source
code.
Likelihood |
Low |
Risk |
Medium |
Ad Hoc |
No |
Enhancement |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: DLP1127
Summary: Fix bug in CompileRoutine^%occSystem where errors not properly reported
Description:
This corrects an oversight where the status code from the compile
was only being returned if the compiler flag to display errors was
set.
Now the status code is always returned.
Likelihood |
Low |
Risk |
Medium |
Ad Hoc |
No |
Enhancement |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK1071
Summary: Make sure variables do not leak from generator methods in class compile
Description:
If you write a generator method the compiler was not
making sure that any variables you create in this generator do not end
up in the partition. Now an exclusive new is done before running
generators for a class to prevent this possibility.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: Object.Library
Platforms: All
DevKey: MAK1149
Summary: MoveToEnd of file streams not working if directory not default
Description:
If you open an existing file stream stored in a
directory other than the current default directory (the one with the
CACHE.DAT file in it for this namespace) then the MoveToEnd method would
fail to work correctly.
This change corrects the problem.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: Object.Storage.Default
Platforms: All
DevKey: DLP1198
Summary: Reduce chances of generating a duplicate default storage global name
Description:
The default global name generator used by the
default storage class has been improved.
Note:
This default global name generator reduces the number duplicate global
names generated but it still does not guarantee uniqueness.
It is
still the responsibility of the user to make sure the global names
used (IDLOCATION, DATALOCATION, INDEXLOCATION and STREAMLOCATION) are
unique.
Likelihood |
Low |
Risk |
Medium |
Ad Hoc |
No |
Enhancement |
No |
Category: Object.Storage.SQL
Platforms: All
DevKey: DLP1207
Summary: Allow quotes & subscripts within stream LOCATION values
Description:
This change corrects an issue in the class compiler. In constructing
the initial expression for stream properties, it did not
properly handle values that contained quote characters.
This has been corrected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Object.Stream
Platforms: All
DevKey: MAK1033
Summary: FindAt doesn't work with larger streams/strings
Description:
This change corrects a problem in
the FindAt method in %Stream.Object. The method would not
calculate the correct position when it had read in two or more
20,000-byte chunks of data.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Object.Stream
Platforms: All
DevKey: MAK815
Summary: Redirect temporary file stream location
Description:
If the global ^%SYS("TempDir") is defined, this
is now used as the temporary location for stream data.
If this is not
defined, then Caché will use "" as the directory.
This
puts the stream data in the current directory which is normally the
location of the CACHE.DAT file.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: SQL.GateWay
Platforms: All
DevKey: MIT339
Summary: Disconnect active connection if %SQLGateway is killed
Description:
This change introduces a new class
%GTWConnection. Its %OnClose method disconnects an active connection
if the gateway is terminated.
Likelihood |
Low |
Risk |
Medium |
Ad Hoc |
No |
Enhancement |
No |
Category: SQL.ODBC
Platforms: All
DevKey: AND513
Summary: Fix a message sequence error/thread safety issue
Description:
The Caché ODBC driver has been externally thread-safe for quite some time now. For example,
if two threads were simultaneously operating on the same statement object, Caché ODBC
driver guarantees there will be no conflicts.
This change fixes the instances internally where there were
thread-related issues that could result in "message sequence errors".
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: SQL.ODBC
Platforms: All
DevKey: AND518
Summary: Add try/catch blocks to help exit critical sections in case of a crash
Description:
This change improves error handling in cases where ODBC
terminates abnormally and error recovery actions by the application
override the default actions taken by the operating system.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: SQL.ODBC
Platforms: All
DevKey: DPV2196
Summary: Query fails if schema name equals username
Description:
A problem has been fixed in ODBC/JDBC.
The first
time a query is Prepared, if
- a Cached Query exists for the statement, and
- the user is privileged for the statement,
an <UNKNOWN ERR> would get
passed back to the client under some conditions.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: SQL.ODBC
Platforms: All
DevKey: MIT235
Summary: Incorrect Preparsing for Decimal literal
Description:
This changes corrects a situation where a decimal literal in the first
column of a SELECT statement, for example,
SELECT 0.1, F1 FROM TESTCASE1234
would prevent parameter replacements from
being made.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: AK574
Summary: Set padcode before "next" loop
Description:
This change corrects an error that caused compile-time <UNDEFINED>
errors in SELECT statements with OUTER JOINs when certain
CacheSqlStorage "general mapping" features were used.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: AK582
Summary: Do streamless expression optimization
Description:
This change optimizes streamless
(sub)expressions (i.e. expressions without any fields)
in SELECTs and a few other places
by evaluating them only once at the beginning of the query.
Likelihood |
Low |
Risk |
Medium |
Ad Hoc |
No |
Enhancement |
Yes |
Category: SQL.Query Processing
Platforms: All
DevKey: AK597
Summary: Fix "pushlog" cloning of unary, streamless
Description:
This change corrects an error in optimization where certain query
conditions
were
"pushed down" and applied within the evaluation of a view that has a
GROUP BY clause.
This occurred in cases where the condition
included a unary operator or a {d ...} date expression.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: AK598
Summary: Fix 'opex' with many streamless expressions
Description:
This change remedies a situation which
caused incorrect processing or a likely run-time <UNDEFINED> error
when
- there were a large (more than 250) number of expressions, and
- these expressions had to be evaluated at the beginning of the query.
An example of this is an IN
condition on a collated field with more than 250 constants.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: DPV2192
Summary: SQL Datediff crashes with <ILLEGAL VALUE>
Description:
Caché SQL now supports a datepart of "ms" or
"milliseconds" for the DATEADD and DATEDIFF functions.
We also now
support SQL_TSI_FRAC_SECOND for the ODBC Scalar functions
- {fn TIMESTAMPADD()},
- {fn TIMESTAMPDIFF()}.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: DPV2200
Summary: A query with column < negative number returns wrong results
Description:
This corrects an instance where a query can return incorrect results
when
- there is a WHERE clause condition selecting attribute values
less than a negative value, for example, f < -5,
- there is an index on that column, and
- some of the rows are null in that column.
Likelihood |
Low |
Risk |
Medium |
Ad Hoc |
No |
Enhancement |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: DPV2228
Summary: Support space collation properly against NULL values
Description:
An error has been corrected
where a field value that used the SPACE collation compared against
NULL was not returning the correct results. For example, a query
like:
SELECT count(*) FROM SQLUser.MyTable WHERE MyField IS NULL
return the incorrect results if MyField's collation was SPACE.
Likelihood |
Low |
Risk |
Medium |
Ad Hoc |
No |
Enhancement |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: PVA050
Summary: Ensure use of rowid based on one field, and the field itself are equally optimized
Description:
This change adds a new feature. Previously, you could never use <viewcolumn>->x
syntax. Now, if view column maps to a base table column that supports arrow
syntax, the view column will support it as well. Note that arrow
syntax referring to a child table from a parent table is still not
supported for views because there is no way to specify whether the
child table pseudo column is 'selected' by the view. In addition, this
new feature will not work for views defined by SELECT DISTINCT, or
aggregated views, or UNION views.
Another new feature is that special columns %ID, %CLASSNAME,
%TABLENAME now work with arrow syntax. Thus ref->%CLASSNAME will
return the name of the referenced class.
Compatibility note:
This change addresses many issues relating to column qualification in
queries using views and subqueries. The extra qualification needed to
work around these issues will no longer be needed.
Previously, if a table has a reference called X, and a child table
called X, then X->col would work as long as both the referenced table
and the child table don't both contain a column called. 'col'.
With change, X->col will always get an ambiguity error if it there are
two ways to resolve "X->", irrespective of what follows the arrow.
There is no change to the behavior that if you have a regular
column called X, and a child table called X, "X->whatever" will be
acceptable - because there is no ambiguity about what "X->" means: it
cannot be referring to the regular column called X.
This situation is judged to be rare. Should it occur, it can be
resolved by
- explicitly renaming one of the table to avoid the conflict,
or
- using the SQL "JOIN" syntax instead of the Caché "arrow"
syntax.
Another upward incompatibility is that (contrary to other SQL
implementations and the standard), Caché allowed two items in the FROM
clause to have the same name, as long as one was a correlation name
and one was a table name. For example:
FROM T1 AS A, A
was allowed. This will now produce an error.
Likelihood |
Medium |
Risk |
Medium |
Ad Hoc |
Yes |
Enhancement |
Yes |
Category: System
Platforms: All
DevKey: HYY948
Summary: Fix <STRINGSTACK> from $SORTEND
Description:
Addressed a problem where $SORTEND may generate a
<STRINGSTACK> error when there are many SETs (hundreds of
thousands of, or even millions) to sort.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System
Platforms: All
DevKey: HYY954
Summary: Fix a problem with $SORTEND that could generate <ACCVIO> or <SYSTEM>
Description:
Under some circumstances $SORTEND would generate an
access violation or <SYSTEM> error.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System
Platforms: OpenVMS
DevKey: JO1811
Summary: Adjust code to avoid OpenVMS compiler bug
Description:
A problem has been resolved which could cause access
violations on OpenVMS from certain block split operations in 8KB databases
when more than 2GB of global buffers have been allocated.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System
Platforms: OpenVMS
DevKey: JO1823
Summary: Adjust OpenVMS mailbox code to avoid data corruption
Description:
A small problem in the internal mailbox code on VMS
systems has been corrected. This could have caused corruption of data
being returned on Caché's internal string stack in certain rare
circumstances, particularly during reads from TCP/IP devices.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System
Platforms: All
DevKey: SML473
Summary: Improve ECP dismount handling
Description:
Under some circumstances,
when a sufficient number of KILLs have been done to reduce the
number of global directory blocks needed by 1, the consolidation of
directory blocks can cause a
<DATABASE>
error during dismount.
ECP is more likely to provoke this rare problem but it can occur
without any ECP.
This change rectifies that possibility.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System.Backup/Restore
Platforms: All
DevKey: HYY959
Summary: Flush sorting in the case of using ZJRNFILT
Description:
This change addresses a situation
with journal restore when using a journal filter where SETs
may not get applied to the destination databases.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System.Backup/Restore
Platforms: All
DevKey: JO1816
Summary: Change Quiescence code to wait long if just the write daemon is still busy
Description:
the wait time in Caché backup, and other places where the
system waits for quiescence, has been extended.
If, after the
timeout period has expired, the system is quiet except for the write
daemon, the timeout is extended for up to 2 minutes to wait for the
write daemon to finish its current pass.
Previously on systems where
the write daemon routinely took more than the allowed timeout, a
backup might never succeed.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System.StartUp
Platforms: All
DevKey: TTS081
Summary: Correct long startup problem for Windows 2000 SP4
Description:
This change corrects a situation where
Windows startup would take a long time whenever
- the Caché configuration was marked as automatically
starting service in the system, and
- a recent (i.e. after TTS031) packet-driver had been
installed.
Likelihood |
High |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Utilities
Platforms: All
DevKey: GK291
Summary: Fixed %GCMP across ECP
Description:
^%GCMP didn't work across ECP. It was looking for a
legacy net connection id
NET(1,"ACTIVE","CPNU",<connection name>)
which wasn't
set.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: Utilities
Platforms: All
DevKey: PWC796
Summary: GBLOCKCOPY does not handle final $C(1) in pre-ISM 6.2 collated global properly
Description:
This change corrects a problem where globals in the ISM pre-6.2
collation that had a particular data pattern (final subscript of any
global node ending with $C(1)) could cause problems. The particular
symptom that was reported is a failure to convert the node properly
when using GBLOCKCOPY.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Documentation Updates
The content of the Caché documentation evolves from release to
release in response to editorial improvements, updates to existing
material, and addition of new information. The following is a summary
of the most noteworthy changes to the Caché documentation
since the previous release:
- High Availability Guide
- Reorganized the material and added a chapter called "Cluster Journaling" which covers cluster restore, recovery, and shadowing
- Reorganized ECP information by removing a large amount of material
from the GHA ECP chapter and moving it to the Distributed Data
Management book,
including a new appendix of guarantees and limitations
- Supported Platforms and Windows Installation
- Cache ObjectScript Reference
- Added time formats 5, 6, 7, & 8 to $ZDATETIME, $ZDATETIMEH
- Rewrote $ZTIMESTAMP special variable for local time variants
(Daylight Savings, etc.) and Time/Date interactions.
- Added class info section to $JOB special variable
- Cache SQL Reference
- Rewrote and expanded CREATE TRIGGER, DROP TRIGGER, Triggered Action pages
- Rewrote and expanded UNION page
- Rewrote Identifiers page, with updated character & length restrictions
- Added naming conventions/name conversions sections to CREATE TABLE
(table name & field name), CREATE VIEW, CREATE INDEX, CREATE
TRIGGER
- In SELECT specified naming conventions for AS clause values
- Added features to GRANT command
- Added note to SELECT on use of asterisk option
- Expanded the material on the UPDATE command, the Symbols table,
and the SQLCODE error code list
- Documented schema names, package names, and Configuration Manager
schema default in CREATE TABLE and CREATE VIEW.
- Completely rewrote Table page, renamed as Table Reference with new
syntax and description.
- Improved the clarity of the examples illustrating the difference
between the HAVING and WHERE clauses.
- Cache Class Reference
- Corrected EXTENTQUERYSIZE and EXTENTSIZE
- Organizational Changes
- Re-ordered the sequence of book collections on the documentation
home page and also re-ordered the sequence of books with each
group. Prior to this, they had been sorted alphabetically; now they
appear with the more important topics first.
- Changed the title of the short articles section from "Caché
Knowledge Base" to "Technical Articles" to make it more explanatory.
- Reworded the page headers to say "InterSystems Online
Documentation" instead of "Caché Online Documentation".
- Added a new home page item called "Documentation List" which
provides a list of the titles for all the books and all technical
articles sorted alphabetically.
These are in addition to minor enhancements in examples, as well as
corrections and improvements to grammar and spelling.
This section provides a listing of changes between Caché
5.0.9
and
Caché
5.0.10.
This document contains several sections:
Caché News, Alerts and Advisories
From time to time, InterSystems publishes items of immediate
importance to
users of our software. These include
alerts, mission critical issues, important updates, fixes, and releases
of Caché.
The most current list can be obtained from the
InterSystems Website.
Users should check this list periodically to obtain the latest information on
issues that may have an effect on the operation of their site.
Online Documentation
As a convenience to our users, InterSystems provides
online access to documentation for recent versions of
Caché at the
InterSystems Website.
From the home page choose the "Caché" tab, and on the "Downloads" menu,
select "Documentation and Help Updates".
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.
- Networking
- Object.XML
- SQL
- SQL.Query Processing
- SQLManager
- System
- System.Backup/Restore
- System.Cluster Specific
- System.I/O
- System.Journaling
- System.NWDS
- System.Shadowing
- System.StartUp
- System.Trans. Proc.
- Utilities
Category: Networking
Platforms: All
DevKey: GK296
Summary: Delay journal open transaction index calculation after ECP recovery
Description:
ECP can survive server restarts and crashes without
any client application involvement. During startup, if there were any ECP
client open transactions, the open transaction journal offset got stored in
the ^%SYS("ECPDELAYTR") global in case the system crashed again. The
global was never killed after successful ECP recovery.
So after many hours or days, if the system is restarted (for any
reason) it scanned from that remembered journal offset, which could
be many journal records. This would cause the next system restart to take a long
time, and some of the journal files may possibly have been deleted,
which will abort the rollback because of missing journal file.
With this change, the information will be
maintained in the WIJ file.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: Object.XML
Platforms: All
DevKey: JN140
Summary: Guard against internal dtds with no system or public IDs
Description:
An XML file such as this example
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE note [
<!ELEMENT note (to, from, heading, body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>Tova</to>
<from>Bill</from>
<heading>Reminder</heading>
<body>Don't forget the party this weekend!</body>
</note>
containing a
DOCTYPE but no SYSTEM or PUBLICID caused
ERROR #6301: SAX XMLParser Error: Unknown Error.
This change accommodates the missing information.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: SQL
Platforms: All
DevKey: DPV1970
Summary: Allow creation of view with query against linked table
Description:
An error has been fixed which prevented the creation of a view against a
table linked via the SQL Gateway.
With this change, SQL can now create such a VIEW.
Previously, this operation would report that the table
had no Master Map definition.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: SQL
Platforms: All
DevKey: DPV2047
Summary: Fix filing of node which only holds an embedded field
Description:
A deficiency has been fixed in which the insert/update of a serial field's
values through SQL might not be stored properly in the database.
The error occurred when the
serial field was stored in a global node by itself (without any other
fields stored in the same node).
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: SQL
Platforms: All
DevKey: DPV2222
Summary: Fix binding of fields with SPACE collation to Map Subscript definition
Description:
In previous versions of Caché, fields using a Space collation in a CacheSQLStorage subscript
expression of the form " "_{FieldName} were treated as expressions
rather than collated field values. This made the SQL Query Optimizer
less likely to use the index.
This is now corrected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: PVA056
Summary: A case of OUTER JOIN acting like INNER JOIN
Description:
A problem was fixed where an OUTER JOIN could
sometimes behave like an INNER JOIN.
This occurred when the join
column of the left side of the left join is an IDKEY, while the join
column from the right side is an indexed column that has a collation
different from EXACT.
Note:
While the problem has been fixed so the correct answer is returned,
this situation delivers poor performance. It is better to change the
collation of the column from the right side table to be EXACT, or to
not use primary key = IDKEY in the left side table.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: SQLManager
Platforms: All
DevKey: YSD683
Summary: SQL Manager: Delete Export/Import Generated Routines
Description:
This change corrects a problem in SQL Manager's export and import
class methods, %SQL.Export.Mgr.DeleteExportRoutine and
SQL.Import.Mgr.DeleteImportRoutine, that
prevented generated routines from being later deleted.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System
Platforms: OpenVMS
DevKey: JO1811
Summary: Adjust code to avoid VMS compiler bug in ginsert related to large buffer pools
Description:
This change resolves a problem that could cause access
violations in OpenVMS during certain block split operations in 8KB databases.
The problem occurred
when more than 2GB of global buffers had been allocated.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System
Platforms: All
DevKey: SJ1434
Summary: Fix problem with $BITLOGIC(~x,len), where x is ""
Description:
This fixes an error in $BITLOGIC where empty strings
would not get negated correctly if there were a length present and
only one argument, i.e. $BITLOGIC(~x,len).
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System
Platforms: All
DevKey: SJ1435
Summary: Fix problems with $BITLOGIC(x) and certain values of x
Description:
This fixes a problem with $BITLOGIC(X) for certain
values of X. A spurious error would be reported when the following
conditions were met:
- X was stored as a bitmap whose last byte was 1
- (($BITCOUNT(X)-1)/8+5)=$LENGTH(X)
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System
Platforms: All
DevKey: SJ1436
Summary: Fix problems with $BITLOGIC(u^v) for Unicode systems
Description:
This change corrects a condition that resulted in the generation of an
invalid bit string from $BITLOGIC(u ^ v) (i.e. XOR operation).
The error occurred on Unicode databases
when one of the operands was compressed and the other was
not.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System
Platforms: All
DevKey: SJ1474
Summary: Fix problem with $BITLOGIC on Unicode systems mixing narrow and wide bitstrings
Description:
This change corrects an error where,
under circumstances requiring conversion from bitlist to bitmap, an
incorrect result could occur using the
& (AND) $BITLOGIC operator. This only occurred on Unicode installations.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System
Platforms: All
DevKey: SML367
Summary: Fix DCP daemon rollback failure to record restored globals in journal file when it is shutdown.
Description:
When the DCP daemon is shut down, it will roll back
all opened transactions by remote client jobs.
However, it intermittently failed to record the restored globals into
journal file.
This caused the globals set be back to the
pre-rollback value when the server is restarted.
This change corrects that occurrence.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.Backup/Restore
Platforms: All
DevKey: HYY939
Summary: Fix the sorting code of journal restore
Description:
This change addresses a problem with journal restore
involving a CACHETEMP database of specified max size (i.e., max
explicitly set to a value greater than zero).
Under some circumstances, users could experience a
<SUBSCRIPT> or <UNDEFINED> error during journal restore.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.Cluster Specific
Platforms: All
DevKey: HYY863
Summary: Fix problems with journal restore during cluster failover or recovery
Description:
This change corrects
the following problems with cluster failover (after a node crash) or
cluster recovery at startup (after cluster crash):
- <NOTOPEN>main+1^JRNCLFOR, an error that would result in
cluster hanging (in the case of cluster failover) or startup aborting
(in the case of cluster recovery);
- incorrect data, as the result of journal records being restored in the wrong order.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.Cluster Specific
Platforms:
DevKey: JO1797
Summary: Correct 60-second pause on a Tru64 cluster system has been resolved
Description:
A problem which could cause a pause in the write daemon cycle
on a Tru64 cluster system has been resolved. Since global updates
are locked out during this phase of the write daemon cycle, this
appeared to an application as a global module pause.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System.Cluster Specific
Platforms: All
DevKey: JO1801
Summary: Prevent infinite loop in Write Daemon if startup fails
Description:
A problem with clusters where the write daemon would
get stuck in an infinite loop if it encountered a problem completing
its portion of cluster startup has been resolved.
This was found
during internal testing, it has never been seen in the field.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.I/O
Platforms: All
DevKey: LRS780
Summary: Fix file handle and memory leaks with JOB servers
Description:
A problem has been fixed that could lead to file
handle and memory leaks with JOB servers, mostly on Windows
platforms.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.Journaling
Platforms: All
DevKey: HYY738
Summary: Journal start will skip any non-journal file and start journaling using the next available name
Description:
Journal start used to abort when the name for the new
journal file was taken by an existing file other than a valid journal
file. The new behavior of is to skip the non-journal file and
use the next available name for the new journal file.
A
warning message is also displayed in cconsole.log.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System.Journaling
Platforms: All
DevKey: HYY758
Summary: Changes to journaling state take immediate effect
Description:
In previous versions,
some settings affecting globals may not have taken immediate
effect in existing processes. This was due to the fact that global
vectors were cached locally in the process.
The system setting that dictates whether
all or selected globals are journaled fell into this category.
This change enables the change of the system setting of journaling to
take immediate effect, even in existing processes.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.Journaling
Platforms: All
DevKey: HYY779
Summary: Use database redirections in transaction rollback that is part of a journal restore
Description:
This change corrects a problem where incomplete
transactions involving databases redirected elsewhere in the journal
restore were not rolled back properly.
The problem is present in all Caché releases.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.Journaling
Platforms: All
DevKey: HYY862
Summary: Start journaling using correct file count and file name in cluster recovery and failover
Description:
There was a problem introduced by a change to
version 5.0.5.
If a clustered system crashes shortly after journaling
switches/rolls-over to a new file, open transactions may not be
properly rolled back during the subsequent cluster recovery or
failover.
This change corrects that circumstance.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.Journaling
Platforms: All
DevKey: HYY868
Summary: Preventing descendants of a KILL from being journaled unless in transaction
Description:
This changes corrects a problem
in 5.0 where the descendants of a
KILL of a global node are journaled if the global is marked for
journaling, even though the KILL is NOT part of a transaction.
It
would be the correct behavior if the KILL is part of a
transaction,
but in this case it is not.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.Journaling
Platforms: All
DevKey: HYY893
Summary: Show sync journal I/O queue in cstat
Description:
Cstat has been enhanced with the “-j16”
option to display
jobs, if any, queued for synchronous journal I/O. For example,
Sync I/O queue (job:iowake:nextjob): 16
15:0: 13, 16:0: 15
The job # at the end of the line "Sync I/O queue" is the head of the
queue. It is followed by a list of jobs on the queue (not necessarily
in their order on the queue) that are NOT the last entry on the
queue. The nextjob field is the job # following this entry. In the
example above, the actual queue is:
head = job #16 -> job #15 -> job #13 = tail
Job #13 is not shown in cstat because it is the last entry on the queue.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
Yes |
Category: System.Journaling
Platforms: All
DevKey: HYY895
Summary: Add a missing MEMBAR in journal I/O queue operation
Description:
This addresses
a potential problem that might cause jobs to hang while waiting for journal I/O to complete.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System.Journaling
Platforms: All
DevKey: HYY896
Summary: Prevent journal daemon from hanging in infinite loop of clearing sync journal I/O queue
Description:
This correction prevents the journal daemon from hanging in an infinite
loop in some situations
involving a job (or
jobs) waiting in a synchronous journal operation (for example, synchronous
TCOMMIT).
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System.Journaling
Platforms: All
DevKey: HYY907
Summary: Fix a potential problem with switching journal file amid a journal I/O failure
Description:
Under some circumstances an attempt to manually switch the journal
file
via ^JRNSWTCH or the GUI equivalent could hang indefinitely.
This has been corrected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System.Journaling
Platforms: All
DevKey: HYY924
Summary: Update journal info in the wij even if there is no database update
Description:
In previous versions, the journal info in the wij was not updated when
there was no database update. This could become a problem in some situations
where the journal grew indefinitely (for example, with TS/TC or NN
records) without any database update, resulting in stale journal info in
the wij. If Caché aborted while in this state, users would see
a time-consuming journal restore
and transaction rollback at startup.
With this change,
the journal info is updated in the
wij as long as journal has grown, even if there is no database
update.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.Journaling
Platforms: All
DevKey: HYY925
Summary: Handle dead jobs on journal I/O queue
Description:
Under some conditions,
jobs in
synchronous journal operations (for example, synchronous TCOMMIT) could hang
if killed while the journal daemon is retrying a failed I/O
operation.
This change prevents that from happening.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.Journaling
Platforms: All
DevKey: HYY931
Summary: Fix <ACCVIO> in dejournaling
Description:
This change eliminates a sporadic access violation error in dejournaling.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.Journaling
Platforms: All
DevKey: HYY933
Summary: Clear wij journal info if journaling didn't start at startup
Description:
If for some reason journaling failed to start at Caché
startup, the journal info in the wij would remain stale even if
databases are subsequently updated (without journaling). At the next
startup, the stale journal info in the wij could cause the previous
database updates (when journaling was off) to be overwritten by the
stale data from the journal.
This has been corrected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.NWDS
Platforms: All
DevKey: DAS597
Summary: Fix NWDS mapping of ^rINDEX, ^rINDEXCLASS, ^oddPKG, etc.
Description:
In an NWDS configuration, some globals were not
properly mapped. This resulted in the SourceControl class being
unaccessible from the client.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.Shadowing
Platforms: All
DevKey: HYY909
Summary: Fix a performance problem with fast mode shadowing
Description:
In Caché version 5, fast mode shadowing may
suffer a
performance degradation if journal file grows substantially. This
change addresses this issue.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.StartUp
Platforms: Windows
DevKey: TTS081
Summary: Correct Caché service long startup problem on Windows with packet-driver
Description:
When the packet-driver service is configured to
start automatically, Caché could take a long time to start.
This has been corrected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.Trans. Proc.
Platforms: All
DevKey: HYY845
Summary: Address a couple of issues in DCP server rollback
Description:
This change corrects a problem where the DCP server may
fail to roll back open transactions under certain circumstances.
One such situation, for example, occurs when
a DCP server terminated involuntarily at OS level.
In this case, it left some
incomplete transactions behind, which the succeeding DCP server would
failed to roll back.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.Trans. Proc.
Platforms: All
DevKey: HYY888
Summary: Log and generate <ROLLFAIL> upon error in TROLLBACK
Description:
When error occurs in TROLLBACK, <ROLLFAIL> is now
generated and an error message is logged in the cconsole.log.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
Yes |
Category: Utilities
Platforms: All
DevKey: LFT1258
Summary: Have GBLOCKCOPY use an alternate OLD dir.
Description:
GBLOCKCOPY was using a subdirectory called "old" for
saving temporary data. This changes that to be called "pre-gbcopy",
so that it will not duplicate a commonly used name like "old".
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Documentation Updates
The content of the Caché documentation evolves from release to
release in response to editorial improvements, updates to existing
material, and addition of new information. The following is a summary
of the most noteworthy changes to the Caché documentation
since the previous release:
- ObjectScript
- Added the description of the "*variable" usage to the
$ZTRAP special variable.
- Rewrote descriptions of HALT and ZTRAP commands, $HALT special
variable.
- Rewrote LOCK command description for multiple locks and
subscripted arrays and updated ^$LOCK and
^$ROUTINE structured system variables.
- Added TROLLBACK 1 option and other changes to TROLLBACK and TSTART
commands.
- Made a number of corrections to the $ISOBJECT and
$ZCONVERT functions,
and to the special variables:
$HOROLOG,
$STACK,
$ESTACK,
$ZTRAP,
$X,
$Y,
and
$ZA.
- Revised the logical operators section,
& and &%amp;, precedence and nesting, and '= operator for
the “Operators and Expressions” chapter of Using
Caché ObjectScript.
- IO Device Guide
- Rewrote Open command mode options for
Interprocess Communication.
- Added material describing the differences in printer handling on
UNIX and Windows.
- High Availability Guide
- Updated the material on Backup, Failover, and Journaling.
These are in addition to numerous, minor enhancements in examples, and
corrections to grammar and spelling.
This section provides a listing of changes between Caché
5.0.8
and
Caché
5.0.9.
This document contains several sections:
Caché News, Alerts and Advisories
As necessary, InterSystems publishes items of immediate
importance to
users of our software. These include
alerts, mission critical issues, important updates, fixes, and releases
of Caché.
The most current list can be obtained from the
InterSystems Website.
Users should check this list periodically to obtain the latest information on
issues that may have an effect on the operation of their site.
New Platforms
This Cache version adds support for the following new platform:
- Windows Server 2003 for 64-Bit Itanium-Based Systems
Online Documentation
As a convenience to our users, InterSystems provides
online access to documentation for recent versions of
Caché at the
InterSystems Website.
Once there, choose the "Caché" tab, and on the "Downloads" menu,
select "Documentation and Help Updates".
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.
- Config Mgr
- CSP
- Languages
- Object
- Object.ActiveX
- Object.Library
- Object.Soap
- Object.Storage
- Object.XML
- SQL
- SQL.JDBC
- SQL.Query Processing
- Studio
- System
- System.Backup/Restore
- System.I/O
- System.Lock
- System.StartUp
Category: Config Mgr
Platforms: All
DevKey: CFL962
Summary: Fix JournalZGlob
Description:
This change corrects a circumstance
where the Config Manager would set the wrong value for the
JournalZGlob parameter.
This would cause globals beginning with "Z" or "z" not to be journaled
when the user intent was the opposite.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: CSP
Platforms: All
DevKey: MAK649
Summary: Named user license for CSP session not decremented correctly if session ended immediately
Description:
For a CSP page logged in with a new named user license and
'%session.EndSession=1', the license associated with the most recent CSP
session was not released. This has been corrected; the named user license
for a CSP session is decremented correctly if its session ends immediately.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: Languages
Platforms: All
DevKey: CDS423
Summary: Always generate QUIT at end of procedure
Description:
Under some circumstances,
the ObjectScript compiler generated incorrect
object code at the end of a procedure.
This could result in various
errors at the end of the procedure, for example <SYSTEM>
or <NO CURRENT OBJECT>.
This only happened if all the following conditions were met:
- the procedure ends with an IF statement;
- the last command of the IF statement is QUIT;
- the last line of the procedure contains all of -
- the QUIT,
- the closing brace for the IF,
- and the closing brace for the procedure.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: Object
Platforms: All
DevKey: MAK760
Summary: Connected property of FtpSession object still set to 1 (=True) after timeout
Description:
If the FTP connection times out, the Connected
property of the %Net.FtpSession object was still true. With this
correction, it is now correctly reset to false.
Likelihood |
Medium |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Object.ActiveX
Platforms: Windows
DevKey: JN133
Summary:
Description: Facilitate Callback functionality for Delphi Clients of CacheObject (ActiveX)
Delphi has Edit/Text box windows with a 'Text' property. The windows do not
support OLE Automation, so the SetOutput() method of CacheObject.Factory is
unable to access them.
DelphiCallback is a new component. It is an ActiveX control that can be
placed on a visual programming environment form. To use it, call the
CacheObject.Factory.SetOutput() method, passing in the name of the
DelphiCallback control. At runtime, the control is invisible but will
trigger a 'TextChanged' event when its Text property is set. This event
receives the Text written out by Cache.
Note: Use this component with Delphi Version 7 and earlier. Delphi Version 8
uses native .NET components that support the existing
CacheObject.Factory.SetOutput() method.
How to use this callback with Delphi 7
- Create a Delphi 7 Windows Forms Project
- From the Project menu, select Import Type Library. Scroll through the
list and select CacheObject, select the Install button, and follow the
prompts.
- From the Components menu, select Import ActiveX Control. Scroll through
the list and select DelphiCallback. Then, select the Install button and
follow the prompts.
- Add a TEdit box, a TButton , a TCallback, and any other components to the
form.
- Doubleclick the form to enter code for the form's creation, button press,
etc.
- Click the TCallback. From the Object Inspector window, select events, and
create an event for OnTextChange. This will tie the callback to the TEdit
box.
Here is sample code assuming a TextBox called Edit1 on a Form called TForm1 with the
OnTextChange event called TextChanged. Text shown in
boldface was added to the code generated by Delphi.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, OleCtrls, DELPHICALLBACKLib_TLB,
StdCtrls, CacheObject_TLB;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Callback1: TCallback;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure TextChanged(ASender: TObject; const p_bstrText: WideString);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Factory : IFactory;
Connected : Boolean;
ConnectString : string;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
Dispatch: IDispatch;
begin
Factory := CoFactory.Create;
ConnectString := Factory.ConnectDlg('Connect to Cache');
Connected := Factory.Connect(ConnectString);
If Connected = False Then
Begin
ShowMessage('Could Not Connect');
End
else
Begin
Dispatch := Callback1.DefaultInterface;
Factory.SetOutput(Dispatch);
End
end;
procedure TForm1.Button1Click(Sender: TObject);
var Person: Variant;
begin
Person := Factory.New('Sample.Person', 1);
If VarIsNull(Person) or VarIsClear(Person) then
Begin
ShowMessage('Could not create person');
End
Else
Begin
Person.Name := 'Test Person';
Person.PrintPerson;
End
end;
procedure TForm1.TextChanged(ASender: TObject; const p_bstrText:
WideString);
begin
Edit1.Text := Edit1.Text + p_bstrText;
end;
end.
How to use with VB
- Create a new VB standard executable.
- From the Project Menu, select Components. Scroll through the list and
select a checkmark next to "DelphiCallback 1.0 Type Library." This will add
a Component on the Components Tab.
- From the Project Menu, select References. Scroll through the list and
select a checkmark next to "CacheObject".
- Add a TextBox, Callback (added from above), and other controls to the
form.
- Hook up the text of the Textbox to the Callback. Double-click the
Callback object. In this TextChanged method, set the text to the desired
text. The output from the Factory's SetOutput() method is contained in the
string passed to this method.
This is sample code assuming a Textbox called Text1 and CommandButton
Command1:
Private Sub Callback1_TextChanged(ByVal p_bstrText As String)
Text1.Text = Text1.Text & p_bstrText ' Add the Text to the TextBox
End Sub
Private Sub Command1_Click()
Dim F As New CacheObject.Factory
Dim C As String
Dim P As Object
C = F.ConnectDlg("Connect Me to the Samples Namespace Please")
If F.Connect(C) = False Then
Exit Sub
End If
F.SetOutput Callback1 ' Hook up the Callback Control to CacheObject Factory
Set P = F.New("Sample.Person")
P.Name = "Jamie"
P.PrintPerson ' Output should appear in the TextBox
End Sub
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Category: Object.Library
Platforms: All
DevKey: DLP1254
Summary: Validate MAXLEN parameter in IsValid generator for %String
Description:
The %String MAXLEN parameter must be a positive
integer. Prior versions of Caché did not check MAXLEN for
validity.
This corrects the oversight in this class.
Likelihood |
Low |
Risk |
Medium |
Ad Hoc |
No |
Enhancement |
No |
Category: Object.Library
Platforms: All
DevKey: MAK797
Summary: Enhance %Net.FtpSession so it can support both PASV mode and non-PASV mode for file transfers
Description:
The ftp client provided by %Net.FtpSession now supports both PASV and
non-PASV mode for transferring data. Change the default PASV mode by
setting the property UsePASV to 0.
Use the ChangeUser method to modify the current user logged in.
Sending LIST plus a space character even when there was no pattern caused a
problem. This has been corrected.
Likelihood |
Low |
Risk |
High |
Ad Hoc |
Yes |
Enhancement |
Yes |
Category: Object.Library
Platforms: All
DevKey: MAK877
Summary: Relationship object was not keeping track of disconnected items correctly
Description:
If you removed an item from a relationship with the
Remove method,
and then you inserted the same item back into the relationship,
the insertion operation was not restoring the connection
between the two objects properly.
The referred-to object was thus not being saved when its referrer was
saved.
This is now fixed.
Likelihood |
Medium |
Risk |
High |
Ad Hoc |
No |
Enhancement |
No |
Category: Object.Library
Platforms: All
DevKey: MAK936
Summary: Read without a timeout in %Net.FtpSession class can cause hang
Description:
When an application calls the NameList method in
%Net.FtpSession,
that method issued a read without a timeout on it.
The lack of the timeout could cause a hang
in the presence of a
bad network connection. The read has been changed to honor the same timeout as all the
other reads.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: Object.Soap
Platforms: OpenVMS
DevKey: JCN494
Summary: Problem when using the WSDL Reader on OpenVMS
Description:
As an enhancement to Cache 5.0.5,
URL parsing was removed from Caché code.
Instead, Caché used the facilities of the underlying Xerces
parser to process URLs.
On OpenVMS, this caused an opcode fault. The change rebuilds the
Xerces parser properly for OpenVMS.
Likelihood |
High |
Risk |
High |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Object.Storage
Platforms: All
DevKey: DLP1115
Summary: Change deep save scheduling of disconnected related objects
Description:
Saving
the object instance of a parent in a parent-child relationship now
succeeds when the reference to the child is removed from the
relationship.
In some more complex transactions, a child object could both be modified
(requiring it to be saved), and removed from its relationship to its
parent.
This would result in validation failures when the save of the
(previous)
parent object was attempted.
This correction changes the behavior.
Any
objects deleted from relationships are removed from
the save set so that they do not cause validation errors in saving the
parent.
These objects are examined after the save set is constructed.
Likelihood |
Low |
Risk |
High |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Object.Storage
Platforms: All
DevKey: DLP1257
Summary: Fix save of disconnected objects when parent object is not modified
Description:
When a relationship is severed between two objects, a record of that
is kept in the relationship object.
Prior to this change, under some circumstances Caché might miss
this fact and not save the new relationship state.
With this change, the new state is properly saved.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: Object.XML
Platforms: All
DevKey: JN193
Summary: ParseStream of %XML.TextReader caused segmentation fault
Description:
The XML parser used by %XML.TextReader uses a length value to indicate
how much data it has room for in its buffer. Due to an oversight, one
part of the routine was treating it as bytes and another as
characters.
This caused buffer overrun conditions when Unicode characters were
read and could result in fatal errors on some systems.
This change makes the length interpretation uniform, and eliminates
the error.
Likelihood |
High |
Risk |
High |
Ad Hoc |
Yes |
Enhancement |
No |
Category: SQL
Platforms: All
DevKey: BJB289
Summary: KeepClassUpToDate setting unprocessed in "tune" procedure call
Description:
Prior to this change, when TuneTable had been run, all classes were
marked as modified and requiring
recompilation. This happened regardless of the setting of the
"KeepClassUpToDate" argument to TuneTable.
Now, only the tuned tables are marked as being updated.
Likelihood |
High |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: SQL
Platforms: All
DevKey: DPV2029
Summary: Prevent some <MAXSTRING> errors in table compilation for some really large classes
Description:
The number of properties in a class has been increased from 430 to about 800
mapped to a single node.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: SQL
Platforms: All
DevKey: DPV2180
Summary: Lock escalation is now per-table
Description:
The lock escalation is now performed on a per-table basis.
Caché has had the concept of lock escalation for some time. This
is when "X" number of INSERT/UPDATE/DELETE/Saves occur within a single
transaction, the next lock acquired for the table is a table-level
lock. This prevents the Caché system lock table from filing up too
quickly.
But, if an application inserted 1000 rows into table A and then 1 row
into table B, table B would acquire a table-level lock. This is
because the lock escalation threshold counter was incremented for each
save in all tables.
With this change, there is a separate counter for each table.
Therefore, the lock escalation only occurs on a table when that table reaches
the lock escalation limit within a transaction (the default limit is
1000).
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: SQL
Platforms: All
DevKey: DPV2208
Summary: Fix <UNDEFINED> error on compile
Description:
This change corrects an instance where an <UNDEFINED> error may occur during the
table compilation phase of the class compiler. Caché reports the
error
- if a property in the
class uses a datatype with StorageToLogical and LogicalToStorage
methods,
- and the property is in the IDKEY index,
- and the table is a
child table.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: SQL.JDBC
Platforms: All
DevKey: AND415
Summary: Purge JDBC input before reporting stored procedure errors
Description:
When Caché detected a
stored procedure parameter mismatch error,
it immediately raised an exception.
In some instances, this leaves the
input buffer with data that was supposed to be consumed. The
subsequent call would then fail with a message sequencing error.
This change clears the buffer so sequencing errors do not result from
the exception being reported.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: AK576
Summary: Don't loop below DISTINCT fields
Description:
This change improves the speed of certain queries with GROUP BY or
DISTINCT, especially when these operations can be assisted by an index.
If a query has DISTINCT or GROUP BY and no aggregates need to be
processed by the query, execution terminates as soon as all the DISTINCT
field values become known.
Note: the optimization will not be evident in Show Plan.
Likelihood |
Medium |
Risk |
High |
Ad Hoc |
No |
Enhancement |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: DPV2145
Summary: Fix convert() to SQL_DATE failure when CASE is used in query
Description:
This correction changes the SQL CASE statement to return its result
as
the datatype of the result of the first CASE condition.
All the
values returned by CASE are supposed to be of the same datatype, but
Caché does not
enforce this. So if the first condition returns a DATE,
the column will be of datatype
DATE.
If a later condition returns an INTEGER,
the value will be treated as a DATE value.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: DPV2210
Summary: Fix erroneous SQLCODE=-29 error with -> syntax and an unrelated sub-query in the FROM clause
Description:
A query such as
SELECT a.spouse->name FROM sample.person a,
(SELECT contact FROM sample.vendor) b
containing a sub-query of an unrelated table
would fail with an SQL error code of -29.
This change allows Caché to properly handle this case.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: DPV2213
Summary: Fix UPDATE Filing code with more than 200 fields in a node and delimited strings in use
Description:
This change corrects an error where Caché
would report a <MAXSTRING> error
during the table compilation phase of the class compiler if
%CacheSQLStorage is used, and more than 200 fields are stored in a
single node using a delimited string storage structure.
Delimited String storage simply means:
^glo(id)=field1^field2^field3^...^fieldN
where each field in this example is delimited by "^".
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: Studio
Platforms: All
DevKey: DVU1056
Summary: Changed property tree handling in Query wizard
Description:
The performance of the Studio New Query Wizard could be poor in a namespace
that contained many classes with many relationships among the classes. The
performance has been improved.
The Query Wizard
is initializes only the data for the levels the user
actually explores.
Likelihood |
Medium |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: Studio
Platforms: All
DevKey: JN137
Summary: Indicate syntax error when missing final closing brace of class definition
Description:
The class syntax checker has been fixed to correctly report an error
when the final closing brace of a class definition is missing. In
previous versions, this invalid syntax was unreported.
Likelihood |
High |
Risk |
Medium |
Ad Hoc |
No |
Enhancement |
No |
Category: Studio
Platforms: All
DevKey: MC467
Summary: Set debug devices to use UTF8 mode
Description:
In previous versions, Caché failed to set UTF8 mode for devices
used in debugging. This resulted in non-Latin characters (for
example, Japanese) being displayed incorrectly.
This change rectifies that situation.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System
Platforms: Linux, AIX, HPUX, OpenVMS
DevKey: HYY932
Summary: Correct $SORT* in handling double type values on 64-bit platforms
Description:
This change addresses a issue with sorting (started and ended via $SortBegin and
$SortEnd, resp.) on 64-bit platforms. Global nodes that are
set to values of double type may attain incorrect values after
sorting. Since sorting is enabled in journal restore in 5.0.5 and
later, journal restore was affected by the problem too.
Note: A 64-bit platform is one where we use 64-bit
pointers. A platform where we use 32-bit pointers and 64-bit integers
(such as, 4.1 for VMS) is not considered 64-bit.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System
Platforms: Linux
DevKey: JLC604
Summary: Fix OREF comparison error in Linux math functions
Description:
This change corrects an error that caused an <INVALID TYPE> error when comparing
an OREF to a non-null string. Now this comparison returns 0 (false).
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System
Platforms: All
DevKey: JLC612
Summary: Fix error in $NORMALIZE()
Description:
This change corrects the calculation for $NORMALIZE(<number>,-1) that could incorrectly return
zero in some circumstances.
For example, prior to this change, the sequence
Set x = 3.5
Write $NORMALIZE(x, -1)
would correctly return the value 3. However, the sequence
Set x = 7 / 2
Write $NORMALIZE(x, -1)
would return the value 0.
Now it returns 3 as it should.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System
Platforms: All
DevKey: SML399
Summary: Fix access violation on $zu(156) to traverse lock table.
Description:
There is a small chance that ^LOCKTAB or ^$LOCK SSVN
could get an access violation when there is heavy lock table
activity.
This change prevents that from occurring.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.Backup/Restore
Platforms: All
DevKey: HYY921
Summary: Fix problem with restoring to a bigger existing database
Description:
Under certain circumstances, an attempt to restore a saved database file
into a bigger existing database can cause data corruption resulting in
<DATABASES MAP LABEL> errors and system hangs.
With this change, the data corruption no longer occurs.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System.Backup/Restore
Platforms: All
DevKey: LRS772
Summary: Avoid inadvertent restore of mgr database with EXTSELCT^DBREST
Description:
An error in the non-interactive API for restoring backups,
$$EXTSELCT^DBREST, has been fixed. The result of the error
is that the
manager's database could be inadvertently restored.
This would happen even if it was not specified
in the restore list. If it were present in the backup archive and the
file containing the restore list contained a blank line,
the manager's database would be overwritten.
This could
also happen if the calling process had enabled $ZEOF handling.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.I/O
Platforms: All
DevKey: LRS775
Summary: Fix crash with long Windows printer names
Description:
In previous versions, a process would crash if it attempted to open a
Windows printer device with a name longer than 69 characters (including the
"|PRN|" prefix). Now, length of up to 256 characters is supported with a
<NOTOPEN> error occurring for a length greater than 256.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.Lock
Platforms: All
DevKey: SML457
Summary: Display DTM lock owner with remote PID
Description:
If a lock is held by a remote DTM client, the LOCKTAB and Control
Panel display will now append a "/" followed by the process ID of the
owner on the remote DTM system to the lock display as a monitoring aid.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.Lock
Platforms: All
DevKey: SML464
Summary: Don't let ZA locking get lock count overflow
Description:
On earlier versions of Caché, it was possible for the
statement
to get a <COMMAND> error when
$ZU(69, 8) is set.
When it is not set,
it should not
get this error because ZA works like the LOCK command. This change fixes
this issue.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.StartUp
Platforms: All
DevKey: MAK922
Summary: Make sure %CSP.Daemon process is started in %SYS namespace
Description:
Prior to this change, the %CSP.Daemon process was
getting started in the implied namespace because this is the
namespace the startup code is in before it calls the function to start
the daemon. Now the daemon swaps to %SYS namespace.
Likelihood |
High |
Risk |
Medium |
Ad Hoc |
No |
Enhancement |
No |
Documentation Updates
The content of the Caché documentation evolves from release to
release in response to editorial improvements, updates to existing
material, and addition of new information. The following is a summary
of the most noteworthy changes to the Caché documentation
since the previous release:
- In the Caché I/O device guide:
- Added the OPEN and USE options (positional and keyword) for the
COM port
- Fixed and updated the UNC section for printer names
- In the Caché SQL Reference book:
- Added new pages for
- %CHECKPRIV,
- GROUP BY,
- HAVING,
- the new date and time constructs {d ...}, {t ...}, and {ts ...},
- and variables including %msql, %ROWCOUNT, and SQLCODE
- Added %msql information to the material on CREATE
TABLE, CREATE VIEW, GRANT, and REVOKE
- Updated the information on CREATE TABLE
%Description adding explanations of the
%FILE, %NUMROWS, and %ROUTINE options
- Reworked and expanded the material on dates and time including:
CURRENT_TIME, CURTIME, HOUR, MINUTE, SECOND,
CURRENT_TIMESTAMP, GETDATE, NOW,
TO_DATE and TO_CHAR
- Added descriptions of the
%DELDATA and %NODELDATA options for DROP
TABLE
- Clarified the explanations of
%DB_OBJECT_DEFINITON and added cross-references to
%CHECKPRIV
for GRANT and REVOKE.
- Improved and expanded the examples showing SELECT usage with more
varied option combinations and more explanatory information on each example.
- Changed the browser stylesheets to remove excess leading spaces from lists
appearing inside table cells
- Added the lead items from the Glossary of Terms to the word index
- Added Itanium as a supported platform for Windows
These are in addition to numerous, minor enhancements in examples, and
corrections to grammar and spelling.
This section provides a listing of changes between Caché
5.0.7
and
Caché
5.0.8.
This document contains several sections:
Caché News, Alerts, and Advisories
From time to time, InterSystems publishes items of immediate
importance to
users of our software. These include
alerts, mission critical issues, important updates, fixes, and releases
of Caché.
The most current list can be obtained from the
InterSystems Website.
Users should check this list periodically to obtain the latest information on
issues that may have an effect on the operation of their site.
Online Documentation
As a convenience to our users, InterSystems provides
online access to documentation for recent versions of
Caché at the
InterSystems Website.
From the home page choose the "Caché" tab, and on the "Downloads" menu,
select "Documentation and Help Updates".
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.
- Control Panel
- CSP
- CSP.DreamWeaver
- CSP.Gateway
- Languages
- Networking
- Object
- Object.Soap
- Object.XML
- SQL.GateWay
- SQL.JDBC
- SQL.ODBC
- SQL.Query Processing
- Studio
- System
- Utilities
Category: CSP
Platforms: All
DevKey: MAK918
Summary: Use streams to hold more than 32K of data in CSP forms
Description:
If you have a form in a CSP page with a textarea,
and the submitted data in the textarea is longer than 32K
characters, the CSP server now automatically creates a stream to hold
the data and returns the stream OREF as the result of
%request.Data("txt",1).
This
means that for any fields that could be larger than 32k you should
code something like:
Set value=%request.Data("fieldname",1)
If $isobject(value) {
; Treat this as a stream
} Else {
; Treat this as a regular string
}
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Control Panel
Platforms: All
DevKey: CFL1029
Summary: Closing the backup status window may cause the system to hang
Description:
Under some circumstances, closing the status window
of a GUI backup could
result in the system hanging. This change corrects that.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: CSP
Platforms: All
DevKey: MAK994
Summary: Improve CSP license accounting
Description:
If a request for a new CSP page comes in which
causes a new session to be created,
and a serious error occurs before the
request is complete,
there are situations where the %cspServer process may HALT after
allocating a license but before storing the session information in
^%cspSession.
Should this occur, the license will never get released because the
%CSP.Daemon process will never detect this session timeout (there is
no entry in ^%cspSession).
With this change, the %cspServer process inserts an
entry in ^%cspSession
before allocating a license. Should the new process terminate abnormally, this license
will still get released by the %CSP.Daemon process.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: CSP
Platforms: All
DevKey: MXT583
Summary: Close CSP security vulnerability
Description:
This change removes support for URL and FILE query parameters of
%XML.Utils.SchemaServer so that arbitrary file viewing is no
longer possible.
Likelihood |
Low |
Risk |
High |
Ad Hoc |
No |
Enhancement |
No |
Category: CSP
Platforms: All
DevKey: MXT585
Summary: Fix %CSP.DwxUtils security hole that allows running of arbitrary classmethod
Description:
This change closes a %CSP.DwxUtils security hole
that allows running of an arbitrary classmethod.
Likelihood |
Low |
Risk |
High |
Ad Hoc |
No |
Enhancement |
No |
Category: CSP.DreamWeaver
Platforms: All
DevKey: MXT557
Summary: Dreamweaver extension changes for MX2004 and error fixes
Description:
Dreamweaver MX2004 changed the mechanism needed for
installing plugins. This change contains the modifications to the
Caché plugin necessary for it to work with MX2004 as it has
with earlier Dreamweaver versions. Corrections were made to fix
uninstall problems uncovered in earlier releases.
Likelihood |
High |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: CSP.Gateway
Platforms: All
DevKey: CMT116
Summary: Posting small binary files as multi-part MIME attachments may fail
Description:
This change corrects a problem where attempting to post small binary
files as multi-part MIME attachments could result in an error return.
This issue was particularly relevant to files containing the NULL
(ASCII 0) character in the first few bytes. This location, for example, is usually
reserved for header information in image and zip files.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: CSP.Gateway
Platforms: All
DevKey: CMT134
Summary: Gateway and Caché 'textarea' submissions greater than 32K may fail
Description:
This change corrects an error in the Caché
Version 5
communications protocol
between the Gateway and Caché. Prior to this, 'textarea' submissions
greater than 32K could fail.
Likelihood |
Medium |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: CSP.Gateway
Platforms: All
DevKey: CMT142
Summary: Hyperevents may fail in non-cookie session-management mode
Description:
Hyperevents may fail in
non-cookie, session-management mode if the session token (CSPCHD) was not passed as the
first hidden field in the form's posted data.
This could also happen in regular CSP forms, but more rarely.
This changes corrects this situation.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: CSP.Gateway
Platforms: All
DevKey: CMT177
Summary: Fix a problem in posting the contents of 'textarea' elements greater than 32K under some circumstances
Description:
This change corrects an issue involving a POST of a textarea element
containing more than 32K characters. Under some circumstances, the
textarea content could be silently truncated.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: CSP.Gateway
Platforms: Linux
DevKey: CMT182
Summary: Changes to ensure that the Gateway works with iPlanet/Sun ONE web servers under Linux
Description:
Sun has changed the default behavior of the Sun ONE (formerly
iPlanet) v6.1 server. The change mainly involves requests processed through NSAPI
extensions.
The effect of the change is that the server now assumes responsibility for
formulating and dispatching HTTP response headers. Previous versions
would allow NSAPI extensions to stream their own headers back to the
client and wouldn't intervene in this process unless the
module explicitly called the NSAPI header formulation and dispatch
functions.
This change includes essential modifications to ensure that the
Gateway works with the latest iPlanet/Sun ONE web servers
under Linux.
Likelihood |
High |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Category: Languages
Platforms: All
DevKey: CDS532
Summary: Fix I/O keyword table truncation
Description:
The I/O keyword table was inadvertently truncated in
Release 5.0.5. The keywords /WRI, /WRITE, /XYT, and /XYTABLE were not
recognized as valid
and attempts to use them resulted in <SYNTAX> errors on Windows systems.
On UNIX and VMS systems,
only the last entry, /XYTABLE, was truncated with similar effect.
This change corrects both errors.
Likelihood |
High |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Networking
Platforms: Windows
DevKey: TTS031, TTS048, TTS073
Summary: Update the InterSystems packet driver
Description:
This change updates the InterSystems packet driver to correct issues
with
Windows "Plug-n-Play". Prior to this change problems during install or
uninstall could sometimes cause a Windows system failure.
The driver also now processes properly many dynamic
operations via packet-driver handles allowing the system to proceed more
gracefully.
The internal version number of the driver has been updated to
reflect the change.
Likelihood |
Medium |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Object
Platforms: All
DevKey: DLP1137
Summary: Class instances are incorrectly marked as modified
Description:
Under some circumstances, class instances were being marked as modified
when
Count() or %GetNext()
were invoked, and more than one instance of the object was stored in
the database.
An example is a "parent" object instance with multiple "children".
This change properly preserves the modification state of the object.
Likelihood |
Low |
Risk |
Medium |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Object
Platforms: All
DevKey: MC429
Summary: Prevent loss of SQL privileges during upgrade
Description:
Under some circumstances, upgrading could result in the discard of
privileges for SQL tables.
This changes preserves the privileges across an upgrade.
Likelihood |
Low |
Risk |
Medium |
Ad Hoc |
No |
Enhancement |
No |
Category: Object.Soap
Platforms: All
DevKey: MXT507
Summary: Properly return application SOAP faults from web service
Description:
The ReturnFault() method of web services was not properly
preventing creation of the SOAP body after a fault was generated.
This has been corrected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Object.XML
Platforms: All
DevKey: MXT539
Summary: XML Schema wizard does not display non-UTF8 characters correctly in schema source
Description:
Prior to this change, the
XML Schema wizard could not properly handle an XML document
that was encoded in a character set other than UTF-8.
Now the Schema Wizard uses the character set encoding specified in the
<?xml ...> directive.
Likelihood |
Medium |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: SQL.GateWay
Platforms: All
DevKey: MIT314
Summary: Linked tables containing class queries with parameter fail
Description:
Prior to this change, if a linked table (for example, to data residing
in Microsoft
SQL Server) contained a class query with a parameter, and that
parameter was referenced in the WHERE clause, an attempt to compile
the class would result in a <SYNTAX> error.
This change corrects the problem and the class now compiles properly.
Likelihood |
Low |
Risk |
Medium |
Ad Hoc |
Yes |
Enhancement |
No |
Category: SQL.GateWay
Platforms: All
DevKey: MIT316
Summary: Support HAVING clause for external tables
Description:
This change enables the generation of the HAVING clause for tables
linked from other databases.
In prior versions, the HAVING clause was wrongly omitted when the SQL
was sent to the other database.
Likelihood |
High |
Risk |
Medium |
Ad Hoc |
Yes |
Enhancement |
No |
Category: SQL.JDBC
Platforms: All
DevKey: AND455
Summary: Implicitly close all streams after (bulk) insert/update has completed
Description:
Under some circumstances, a user could receive a <MAXSTRING>
error if a large number of streams were used in a bulk insert or
update operation. The streams were not properly being closed when the
operation completed.
Since there is no reason to keep the streams open in this
circumstance,
Caché now automatically cleans up all such structures
after a(n) (bulk) insert/update has completed.
Likelihood |
Low |
Risk |
Medium |
Ad Hoc |
No |
Enhancement |
No |
Category: SQL.ODBC
Platforms: All
DevKey: JCN491
Summary: Japanese SQL table/field name may cause errors
Description:
The internal use of the ISDIGIT ANSI function
resulted in undefined behavior on integer values larger than 255.
This failure was present in version 5.0.5 and 5.0.7.
This has been corrected.
Likelihood |
High |
Risk |
Medium |
Ad Hoc |
Yes |
Enhancement |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: AK555
Summary: Allow TOP constant/variable in parenthesis
Description:
Allow the constant, host variable, or "?" that follows TOP to be
enclosed in parenthesis. (Currently, Caché does not allow a general
expression there, not even a constant expression.)
This is needed for external tables, since other vendors support only
constants after TOP, and thus the parenthesis are required to prevent
literal-replacement of that constant.
Likelihood |
Medium |
Risk |
Medium |
Ad Hoc |
Yes |
Enhancement |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: AK577
Summary: Fix split subscript with "y" nexting
Description:
Before this, Caché would report an error when it attempted
to compile queries with IN conditions on
parent reference fields,
and those conditions had more than
one "||" component.
For example:
SELECT * FROM grandchild WHERE parentref IN ('1||2', '3||4')
This change allows the compilation to proceed correctly.
Likelihood |
Medium |
Risk |
Medium |
Ad Hoc |
Yes |
Enhancement |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: AK590
Summary: Properly handle FROM with multiple OUTER JOINs of linked tables
Description:
A query that uses linked tables now succeeds when
the query includes more than one OUTER JOIN.
Likelihood |
Low |
Risk |
Medium |
Ad Hoc |
Yes |
Enhancement |
Yes |
Category: SQL.Query Processing
Platforms: All
DevKey: AK591
Summary: Padding may survive condition with ISNULL()
Description:
The existence of certain WHERE conditions can cause an OUTER JOIN to be
converted to a regular join without affecting the query semantics.
(Regular joins can be more efficient to process than outer joins.)
In prior versions, the analysis of the conditions under which this
conversion could be performed was incorrect for some usages of
ISNULL, NVL, COALESCE, NULLIF, IFNULL, DECODE, and CASE,
as well as for fields in an extrinsic or a user-defined
function. This change corrects the analysis.
It also extends the analysis to correctly convert queries involving
OR conditions.
Finally, it corrects the regular 3-value logic NULL analysis in situations
where there
were NULL arguments in a call to an extrinsic or a user-defined
function contained in a WHERE clause.
Likelihood |
Low |
Risk |
Medium |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Studio
Platforms: All
DevKey: RAW442, RAW444
Summary: Improve Studio reliability
Description:
Under certain circumstances, an attempt to copy and paste a
program fragment would cause Studio to crash with an internal buffer
overflow.
This is more likely
when the program fragment has a large number of short, syntactic
elements because
the internal representation of the fragment required more space than
was allocated.
This change allocates sufficient additional space to contain the
copied section.
Likelihood |
Low |
Risk |
Medium |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System
Platforms: All
DevKey: CDS535
Summary: Handle interruptions in Event.Wait()
Description:
When a process is using $System.Event.Wait() to do a timed wait, and it
receives a signal from another process, such as from JOBEXAM or to update
internal tables after mounting a database, the timing mechanism was lost
and the process would never return from the Wait(). This change
makes it work properly.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System
Platforms: All
DevKey: JLC591
Summary: Correct error in $QUERY/$ORDER from translated subscripts
Description:
This change corrects a error affecting non-Unicode
Caché systems. The error happens during the translation of the
internal encoding
of subscripts from ISM versions 6.2 through 6.4 to Caché Standard
collation.
Such translations occur, for example, when using
%GIF.
Subscripts starting with a
ÿ
(lower-case "y" with an umlautl HTML = ÿ or ÿ)
might not get translated properly
and end up in the
database with the wrong encoding. This would generate a
<WIDECHAR> error when those nodes were later accessed via $ORDER or
$QUERY.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System
Platforms: UNIX
DevKey: JO1792
Summary: Change incremental backup handling where a user job can't read from a database
Description:
A defect has been corrected that could cause the write demon to hang.
The problem only occurs when a database on a UNIX system is not readable
by all Caché jobs, and the database is included in a Caché incremental
or concurrent incremental backup. Under these circumstances, the system may
hang following the backup.
This hang can be identified by examining the wdwake value
displayed by cstat. It has a value of 2, the problem
resolved by this change has occurred.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System
Platforms: All
DevKey: JO1794
Summary: Assure global vector resetting after database dismount and re-mount
Description:
This change corrects a problem which could cause processes to skip
resetting their global vectors after a database has been dismounted
and re-mounted.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System
Platforms: Windows
DevKey: JO1799
Summary: Correct inaccurate reporting of dead jobs on Windows
Description:
From the Caché alert issued 22 April 2004:
InterSystems has corrected a defect that can cause Caché processes to
be incorrectly deleted from Caché. This defect is present on Windows
platforms only and applies to currently released Caché 5.0.x versions.
Only processes that call out of Caché using $ZF() and modify their
Windows security profile are at risk of encountering this defect. The
likelihood of encountering this problem is low, but the effects could
be severe including causing Caché to hang. To determine if your system
has encountered this defect check the cconsole.log file for a message
indicating that a dead process has been "cleaned", for example:
04/20-17:28:33:734 ( 4184) cleaned dead job, pid: 4224
If the PID that has been cleaned still exists as a Windows process,
then the problem may have occurred.
Note: the
"cleaned" message is evidence that normal Caché functionality
has been triggered to protect against dead processes, it is not, by
itself, evidence of the defect. Moreover, PIDs are
quickly reused in a running Windows system, so unless you find the PID
in existence at the Windows level very shortly after the timestamp on
the "cleaned" message you have likely not encountered the
defect.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System
Platforms: All
DevKey: LRS757
Summary: Fix BACKUP restore errors with archives having many databases
Description:
From the Caché alert issued 27 April 2004:
InterSystems has corrected a defect in Caché backup that could result
in inability to restore from a backup archive. This defect exists in
all Caché 4.1.x and later versions and for all platforms and operating
systems.
This problem can only occur in backup archives with 16 or more
databases. The likelihood of encountering this problem is low but
increases with the number of databases in an archive. Existing backup
archives can be checked with the following procedure without actually
restoring any databases.
To check whether existing archives are subject to this error,
user should
- invoke ^BACKUP;
- choose option 3, "Restore Selected or Named Directories";
- mark every database listed with an "X", so they will be read but
NOT restored.
If the restore reads through the entire archive without a
"missing blocks" error the archive
is not affected by the condition.
No database restore should occur because none
has been selected - that is what the "X" means.
Note: a clean check of one archive with the above procedure does not
guarantee that the next backup will not encounter the problem.
This change eliminates the error.
See the
earlier section
on alerts for related information.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Utilities
Platforms: Windows NT
DevKey: SAP157
Summary: %PRIO malfunction on WIN NT 4.0
Description:
Prior to this change, a call to NORMAL^%PRIO after a
call to LOW^%PRIO would leave the process in
priority 0 (zero). This only happened on Windows NT.
A workaround for the problem was to
set the priority by doing HIGH^%PRIO, then NORMAL^%PRIO.
With this fix,
it no longer happens on any platform and the workaround is no longer needed.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Documentation Updates
The content of the Caché documentation evolves from release to
release in response to editorial improvements, updates to existing
material, and addition of new information. The following is a summary
of the most noteworthy changes to the Caché documentation
since the previous release:
- Supplied additional program examples in the SQL reference
manual
- Added additional cross-references between the Caché
ObjectStript and the SQL references
- Updated the table of symbols for SQL
- Updated the documentation on installing and configuring the CSP Gateway
- Added additional active links to related material in cross-references
These are in addition to numerous, minor enhancements in examples, and
corrections to grammar and spelling.
This section provides a listing of changes between Caché
5.0.5
and
Caché
5.0.7.
This document contains several sections:
Caché News, Alerts, and Advisories
From time to time, InterSystems publishes items of immediate
importance to
users of our software. These include
alerts, mission critical issues, important updates, fixes, and releases
of Caché.
The most current list can be obtained from the
InterSystems Website.
Users should check this list periodically to obtain the latest information on
issues that may have an effect on the operation of their site.
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.
- Config Mgr
- Networking
- Object.Relationships
- Object.XML
- SQL.Query Processing
- System
- System.Backup/Restore
- System.Journaling
- System.Licensing
- System.StartUp
Category: Config Mgr
Platforms: All
DevKey: CFL1011
Summary: Fix deletion of .cpf backup files on OpenVMS
Description:
A bug has been fixed where all the VMS-created
backup versions of the .cpf file were deleted when the configuration
was edited via Config Manager.
Likelihood |
Medium |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Networking
Platforms: All
DevKey: SML436
Summary: Reduce the precision of double-precision subscripts being sent to DSM systems
Description:
DSM systems cannot handle the full range of
Caché double-precision numeric subscripts.
The subscripts are now reduced in precision to that which a DSM system
can accept.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Object.Relationships
Platforms: All
DevKey: DLP1094
Summary: Fix <UNDEFINED> in %Collection.RelationshipObject::GetObjectAt
Description:
This change corrects an illegal internal reference
in the named method which caused an <UNDEFINED> error.
Likelihood |
Medium |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Object.Relationships
Platforms: All
DevKey: DLP1121
Summary: Don't automatically load related objects when swizzling the parent
Description:
Prior to this change, when a child object
attempted to reference its parent, all the objects contained in
relationships
of the parent would be instantiated. This resulted in an unexpected
and unnecessary
large overhead in making the reference. This change removes the
automatic loading in favor of loading only those objects actually referenced.
Likelihood |
Medium |
Risk |
Medium |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Object.Relationships
Platforms: All
DevKey: DLP1134
Summary: Load related objects in Next() and Previous() if not loaded
Description:
With this change, related objects are now loaded
when calls are made to the Next() and Previous() methods. Previously,
these methods could return errors.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Object.Relationships
Platforms: All
DevKey: DLP1138
Summary: Don't set modbit when swizzling relationship object
Description:
The modified bit for an object was incorrectly being
set when other objects it referenced were brought into memory. This
has been corrected and the modified bit is now set only if the object
is actually modified.
Likelihood |
Medium |
Risk |
Medium |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Object.Relationships
Platforms: All
DevKey: MAK853
Summary: Performance improvement and correction to %Collection.RelationshipObject
Description:
When an application called Insert(oref) to insert an object
reference into a relationship collection, or called the deprecated
method SetAt(oref,key), instead of the oid being stored in the
relationship, just the id was stored. This could cause problems
when searching for an oid in the collection. Now both methods
correctly insert the oid.
In correcting this, some changes were made to improve the performance of the internal
storage for the relationship and to reduce the memory footprint
required.
Likelihood |
Medium |
Risk |
Medium |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Object.Relationships
Platforms: All
DevKey: MAK992
Summary: %ConstructClone failed with relationships
Description:
The %ConstructClone method failed to load all the
ID's
of a relationship before performing its work. Prior to this change,
it would clone only the ID's that had been loaded by other reference attempts.
Likelihood |
Medium |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: Object.XML
Platforms: All
DevKey: JN178
Summary: Fix erroneous call to endDTD in Sax Parser
Description:
An incorrect method call in the SAX content handler
resulted in an attempt to reach a
non-existent method. This is now corrected.
Likelihood |
Medium |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: BJB284
Summary: Correct ifn conflict with Virtual OR
Description:
A problem has been corrected with the SQL code
generator. If you selected against a UNION subquery containing an OR
clause,
under some circumstances the columns would display
the wrong value in the results.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System
Platforms: All
DevKey: DAS497
Summary: Correct <ACCVIO> associated with date/time processing
Description:
Under some circumstances, the conversion of a
date/time to display format would result in an <ACCVIO> error
if the fractional seconds portion of the date/time was zero.
Likelihood |
Medium |
Risk |
Medium |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System
Platforms: All
DevKey: HYY864
Summary: $SortEnd preserving the order of SETs to the same node
Description:
Under some circumstances, $SortEnd() may apply SETs
to the same global node in a different order from the one in which
they were issued, resulting in incorrect value of the global node.
This change applies them in the correct order.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System
Platforms: HPUX
DevKey: JLC590
Summary: Fix bug in Clsetcon() for hp11
Description:
This change corrects a performance degradation in
the HPUX implementation of Caché that eventually results in a
<STORE> error.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System
Platforms: All
DevKey: LFT1134
Summary: Fix $zobjexport issues
Description:
This change corrects several errors in
exporting objects whose size approaches 32K in length, and
involve undefined variables. It also improves the handling of object
tokens during export.
Likelihood |
Medium |
Risk |
Medium |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System
Platforms: Windows
DevKey: LFT1214
Summary: Improve Caché handling of lack of handles
Description:
This changes adds error handling
for the condition where a Caché system running on
Windows
runs out of handles.
Likelihood |
Medium |
Risk |
Medium |
Ad Hoc |
No |
Enhancement |
No |
Category: System
Platforms: All
DevKey: RJF018
Summary: Improve handling of $BIT for old format databases
Description:
This change corrects a problem where SETs using the $BIT
(bitmap indexing) function in a 2K (old format) database could cause
database integrity errors. Prior to this change, when a $BITSET
created bigstring data, it failed to update the bottom pointer node to
reflect the addition of the bigstring node in the data block. This
problem affects all prior Caché releases.
Likelihood |
Medium |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System
Platforms: OpenVMS
DevKey: SAP150
Summary: %PRIO set's rather than increments base priority
Description:
HIGH^%PRIO sets an incorrect priority on OpenVMS.
This has been corrected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System
Platforms: All
DevKey: SML398
Summary: Correct an issue with numeric subscript access over a network
Description:
Under some circumstances, attempts to access globals
on a remote DSM/MSM system using $DATA or $ORDER could result in a
<SUBSCRIPT> error or the wrong data being returned.
This has been corrected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System
Platforms: All
DevKey: SML400
Summary: Call netmap only when the network is configured
Description:
When there is no
network configured, an attempt to use ^LOCKTAB or Control Panel to delete a lock
entry would result in a <NETWORK> error. This change corrects
that condition.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System
Platforms: All
DevKey: SML445
Summary: Improve ECP connection startup to initiate ECP daemon jobs
Description:
The very first ECP access to
remote server took about 5 seconds for Windows platform. This change
corrects this issue.
Likelihood |
High |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System.Backup/Restore
Platforms: All
DevKey: HYY805
Summary: Reset internal state when errors reported by DBACK*
Description:
This changes corrects a situation where internal
state flags were not being properly reset when errors were reported by
DBACK* in the case where it was invoked by an application.
Even with this change, applications which invoke backup operations programmatically
should handle all errors reported and
attempt to restore the system state prior to the backup being invoked.
Likelihood |
High |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.Backup/Restore
Platforms: All
DevKey: HYY886
Summary: Quiesce ECP-based cluster after setting backup switch
Description:
This change addresses an issue on an ECP-based Caché cluster
where a corrupted backup may results because the cluster was not quiesced
before backup started.
Likelihood |
Medium |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.Journaling
Platforms: All
DevKey: HYY859
Summary: Prevent non-privileged user from stopping journaling
Description:
A non-privileged user is not allowed to stop
journaling. As far as journaling is concerned, a non-privileged user
is one who doesn't have the write access to the journal file.
When a non-privileged user tries to stop journaling, one of the
following errors
is reported:
Access to journal file [journal name] denied
or
Unable to open journal file [journal name] for write access
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System.Licensing
Platforms: All
DevKey: RJW691
Summary: Can't Connect to License Manager After Hot License Upgrade
Description:
When upgrading a license key on a running Cache version 5.0 configuration,
either by copying the cache.key file into the system manager directory and
running $$UPGRADE^%LICENSE, or by installing it using the
Configuration Manager License Wizard, communication with the License
Manager would be lost because the internal License Manager address
field was overwritten.
This change prevents this from happening. The
License Manager will receive the new key capacity values and update
its internal tables within a minute or so. The new capacity values
are immediately available on the local system.
Note: This only
applies to multi-server keys which use the License Manager.
Also, you must install the new key on every configuration that shares
the key.)
Likelihood |
Medium |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Category: System.StartUp
Platforms: All
DevKey: CFL981
Summary: Fix %SYS mappings
Description:
An error has been fixed where mappings defined for the
%SYS namespace would be lost upon Cache restart.
Likelihood |
High |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Category: System.StartUp
Platforms: All
DevKey: SAP153
Summary: CCONTROL can use the wrong cpf file
Description:
If there is a file in the Cachesys directory such as:
where <config> is the Configuration name,
ccontrol will start the Configuration using the
cache.cpf.<config> (even if you put nothing in the command line,
or use 'cache'). During the startup it tells the user that it is
using just the "cache.cpf" file.
With this change, it correctly reports the file name.
Likelihood |
High |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Documentation Updates
The content of the Caché documentation evolves from release to
release in response to editorial improvements, updates to existing
material, and addition of new information. The following is a summary
of the most noteworthy changes to the Caché documentation
since the previous release:
- An article on using Caché with a Network Appliance Filer
was added to the Knowledge Base section.
- The article on calculating the configuration parameters for UNIX
systems (Appendix B of the "Caché Installation Guide") has been updated.
- The Upgrade chapter of the Release Notes has been updated.
- The SQL reference material underwent a thorough review, for
example
- all date and time function descriptions were reworked as needed
including new information on conversion and the addition
of many new examples
- the CREATE and DROP statement descriptions were upgraded
- comparison tables were added for the functions IFNULL, NULLIF,
ISNULL, and NVL
- the SQL DDL datatype mappings were updated to match that shown in
the Configuration Manager
- correspondences between SQL and Objectscript functions were added
when appropriate
- the cross-references of commands, functions, and variable names
has been improved
- The I/O Device Guide in the Reference section was updated
with
- a rewritten section on using the SPOOLER
- description of TCP /SENDIMEDIATE mode
- new options available for Terminal OPEN
- Improvements were made to the Objectscript reference manual in the
areas of
- the interaction of NLS with $ZDATE and $ZDATETIME
- new examples for the date and time functions
- linking between TSTART, TCOMMIT and TROLLBACK and the
corresponding SQL commands
These are in addition to numerous, minor enhancements in examples, and
the usual
corrections to grammar and spelling.
This section provides a listing of changes between Caché
5.0.4
and
Caché
5.0.5.
This document contains several sections:
Caché News, Alerts, and Advisories
From time to time, InterSystems publishes items of immediate
importance to
users of our software. These include
alerts, mission critical issues, important updates, fixes, and releases
of Caché.
The most current list can be obtained from the
InterSystems Website.
At the time of this publication, the details on the following were
available:
Date |
Subject |
December 4, 2003 |
Caché Server Pages |
November 19, 2003 |
Caché Backup Error and Lost Updates |
November 17, 2003 |
IBM 64 bit - Caché Floating Point Zero Boolean Issue |
November 14, 2003 |
Caché Server Pages |
November 6, 2003 |
CSP Error Messages Corrupt in Caché 5.0.4 Only |
October 17, 2003 |
Microsoft IIS 6.0 on Windows 2003 with CSP |
October 6, 2003 |
Caché Process Local Variable Corruption [VMS] |
March 13, 2003 |
Caché Process Local Variable Corruption |
September 26, 2003 |
Caché and McAfee product conflict |
September 22, 2003 |
Update: Hyper-Threading and Caché |
January 15, 2003 |
Intel's Hyper-Threading technology and Caché |
July 28, 2003 |
Caché and MultiNet |
July 23, 2003 |
Journal Suspension and Data Loss |
June 27, 2003 |
Caché and write permissions on UNIX
systems |
June 23, 2003 |
Wrong answer for certain OR conditions when multiple index strategy used |
June 20, 2003 |
Caché Networking and New Format Databases, Addendum |
June 20, 2003 |
Caché Networking and New Format Databases |
May 20, 2003 |
Transaction Processing over DCP |
May 14, 2003 |
Telnet Connections on Caché Windows |
May 12, 2003 |
Caché and AIX |
March 13, 2003 |
Caché Process Local Variable Corruption |
March 7, 2003 |
Multi-homing and Caché Clusters on OpenVMS |
January 15, 2003 |
Intel's Hyper-Threading technology and Caché |
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.
- Critical - A value of "yes" in this column indicates that
a production application environment 'may' be at risk or
the deployment of an application may be impeded.
Reference |
Summary |
JCN465 |
Port linuxit platform to GCC 3.2 compiler |
ALE349 |
Revamped Apache CSP installation on UNIX |
MXT541 |
Use binary streams for XML content in web service and web
client |
PVA058 |
Fix issues with conditional table maps |
SML413 |
Fix ECP lock zero time out. |
MXT526 |
Correct security flaw in CSP broker. |
RJW791 |
Preferred Server in Registry is not updated when changed |
ALE258 |
Upgrade from 2.1.9 does not convert configuration
automatically |
JCN479 |
Build third party executables for Linux on SUSE with GCC 3.2
compiler |
DPV2102 |
LogicalToDisplay() will now report %EXTERNAL(xxx) as type
VARCHAR. |
MXT499 |
Fix bug in assigning names of classes created for inline
complexTypes by the XML schema wizard |
DPV2109 |
Fix incorrect setting of $Bit for SQLStorage |
JCN440 |
Fetch password from registry if Username passed in matches
registry entry |
DPV2053 |
Fix privilege checking with privileges granted indirectly through
roles |
DPV2131 |
Order By DESC does not always work with $Piece mapping |
HYY837 |
Fix a problem with index sorting handling wide character
strings |
LFT1166 |
INTEGRIT misses database error on 2K database |
RFD095 |
Fix ^SHUTDOWN hang on cluster recovery |
RFD066 |
Allow process to recover MONITOR sessions |
JO1742 |
Resolve issues using GTABSZ as maximum global reference length for 2KB databases |
DMD043 |
Fix a system quiesce problem caused by a missed wakeup to a slave write daemon |
JCN452 |
Fix for WTS connections to loopback address |
DPV2079 |
Correct <LOCK TABLE FULL> on DELETE |
STC490 |
Fix MAXSCOPE error in DDPMASTER |
GK255 |
Fix the way journal checkpoint was used |
CFL984 |
Fix DDP configuration startup issue |
MAK942 |
If %SYS database was 2K then CSP could get SUBSCRIPT error |
DLP1125 |
Add GetColumnExtInfo() method to %ResultSet |
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.
Whether a given changes affects your system will depend on your use of
the feature/facility noted.
Section Table of Contents
- Installation.UNIX
- Languages.Cache Basic
- Object
- Object.C++
- Object.Class Compiler
- Object.Soap
- SQL.JDBC
- SQL.ODBC
- SQL.Query Processing
- System
- System.Lock
- System.TCP Devices
- Utilities
Category: Installation.UNIX
Platforms: UNIX
DevKey: ALE349
Summary: Revamped Apache CSP installation on UNIX
Description:
The CSP installation on UNIX has been changed to use the
same mechanism as on Windows and VMS. Previous versions of
Caché installed the files into cgi-bin.
With this change Caché does not use the /cachesys/csp directory with symbolic links
anymore.
Instead, <cachesys>/csp directory is set in the Apache
configuration file (httpd.conf) and all CSP applications are executed
from this directory.
This eliminates most questions
previously asked during this part of the install.
The URL to see the CSP systems management suite is now:
http://<ip_address>/csp-bin/nph-CSPcgiSys.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: Languages.Cache Basic
Platforms: All
DevKey: DAS458
Summary: Implement CacheBasic Sleep command
Description:
CacheBasic Sleep Command:
The Sleep command suspends execution for the specified number of
seconds. Its syntax is
SLEEP Interval
where Interval is the number of second to wait.
Fractional seconds are supported. The resolution of the timer is the
same as for the ObjectScript HANG command.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: Object
Platforms: All
DevKey: JCN465
Summary: Port Linux platform to GCC 3.2 compiler
Description:
The compiler for the Linux platform has been upgraded. The compiler is now GCC 3.2
which uses the new C++ standard; the previous compiler was 2.95.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
Yes |
Category: Object.C++
Platforms: All
DevKey: IYB134
Summary: CPP Binding Erase removes selected element but nulls subsequent elements
Description:
The Vector Erase() method on the C++ side of the
binding should work like the RemoveAt() method in Caché. It
did not, but rather removed the selected element and all subsequent
elements.
With this change, it now behaves as expected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.C++
Platforms: All
DevKey: IYB137
Summary: Unicode character stream data is truncated on the right half
Description:
Under some conditions, the C++ binding would fail to
return all of the characters in a string converted to Unicode. This
has been corrected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: DLP1125
Summary: Add GetColumnExtInfo() method to %ResultSet
Description:
A new method, GetColumnExtInfo() has been added to
%ResultSet. This method accepts the column number as an
input parameter and will return a $list containing the class name and
property name of the property corresponding to the column in the
query. If the column is not based on a property then the returned
information will be an empty $list.
Warning: As usual where upgrades are involved,
this change requires that classes containing queries be recompiled.
Failure to do so may result in <PARAMETER> errors under
some circumstances.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
Yes |
Category: Object.Soap
Platforms: All
DevKey: MXT489
Summary: Add support for input and output of SOAP headers by SOAP web methods.
Description:
SOAP web services and SOAP web clients are enhanced to support input and
output of SOAP headers within the SOAP envelope. This new header support
works only for web methods that are defined as Methods in an instantiable
class, not for ClassMethods. Web service methods can be plain Methods.
A new XML enabled class, %SOAP.Header, is introduced to represent a
SOAP header. The mustUnderstand and actor attributes are defined as
properties in the base class %SOAP.Header. The default for
mustUnderstand is "0" and the default for actor is "".
Additional properties must be defined in the subclass that represents
the header. The NAMESPACE parameter should be specified in the SOAP
header subclass to specify the XML namespace that the SOAP header is
defined in.
Two new properties and a new parameter are introduced in
%SOAP.WebService and %SOAP.WebClient:
- Property HeadersOut As %SOAP.Header (collection=array);
Any web service or web client method may add instances of any
%SOAP.Header subclass to this array. The index is the element name of
the header. The corresponding headers are then added to the SOAP
response message.
Parameter SOAPHEADERS = <list of headers>;
where <list of headers> is a comma separated list of input
header specifications. Each specification is of the form
"headerName:headerClass" where headerName is the element name of the
supported header and headerClass is the %SOAP.Header subclass that
corresponds to that header. This list defines all headers supported
in the SOAP request.
- Property HeadersIn As %SOAP.Header (collection=array);
Any SOAP header in the SOAP request that is found in the SOAPHEADERS
list is imported as a %SOAP.Header subclass and added to the HeadersIn
array. The web method may then act on these headers as
appropriate.
If any header in the SOAP request has mustUnderstand="1" and the
header element name is not in the SOAPHEADERS list then a SOAP fault
will be returned without processing the message.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: Object.Soap
Platforms: All
DevKey: MXT541
Summary: Use binary streams for XML content in web service and web client
Description:
The SAX parser interface was changed to treat
characters streams as containing Unicode data. In fact, the streams
used by web service and web client are actually in the encoding
specified by the XML declaration at the beginning of the XML document.
Therefore, web service and web client support now works with
binary streams.
Externally visible effects of this change:
- CSP is changed to have %request.Content always be a binary stream.
Previously, %request.Content was a character stream for text content
types, for example text/xml.
- The requestStream and responseStream arguments used for SOAP
transport the OnSOAPRequest and DoSOAPRequest methods must be binary
streams. This change effects the OnSOAPRequest and DoDOAPRequest
methods.
- The WriteRawMode property is added to %Net.HttpRequest to indicate
that the EntityBody has already been translated.
- In %XML and %SOAP, classes change to using UTF-8 instead of
utf-8.
- %XML.Writer modified to mirror the new behavior of the SAX parser:
- If no stream is passed to OutputToStream a %FileBinaryStream is created.
- The default Charset for %CharacterStream's and %String output is
UTF-16 on Unicode Caché and the default 8 bit charset for the
locale on 8 bit Caché.
- The XML declaration created for UTF-16 charset will be preceded
by the Unicode BOM.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
Yes |
Category: SQL.JDBC
Platforms: All
DevKey: MAB209
Summary: Double single quotes in literals won't work
Description:
This change corrects several issues regarding JDBC preparser processing
literals with quotes inside and literals enclosed in parentheses. Double
quotes are now treated as single quotes for parameters.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: SQL.ODBC
Platforms: All
DevKey: JCN460
Summary: Unicode stream data problem from VC++/ODBC
Description:
For European locales using single byte character sets or streams bound to
the Unicode character type (SQL_C_WCHAR), the correct number of bytes of
data is maintained when truncation occurs.
Applications can work around the original problem by binding the data to the
Unicode datatype SQL_C_WCHAR
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: PVA058
Summary: Fix issues with conditional table maps
Description:
A problem has been fixed where errors like the
following could occur if a conditional map is present for a table, and an
SQL query using the table has host variables. From ODBC, JDBC,
SQL Manager, and dynamic SQL Query, literals are converted to host
variables, so this issue may occur even if the statements
don't directly contain parameters or host variables.
This situation does not occur if the conditional map is a NOTNULL map or the
condition {ifn}'="" is in the map.
It only occurs for other
types of conditions.
The situation is manifest as the error code
<UNDEFINED> in range+19^%qaqpcmp
Warning: The conditional map option, ConditionalWithHostVars, now performs
no function. This option indicated that host variables were not null,
allowing queries against all conditional maps. With this change, host
variables in queries are usable when null or not null.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
Yes |
Category: System
Platforms: All
DevKey: JLC559
Summary: Fix DTM color compatibility in %XDTM2
Description:
The following changes were made to the behavior of the /COLOR and /WOPEN
mnemonics in
%XDTM2:
- The colors in /COLOR(fg,bg) now follow this scheme:
- 0 - Black
- 1 - Blue
- 2 - Green
- 3 - Cyan
- 4 - Red
- 5 - Magenta
- 6 - Yellow
- 7 - White
- In /WOPEN, instead of always opening the window with white/black
attributes both for the border and the interior, there are now two
options:
- If nothing else is specified, the previous colors established via
/COLOR(fg,bg) are used by both the border and the window interior.
- Four extra parameters were added to /WOPEN so that it is now possible
to specify the colors of the border and the interior separately as
shown below.
/WOPEN(col,lin,wid,hei,bor,attr,battr,title,tpos,max,
wfc, /* Window foreground color */
wbc, /* Window background color */
bfc, /* Border foreground color */
bbc) /* Border background color */
Note: the "max" parameter is used only for DTM compatibility
but is ignored by %XDTM2.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
No |
Category: System
Platforms: AIX
DevKey: JLC566
Summary: Implement CPUS_USE_ONLN for AIX
Description:
When a logical partition (LPAR) is configured on
AIX, for the purposes of licensing, Caché will count only the
number of CPUs in the partition in which it is running. Previously the
total number of CPUs configured in the machine would be used.
$system.Util.NumberOfCPUs() will also return the number of CPUs
available in the current LPAR.
Note:
This has no impact on concurrent-user-based licenses.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System
Platforms: All
DevKey: SML388
Summary: Fix lock count inconsistencies.
Description:
On a DCP client, there was a small window during
which the system could attempt to free an already-freed lock. This
has been fixed.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
No |
Category: System
Platforms: All
DevKey: SML390
Summary: Serialize DDP request for each remote job.
Description:
Under some circumstances, an MSM client system attempting
to gain a lock during a time of network instability could cause the
DDP daemon to crash. This was caused by an mismatch in the systems'
processing of lock/unlock requests. This has
been fixed.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System.Lock
Platforms: All
DevKey: SML413
Summary: Fix ECP lock zero time out.
Description:
If
a lock is owned by another job on the ECP server, when ECP client
does "Lock ^a(1):0" the lock command won't return until the lock is
released on server. Previously, it returned immediately.
Likelihood |
High |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
Yes |
Category: System.TCP Devices
Platforms: HPUX
DevKey: GK268
Summary: Disable TCP Nagle algorithm on all HP sockets.
Description:
This change disables the Nagle algorithm on all HP platforms. (It was enabled.)
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
No |
Category: Utilities
Platforms: All
DevKey: LFT1163
Summary: Add total pages to prompt in ^%SPOOL
Description:
This adds the total number of pages to the print prompt in ^%SPOOL.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Utilities
Platforms: All
DevKey: LFT1165
Summary: %GSIZE does not properly format the output for global names with > 10 characters.
Description:
This prevents the %GSIZE brief display from running
the global name and number of blocks together, and also prevents
splitting the global name and the number of blocks across lines, and
also prevents splitting either the name itself or the number of blocks
itself.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
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
- CHUI
- Config Mgr
- Control Panel
- CSP
- CSP.Gateway
- CSP.Net
- CSP.Tags
- CSP.Web Server
- CSPGUI
- Cube
- Documentation
- Explorer
- Installation
- Installation.UNIX
- Installation.Windows
- Languages.Cache Basic
- Misc
- Networking
- Object
- Object.Activate
- Object.ActiveX
- Object.Class Compiler
- Object.Java
- Object.LanguageBindings
- Object.Library
- Object.Relationships
- Object.Soap
- Object.XML
- SQL
- SQL.DDL
- SQL.JDBC
- SQL.ODBC
- SQL.Privileges
- SQL.Query Processing
- SQLManager
- Studio
- System
- System.Backup/Restore
- System.Cluster Specific
- System.I/O
- System.Journaling
- System.Localization
- System.Lock
- System.Shadowing
- System.Shutdown
- System.StartUp
- System.TCP Devices
- Terminal
- Utilities
Category: CHUI
Platforms: All
DevKey: SAP148
Summary: %DSMCVT gives <MAXARRAY> error on big string data when doing endian conversion.
Description:
Prior to this change, %DSMCVT could exceed the
maximum array size when converting data from big-endian
(Intel, Alpha) to
little-endian (PA-RISC, SPARC) format. This would impede migration.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
No |
Category: Config Mgr
Platforms: All
DevKey: CFL979
Summary: Remote ECP databases cannot be read-only
Description:
With this change, the Read-Only check box is
disabled when editing a remote ECP database.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Config Mgr
Platforms: All
DevKey: CFL984
Summary: Fix DDP configuration startup issue
Description:
Prior to this change, an incomplete DDP
configuration would cause Caché startup to fail under some circumstances.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
Yes |
Category: Control Panel
Platforms: All
DevKey: CFL862
Summary: Fix crash in Control Panel | ECP Network
Description:
A bug has been fixed where the Control Panel crashed
under certain circumstances when you clicked on ECP Network.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Config Mgr
Platforms: All
DevKey: CFL986
Summary: Configuration Manager gets error 380 when 2K buffers > 4096MB
Description:
A a run-time "invalid property" error could occur
when a 2KB cache size greater than 4096MB was specified. The
Configuration Manager would terminate.
This has been
corrected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Control Panel
Platforms: All
DevKey: CFL967
Summary: Fix journal dump in Control Panel
Description:
Journal records containing $C(0) were not correctly
displayed in the Control Panel. This has been corrected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Control Panel
Platforms: All
DevKey: CFL970
Summary: Fix Terminate for processes started via Job Servers
Description:
Prior to this correction, a user process started via
the job server could not be terminated via Control Panel.
RESJOB would have to be used to terminate certain processes.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Control Panel
Platforms: All
DevKey: CFL982
Summary: Control Panel doesn't show ECP incoming client node name for Locks
Description:
In previous versions, the Control Panel didn't show
ECP incoming client node name for Locks. It does now.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Control Panel
Platforms: All
DevKey: HYY827
Summary: Fixed <UNDEFINED> error in control panel on source of shadowing
Description:
Fixed a potential <UNDEFINED> error occurrence
in Control Panel in some unusual circumstances. When this happened,
the Control Panel would close.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: CSP
Platforms: All
DevKey: MAK888
Summary: When importing a project from XML, modify the projects CSP paths if the CSP is imported to a different location
Description:
When a project containing a CSP file was exported from one namespace to
another, the path for the CSP file in the new project remained as the
original path, preventing the CSP file from being loaded. For example, from
USER to SAMPLES namespace, an exported page would change from
/csp/user/test.csp to /csp/samples/test.csp but the project would continue
to refer to /csp/user/test.csp -- which prevented the item from being loaded from
the project. Now, the correct path is created.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: CSP
Platforms: All
DevKey: MAK942
Summary: If %SYS database was 2K then CSP could get <SUBSCRIPT> error
Description:
CSP keeps an association of URL to class names to speed up
finding the correct class to call. A <SUBSCRIPT> error sometimes
occurred when %SYS was
a 2K database. This has been corrected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
Yes |
Category: CSP
Platforms: All
DevKey: MXT526
Summary: Correct security flaw in CSP broker
Description:
This change removes a security flaw in the CSP
broker facility.
Note: for details, see the item dated
December 4, 2003 referenced in the
alerts and advisories section above.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
Yes |
Category: CSP.Gateway
Platforms: All
DevKey: CMT130
Summary: Modify the Network Services Daemon clients such that they return the new CGI environment variable
Description:
With this change, the Network Services Daemon clients have
been modified such that they will now return the new CGI environment
variable 'HTTP_X_UP_SUBNO' to the daemon.
This variable can now be requested via the 'Extra CGI Environment Variables' directive.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: CSP.Gateway
Platforms: All
DevKey: CMT131
Summary: Improve the mechanisms for requesting extra CGI Environment Variables.
Description:
Current versions of the Gateway will automatically
pass the following CGI Environment Variables to Caché with each and
every request.
- AUTH_PASSWORD
- AUTH_TYPE
- REMOTE_ADDR
- REMOTE_HOST
- REMOTE_USER
- HTTP_USER_AGENT
- SERVER_PROTOCOL
- SERVER_SOFTWARE
- SERVER_NAME
- GATEWAY_INTERFACE
- SERVER_PORT
- REMOTE_IDENT
- HTTP_ACCEPT
- HTTP_REFERER
- PATH_TRANSLATED
- CONTENT_TYPE
- HTTP_AUTHORIZATION
- HTTP_COOKIE
- HTTPS
- SERVER_PORT_SECURE
- REQUEST_METHOD
- HTTP_SOAPACTION
- HTTP_ACCEPT_CHARSET
- HTTP_ACCEPT_LANGUAGE
The Gateway can also be configured to send extra variables to Caché
using the following configuration parameter (under the 'Application
Access' section):
Extra CGI Environment Variables
This is a comma-separated list of extra variables required by the
application. The wildcard character '*' can be used to request all
environment variables.
This facility works well for the Gateway's ISAPI (IIS) and NSAPI
(iPlanet) based connectivity options because the DLLs (or UNIX Shared
Objects) have a close working relationship with the web server and, as
such, can easily request extra variables from their hosting
environment. However, with NSD-based connectivity solutions (for example as
commonly used for Apache under UNIX) things are slightly more
complicated because the environment variables have to be passed from
the Gateway's CGI module (or Apache API module) to the
NSD for further processing. The web-server facing modules do not have
access to the Gateway's (the NSD in this context) configuration and
cannot know which extra variables are required by the application.
The CSP CGI modules will transmit all the variables listed above to
the NSD with each and every client request. Other non-listed
variables are packaged up into a single variable called 'ALL_ENV'.
Customers using previous versions of the NSD-Gateway addressed the
problem of requesting extra variables by configuring the Gateway to
send 'ALL_ENV' to Caché. The application could then extract the
appropriate individual variables from this compound field.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: CSP.Gateway
Platforms: UNIX
DevKey: CMT139
Summary: Improve the Gateway responsiveness with regards honoring the 'Server Response Timeout' at initial connection time.
Description:
This change improves the Gateway's responsiveness
with regards to honoring the 'Server Response Timeout' at initial
connection time.
It introduces techniques that will make sure that the
operating system gives-up trying to establish a connection after a
preset period of time (i.e. the Gateway's 'server response timeout'
value). This enhancement is only applicable to UNIX/Linux
systems.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: CSP.Net
Platforms: All
DevKey: MAK883
Summary: %Net.FtpSession Retrieve method returns 0 when successful
Description:
The Retrieve method of the %Net.FtpSession would
often return 0 instead of 1 even though it had retrieved the stream
from the remote system correctly. It has been changed to consistently
return 1 when successful.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
No |
Category: CSP.Tags
Platforms: All
DevKey: YSD648
Summary: Web Form Wizard: lower-case HTML tags for XHTML compatibility
Description:
HTML tags must be lower case for XHTML
compatibility. This has been fixed in form wizard and studio new csp page, (since HTML tags are generated as well as csp tags) and in the CSP compiler where it generates script and applet tags.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: CSP.Web Server
Platforms: All
DevKey: MAK863
Summary: Fix minor problem with built-in web server not detecting sessionId
Description:
If a page is submitted to the built-in web server
that uses a multipart MIME post (typically a file upload page), and
cookies are turned off, then CSP embeds the CSPCHD token in the page. The
built-in web server was not detecting this sessionId correctly.
On a private page, it would report that you were logged out and could not
perform this action.
This only affected the built-in web server. Using CSP from a real
web server works correctly in this case.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: CSPGUI
Platforms: All
DevKey: YSD690
Summary: CSP Form Wizard - Disable 'readonly' setting for embedded properties
Description:
The ReadOnly checkbox is now not active for embedded properties of
persistent classes and for the %ID field.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: Cube
Platforms: Windows
DevKey: RJW791
Summary: Preferred Server in Registry is updated when changed
Description:
Changing the preferred server in the Caché Cube now
immediately updates the registry. It no longer waits for the Cube to
exit before updating the registry value.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
Yes |
Category: Documentation
Platforms: All
DevKey: GAB019
Summary: Use server name for class reference documentation
Description:
Prior to this change,
the Caché Class Reference documentation was obtained from
"localhost".
Now the CSP page uses the name of the server it is executing on.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Explorer
Platforms: OpenVMS
DevKey: CFL969
Summary: Fix Export/Import in V mode in Explorer on VMS
Description:
A correction was made in the case where a global exported via
Explorer in Variable Length Record format on VMS not be formatted
properly and could not be imported
by Explorer or %GI.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
No |
Category: Installation
Platforms: All
DevKey: LRS719
Summary: Fix issues with running user-defined installation routines
Description:
The running of customer-defined routines from cbootuser.rsa has been
made more robust, so that they are better isolated from the INSTALL
routine code and any errors that might occur during their execution
are trapped and logged, and the installation continues.
Note that customer-defined routines are called via DO as they are
loaded. Thus, they should not have an argument list on the main entry
tag. If more than one routine is loaded, and there are dependencies
among them, the user should ensure that all dependent routines are
loaded before they are used.
Additionally, customer-defined installation routines should not OPEN,
USE, CLOSE, or READ the principal device. It is preferable to avoid
doing any I/O using the principal device.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Installation.UNIX
Platforms: AIX
DevKey: LRS733
Summary: Modify parsing of lsattr command output under AIX, in cplatname
Description:
On some AIX systems, cinstall was not
recognizing logical partitions with high processor numbers. This has
been fixed.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Installation.Windows
Platforms: All
DevKey: ALE258
Summary: Upgrade from 2.1.9 does not convert configuration automatically
Description:
The installation wasn't able to determine configuration and
network file names correctly. Therefore conversion didn't happen and
the upgrade could not proceed.
This is corrected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
Yes |
Category: Installation.Windows
Platforms: Windows
DevKey: ALE289
Summary: Install CSP Gateway modules for Apache2 and configure Apache2
Description:
The standard installation installs the CSP Gateway and configures Apache 2.0
for the Gateway, when Apache 2.0 is already installed. To select another
web server, use the custom installation.
The URL to see the CSP systems management suite is now:
http://<ip_address>/csp/bin/Systems/Module.cxw
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: Installation.Windows
Platforms: Windows
DevKey: ALE307
Summary: Install files for server localization
Description:
Caché now installs files required for server
localization. These files include CSPMessages*.xml, Errors*.xml,
ObjectMessages*.xml and NLS *_src.goq and *_obj.goq files.
Due to the large size of goq files for Asian languages (Chinese, Japanese,
Korean), they are not installed by default. There is an option that is
part of the
Unicode custom install under "Caché Server" to
install them.
All xml files, goq files for all western languages and all files for
installation language are installed.
These files are installed under CacheSys\Mgr\Locale
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Installation.Windows
Platforms: Windows
DevKey: ALE313
Summary: Install Hungarian NLS goq files
Description:
The hun.goq files are installed in CacheSys\Mgr\Locale.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: Languages.Cache Basic
Platforms: All
DevKey: CDS394
Summary: Fix Basic compiler failure on function call with no parameter list
Description:
Under some circumstances, the Basic compiler would
overflow the argument stacxk when compiling functions with no argument
list. This has been corrected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Languages.Cache Basic
Platforms: All
DevKey: JN087
Summary: Unary + operator now supported in Basic
Description:
The unary minus operator now does the expected
numeric conversion.
Prior to this change, it would be ignored under some circumstances.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: Misc
Platforms: All
DevKey: JCN479
Summary: Build thirdparty executables for Linux on SUSE with GCC 3.2 compiler
Description:
InterSystems now has switched to build on SUSE with
GCC 3.2 rather than RedHat. RedHat executables built previously use
GCC 3.2.3 and are not compatible with the 3.2 release of the
compiler on SUSE.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
Yes |
Category: Networking
Platforms: All
DevKey: GK254
Summary: Fixed recovery of partially processed ECP requests
Description:
Upon server restart, when the last
partially processed request buffer is received, it will skip
already-processed/duplicate individual requests properly.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Networking
Platforms: All
DevKey: GK255
Summary: Fix the way journal checkpoint was used
Description:
The write journal checkpoint processing was improved
to better handle system interruptions. Previously, there were cases
when the system might have concluded that journaling was turned off.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
Yes |
Category: Networking
Platforms: All
DevKey: GK257
Summary: Fixed error-trap error frames.
Description:
The
error processor may attempt to get the routine source info, but that
operation may fail because the network is not available. Typically,
this results in the message "Error encountered while processing an
error"
being written to the cconsole.log file. This condition is now
recognized and the extra message avoided.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Networking
Platforms: All
DevKey: GK258
Summary: ECP clients are not picking up ClientReconnectDuration value changes
Description:
Previously,
ECP Timeouts were not persistent. Changes with the Configuration Manager will
persist now with this change.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Networking
Platforms: All
DevKey: GK259
Summary: ECP updates locally cached block of readonly DB.
Description:
Caché ECP has been changed to honor readonly DBs. ECP will return
<PROTECT> error before the request is sent to the server. In
some situations, ECP updated the local cache before sending the
request; the request failed but left the updated local cache intact
with incorrect data.
Note: this change is message level compatible,
backward and forward, except older versions will not honor the
readonly state.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Networking
Platforms: All
DevKey: GK261
Summary: Defining an ECP client causes DCP to fail during startup
Description:
In prior versions, defining an ECP client would cause
incorrect port numbers to be assigned legacy network nodes.
This has been corrected.
Likelihood |
High |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
No |
Category: Networking
Platforms: OpenVMS
DevKey: LFT1157
Summary: EIA0: not recognized as ethernet device
Description:
This change adds EIA0 to the ETHERNET_DEVICE_LIST for VMS
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: Networking
Platforms: All
DevKey: STC490
Summary: Fix MAXSCOPE error in DDPMASTER
Description:
In some rare cases when using DDP in a clustered
environment, the DDP master process could receive a MAXSCOPE when
restarting after an error. This has been fixed.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
Yes |
Category: Networking
Platforms: All
DevKey: TTS031
Summary: Fix Intersystems packet driver
Description:
The InterSystems packet driver is now fully "plug-and-play" compliant.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
No |
Category: Object
Platforms: All
DevKey: DVU892
Summary: Remove word "Caché" from Studio and
Connection Manager title bar
Description:
Remove "Caché" from the title bar of Studio and Connection Manager.
Remove "Caché" from menu item Help->About (Caché) Studio.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: Object
Platforms: All
DevKey: MAK865
Summary: Under some conditions, the class index and actual classes present could get out of sync
Description:
In some circumstances, a user could delete a class
but the class index for this item was not updated at the same
time. These have been corrected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object
Platforms: All
DevKey: MAK886
Summary: XML import fails with <MAXSTRING>endCSP+16
Description:
Importing large CSP files that were exported as XML
may cause <MAXSTRING> errors on import in some cases depending
on where the record boundaries fall with regard to the XML structure.
This no longer happens.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object
Platforms: All
DevKey: MC422
Summary: Update RoseLink
Description:
The following enhancements have been made to Caché Roselink:
- RoseLInk now uses the %Dictionary classes for its inspection activities
- Several new keywords were added to the Caché tab
- RoseLink now uses XML streams for its data manipulation (as a consequence the 32KB restriction has been lifted)
- Relationship processing has been improved
- Selection boxes now allow multiple selections at once
- Several defects were corrected in the way button states are handled
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object
Platforms: All
DevKey: MC453
Summary: GetErrorText to return multiple errors
Description:
GetErrorText has a defect that prevented it from returning multiple errors. This is fixed.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.Activate
Platforms: All
DevKey: JN169
Summary: Prevent <list> error importing objects with huge enumerations
Description:
Caché would report a <LIST> error when
importing Many Microsoft CDO objects at once. This was caused by the object having
a very large enumeration which overflowed the 32K maximum length of a
string, thereby corrupting the list. This has been fixed.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.ActiveX
Platforms: All
DevKey: DPV2102
Summary: LogicalToDisplay() will now report %EXTERNAL(xxx) as type VARCHAR.
Description:
Any column prepared via xDBC of the type %EXTERNAL(xxx) will now report as type VARCHAR.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
Yes |
Category: Object.ActiveX
Platforms: All
DevKey: DVU903
Summary: Fix application interruption caused by release of uninitialized binarystream.
Description:
Prior to this change, if a CacheObject.BinaryStream instance
was allocated but not used, the application would report an error when
the instance was released. This no longer happens.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: DLP1123
Summary: Generate additional query metadata
Description:
The GetInfo() method of all queries has been extended so additional
metadata can be returned. Specifically, another formal argument has
been added to GetInfo() that is a pass-by-ref argument. If this
argument is sent a true value when GetInfo() is called then GetInfo
will return extended info in the same argument. At this time, the
extended information is a list that corresponds to the colinfo
list. Each element in the list is the property name corresponding to
the column contained in the same element position in the colinfo
list. If the column is not based on a property, then the element value
will be "".
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: DLP1136
Summary: Add STMTTYPE to extended query metadata
Description:
A new method has been added to
%ResultSet -
GetStatementType(). This method returns a number corresponding to the
SQL statement type.
- 1 = SELECT
- 2 = INSERT
- 3 = UPDATE
Other
values are also possible but are not common statement types for
%ResultSet queries.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: DLP1158
Summary: Tunetable info overwritten by XML load
Description:
Selectivity values defined in the storage definition
of a class are retained when the class is loaded from CDL or XML
files. Selectivity values contained in the CDL/XML file will overwrite
any saved selectivity values.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK828
Summary: Do not generate member method code if this method is overridden by user code
Description:
Caché generated the default method for Get even if it was overridden. This
has been corrected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK829
Summary: Allow multiple arguments to an object constructor %New method
Description:
With this change, up to ten parameters are permitted
to be passed to the %New method. These are in turn passed
to the %OnNew method to allow more flexibility in creating a new object.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK860
Summary: Prevent <UNDEFINED> in the class compiler when a dependency error exists.
Description:
When you compile some classes with a dependency error after reporting this error the class compiler was reporting:
<UNDEFINED>CompileList+66^%occCompile
Now it just reports the dependency error.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK876
Summary: Prevent potential clash in use of ^CacheTempMAC if compiling a class with the same name in two namespaces at same time
Description:
If a class with the same name is present in two
namespaces and it is compiled at the same time then there is a
potential clash in the ^CacheTempMAC global which could result in the
class compile failing when it should work correctly. This usage collision
is now avoided.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK884
Summary: Report errors making class descriptor better
Description:
When creating the class descriptor if the routine to
call for a method is invalid report an error message of the problem
rather than failing with an <UNDEFINED> error. The message should
allow the real cause of the error to be tracked down more easily.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK891
Summary: Should use lock escalation when compiling huge number of classes
Description:
Compiling a large number of classes in a namespace may fill the lock
table or the internal system class lock, causing the compilation to fail
with a lock table full error or <TOO MANY CLASSES>. Now, this no longer
occurs but only one large namespace (4,000 classes or more) may be compiled
at a time.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK897
Summary: Resolve ambiguous optimization in class compiler
Description:
The compiler now correctly optimizes code of this syntax:
Do ..Method().OtherMethod()
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.Java
Platforms: All
DevKey: MAB207
Summary: Enhancement in Dynamic Java Binding when there is no Projected Java class
Description:
The Caché Java Reflection now uses a generic projection instead of a
projected Java class.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: Object.Java
Platforms: All
DevKey: MAB210
Summary: Fixes in Java client side collections
Description:
A server error message now is reported instead of an ArrayIndexOutOfBounds
exception when there is an error fetching an object collection from the
server.
The method SList.addAll() now successfully insert into an empty SList.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.Java
Platforms: All
DevKey: MAB236
Summary: Support for Fileman Date and Timestamp in Java client
Description:
Caché now projects to Java clients properties of type %Library.FilemanDate
and %Library.FilemanTimeStamp to java.sql.Date and java.sql.Timestamp,
respectively.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1261
Summary: Fix Java compile problems when reserved words are used
Description:
If the user uses certain names in their program, it
used to be the case that the generated program would not compile
because of conflicts with names used in CacheDB.jar. Now Caché
prefixes
such names with an underscore. This resolves the conflict and the
generated code will now compile.
Also get/set{Database/Id} are changed to get/set_{Database/Id}
(underscore has been added between the get or set and the name).
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1295
Summary: Support Fileman Date and Timestamp in generated Java binding
Description:
Properties of %FilemanDate and %FilemanTimeStamp types are created in the
Java projection.
Note: These types are not yet supported in BulkInsert or the C++
binding.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: Object.Library
Platforms: All
DevKey: MAK900
Summary: Type of argument to IsValid property method was incorrect
Description:
The property IsValid method was always taking an
argument of type %String but this is incorrect as some of the
arguments may not be %String type. This now takes arguments of a type
which allows any class to act as a subclass.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.Relationships
Platforms: All
DevKey: MAK893
Summary: Prevent <UNDEFINED> error in %AddToSaveSet when saving a relationship object
Description:
When an application attempted to save a relationship
object, under some circumstances %AddToSaveSet would report an
<UNDEFINED> error.
This no longer happens.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.Soap
Platforms: All
DevKey: MXT483
Summary: WSDL reader extensions to handle WSDL for UDDI specification.
Description:
If no services are specified in a WSDL, then create
a web client proxy class for each binding. The UDDI WSDLs are of this
form. The default classname for this class is
<BindingName>.<BindingName>.
Allow a web client class to not have a LOCATION parameter specified.
In this instance, the location will need to be specified at run-time.
Change method name handling to replace _ and - with "" instead of "u" as previously.
Extend the web client to handle lists (i.e. maxOccurs="unbounded" in
the schema) as method arguments in a document/literal WSDL. Changes
required are:
- Support argument parameters for a web method by converting these
parameters to property parameters in the %SOAP.Descriptor class for
the web service or web client.
- As an exception to (1), if the type of an argument is %ListOfObjects
or %ListOfDataTypes and ELEMENTTYPE is specified as a argument
parameter, then create the property in the %SOAP.Descriptor class with
the type given by the ELEMENTTYPE and Collection="list". This gives
us a way to easily create list arguments to a web method.
- The WSDL reader uses (2) in order to handle maxOccurs="unbounded"
for the input or output parameters.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: Object.Soap
Platforms: All
DevKey: MXT487
Summary: Make SOAP web client class instantiable.
Description:
The SOAP client wizard now generates a new,
instantiable form of client classes. This new form is recommended
for all future usage.
The new (instantiable) form is now
generated by the SOAP client wizard, is recommended and will of course
also work.
The SOAP web client has been modified to be an instantiable subclass of
%RegisteredObject. The web methods generated by the SOAP WSDL reader
will be now be instance methods. The current ClassMethods will
continue to work.
Additional properties will be added to the %SOAP.WebClient class to
allow control of the SOAP request:
- Location - override the location URL
- Timeout - timeout for waiting for web response
%SOAP.WSDL.Reader (and therefore the SOAP client wizard) are changed
to create instantiable web client classes using the new properties
defined above.
Note: The old form continues to work.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: Object.Soap
Platforms: All
DevKey: MXT488
Summary: Allow use of transport protocol other than HTTP for SOAP web services
Description:
To implement a web service using your own transport,
get the SOAP message as a stream using your transport, instantiate the
web service class and call the OnSOAPRequest class method of the web
service class. On SOAPRequest is defined as:
Method OnSOAPRequest(action, requestStream, responseStream)
where
- action is a %String that specifies the SOAP action. The piece of
the action string after the last "." is used as the method name for
using the correct descriptor class. If action is "", then the element
name from the first element (the wrapping element) in the SOAP Body is
used as the method name.
- requestStream is a stream that contains the SOAP message encoded
according to the encoding attribute of the XML directive.
- responseStream is a character stream produced as the SOAP response
that contains the response SOAP message encoded in UTF-8.
responseStream may either be created before calling OnSOAPRequest and
passed in or a variable may be passed by reference that will be
assigned a %FileCharacterStream created by OnSOAPRequest.
An error will be indicated by returning a SOAP fault in response stream. No
%Status is returned.
A SOAP transport class may be specified to %SOAP.WebClient by
setting the Transport property of the web client to an instance of the
transport class. The SOAP transport class may specify the
DoSoapRequest method for the client class and may have additional
properties to be used by the transport class.
If no transport class is specified the default transport is HTTP.
To implement a web client, the transport class should contain a
DoSOAPRequest method that will be called by the web client with the
request. The web client class MUST be an instantiable web client.
The deprecated web client that uses class methods does not support use
of a transport class. The responsibility of DoSOAPRequest is to
transport the request to the service and obtain the response. The
signature of DoSOAPRequest is:
Method DoSOAPRequest(webClient,
action,
requestStream,
responseStream) As %Status
where
- webClient is the oref of the web client class
- action is a %String that specifies the SOAP action.
- requestStream is a stream containing the request encoded in
utf-8.
- responseStream is a %FileBinaryStream argument that should be
used by DoSOAPRequest to write the response. responseStream must
contain data in the charset specified by the encoding attribute of the
?xml directive. utf-8 is recommended.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.Soap
Platforms: All
DevKey: MXT490
Summary: Web Services with SoapBindingStyle=rpc and SoapBodyUse=literal
Description:
Add support for SOAP web services and web clients with SoapBindingStyle=rpc and SoapBodyUse=literal.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.Soap
Platforms: All
DevKey: MXT491
Summary: Use stream properties for %CharacterStream and %BinaryStream web method arguments
Description:
If a web method argument is %CharacterStream,
%FileCharacterStream or %GlobalCharacterStream, use a character stream
property in the %SOAP.Descriptor class for this argument. This allows
the use of the CONTENT="mixed" property parameter with this argument.
For example,
arg As %FileCharacterStream(CONTENT="mixed")
may be used for a mixed content character stream.
If a web method argument is %BinaryStream, %FileBinaryStream or
%GlobalBinaryStream, use a binary stream property in the
%SOAP.Descriptor class for this argument.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.Soap
Platforms: All
DevKey: MXT492
Summary: Support one-way SOAP messages
Description:
A method in a web service may be defined to be
"one-way". This definition is done by not defining an "output"
message for the operation in the WSDL. In this case, the method must
return no value and no SOAP response is expected to the message. The
exact meaning of "no response" is somewhat open for interpretation.
We will ignore any response except a SOAP fault which we will process
as per usual. The idea will be to be as forgiving as possible to
support various interpretations. Note that this is different from a
request-response SOAP message (the usual form) with an empty response.
In the request-response, case an empty response element within the
SOAP Body is always expected.
The return type %SOAP.OneWay is used for both web service and web
client methods to indicate that message is one-way. For example,
Method send(x as %String) as %SOAP.OneWay
One-way methods should normally not be used even when no return type
is expected, since the use of request-response is much more common,
supported and expected.
When implementing a SOAP web service transport, OnSOAPRequest will
return an empty responseStream unless a SOAP fault occurs in which
case the responseStream will contain the SOAP fault.
When implementing a SOAP web client transport, the callback now has an additional argument
Method DoSOAPRequest(webClient,
action,
oneWay,
requestStream,
responseStream) As %Status
where OneWay = 1 if the no response is expected. Default is 0.
Note additional argument in the middle for DoSOAPRequest.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: Object.Soap
Platforms: All
DevKey: MXT493
Summary: WSDL reader to avoid creation of ambiguous code
Description:
For web client method that returns no value, the
WSDL reader will generate code with extra parentheses to avoid an
ambiguous construct which causes problems for compiler optimizing.
The code should be
Do (..WebMethod(methodname)).Invoke(....)
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.Soap
Platforms: All
DevKey: MXT494
Summary: List arguments created by WSDL reader with ELEMENTTYPE need XMLNAME
Description:
When a list argument for a web method is needed, the
WSDL reader needs to insure that the correct element name is kept by
creating an XMLNAME property parameter. XMLNAME is needed because of the
change of type from %ListOfObjects to the base type when creating
property in descriptor class will use the XMLNAME in the base class
which isn't correct.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.Soap
Platforms: All
DevKey: MXT497
Summary: Allow override of method to write the SOAP body of a SOAP request
Description:
Allow a web client class to take responsibility for
writing the SOAP body of the SOAP request. Specify the name of the
method to call to write the SOAP body by putting the method name into
the WriteSOAPBodyMethod property of the web client class. For example
Method test(..... [WebMethod]
{
Set ..WriteSOAPBodyMethod="override"
Do ..WebMethod("test").Invoke(.....
Set ..WriteSOAPBodyMethod=""
}
The signature of the override method is
Method override(proxy As %SOAP.ProxyDescriptor, tag As %String) As %Status
where
- proxy is the order of the descriptor class instance for this web method
- tag is the top level tag
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: Object.Soap
Platforms: All
DevKey: MXT498
Summary: Ignore web services other than SOAP services in WSDL
Description:
Ignore any services that a WSDL defines which bind to other than SOAP 1.1 bindings.
Also change to accept transport other than HTTP in the SOAP binding.
Create a comment to describe the transport. It is the user's
responsibility to create an appropriate transport.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: Object.Soap
Platforms: All
DevKey: MXT499
Summary: Fix bug in assigning names of classes created for inline complexTypes by the XML schema wizard
Description:
When names were generated for classes created for
inline complexTypes by the XML schema wizard, some properties that
referenced that type were not fixed up. Fixup of property type
references is now correct.
Previously classes were considered identical and removed if all
property names were equal. This lead to unlike classes incorrectly
being represented by a single class. This problem was fixed by a
change to use equality of class parameters and property names, types
and parameters to establish equality of classes.
Correct overly aggressive folding of type references into collections
that lead to losing elements in XML.
Support includes a schema that has no target_Namespace and no default
namespace. This situation is treated as the target_Namespace and
default namespace being the same as the including schema per XML
specification.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
Yes |
Category: Object.Soap
Platforms: All
DevKey: MXT501
Summary: Do not, by default, validate SOAP messages against a schema
Description:
Change the web service and web client classes to
pass the SAX flags to the SAX parser as specified by the new SAXFlags
property. The default for SAX flags will no longer do schema-based
validation of SOAP messages. Since this level of validation is not
really needed for SOAP, it hurts performance and causes problems with
not knowing the location of the schema on the target system.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.Soap
Platforms: All
DevKey: MXT503
Summary: WSDL Reader should not give error for soap:header
Description:
Ignore soap:header element in binding section. Previously an error was returned.
The header classes needled to manually put in headers are generated.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.Soap
Platforms: All
DevKey: MXT504
Summary: Fix method method names by WSDL reader not being unique
Description:
Class name is restricted to be unique in the first
25 characters. Make the descriptor classes for the generated web
client be unique in 25 characters by truncating and appending unique a
integer as necessary.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.XML
Platforms: All
DevKey: MXT463
Summary: Support NAMESPACE parameter of XML enabled classes.
Description:
This change adds support for the NAMESPACE class
parameter for XML enabled classes. The NAMESPACE parameter specifies
the XML namespace to be used when that class is projected to XML.
The NAMESPACE parameter is supported by %XML.Writer as the namespace
to use when exporting a class. If the NAMESPACE parameter is
specified for a class, then the namespace specified in the class is
always used even if the DefaultNamespace property is specified for
%XML.Writer or the namespace argument is specified for a %XML.Writer
method.
However, direct calls to XMLExport ignore the NAMESPACE class
parameter, since XMLExport does not directly support XML namespaces.
The NAMESPACE parameter is supported by %XML.Reader as the required
namespace for a class when importing an XML document.
In addition, the XMLPROJECTION property parameter is extended with a
new value, "elementref", that indicates that this element is defined by
a ref= attribute to a global element, possibly in another namespace.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.XML
Platforms: All
DevKey: MXT479
Summary: Change XML Schema wizard to save namespace information
Description:
As an optional feature of the XML Schema wizard,
the schema wizard saves XML namespace by using the NAMESPACE parameter
of the generated classes and marking properties created for
<element ref=...> tags as XMLPROJECTION="elementref". This
behavior is controlled by the optional CreateNamespace %Boolean.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: Object.XML
Platforms: All
DevKey: MXT480
Summary: Handle more general specification of parameters for document literal WSDL
Description:
For document literal WSDL, SOAP must to deal with a
parameter element that does not specify complexType inline, rather it
use type= attribute of the parameter element.
Allow specification of package name as an argument to Process method
of %SOAP.WSDL.Reader to handle the case where default package name will
not result in unique class names with class descriptor limits.
Do not require message elements to have a name attribute with value of "parameters".
Fix an issues where the SOAP wizard display would be blank for the file:// protocol.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: Object.XML
Platforms: All
DevKey: MXT485
Summary: Cleanup XML schema reader api and allow control from UI
Description:
Add a new command line interface, Process, to
%XML.Utils.SchemaReader that is instantiated and controlled by
setting properties. Keep the existing ProcessSchema interface.
Modify ParseSchema to use the same properties.
The properties that control %XML.Utils.SchemaReader are:
- MakePersistent -- if true(1) create persistent classes, else create
registered classes. Default is true.
- MakeRelationships -- if true(1), convert list collections of
persistent classes to relationships. Default is true.
- MakeNamespace -- if true, add NAMESPACE parameter to generated classes. Default is false(0).
- Debug -- debug level. Additional output for levels >0. Default is 0.
- TestFlag -- if true, make output repeatable for unit test, for example no dates. Default is false(0).
Add flags to the user interface template to allow control of MakePersistent, MakeRelationships and MakeNamespace.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.XML
Platforms: All
DevKey: MXT502
Summary: XML Schema Reader fixes
Description:
Implement <xs:any> element as an element with
type of
%XML.String and XMLPROJECTION="any" which is a new
XMLPROJECTION that just displays the property value with no containing
tag. The property must be defined with CONTENT="mixed" and the value
should have a containing tag.
XMLPROJECTION="elementref" was not being generated for ref= of element
with type attribute specified. This has been fixed.
Make a created class Abstract if the abstract="true" attribute is
specified for a top-level complexType or element.
Allow character and binary stream properties to have XMLPROJECTION="content".
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Object.XML
Platforms: All
DevKey: MXT522
Summary: Fix ExportToString reporting <MAXSTRING> error
Description:
This method has been changed to return
error
%Status if result of ExportToString will be > 32K.
Add ByRef %Status return argument to GetXMLString method of %XML.Writer.
Method signature is
Method GetXMLString(ByRef status As %Status) As %String
Return error %Status if result string > 32K.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: SQL
Platforms: All
DevKey: DPV1873
Summary: Support LENGTH(expr) as SQL Scalar function
Description:
We now support LENGTH(expr) as a synonym for {fn LENGTH(expr)}
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: SQL
Platforms: All
DevKey: DPV2020
Summary: Correct error reporting during preparsing in Dynamic SQL
Description:
If an SQL Dynamic Query results in an error during
SQL preparsing, the error will now be returned properly rather than
crashing. For example:
USER>Set rs = ##class(%ResultSet).%New("%DynamicQuery:SQL")
USER>Set xx="Select %ID From Sample.Person Where Name like ""A%' order by Name"
USER>Set sc = rs.Prepare(xx)
USER>Do $SYSTEM.OBJ.DisplayError(%objlasterror)
ERROR #5521: SQLError: SQLCODE = -3
SQL ERROR #3: Closing quote () missing^Select %ID
From Sample.Person Where Name like "A%' order by Name
Prior to this fix, Set sc = rs.Prepare(xx) would crash with an
<UNDEFINED> error and the query would fail.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: SQL
Platforms: All
DevKey: DPV2076
Summary: ConvertDollarH2Date ignores $$SetDCFormat^%NLS("DateSeparator",".")
Description:
An issue has been fixed where the wrong value might
be returned from the SQL TO_DATE function is the process was using a
non-default DateSeparator and/of DateFormat.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
No |
Category: SQL
Platforms: All
DevKey: DPV2079
Summary: Correct <LOCK TABLE FULL> on DELETE
Description:
A problem has been fixed which was introduced in
Caché 5.0.3 where the lock table could fill up if
thousands of rows were deleted from a table within a single
transaction and the table had at least one unique constraint defined
on it. When this happened, application would hang or terminate.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
Yes |
Category: SQL
Platforms: All
DevKey: DPV2088
Summary: Fix problems with Foreign Key constraints and $Piece access type
Description:
In some situations, a class compilation might
result in a generated syntax error in the compiled table routine if
the table had a single field foreign key constraint and the field in
the foreign key was mapped in a subscript level of a map using an
Access Type of Piece (in %CacheSQLStorage). This has been fixed.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: SQL
Platforms: All
DevKey: DPV2089
Summary: Implement many SQL Functions in $SYSTEM.SQL.<Function>()
Description:
The following SQL Functions have been provided as
API entry points in $SYSTEM.SQL.<Function>() so they can be
easily called from ObjectScript code.
- $SYSTEM.SQL.ABS(val)
- ABS returns the absolute value, which is always zero or a positive
number
- $SYSTEM.SQL.ALPHAUP(stringexp)
- ALPHAUP returns the Alphaup collation of the passed in value
- $SYSTEM.SQL.CEILING(val)
- CEILING is a scalar numeric function that returns the smallest
integer greater than or equal to a given numeric expression
- $SYSTEM.SQL.DATEADD(datepart,val,dateexp)
- DATEADD is a general date/time function that returns a date
calculated by adding a certain number of date parts (such as hours or
days) to a specified timestamp
- $SYSTEM.SQL.DATEDIFF(datepart,startdate,enddate)
- DATEDIFF is a general date/time function that returns the interval
between two dates
- $SYSTEM.SQL.DATENAME(datepart,dateexp)
- DATENAME is a general date/time function that returns a CHARACTER
STRING containing the name of the specified date part of a date/time
value.
- $SYSTEM.SQL.DATEPART(datepart,dateexp)
- DATEPART is a general date/time function that returns an INTEGER
representing the specified date/time part of the specified date/time
expression.
- $SYSTEM.SQL.DAYNAME(dateexp)
- DAYNAME is a date/time function that returns a character string
containing the name of the day in a given date expression.
- $SYSTEM.SQL.DAYOFMONTH(dateexp)
- DAYOFMONTH is a date/time function that returns an integer from 1
to 31 that corresponds to the day of the month in a given date
expression.
- $SYSTEM.SQL.DAYOFWEEK(dateexp)
- DAYOFWEEK is a date/time function that returns an integer from 1
to 7 that corresponds to the day of the week in a given date
expression.
- $SYSTEM.SQL.DAYOFYEAR(dateexp)
- DAYOFYEAR is a date/time function that returns an integer from 1
to 366 that corresponds to the day of the year in a given date
expression.
- $SYSTEM.SQL.FLOOR(val)
- FLOOR is a numeric function that returns the largest integer less
than or equal to a given numeric expression
- $SYSTEM.SQL.HOUR(timeexp)
- HOUR is a date/time function that returns an integer from 0 to 23
that corresponds to the hour component in a given date-time
expression.
- $SYSTEM.SQL.MINUTE(timeexp)
- MINUTE is a date/time function that returns an integer from 0 to
59 that corresponds to the minute component in a given date-time
expression.
- $SYSTEM.SQL.MONTH(dateexp)
- MONTH is a date/time function that returns an integer from 1 to 12
that corresponds to the month in a given date expression.
- $SYSTEM.SQL.MONTHNAME(dateexp)
- MONTHNAME is a date/time function that returns a character string
containing the name of the month in a given date expression.
- $SYSTEM.SQL.QUARTER(dateexp)
- QUARTER is a date/time function that returns an integer from 1 to
4 that corresponds to the quarter of the year in a given date
expression.
- $SYSTEM.SQL.SECOND(timeexp)
- SECOND is a date/time function that returns an integer from 0 to
59 that corresponds to the second component in a given date-time
expression.
- $SYSTEM.SQL.SQLSTRING(stringexp,maxlen)
- SQLSTRING returns the SqlString collation of the passed in
value
- $SYSTEM.SQL.SQLUPPER(stringexp,maxlen)
- SQLUPPER returns the SqlUpper collation of the passed in
value
- $SYSTEM.SQL.STRING(stringexp,maxlen)
- STRING returns the String collation of the passed in value
- $SYSTEM.SQL.TOCHAR(expr,format)
- TOCHAR is a general SQL string function that converts a given date
or number value to a string.
- $SYSTEM.SQL.TODATE(dateexp,format)
- TODATE is a general SQL string function that converts a given
string expression to a value of DATE data type.
- $SYSTEM.SQL.UPPER(stringexp)
- UPPER returns the Upper collation of the passed in value
- $SYSTEM.SQL.WEEK(dateexp)
- WEEK is a date/time function that returns an integer from 1 to 53
that corresponds to the week of the year in a given date
expression.
- $SYSTEM.SQL.YEAR(dateexp)
- YEAR is a date/time function that returns an integer in the range
1840-9999 that indicates the year in a given date expression.
For more information about each of the functions above, see the documentation for the matching SQL function in the Caché SQL Reference.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: SQL
Platforms: All
DevKey: DPV2093
Summary: Implement $LIST, $LISTDATA, $LISTFIND, $LISTGET, $LISTLENGTH, and $PIECE functions
Description:
The following new SQL Scalar functions have been
implemented. The functions mimic the ObjectScript functions of the
same name.
- $PIECE(plist,delimiter,from,to)
- This function returns data of type VARCHAR
- $LIST(list,position,end)
- This function returns data of type VARCHAR
- $LISTDATA(list,position)
- This function returns data of type SMALLINT.
- $LISTFIND(list,value,startafter)
- This function returns data of type SMALLINT.
- $LISTGET(list,position,default)
- This function returns data of type VARCHAR.
- $LISTLENGTH(list)
- This function returns data of type SMALLINT.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: SQL
Platforms: All
DevKey: DPV2100
Summary: SQL: Implement $EXTRACT, $FIND, and $LENGTH functions
Description:
The following new SQL Scalar functions have been
implemented.
The functions mimic the ObjectScript functions of the same name.
- $EXTRACT(expression,from,to)
- This function returns data of type VARCHAR
- $FIND(string,substring,position)
- This function returns data of type SMALLINT
- $LENGTH(expression,delimiter)
- This function returns data of type SMALLINT
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: SQL
Platforms: All
DevKey: DPV2109
Summary: Fix incorrect setting of $Bit for SQLStorage
Description:
A defect has been fixed where SQL INSERT, UPDATE,
and DELETE did not work properly if a table had a Bitmap Extent index,
but no Bitmap index.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
Yes |
Category: SQL
Platforms: All
DevKey: DPV2140
Summary: SQL Fix: Handle DataAccess expression with "(" in global name
Description:
A bug has been fixed where a class using
%CacheSQLStorage with a DataAccess expression that contains a global
reference with a "(" in the global name would not compile properly.
An example DataAccess expression which caused the problem is:
^[$Piece(IVIndex({L1}),"^",1)]IVPatient
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: SQL
Platforms: All
DevKey: DPV2143
Summary: SQL Fix: Support global reference with a "(" but no subscripts.
Description:
A bug has been fixed where a table and queries
against a table would not compile if there was a mapping to a global
which contained no subscripts, but there was at least one "(" in the
global reference. An example global reference which caused the
problem is:
^[$Piece(%NSP({L1}),"^",1)]IPatientSys
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: SQL
Platforms: All
DevKey: DPV2151
Summary: Keep class definition up-to-date after tuning the table
Description:
After tuning a table, the class definition that projected the table
definition will be marked as up-to-date. The class definition will be
updated with the new EXTENTSIZE and SELECTIVITY parameter values, but will
not be marked as modified.
All dynamic SQL and xDBC SQL queries will use the new EXTENTSIZE and
SELECTIVITY values the next time the query is prepared. Class queries,
embedded SQL in a class definition, and stand-alone routines must be
manually recompiled for the queries to be optimized with the new values.
Likelihood |
High |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: SQL
Platforms: All
DevKey: DPV2158
Summary: Do not tune external tables; keep-up-to-date now configurable
Description:
There is a new parameter to TuneTable called KeepClassUpToDate. This
flag takes 1 or 0. If 1 is passed in the table/class will be tuned
and the EXTENTSIZE and property SELECTIVITY settings will be updated
in the class definition, but the class timestamp will not change,
which means the class will still be considered up-to-date. If 0 is
passed in, the class definition timestamp value will be updated and
the class will be considered NOT up-to-date. The default value for
KeepClassUpToDate is 0.
The API calls to TuneTable are now defined as:
Do $SYSTEM.SQL.TuneTable(<table name>,<update>,<display>,.errors,<KeepClassUpToDate>)
and
Do TuneTable^%apiSQL((<table name>,<update>,<display>,.errors,<KeepClassUpToDate>)
SQL Manager has not been updated yet to allow the setting of the
up-to-date flag for the class when tuning the table. This will be
added in the near future.
There is also one other change in behavior. When all tables are tuned
(by calling (Do $SYSTEM.SQL.TuneTable("*",...)), the utility no longer
attempts to gather statistics for and tune External tables linked
through the SQL Gateway.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: SQL.DDL
Platforms: All
DevKey: DPV2078
Summary: DDL CREATE TABLE/VIEW works when security is off and user not logged in
Description:
A bug has been fixed where it was not possible to
create a table or view through SQL Manager if SQL Security was turned
off and no username was provided upon log in to the SQL Manager. Now,
if this scenario occurs, the table or view will be created with an
owner of _SYSTEM.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: SQL.JDBC
Platforms: All
DevKey: AND363
Summary: Set current row to 0 (before first) after delete/insert/updateRow has been executed
Description:
Until now,
Caché
attempted to restore the current row after deleteRow, insertRow
or updateRow was executed. Under some conditions, this can possibly result
in invalid cursor state. With this change, Caché sets the current cursor position
to BEFORE FIRST (0) right after refetching the result set.
ResultSet.getRow() was also corrected so that it returns 0 if the
cursor is positioned before/after the first/last row.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: SQL.JDBC
Platforms: All
DevKey: JCN428
Summary: Add jdbc documentation to javadoc
Description:
This change allow the building of documentation for jdbc classes:
com.intersys.jdbc.CacheConnectionPoolDataSource and com.intersys.jdbc.CacheDataSource
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: SQL.ODBC
Platforms: All
DevKey: JCN440
Summary: Fetch password from registry if Username passed in matches registry entry
Description:
The SQLDriverConnect API prompts for a password if
DSN and UID are passed in without specifying the password, regardless
of what exists in the registry for the password value.
The password will now be read from the registry if the
password is not passed and the UID passed into SQLDriverConnect
matches that found in the registry.
This was affecting Crystal Reports use.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
Yes |
Category: SQL.ODBC
Platforms: All
DevKey: JCN451
Summary: Display DSN Help as single screen
Description:
The Help for Caché ODBC DSN has been
streamlined.
It was changed to just display
one screen of help and skip displaying the index and find
tabs.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: SQL.ODBC
Platforms: All
DevKey: JCN452
Summary: Fix for WTS connections to loopback address
Description:
Connections from Terminal Server processes via the
loop back address were not getting counted properly as separate
connections. Now they are.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
Yes |
Category: SQL.ODBC
Platforms: All
DevKey: JCN454
Summary: SQLGetData returns uneven byte length for Unicode
Description:
When performing a Link to a Table from MS-Access, and
then opening it results in the error message "The Width of a Unicode text
column must be an even number of bytes". This has been corrected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: SQL.ODBC
Platforms: All
DevKey: JCN455
Summary: Plus-Minus sign and Multiplication sign are garbled
Description:
Characters is the range of 128-255 stored in
Caché $List as a type 1 string were not being converted to
multibyte characters correctly. This change corrects that.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: SQL.ODBC
Platforms: All
DevKey: JCN459
Summary: New CacheCharToMultiByte function used to convert string data from Caché
Description:
A new conversion function was added to support
Caché Narrow string conversions to MultiByte data.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: SQL.ODBC
Platforms: All
DevKey: JCN461
Summary: Return Truncation situations for stream support and SQLBindColumn -> SQLFetch
Description:
If SQLBindColumn -> SQLFetch on a stream
(LONGVARCHAR, LONGVARBINARY), it
would not return a truncation error if application buffer was too small.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: SQL.ODBC
Platforms: UNIX
DevKey: JCN462
Summary: Parse DSN connection string on UNIX without trailing ";"
Description:
When calling SQLDriverConnect on UNIX systems, the
iODBC Driver Manager does not normalize the connection string to
contain a final ";" as the Windows Driver Manager does. This causes a
normal looking connection string to fail:
DSN=Samples;UID=_SYSTEM;PWD=sys
while the following will succeed:
DSN=Samples;UID=_SYSTEM;PWD=sys;
This adds additional logic to handle missing ";" at the end of the connection string.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: SQL.ODBC
Platforms: All
DevKey: JCN469
Summary: Build usparc32 ODBC driver
Description:
This change adds a 32-bit usparc version of the ODBC
driver to the release.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
Yes |
Critical |
No |
Category: SQL.Privileges
Platforms: All
DevKey: DPV2053
Summary: Fix privilege checking with privileges granted indirectly through roles
Description:
Under some circumstances, checking the rights of a
user to perform a query could fail if the query had been previously
executed and
changes to the user privileges had been made since that query was
cached.
This has been fixed.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
Yes |
Category: SQL.Privileges
Platforms: All
DevKey: DPV2122
Summary: Incorrect Privilege checking on insert into..select
Description:
A issue has been fixed regarding SQL privilege
checking where INSERT privilege was erroneously required on both
tables referenced in a statement like:
INSERT INTO TableA SELECT * FROM TableB
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: AK567
Summary: Outer join into a split parent reference subscript
Description:
This change fixes two problems where the parent ID key is constructed
from multiple parts, and a query is made against the table involving
an outer join from parent to child (this includes using Caché "arrow" syntax).
Under some circumstances, this will result in
occasional compile-time errors because the
generated code would attempt to access non-existent variables.
In others, users will experience <UNDEFINED> errors at run-time.
Both of these have been fixed.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: AK581
Summary: Don't get fields when looping over bit chunks
Description:
For a table with a bitmap index, and with an IDKEY field that supports
bitmaps, Caché erroneously attempted to get the ID field when
it was not present.
This was fixed.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: AK583
Summary: Use correct value for %STARTSWITH DESC
Description:
The code for DESCending on a non-numeric field with %STARTSWITH requires use
of the highest possible character, $C(65535) for a UNICODE system and
$C(255) on a non-UNICODE system.
This choice was made at query compile time, relying on the
fact that $C(65535) gives "" on a non-UNICODE system. This
erroneously
led to a <WIDE CHAR> error being reported.
This has been corrected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: BJB275
Summary: Do not allow DesRef->field to be modified by INSERT or UPDATE
Description:
A problem with the SQL compiler has been corrected.
In the past we let syntax like:
UPDATE MyTable SET DesRef->FieldName = 'NewVal'
compile even though we never supported this syntax.
Caché will now report an error at compile time if it encounters
something like this. For example,
CacheSql1.MAC(9) : SQL24 : SPOUSE->NAME can not be modified by an UPDATE
UPDATE Sample . Person SET Spouse -> Name = SAMPLES
The same rules apply to INSERT.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: DPV2131
Summary: Order By DESC does not always work with $Piece mapping
Description:
A problem has been fixed where a query with ORDER BY DESC on a PieceCounter field for a %CacheSQLStorage map definition with AccessType="Piece" would return incorrect results in some cases.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
Yes |
Category: SQLManager
Platforms: All
DevKey: YSD649
Summary: Execute Query result splitter not resizing grid
Description:
When the result splitter is dragged to an
faraway position,
Caché now resets the
splitter top to the position where the four little buttons on right
side of the query text box can still be seen.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: SQLManager
Platforms: All
DevKey: YSD651
Summary: Sort Date Field for Open Table
Description:
The sort for date is corrected for Open Table.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: SQLManager
Platforms: All
DevKey: YSD652
Summary: Non-standard shortcuts have been added in Execute Query window
Description:
Shortcuts for the following options have been
changed:
Shortcut Old New
Export Ctrl+E none
Print Ctrl+P none
Execute Query Alt+E Ctrl+E
Show Plan Alt+P Ctrl+P
Previously, Alt+E and Alt+P were used before because of the small images we had
words on the buttons where Alt+E was shortcut for Execute Query and
Alt+E P was for Show Plan. Now the shortcuts for Export
and Print have been removed because they were seldomly used.
They have been recycled for Execute Query and Show
Plan.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: SQLManager
Platforms: All
DevKey: YSD662
Summary: Fix <PROTECT> error in SaveQueryHistory
Description:
Prior to this change,
while Executing Queries in SQL Manager it displays pop-up window with
<PROTECT> error
<PROTECT>zSaveQueryHistory+1^%ooSQL.Manager.API.1 .
when, in the Configuration Manager, on the Advanced tab, in the ObjectScript section,
the Global Kill Enabled choice is set to NO.
Now, if Global Kill is set to No, then the query history will not be saved.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: SQLManager
Platforms: All
DevKey: YSD674
Summary: 'Execute Query' shows wrong error messages
Description:
Caché might fail to report the actual error
(especially if it was a low-level error) in the SQL Manager dialog
box.
Instances where this could happen have been corrected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Studio
Platforms: All
DevKey: DVU869
Summary: FindInFiles dialog box limits find to 24 characters
Description:
The FindInFiles dialog box does not allow more than
24 characters in the string, where as the regular Find dialog allows
as many as are typed. The dialog box restriction has been removed.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Studio
Platforms: All
DevKey: DVU870
Summary: Supply default class name for Ctrl-Shift-G
Description:
If a user selects "GoTo ... " (Ctrl-Shift-G) for a
statement
do ##class(ClassName).xyz
and Class name is in short form, the full class name form will be
selected, that is, %Library.ClassName, if ClassName has a '%' class
or
is current_document_package.ClassName
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Studio
Platforms: All
DevKey: DVU876
Summary: View Storage marks class as modified.
Description:
When viewing the storage for a persistent class and clicking but not
modifying the class, the class appeared modified (* appeared in the title
bar). This has been corrected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Studio
Platforms: All
DevKey: DVU891
Summary: Implement Full Screen Feature
Description:
A new menu choice, View->Full Screen (F8), implements Full Screen Mode.
A second F8 or a click on the "Full Screen" icon toggles the mode.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: Studio
Platforms: All
DevKey: DVU901
Summary: Compile with Options
Description:
A new menu for classes, Build->Compile with
Options,
has been added to allow the user to change compile options for each compilation.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Studio
Platforms: All
DevKey: DVU916
Summary: Project Save As dialog box title is 'File Dialog'
Description:
The dialog for File | Save Project As appeared with a "File Dialog" title.
The title now is "Save Project As."
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: Studio
Platforms: All
DevKey: DVU920
Summary: Studio GOTO tag is not case sensitive
Description:
In Studio, if you have code that looks like
routine ;
do tag
;
do TAG
;
tag ;
quit
;
TAG ;
quit
if you right click on TAG in the "do TAG" line and select GOTO TAG
from the menu, you will be
positioned at "tag" instead of "TAG".
The search should have been case-sensitive. With this change, it is.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Studio
Platforms: All
DevKey: DVU934
Summary: Rebuild all dialog box is incorrectly worded
Description:
The wording associated with the F7 key has been
changed to more accurately reflect its function. It now reads,
"Do you want to rebuild all modified files in your project?"
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Studio
Platforms: All
DevKey: DVU974
Summary: Goto on #include items
Description:
With this change, you can create a MAC routine with a line like:
and right click on the '%occInclude'. The menu will now have a 'Goto
"%occInclude.inc"' item on it in the same way it does for a 'Do
entry^Routine' statement.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Studio
Platforms: All
DevKey: JN138
Summary: Code between <server> tags is not recognized as Caché Objectscript
Description:
Previously, in a CSP-file, the code between
<server>-Tags was not detected as Caché Objectscript.
It is now recognized properly.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Studio
Platforms: All
DevKey: JN162
Summary: Syntax checker flags code in <CSP:SQLQUERY>
Description:
The code inside the <csp:SQLQUERY> tag is now
syntax colored correctly.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Studio
Platforms: All
DevKey: MAK747
Summary: Remove 'modified' from list of class attributes
Description:
Remove the 'modified' class attribute from Studio as
this is no longer used. Also, do not export this item to the XML class
export format.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Studio
Platforms: All
DevKey: MAK887
Summary: Report better error message from Studio from opening a CSP page from a different namespace
Description:
If you open a CSP page /csp/user/mypage.csp from the
SAMPLES namespace Studio now reports correctly that this must be
opened from the other namespace.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Studio
Platforms: All
DevKey: RAW339
Summary: Hang/loop when finding text that matches in contracted code
Description:
A hang sometimes occurred when searching for a string in contracted code.
This has been corrected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Studio
Platforms: All
DevKey: RAW386
Summary: Update enhanced searching
Description:
The full search pattern now uses only a single escape character, the backquote.
[`!][`<attrName>]text[`!]
Search and replacement text can also contain
explicit tabs, as `t, and backquotes, as ``.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: Studio
Platforms: All
DevKey: RAW402
Summary: Better printer font selection
Description:
Sometimes the screen font may not be available for
printing. (FixedSys is a common example.) In particular, this can
cause a fixed pitch screen font to generate a variable pitch printer
font. This has been corrected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: Studio
Platforms: All
DevKey: RAW411
Summary: Display and print control codes
Description:
Studio now displays control codes and will print
them as well.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: System
Platforms: All
DevKey: CDS346
Summary: Catch invalid $list instead of crashing
Description:
If a character string which is not a valid list is passed to a $LIST function,
it should give a <LIST> error. Prior to this change,
a process could get an access violation in some cases.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System
Platforms: All
DevKey: CDS483
Summary: Make sure $ETRAP frames are popped before %HALT runs
Description:
If an application has set $ETRAP, it could interfere in some circumstances
with the %HALT routine which the system runs as part of HALT processing.
This change ensures that the $ETRAP is cleared before %HALT runs.
Likelihood |
High |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
No |
Category: System
Platforms: All
DevKey: DMD025
Summary: Remove some SERNBADCHUNK errors from SYSLOG
Description:
Some sites making frequent changes to globals with
data larger than 768 bytes would get thousands of entries with error
10017 in SYSLOG. These entries do not indicate a genuine error, but
will just force some data to be downloaded from the client again to
get the correct version. These entries are no longer logged in
SYSLOG.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
No |
Category: System
Platforms: All
DevKey: DMD043
Summary: Fix a system quiesce problem caused by a missed wakeup to a slave write daemon
Description:
A rare timing bug that kept the system from
quiescing has been fixed.
Warning:
Should this problem occur backup operations will be suspended and
this will block application execution indefinitely.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
Yes |
Category: System
Platforms: All
DevKey: DMD044
Summary: Remove a potential infinite loop in GetDirLoop
Description:
A rare bug that led to an infinite loop in %FILE
when getting an I/O error on terminal read or write has been
fixed.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System
Platforms: All
DevKey: HYY802
Summary: Prevent <ACCVIO> when a database is not accessible
Description:
Addressed an issue where an access violation
occurred when a database was made inaccessible to write daemon (or any
Caché job trying to gain access to it).
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
No |
Category: System
Platforms: All
DevKey: HYY837
Summary: Fix a problem with index sorting handling wide character strings
Description:
This change addresses an issue on Unicode platforms
where index sorting ($sortbegin/$sortend) might incorrectly set a global
to an 8-bit character string value instead of what would be the
correct wide character string value.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
Yes |
Category: System
Platforms: All
DevKey: JLC545
Summary: Improve detection of HyperThreading on Linux
Description:
This change correctly detects the number of physical
CPUs on SuSE 8.2 and Red Hat 7.3 for licensing purposes when
HyperThreading is enabled. Previous versions of Caché worked
only on Red Hat 8.x and later.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System
Platforms: All
DevKey: JLC551
Summary: Create Hungarian locales
Description:
Two new locales for Hungarian were created: an 8-bit
version based on Latin2 (hun8) and a Unicode version (hunw).
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: System
Platforms: OpenVMS, Tru64
DevKey: JLC577
Compatibility: 8
Summary: Correct variable corruption on SET
Description:
This changes corrects a situation that could, on
rare occasions,
corrupt a local variable during a SET command on Alpha platforms.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System
Platforms: All
DevKey: JLC570
Summary: Fix error handling for UnicodeLittle/Big
Description:
This change fixes an issue when doing file I/O with
UnicodeLittle or UnicodeBig translations in 8-bit locales. Now
Caché correctly scans the replacement string for
terminators. Previously this situation could cause an interruption under some
circumstances.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System
Platforms: All
DevKey: JO1742
Summary: Resolve issues using GTABSZ as maximum global reference length for 2KB databases
Description:
A problem has been resolved which could result in
database degradation. This only affected 2KB database which contained
globals in collating sequences other than Caché Standard(*). In
certain circumstances a global reference which would otherwise
generate a <SUBSCRIPT> error because it was too long would get
applied to the database resulting in degradation.
For databases created with 4.1 a default collation sequence can be
specified in MSU. For these databases the problem exists when the
global being referenced has a different collation sequence from the
default of the database.
Likelihood |
High |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
Yes |
Category: System
Platforms: All
DevKey: JO1760
Summary: Fix transaction rollback failure
Description:
An issue has been resolved where transaction rollback
might fail in certain cases. The bug was only present in 8KB database
where a KILL of a node was an exact match of a node that existed in
the database. In some of these cases, the kill would not be journaled
correctly so rollback would not restore the original data.
Likelihood |
High |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
No |
Category: System
Platforms: All
DevKey: JO1766
Summary: Broadcast database full status to operator console
Description:
When a database is marked as full, a message is
broadcast to the operator's console (if there is one) and stored in
the cconsole.log file.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: System
Platforms: UNIX
DevKey: LRS749
Summary: Fix terminal disconnect detection under UNIX
Description:
A problem with terminal disconnect detection under UNIX has been fixed.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
No |
Category: System
Platforms: All
DevKey: PWC787
Summary: Fix issue with long node-name / IP addresses
Description:
A problem has been corrected that could cause an
error during startup if the combined length of the node name and the
node IP address was longer than 77 characters.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System
Platforms: All
DevKey: RFD066
Summary: Allow process to recover MONITOR sessions
Description:
If a MONITOR session (i.e ^VPMON or ^PERFMON) is 'paused', and
then the process which paused the session logs out, the MONITOR session is essentially
"hung". Any attempts from another process to stop or resume the session would result in
a <FUNCTION> error, and Caché must be re-booted to use ^PERFMON again.
This change allows a new process to stop (or resume) the MONITOR session.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
Yes |
Category: System
Platforms: All
DevKey: RFD091
Summary: Stop MONITOR (^PERFMON) at shutdown.
Description:
This change ensures the shutdown of MONITOR data
collection at Caché shutdown.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System
Platforms: All
DevKey: RFD094
Summary: Replace support for ViewPoint connection in SuperServer
Description:
This change replaces support for a connection from
the ViewPoint collector. The code which checks for a ViewPoint
connection was inadvertently removed from Caché 5.0.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: System
Platforms: UNIX, OpenVMS
DevKey: RFD095
Summary: Fix ^SHUTDOWN hang on cluster recovery
Description:
This change fixes a problem which causes cluster
recovery on OpenVMS and UNIX to hang under some situations where
MONITOR was running.
Note: This problem can impede cluster recovery.
Likelihood |
High |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
Yes |
Category: System
Platforms: All
DevKey: SAP133
Summary: Add Event query to see named resource definitions
Description:
$SYSTEM.Event.Query() provides a query object to
traverse a list of currently defined Event Named Resources which
returns the list of currently defined Named
Resources
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: System
Platforms: All
DevKey: SML415
Summary: Ignore incoming DDP connection if remote maximum user is greater than 16000.
Description:
Prior to this change, systems using DDP may suffer a
system interruption when the maximum number of users exceeded 16384.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System
Platforms: All
DevKey: STC474
Summary: Fix Dismount call when DB not mounted
Description:
A rare problem involving the dismount of a database that
had not been mounted which affected the write daemon has been fixed.
The state of the database is now properly maintained in this case
amongst the various daemons.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System.Backup/Restore
Platforms: All
DevKey: CFL968
Summary: Fix error handling in RESTORE
Description:
A bug has been fixed that could cause a <FUNCTION> error when restoring a multi-volume backup.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System.Backup/Restore
Platforms: All
DevKey: HYY828
Summary: Journal restore performance enhancements: sorting and parallelism
Description:
Enhancements have been made to processing during
journal restore.
Although the improvements are automatically enabled,
the user should be aware of the basic mechanisms to extract the most benefit from it:
- Sorting: SETs are sorted on a per-global basis, initiated via
$SortBegin.
Because sorting may use a CACHETEMP database for temporary
storage, it is advisable to allow CACHETEMP to expand indefinitely for
optimal performance. If you must limit the maximal size of CACHETEMP
for some reason, journal restore will use a heuristic method to set a
limit on the number of SETs to be sorted before committing at least
some of them to databases to avoid overflowing CACHETEMP (and a generating
<FILEFULL> error). To give sorting the most elbow room (i.e., to
make it least likely to get a <FILEFULL> error),
set the max size of CACHETEMP (in MBs) to a number ending with 99
instead of 00 (for example, 299MB instead of 200MB or 300MB).
In general, however, the bigger
the max size of CACHETEMP, the better the performance.
- Parallelism: On multi-processor machines, restoring of multiple
databases is distributed to several concurrent jobs.
The number of jobs chosen is the smaller of the number of allocated CPUs, or the number of specified *target*
databases to restore to.
Concurrent restore is
NOT enabled if
- the system has only one CPU; OR
- there is only one target database to restore to; OR
- no database is specified (i.e., to restore ALL).
Thus, for optimal performance, you should specify the databases to
restore instead of choosing to restore ALL.
With concurrent restore, some error messages are different and some
are new.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
No |
Category: System.Backup/Restore
Platforms: All
DevKey: JO1746
Summary: Changes properly clear incremental backup flag
Description:
A problem has been corrected where
clearing the incremental backup flag
did not update the databases to allow the next Caché
backup to be an incremental backup. This problem was introduced in
5.0.1 and the workaround was that you had to perform one full backup
using Caché's backup facility before Caché would let you
run an incremental backup.
It has now been fixed.
Likelihood |
High |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
No |
Category: System.Backup/Restore
Platforms: All
DevKey: LRS735
Summary: Adapt DBSIZE to 8K databases and new BACKUP buffering
Description:
The DBSIZE utility, used for estimating the size of BACKUP archives,
has been updated to handle 8KB databases and changes in BACKUP buffer
sizes. Note that the actual backup size can be greater if a backup is
performed while applications are updating the databases involved.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: System.Cluster Specific
Platforms: OpenVMS
DevKey: GK270
Summary: Failure to join DECUNIX cluster corrected
Description:
On the DECUNIX cluster configuration the write
daemon requires network SHM to join the cluster, but it wasn't mapped
properly, and failed to join the cluster.
This has been corrected.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System.Cluster Specific
Platforms: All
DevKey: HYY799
Summary: Overcoming a bottleneck in quiescing the system during cluster backup
Description:
The timeout for quiescing a DCP cluster has been changed back to 10
seconds from the longer timeout used previously.
With the older timeout value,
jobs waiting on network events did not receive responses from the
server in a timely manner. This caused other errors while attempting
to quiesce the DCP cluster.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System.Cluster Specific
Platforms: All
DevKey: JO1736
Summary: Error detection/handling during cluster journal restore and TP rollback
Description:
If cluster failover detects an error during the
journal recovery or transaction rollback phases then it will declare a
cluster crash. The entire cluster, that is, all
of the Caché instances in that Caché cluster,
must be shut down at this point.
CCONTROL START will encounter the same problem on any node and abort. When
CCONTROL START aborts, an error message appears with a question about
continuing with startup.
At this point if you answer <Yes> then the error will be ignored
and the system will continue to start up.
Cluster recovery consists of recovering all journal files from all cluster
members.
If the error is in the journal file of the local system, then
startup will abort again. However, this time it is "local" startup not
"cluster" startup.
The cluster can be started by other cluster members
which do not have errors in their journal file(s). The procedure for
recovering from "local" errors is similar to that for
"cluster" errors. For local errors there are some additional options
such as bringing the system up in multi-user mode while for cluster
recovery you need to shut the system down and start it up again.
If you answer <No> to the question, the default, then you will
get one more question about whether you want to leave the system up in
single-user mode or not.
If you say yes here, then CSTART exits and the system is left up. If
you say NO here then the system is shut down and you have to run
CCONTROL start again to bring it up. You can run CCONTROL start with
the "nostu" option if you wish to bypass the cluster recovery (for example just
bring it up so you can get into Caché and try to fix the
problem), or you can let it get back to this point and say Yes. The
state of the system is the same in both cases.
To get into Caché to fix the problem(s) use the -B option on
csession (use -"B" on VMS) as in:
or
You should be in the manager's directory when you do this or you can use
to switch to the manager's directory after you are in Caché.
Once in Caché you can use the ^STURECOV routine to display the
errors and run the journal restore/transaction rollback process
again. During journal recovery Caché does not stop restoring to a specific
database until 3 errors are encountered. This differs from
transaction rollback
where Caché marks that database to be skipped on the first error. This is
means that the list of errors that you can display may
not be complete.
In addition to ^STURECOV you can run any of the
routines on the system that help you repair the problem. The journal
restore/transaction rollback can be repeated as many times as
necessary. Some utilities are listed in ^STURECOV which may be
useful.
Enter choice (1-9) or [E]xit/[H]elp?
When you have fixed the problem and successfully restored the journal to shut down the system use:
ccontrol stop <config name> bypass [quietly]
The "bypass" qualifier is required because Caché is running in
single user mode, this is the same as the -B parameter to
csession. "quietly" is optional and it tells ccontrol stop not to ask
any questions. Then use
ccontrol start <config name>
to start the system back up. This will redo the cluster recovery
operation but it should succeed now since the errors have been
resolved. It will shut down Caché and bring it back up in
normal mode.
If the errors cannot be repaired and you need to get the system up anyway there are two choices:
-
Run "CCONTROL start" and tell it that you want to continue when you
get the message
stating that
an error was encountered recovering the journal and rolling back
open transactions during the final phase of cluster recovery.
You can either continue and lose the ability to try again
(although you can always restore from the journal) or you can
stop here, resolve the problem and try again.
If you elect to continue, the cluster will start up. Any system which had errors in its
journal will not start up though. For those systems you can use Option
8 of ^STURECOV, which will be in "local recovery mode" now, to skip
the restore of the journal at startup. Then you can restart that
system, or use option 3 to bring the system up in multi-user
mode. Note that options 3 and 8 are not available while you are in
cluster recovery mode.
- The alternative is to use cwdimj to mark the cluster as recovered
the same way control start does when cluster recovery is successful. To
do this, start in the "mgr" directory and enter:
../bin/cwdimj -s. -pa
../bin/cwdimj -s. -pf
This cannot be undone so it should be used with care.
Likelihood |
High |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System.Cluster Specific
Platforms: All
DevKey: JO1750
Summary: Correct cluster recovery problem
Description:
A problem has been resolved that could result in
cluster failover not completing on a 4+ node cluster when a node which
had been running is shut down and then started before the failure
occurs. If this occurs, the "hang" can be resolved by starting up all
of the cluster members which are not running (at least 1 node which
had been part of the cluster must be down for this to occur).
Likelihood |
High |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System.Cluster Specific
Platforms: All
DevKey: JO1753
Summary: Enforce max routine name length in cluster routine purge message
Description:
A problem with non-Unicode clustered systems where
saving a routine with a name longer than 63 characters could cause
access violations in the ENQDMN has been resolved.
Warning:
The occurrence of this error may be accompanied by a cluster hang.
Likelihood |
High |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
Yes |
Category: System.Cluster Specific
Platforms: All
DevKey: JO1756
Summary: Fix USE_EFFICIENT_TTINPUT/LIMITED_TERM_CHAR to work with terminals accessed via -H
Description:
A problem which was introduced between 4.1 and 5.0
with terminals and the -H startup flag that broke timed reads has been
resolved. Input from the principle device when the -H flag is used
should work as it did before.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System.I/O
Platforms: All
DevKey: LFT1158
Summary: Undesired change in concurrent OPEN "|TNT| ...
Description:
This turns back on the USETTYHASH feature code under
Windows to enforce exclusive access to telnet devices. The operating
system enforces this itself for other terminal devices, but not for
telnet devices.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System.I/O
Platforms: All
DevKey: LFT1171
Summary: Using %GOF to write to Mag Tape fails
Description:
This fixes a problem causing an <UNDEFINED>
error preventing use of %GOF to mag tape.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
No |
Category: System.I/O
Platforms: OpenVMS
DevKey: LRS723
Summary: Fix slow sequential file writes on OpenVMS
Description:
A defect has been fixed in sequential file OPEN processing under OpenVMS,
that under certain conditions could severely slow file writes. A file
opened for both read and write access (the default mode) would be
affected.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
No |
Category: System.I/O
Platforms: All
DevKey: RJW727
Summary: $zu(94) to a process with a TCP device should flush the output immediately.
Description:
When the target process of a broadcast using the
$zu(94) function has a TCP device as $PRINCIPAL, output data is
buffered the i/o device, but not transmitted until either the buffer
is full or the process issues a subsequent "write !" to the device.
This change makes the broadcast message be transmitted
immediately.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System.I/O
Platforms: Windows
DevKey: TTS049
Summary: Additional printer oriented OPEN keyword parameters
Description:
Extended list of possible options for OPEN of
printer devices:
- /DOCNAME="name" - redefines the printer job name (default is
"Cache");
- /OUTPUTFILE="filename" - redirects print to file (default is
NULL);
- /DATATYPE="type" - redefine the datatype of the printer spool data (default is
"RAW"). Another known widely used type is "TEXT".
Note: All these options are very Windows
specific! They are not defined for non-Windows Caché
systems.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
Yes |
Critical |
No |
Category: System.Journaling
Platforms: All
DevKey: HYY817
Summary: Address an issue of mismatching journal offset and file name/count in the Write Image Journal
Description:
Occasionally Caché startup would generate the
following error message:
Error in JRNROLL: <VALUE OUT OF RANGE>bldxopen+24^JRNROLL
(the exact line of code may vary from version to version)
which would cause transaction rollback (and startup in 5.0 and beyond) to fail.
This change addresses the cause of this problem, which was present in all Caché releases.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
Yes |
Category: System.Journaling
Platforms: All
DevKey: HYY826
Summary: Detect and warn about journal corruption during journal restore
Description:
With this change, a warning is issued if journal restore stops short of
the true end of journal, which usually indicates the journal is
corrupted.
Warning: When this warning message is issued, the journal restore
may be incomplete.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
Yes |
Category: System.Journaling
Platforms: All
DevKey: SML417
Summary: Fix ECP recovery problem when a server is shut down more than once. The roll back will fail for pending transaction.
Description:
This fixed an ECP transaction recovery problem
where there is an 'open' transaction on ECP client to the server, and the
server shutdown and restarted more than once. In this case, when the client did
a TROLLBACK it would get <ROLLFAIL> error.
This has been fixed.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System.Localization
Platforms: All
DevKey: VS176
Summary: Add Hungarian locale
Description:
Hungarian has now been added to the list of
available locales.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: System.Lock
Platforms: All
DevKey: SML423
Summary: Process old delock answer from remote DCP server with old lock system.
Description:
When new lock DCP client (Caché 4.1 and
later) communicates with old lock DCP server (Caché 4.0 and
earlier), and when remote locks are removed by ^LOCKTAB (or ControlPanel)
on the DCP client, the lock will stay in the lock table with 'Delock Pending'
state. There are chances that the delock command on the DCP client could
also leave the lock in the lock table when the delock request has implicit
'zynch' function. This change fixes this problem.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System.Shadowing
Platforms: All
DevKey: HYY785
Summary: Prevent shadow dejournaler from stalling when shadow copier is copying the file
Description:
This change addressed an issue where the shadow
dejournaler appeared to be stuck at the end of a journal file when the
shadow copier was copying the next journal file.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
No |
Category: System.Shadowing
Platforms: All
DevKey: HYY824
Summary: Interlock block reads and writes on fast-mode shadow
Description:
This change corrected an issue on fast-mode
shadowing that may result in incorrect result of dejournaling on the
shadow in rare situations.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
No |
Category: System.Shadowing
Platforms: All
DevKey: HYY851
Summary: Enable shadow to reconnect in a timely manner after failure of IP alias
Description:
On a multihomed shadow server,
if the shadow process is on an IP alias instead of the primary IP
address, it would take the shadow process a long time (several
minutes) to recognize the connection drop after the alias was brought
offline. This change addresses this issue.
This applies to all Caché releases on platforms that support IP
aliases at the operating system level.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
No |
Category: System.Shadowing
Platforms: All
DevKey: RJF014
Summary: Use 32KB buffer for shadowing
Description:
The TCP input and output buffer size used by the
shadow process has been increased from 1024 bytes to 32KB for both
fast mode and compatible mode shadowing.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
No |
Category: System.Shutdown
Platforms: All
DevKey: HYY763
Summary: Disable notification of asynchronous network errors in Caché shutdown
Description:
Addressed an issue on systems with Caché
networking enabled (DCP/ECP) where Caché shutdown may get an
error such as <NETWORK DATA UPDATE FAILED>, resulting in cforce
or (in Caché 4.1 and earlier) journaling not stopped
properly.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
No |
Category: System.StartUp
Platforms: All
DevKey: CFL987
Summary: Mount required not respected
Description:
An issue has been fixed where if we had a database
marked as "Mount required at startup" and this DB was not mounted,
Caché would come up without any complaints.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System.StartUp
Platforms: All
DevKey: HYY820
Summary: Correct a typo that caused <UNDEFINED> error in STURECOV
Description:
An issue has been addressed that caused an
<UNDEFINED> error during journal recovery.
Likelihood |
High |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System.StartUp
Platforms: All
DevKey: HYY821
Summary: Prevent stale transaction info after startup
Description:
This change addresses an issue where startup aborted as JRNROLL got an error <VALUE OUT OF RANGE>.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System.StartUp
Platforms: All
DevKey: HYY822
Summary: Clear journal update flag once it is not needed
Description:
This change addresses an issue where transaction
info in the Write Image Journal
might not be updated for the duration of a Caché session (from
startup to shutdown), which could result in either an error from JRNROLL
or long startup time.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System.StartUp
Platforms: All
DevKey: HYY823
Summary: Allow user to run STURECOV if journaling failed to start for transaction rollback at startup
Description:
Transaction rollback at startup requires journaling to be on.
If journaling failed to start for whatever reason, startup used to
skip rollback and continue. With this change, the user has an option
to fix whatever problem that prevented journaling from starting and
rerun startup (and rollback).
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System.TCP Devices
Platforms: All
DevKey: GK266
Summary: Allocate an ECP client connection for ECP clusters, when not enough are configured.
Description:
When a cluster configuration is set for ECP,
it will make sure there is an ECP client allocated for cluster communication.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System.TCP Devices
Platforms: All
DevKey: GK267
Summary: Prevent ECP server cleanup during shutdown.
Description:
If for
some unexpected reason server shutdown is taking too long, the cleanup
may close all ECP sessions as unrecoverable.
This change prevents that.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: System.TCP Devices
Platforms: All
DevKey: GK269
Summary: Added NODELAY keyword to TCP open and use cmd.
Description:
This change added /NODELAY keyword to TCP "use" and
"open" command. A non-zero value enables TCP No Delay
transmission. The default value is 1.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: System.TCP Devices
Platforms: All
DevKey: HYY850
Summary: Add $zu(54,26) to return the IP address bound to current TCP device
Description:
To get the IP address bound to a TCP device, make
the device current and then issue the command:
USE device
s ip=$zu(54,26)
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
No |
Category: Terminal
Platforms: All
DevKey: RJW757
Summary: Character value $C(255) is not telnet escaped in cterm /console=cn_iptcp:addr[port]
Description:
When the Caché Terminal supplied with the
Windows product is launched from the Caché Cube by selecting a
host from the "Remote System Access" -> "Terminal" menu to make a
telnet connection, and a telnet IAC (interpret as command) character
(with the value $c(255)) was entered at the keyboard or cut and pasted
into the application, it would be lost because telnet escape
processing of the IAC character was not performed. This was
especially a problem for Russian users for whom this character is in
their alphabet.
This change corrects the problem.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Utilities
Platforms: All
DevKey: EKP016
Summary: Fix error trapping problem in %DTMCVT
Description:
This change corrects a situation where %DTNCVT could
enter an infinite loop during conversion. It also improves the error
reporting in cases where conversion exceptions involve wide characters.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Utilities
Platforms: All
DevKey: LFT1131
Summary: REPAIR: deleting first node does not update next pointer reference in left neighbor
Description:
REPAIR was not correctly modifying higher level blocks if deleting the first node.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Utilities
Platforms: All
DevKey: LFT1137
Summary: False "block not allocated" errors in INTEGRIT 2K databases
Description:
This changes INTEGRIT to accept big string blocks allocated by REPAIR.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Utilities
Platforms: All
DevKey: LFT1166
Summary: INTEGRIT misses database error on 2K database
Description:
This adds an integrity check of the match between directory pointer and top pointer block.
Likelihood |
Moderate |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
Yes |
Category: Utilities
Platforms: 1
DevKey: LFT1177
Summary: Don't include MESSAGES.INC in %DM
Description:
This change allows %DM to work properly in
the absence of a %MESSAGES global.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Utilities
Platforms: All
DevKey: LFT1181
Summary: 2K dataset creation failure, error message
Description:
This changes MSU to allow 2K or 2KB to be entered
for block size. It also causes a better error message if something
really invalid is entered.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: Utilities
Platforms: All
DevKey: MAK913
Summary: Routine index was not being automatically created in all databases referenced from this namespace
Description:
When you first perform a routine query (for example use the
open dialog from Studio or Caché Explorer), if there is not
already a routine index then one will be built automatically. However,
it would only build the index in the implied namespace. If this
namespace had routine mappings so that it referenced multiple
databases, then not all of them would be updated. Now Caché
scans the list
of implied namespaces referenced and updates the index in all of
them.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Utilities
Platforms: All
DevKey: PWC796
Summary: GBLOCKCOPY does not handle final $C(1) in pre-ISM 6.2 collated global properly
Description:
This change corrects an issue where globals in the ISM pre-6.2
collation that had a particular data pattern (final subscript of any
global node ending with $C(1)) could cause problems. The particular
symptom that was reported is a failure to convert the node properly
when using GBLOCKCOPY.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Utilities
Platforms: All
DevKey: SML416
Summary: DDP should work when only DDP Host is configured.
Description:
If a Caché is freshly installed and only the
DdpHost is changed to non-null in CPF file, the DDP won't be
started. Without this change, you will need to configure the DDP
Ethernet device in order to have it work.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
No |
Critical |
No |
Category: Utilities
Platforms: VMS
DevKey: SML427
Summary: Fix lock display of JOBEXAM for VMS.
Description:
This change corrects an issue with JOBEXAM for VMS
platforms.
Previously, it failed to display locks owned by the examined
job. Now it displays them.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
Category: Utilities
Platforms: All
DevKey: STC489
Summary: Start SuperServer in %SYS namespace
Description:
This change guarantees the SuperServer is always started in the %SYS namespace.
Likelihood |
High |
Risk |
Low |
Ad Hoc |
Yes |
Enhancement |
No |
Critical |
No |
Category: Utilities
Platforms: All
DevKey: STC500
Summary: Map oddEXT
Description:
This change adds a new global mapping which Caché objects requires.
Likelihood |
Low |
Risk |
Low |
Ad Hoc |
No |
Enhancement |
Yes |
Critical |
No |
This section provides a listing of changes between Caché
5.0.3
and
Caché
5.0.4.
This document contains several sections:
This notice applies to Caché -
- Release 4 (and prior):
all versions up to and including version 4.1.15;
- Release 5:
all versions up to and including 5.0.2.
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).
Present Status
The installation defaults have been changed for Caché 4.1.16,
and for
Caché 5.0.3 and later releases. If you have installed one of
these versions, this notice does not apply.
For more information, please contact the
InterSystems Worldwide
Response Center.
Workaround for earlier releases
Log on as "root", change to the directory where Caché is
installed, and issue the command:
If Caché is not being used for CSP programming, and is not running in
conjunction with a local Apache web server, issue the command:
This notice applies to Caché -
- Release 5:
all versions up to and including 5.0.4.
Disabling csp/samples before deploying Caché applications
Default installations of Caché are shipped with the
settings and samples appropriate for developing Caché-based
applications. These settings, facilities, and examples are not
needed in deployed-application environments; their inclusion may
permit inappropriate use of the system in certain cases.
Present Status
When Caché is installed it automatically configures the web server
so the /csp path and any directories under this are mapped to the
local Caché system. Caché also has configurations defined for
/csp/user and /csp/sample.
This means that, in the default installation,
requests for the page /csp/samples/menu.csp
are passed by the web server to the local Caché installation
(because it is a subdirectory of /csp). This matches the
CSP application /csp/samples, so the menu.csp page from
this application is run.
Thus, any user with access to run
/csp/samples/query.csp
gains the ability to create and execute arbitrary stored procedures written in
Caché ObjectScript. The user can therefore create new tables,
modify or delete existing ones, and invoke many other Caché
system functions.
When you go live with a CSP application you should ensure that the
only CSP applications available on the web server are the ones you
have intended to make available and that these default
/csp/samples
and /csp/user applications are not present.
Leaving other applications
available could make information useful to unauthorized users
that would allow
them to compromise your system.
Workaround
To remove these additional
applications the best way is to remove the mapping for them on the web
server so only requests for your application go to Caché and no other
ones even get to Caché at all. To do this remove the mapping on the
web server for the /csp application and make sure it just has the
/yourapp mapping (this could be /csp/yourapp) so that you
specifically map your application only from the CSP gateway.
Then test
the web server by requesting pages from any other applications you may
have defined, /csp/samples/menu.csp for example, and make sure these
pages are not active.
For more information or assistance in implementing this, please contact the
InterSystems Worldwide
Response Center.
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.
- Critical - A value of "yes" in this column indicates that
a production application environment may be at risk or
the deployment of an application may be impeded.
Reference |
Summary |
MAK790 |
Check on CSP URL and filename should be case insensitive on OpenVMS |
CFL941 |
Address loop in Explorer |
CFL943 |
Address loop in Global View |
CFL947 |
Change REALLOC to minimize Caché memory footprint |
GK234 |
Disabling a failed ECP connection leaves the connection in in-progress state |
GK238 |
ECP client failed to recover after cforce and restart of server |
GK240 |
Minimize memory allocation for networking. |
GK241 |
Purge the ECP client cached block when the cluster database block is dropped from the server cache. |
GK243 |
Remember ECP journal index. |
MAB192 |
Projecting data types as primitive Java types |
DLP1048 |
Address transaction rollback |
DLP1072 |
Lock globals when performing uniqueness checks |
DLP1080 |
Storage fails when migration includes 3.x to 4.1.x to 5.0.x |
DLP1090 |
Use an extent level lock when a deleting a large number of objects in a single transaction |
DLP1093 |
Address extent lock release |
DPV2041 |
Address lock removal if transaction is aborted |
AK570 |
Improve queries using DESCending order on a bitmap |
DPV2055 |
A query with DESC keyword returns the wrong resultset |
MAK811 |
New backup files do not overwrite previously created backups |
CDS431 |
Prevent shutdown in Basic compiler |
CDS435 |
Close objects during HALT |
JB141 |
Task Manager consuming 100% CPU |
JO1682 |
Address <ACCVIO> if "CacheTemp" is dismounted |
JO1717 |
Rolling journal restores for clusters & new backup jrn restore dialogue |
JO1735 |
Checkpid() for OpenVMS now only checks whether pid exists (like UNIX/Windows) |
LRS705 |
Avoid <ACCVIO> in $ZIO if we can't identify the principal device |
SJ1411 |
Address issues with reverse $BITFIND |
SML380 |
Address a lock timeout issue over a net |
SML381 |
Address a possible opened transaction aft |
SML383 |
Lock the lock table resources when expanding a lock to the next level. |
SML384 |
Correct problem with DCP server shutdown. |
SML385 |
Wait longer (2 min) for ECP client to reach the disabled state during Caché shutdown. |
SML387 |
Address possible stranded DELOCK_PENDING lock after lock is reset on a DCP client. |
STC458 |
Address <UNDEFINED> errors in GBLOCKCOPY when converting old ISM routines |
STC459 |
GBLOCKCOPY now handles 2-KB multiple volume databases |
LRS685 |
Address <ACCVIO> when database size is exact multiple of block size |
HYY783 |
Address an issue that caused jobs to hang on I/O error even when journaling is disabled |
JO1730 |
Address SETCLUSW^JRNMARK so it doesn't leave switch set if quiesce fails |
CFL951 |
Do not run startup code more than once |
JO1666 |
Don't freeze the system on journal errors during startup |
LFT1139 |
Stop JOBEXAM from corrupting local variables on OpenVMS |
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.
Whether a given changes affects your system will depend on your use of
the feature/facility noted.
Section Table of Contents
- Object.Java
- Object.LanguageBindings
- Object.XML
- Studio
- System
Category: Object.Java
Platforms: All
DevKey: MAB195
Summary: Implementation of Java methods List.addAll() and Map.putAll() for Caché Collections
Description:
This change contains native implementation for Java methods:
- java.util.List.addAll(java.util.Collection c);
- java.utilMap.putAll(java.util.Map m);
for projected Caché collections. This method will now work
significantly faster than adding single elements. If an application needs
to add a bunch of elements to a collection, it is recommended first to
store them in a temporary local collection (java.util.ArrayList or
java.util.HashMap) and then add them using one of methods above.
This change affects only full Java Binding, it does not affect
Light.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1135
Summary: Let EJB accessors that use "_" be consistent between BMP and CMP
Description:
There are two forms of accessors - ones like getName
which have no underscore and get_Name which has an underscore.
CMP has abstract implementations where regardless of the case of the
Caché property (for instance s1) the abstract accessor must be of the
form getS1. So we must upper-case the first variable in the name.
However, with this change the "_" (underscore) form of the accessor
will be get_s1 and this will allow the user to write programs that are
portable between BMP and CMP.
The user who wants to code portably should also use the "_"
(underscore) form of the accessors.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1147
Summary: If a property is a child table then change
how it is named when projected to EJB
Description:
The name that a property had when projected to EJB
used to be the SQL
child table name and now it is the name of the property in the parent
class.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Object.XML
Platforms: All
DevKey: MXT467
Summary: Project all subclasses to XML schema
Description:
XMLSchema will now show all subclasses of the class
whose schema is being output.
In addition, XMLSchema will show each class as an extension of its
primary superclass. Properties inherited from a secondary superclass
are considered defined in the class being projected to a schema.
If a property of the class being projected violates the XML extension
restriction of only adding properties, then all properties are
considered to be in the class being projected and it will not be
projected as an extension.
For format="encoded", an xsi:type attribute is already added to every
exported class. For format="literal", xsi:type will be added if the
actual instance type does not match the type of the property.
When importing the type specified by xsi:type will override the
property's type.
This change addresses a SOAP issue where subclasses sent in SOAP response do
not work with encoded body.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
Yes |
Yes |
No |
Category: Studio
Platforms: All
DevKey: MAK793
Summary: Implement an OnAfterLoad method in the Studio hooks
Description:
Added an OnAfterLoad hook to the source control hooks
for Studio. This is called after the item has been loaded but before it
is sent to Studio. This gives a chance to modify it before Studio sees
this item. This is passed the oref of the object that represents the
document so this can be changed before the data is sent to Studio.
Added an optional oref that represents the document to the
OnBeforeSave method so this provides an easier way to change the data
before it is saved to disk.
Addressed issue with the abstract document user defined document type
which was not calling the correct source control hooks.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
Yes |
Yes |
No |
Category: System
Platforms: All
DevKey: SML383
Summary: Lock the lock table resources when expanding a lock to the next level.
Description:
This addresses a timing hole when a job is expanding a
lock to the next level. Another job could also expand the same lock,
resulting in two sub-nodes in the lock table. This could cause lock
memory corruption.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: System
Platforms: All
DevKey: SML384
Summary: Correct problem with DCP server shutdown.
Description:
A job waiting on remote lock may not ever get the
answer when the DCP server shutdown and restarted.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
Yes |
No |
Yes |
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
- Caché Direct
- CHUI
- Config Mgr
- Control Panel
- CSP
- CSP.Tags
- Documentation
- Documentation.DocBook Application
- Explorer
- Installation.UNIX
- Installation.Windows
- Languages
- Languages.Caché Basic
- Misc
- Networking
- Object
- Object.Activate
- Object.ActiveX
- Object.Class Compiler
- Object.Java
- Object.LanguageBindings
- Object.Library
- Object.Soap
- Object.Storage
- Object.Storage.Default
- Object.Stream
- Object.Sys
- Object.XML
- SQL
- SQL.DBLib
- SQL.Gateway
- SQL.JDBC
- SQL.ODBC
- SQL.Query Processing
- SQLManager
- Studio
- System
- System.Backup/Restore
- System.Cluster Specific
- System.Journaling
- System.Licensing
- System.StartUp
- Utilities
Category: Caché Direct
Platforms: All
DevKey: CFL950
Summary: Caché Direct Manager strips out white spaces
Description:
If your server name has a space in it,
Caché Direct Manager fails to work because it
strips out the spaces when you try to assign it to an executable. This
has been corrected.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Caché Direct
Platforms: All
DevKey: RAW372
Summary: Address an issue translating formal namespaces from the registry
Description:
Two issues were found in the code that translates
formal namespaces in Caché Direct:
- the namespace map was being retrieved from the
registry incorrectly;
- the translation was
off by one character.
They have been corrected.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Caché Direct
Platforms: All
DevKey: RAW378
Summary: Handle port forwarding correctly
Description:
In the reply to its first message, the Caché Direct
server reports the port on which the slave server will be
communicating. With port forwarding in effect, this is different from
the requested port, even when the channel has not changed. On seeing
the new port, Caché Direct disconnects from the old (forwarded) port and tries
to connect to the new (actual) one - and fails.
This no longer happens; it now succeeds.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: CHUI
Platforms: All
DevKey: LFT1110
Summary: Copy empty global confirmation lost in GBLOCKCOPY
Description:
An update of GBLOCKCOPY resulted in
a loss of functionality whereby empty globals were
always included in the set, instead of asking the user whether to
include them. The confirmation sequence has been restored.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Config Mgr
Platforms: All
DevKey: CFL933
Summary: Support DBSizesAllowed parameter
Description:
There's a new parameter in
Configuration Manager | Advanced | General
to specify if the creation of 2-KB databases is allowed.
On upgrades from previous versions this parameter is set to "Yes",
that is, 2-KB databases are allowed. For new installs, the creation of
2-KB databases is not allowed by default. If needed, the user can
switch the parameter on.
The Database Wizard has changed. The block size selection is now
buried at a deeper level (via Advanced button) which is enabled only
if multiple sizes are allowed.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
Yes |
Yes |
No |
Category: Config Mgr
Platforms: All
DevKey: CFL938
Compatibility: 10
Summary: Fix partial initialization of Config Manager
Description:
A change was made to correctly recover from an
abnormal situation where
the Configuration Manager where the
configuration data was only partially initialized. When this
occurred, the Configuration Manager would not close and had
to be terminated via the Windows Task Manager.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Config Mgr
Platforms: All
DevKey: CFL937
Summary: Address runtime error in Configuration Manager when a remote file is imported
Description:
An issue in the Configuration Manager was addressed where,
if the [SqlUserDataTypes] section of a remote configuration file was
empty and the position of the [SqlUserDataTypes] string was close
to a multiple of 10000 bytes, a runtime error could occur.
This has been addressed.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
Yes |
No |
No |
Category: Config Mgr
Platforms: All
DevKey: CFL939
Summary: Set MaxServerConn when EnableServer is toggled
Description:
In an effort to minimize Caché memory footprint:
- The number of server connections can now be set to zero.
- When the system is disabled as an ECP server, the number of server
connections is set to zero.
Since the previous setting would be lost, a message warns the user
about this.
Upon re-enabling the system as an ECP server, the number of server
connections is set to 1 (if it was zero).
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Control Panel
Platforms: All
DevKey: CFL898
Summary: Unexpected Control Panel shutdown with ECP
Description:
When the console log window popped up and there was
an active ECP display, the timer that updates the ECP display would
attempt to update the panel and that would result in a shutdown.
This has been addressed.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Control Panel
Platforms: OpenVMS
DevKey: CFL944
Summary: Address PID Hex display in lock list
Description:
The Visual Basic Format() function treats a hex string as a
decimal number if the string happens to be valid when considered as a decimal number, for
instance, "1234E02". This now works as it should; the string is
interpreted in hexadecimal.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: CSP
Platforms: All
DevKey: MAK706
Summary: Allow CSP application of '/'
Description:
If a CSP application called '/' is defined then made
to match any URL that is at the root level such as
'/default.csp', previously, we only matched at least one directory
level deep. In order to make this work the web server and the CSP
gateway also need to be configured to pass these CSP requests through
to Caché.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: CSP
Platforms: All
DevKey: MAK783
Summary: If CSP login as SQL user fails, leave the user logged in as the previous SQL user
Description:
If from CSP, you login as another SQL user and the
SQL login failed, then it changed the current user you were logged in
as to "" which is the same as the default user rather than leaving it as the
previous user.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: OpenVMS
DevKey: MAK790
Summary: Check on CSP URL and filename should be case insensitive on OpenVMS
Description:
If you edited a CSP page on OpenVMS in Studio and then
tried to view this CSP page from a browser, you may get the error
message:
- Error: Unable to load page '/csp/samples/include.csp' because its
class name conflicts with the class 'csp.include' that is already
loaded.
However, in this case, it is the same page. The issue occurs because
the case of the URL and filename are different but on OpenVMS as on
Windows this does not matter.
This is now not case-sensitive on OpenVMS, so CSP will display correctly.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: CSP
Platforms: All
DevKey: MAK851
Summary: Write $system.CSP.GetConfig does not show the defaults
Description:
'Do $system.CSP.DisplayConfig()' shows the current CSP system configuration
parameters but ' Write $system.CSP.GetConfig(param)' does not show the
default value which makes this inconsistent. Now they both show the
default values.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: CSP
Platforms: OpenVMS
DevKey: MAK856
Summary: Parsing of URL to directory name for CSP did not work on OpenVMS
Description:
When loading all CSP pages in a directory, the
parsing to convert the URL to a directory name on OpenVMS was not
correct. This has been addressed so $system.CSP.LoadPageDir will work on
OpenVMS systems.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: CSP.Tags
Platforms: All
DevKey: MXT455
Summary: CSP:SEARCH: 'sortbox' does not work with 'order'
Description:
If ORDER is specified, the radio button selected in
the sortbox (if OPTIONS="sortbox") or the column header that is
clicked, was ignored. This change correctly overrides the ORDER attribute
with the user input.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: CSP.Tags
Platforms: All
DevKey: MXT456
Summary: Allow optional error if no search criteria for csp:search
Description:
If OPTIONS="CriteriaRequired" is specified in the
csp:search tag, then an alert box with an error will be displayed if
the user requests a search and no search criteria have been
specified.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: CSP.Tags
Platforms: All
DevKey: MXT457
Summary: Cannot select data from a cspbind lookup window if the value of a field is $C(0)
Description:
Convert $c(0) to "" when returning value from search page.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Documentation
Platforms: All
DevKey: MAK780
Summary: Documentation for $system.OBJ.ExportCDLALL is incorrect
Description:
The documentation for $SYSTEM.OBJ.ExportCDLALL was
incorrect and said that all the classes would be exported as a single
CDL file, when in fact it exports each class as an individual CDL
file. The documentation has been changed.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Documentation
Platforms: All
DevKey: GAB020
Summary: Update displayed comments in $SYSTEM.OBJ.ShowFlags
Description:
The comments produced by the $SYSTEM.OBJ.ShowFlags() method were
changed to improve clarity.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Documentation.DocBook Application
Platforms: All
DevKey: MAK789
Summary: Search results return huge chunks of data
Description:
If, in DocBook, you search for a term that
appears in a large table, 'charset' for example, then the search
results displays the entire table even though the word you are looking
for only appears in a small subsection of this table. This makes it
hard to see the other search results.
With this change, if the text being returned
is over 3k in size, it will scan it for the word you are looking for
and just display this subsection of the match making the results
easier to read.
For tables, it will display the row the matching item
is on and for other types it will remove the formatting from this item
in order to make sure it does not have any unmatched tags.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Explorer
Platforms: All
DevKey: CFL941
Summary: Address loop in Explorer
Description:
An issue has been addressed where a Global Find operation
in the Explorer would cause the utility to loop if the global had a
unsubscripted node whose value didn't contain the substring being
searched for.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: Explorer
Platforms: All
DevKey: CFL943
Summary: Address loop in Global View
Description:
Previously, if the following global structure existed,
USER>kill ^GBL
USER>s ^GBL(1_$C(27)_"""2""")=$ZV
USER>s ^GBL(2_$C(27)_"""2""")=$ZV
USER>s ^GBL(3_$C(27)_"""2""")=$ZV
Listing the global would loop and display the three nodes infinitely.
This looping behavior has been corrected.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: Installation.UNIX
Platforms: UNIX
DevKey: ALE226
Summary: Correctly determine cgi-bin directory for Apache when it is defined more than once
Description:
CSPinstall should now correctly determine cgi-bin
directory for Apache when it is defined more than once. It will use
the last defined value.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Installation.Windows
Platforms: Windows
DevKey: ALE248
Summary: Delete CacheList.ocx, CacheQuery.ocx and VisM.ocx from bin directory when upgrading from Caché 4.1 or before (InstallSheild)
Description:
In Caché 5.0 all OCX files were moved from
CacheSys\bin directory to Program Files\Common Files\Intersystems\Cache.
With this change, old OCX files were removed
from the bin directory when upgrading from older Caché versions.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Languages
Platforms: All
DevKey: CDS424
Summary: Avoid <MAXARRAY> during $COMPILE
Description:
When the $COMPILE function was given routine source that was too large to
compile, it would throw a <MAXARRAY> or <STORE> error.
Now it will give
a return value of 1, with an element in the error return list that shows
<ROUTINE TOO BIG TO SAVE>.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Languages
Platforms: All
DevKey: SAP125
Summary: Caché will start up when less than 32MB is available
Description:
Caché memory usage has been improved.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Languages.Caché Basic
Platforms: All
DevKey: CDS439
Summary: Address false <STORE> error in Basic compiler
Description:
Compiling a Basic routine could result in a <STORE> error or
<ROUTINE TOO BIG TO SAVE> even though the routine is really not
too large. The conditions that caused this issue are
unpredictable.
This has been addressed.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Languages.Caché Basic
Platforms: All
DevKey: CDS441
Summary: Address Basic compiler issues with Debug mode
Description:
Some Basic commands and functions did not work correctly when entered
from the terminal during debugging. They could give unexpected errors
or incorrect results. With this change, all Basic commands should work
from
debug mode, except CALL. CALL from debug mode requires the external
routine syntax label@routine, even for calling internal
subroutines.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Languages.Caché Basic
Platforms: OpenVMS
DevKey: CDS445
Summary: Address OpenVMS process shutdown after internal compile error
Description:
After the Basic compiler gave an "Internal error" message on OpenVMS, the process
would fail the next time any other error was thrown. This has been corrected.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Misc
Platforms: All
DevKey: SAP119
Summary: Add ability to get MQ Message ID for message sent from Caché
Description:
New MQ methods have been added:
- MQRecv.%MsgId (.id) - Returns the message Id associated with the last message read from
the queue.
- MQSend.SetMsgId(id) - Sets the message ID that will be assigned to all messages sent
via the MQSend.%Put method.
- MQSend.%MsgId (.id) - Returns the message Id set for this
object.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Misc
Platforms: All
DevKey: SAP120
Summary: Translation of MQ Series messages from EBCDIC to ASCII
Description:
Two new methods are provided:
- %CharSet(.ccs) -
Retrieves the Coded Character Set identifier. This value may be
altered by the message system after an unsuccessful attempt to
convert data in MQGet.
- %SetCharSet(id) -
Sets the Coded Character Set identifier. Incoming messages will be
converted to this character set. Outgoing message's character set
encoding is identified to the message queue with this value.
For output (MQSend.%Put()), the Coded Character Set Id describes to
the system the character set used for the message. If not set, the MQ
system assumes the default character set for the MQ client.
For input (MQRecv.%Get()), the Coded Character Set Id indicates to the
MQ client how the message should be converted. The conversion is done
automatically during message receipt on the client.
Thus one may send messages in any encoding (notifying the system what
the encoding used is), and receive messages converting from one
encoding to another.
See the IBM WebSphere MQ documentation for a full discussion of Coded
Character Sets.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Misc
Platforms: Windows
DevKey: SAP126
Summary: Signal main thread to wake hibernating after disconnect of principle device
Description:
On Windows, if the user opens a terminal and types,
for example, "lock a" where a is already locked, or
"halt 100"), and closes the terminal window, the process stays until the
condition for resuming is met.
With this change, the process exits immediately.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Networking
Platforms: All
DevKey: CFL947
Summary: Change REALLOC to minimize Caché memory footprint
Description:
The network configuration utilities were changed
to minimize the amount of memory allocated for networking.
Before this change, even if there was no networking
configured (no ECP, DCP or DDP), 40MB of memory would
needlessly be allocated for networking.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
Yes |
Category: Networking
Platforms: All
DevKey: DAS457
Summary: Improve DDP error messages for invalid configurations
Description:
If the DSM-DDP parameters are not set up correctly in the CPF file,
the error messages displayed may be very misleading.
In some cases, a
Caché ObjectScript error such as <SUBSCRIPT> OR <FUNCTION> is displayed
rather than an explanation of what is invalid in the CPF file.
The issue areas are:
- missing UCI name in the Volume/UCI mappings - this causes a
<SUBSCRIPT> error
- a missing directory name in the Volume/UCI mappings
- a table size parameter that is too low for the number of Volume/UCI
mappings - this causes a <FUNCTION> or <MAXSTRING> error
- a missing volume name in the Volume/UCI mappings - this throws a
<SUBSCRIPT> error
These have all been corrected.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Networking
Platforms: All
DevKey: GK232
Summary: Don't accept an ECP connection if the server is not enabled
Description:
If the ECP server flag is not enabled, "Act as ECP server" is ignored.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Networking
Platforms: All
DevKey: GK233
Summary: Activate ECP access list changes.
Description:
Changing the ECP access control list from the Configuration
Manager was ignored until the next restart.
This now takes place immediately.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Networking
Platforms: All
DevKey: GK234
Summary: Disabling a failed ECP connection leaves the connection in in-progress state
Description:
When ECP failed to establish a connection and it was
in the retry loop, if the connection state was set to disabled,
sometimes the session was left in in-progress state, and the system had to
be restarted to clear that state. It now sets the
appropriate state at the end of the retry loop.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: Networking
Platforms: All
DevKey: GK238
Summary: ECP client failed to recover after cforce and restart of server
Description:
ECP server shutdown by cforce didn't preserve the
client state. The clients cleared their sessions and didn't recover
after server restart. This was because cforce started the shutdown
of the ECP daemons out of
order. During shutdown cleanup, the ECP daemons got killed which caused
the issue.
Cforce has been modified to cleanup in an organized way so out of order
kills are not destructive.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: Networking
Platforms: All
DevKey: GK239
Summary: Recover $INCREMENT when answer is lost from the ECP server.
Description:
If $INCREMENT over ECP answer is lost due to server
failure or network outage, the ECP recovery retransmission of $INCREMENT
returned a <NETWORK> error. Caché has been modified to
re-increment
properly.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: Networking
Platforms: All
DevKey: GK240
Summary: Minimize memory allocation for networking
Description:
If only ECP is configured, memory is no longer
allocated for legacy networking facilities, for example, DCP & DDP.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
Yes |
Category: Networking
Platforms: OpenVMS
DevKey: GK241
Summary: Purge the ECP client cached block when the cluster database block is dropped from the server cache.
Description:
ECP server did not correctly invalidate the client cache
when
- an ECP client has a cluster database block in its cache,
- later
the block is dropped from the ECP server block cache,
- then the
block is modified by some other cluster member.
The server was modified to
keep the client in sync.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
Yes |
No |
Yes |
Category: Networking
Platforms: All
DevKey: GK243
Summary: Remember ECP journal index.
Description:
Modified the ECP server to track the journal index
more accurately. The journal index is used for locating the first open
transaction, or last processed ECP request number after a server crash
or restart.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: Networking
Platforms: All
DevKey: PWC766
Summary: Default for netsiz is now 65404
Description:
In early releases of 5.0, the "netsiz" parameter was
too small to cope with some larger configurations. This could cause issues bringing up a network
configuration with large numbers of remote DDP hosts. It has been
made larger.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Networking
Platforms: 1
DevKey: TR966
Compatibility: 10
Summary: Don't issue errors on retry of $INCREMENT over ECP.
Description:
If $INCREMENT over ECP answer is lost due to server
failure or
network outage, the ECP recovery retransmission of $INCREMENT
returned <NETWORK> error. It nows attempts to re-increment the
variable and, if successful, does not report the error.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object
Platforms: All
DevKey: MAK791
Summary: $system.OBJ.ExportAllClassesIndividual was defaulting to wrong type
Description:
When you call
$system.OBJ.ExportAllClassesIndividual(dir) it was trying to export
all the classes into subdirectories based on the package name, but it
should default to translating ".%" to "__" and exporting to a file
with this name.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object
Platforms: All
DevKey: MC423
Summary: Change SqlColumnNumber to be of STRING type
Description:
Otherwise, through ActiveX, one cannot set the
value to "", and 0 is not equivalent to "".
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object
Platforms: All
DevKey: MC424
Summary: Inherit projections
Description:
Sub-classes now inherit projections from their superclasses.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object
Platforms: All
DevKey: MC425
Summary: Remove class from in-memory structure when it is being deleted
Description:
Remove the class from the in-memory data structures when it is deleted
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object
Platforms: All
DevKey: MXT468
Summary: Allow $system.OBJ.CompileList to compile more than 32K of classes
Description:
Accept the list of classes to be compiled as local
array in addition to the current "'" separated list in a string.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object
Platforms: All
DevKey: TAP009
Summary: Add port option to POP3 class (as arg to new ConnectPort method)
Description:
The new method
ConnectPort(ip,port,username,password) is similar to the old method
Connect(ip,username,password). The port argument allows you to get
mail from mail servers configured on ports other than the standard POP3
port 110. This is useful for testing.
The new method FetchMessageHeaders() is similar to the old method
FetchMessageInfo but doesn't get the bodies and is thus more likely to
be quick.
The new method GetHeadersArray() is a helper method for
FetchMessageHeaders() that returns the message header fields in a
multidimensional array.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Object
Platforms: All
DevKey: TAP010
Summary: Added TranslateTable property to %Net.FTPSession class
Description:
Setting the TranslateTable property of a
%Net.FTPSession object to a string naming a Caché translation table
will cause files being stored and retrieved via FTP to be translated
to or from the corresponding external character set.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Object.Activate
Platforms: All
DevKey: JN123
Summary: Recognize Dual Interfaces as Dispatchable
Description:
The Activate type library reader was not recognizing
dual interfaces as being dispatchable. This meant that the activate
wizard would not create the concrete proxy classes needed to create
instances of certain COM objects. This has been corrected.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.Activate
Platforms: All
DevKey: JN126
Summary: Correct marshalling of byref parameters
Description:
Parameters passed by reference were not being
marshaled correctly. Fortunately, pass by reference is rare in COM
objects. This change addresses the issue.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.Activate
Platforms: All
DevKey: JN131
Summary: Activate Generic Object SetProperty1() method has extra argument
Description:
A typo had been introduced which passed a duplicate
parameter to the underlying activate implementation resulting in
an ActiveX invalid number of parameters method. This only affected the
SetProperty1() method of %Activate.IDispatch. This typo has been
corrected.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
Yes |
No |
No |
Category: Object.Activate
Platforms: All
DevKey: JN132
Summary: Initialize output parameters to correct type
Description:
Output parameters passed by reference were being
initialized to a variant of type VT_EMPTY. Whilst this seemed to work
correctly, certain COM objects require that the object be initialized
to an expected type. The code has been changed to perform this
conversion whenever the target type is known.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.ActiveX
Platforms: All
DevKey: DVU810
Summary: OpenID with Non ASCII ID against 8 bit system produces a <WIDE CHAR> error
Description:
A <WIDE CHAR> was generated when attempting to
open a routine with Cyrillic name in Studio. This no longer happens.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.ActiveX
Platforms: All
DevKey: DVU813
Summary: Connection Manager error when switching namespaces
Description:
Under some circumstances, Studio failed to open a
connection properly when switching namespaces resulting in a
Connection Manager error and a dialog box. From the dialog box, one
could choose the proper connection to use.
The cause of the originating error has been addressed.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.ActiveX
Platforms: All
DevKey: DVU815
Summary: Connection Dialog Errors in SQL Manager
Description:
SQL Manager sometimes failed to properly connect to
a remote machine when given the name of the machine. It always
succeeded when given the IP address. With this change, it works
consistently with either.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: DLP1063
Summary: Detect recursion in nested %Save calls
Description:
The issue reported was caused by a call to %Save()
from a user-implemented %OnBeforeSave callback. The
primary save object (the object on which %Save() was originally
invoked) has references to instances of two other classes. One of
those classes has a %OnBeforeSave that causes the primary object class
to instantiate a third class and then save it. That save causes a new
SaveSet with a different primary object to be created. The objects in
the new save set are all, with the exception of the newly instantiated
class, the same as the original SaveSet. The %OnBeforeSave callback is
again invoked which starts the cycle all over again.
All persistent classes inherit a property from %Persistent,
%IsInSave. This property is set when %Save() is invoked on an
object. The original %Save() algorithm used this property to detect
recursion and prevent an infinite loop. The new %Save() algorithm does
the same but only for the primary object. The notable case creates a
new primary object for each instance of %Save() on the stack so
recursion is not detected. The new %Save() algorithm is not recursive
so the only possibility for recursion to occur is if a user
implemented callback invokes %Save() and the intersection of the new
SaveSet with the original SaveSet is not empty. %IsInSave is not set
for all objects, only the primary object and recursion is prevented
only if the nested call to %Save() is on the primary object.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK805
Summary: Class index was being built incorrectly
Description:
When updating the class index for an individual
class rather than rebuilding the entire index the position of the
'abstract' keyword was placed incorrectly. This would only effect code
that looked for this node which is rarely used. Now the individual
class index rebuild put it in the correct location.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK833
Summary: Allow package with the same name as a class but different case
Description:
If you have a class say 'A.B.C' and there is already
a class 'A.b' then we were reporting a package conflict error between
the 'A.B.C' and the 'A.b' class. However, there is actually no issue
here because A.b is just a class and there is no A.B package so it is
valid to add the new class A.B.C in this case.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK855
Summary: Make class depend on all projection classes
Description:
When you compile a class that has a projection, then
this class is dependent on the projection class being up to date and
compiled before this class is compiled.
The compiler now takes this into account when choosing the classes
that need to be compiled.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.Java
Platforms: All
DevKey: MAB191
Summary: Enhancements to Relationship projection in Java Client
Description:
Added several methods to
com.intersys.classes.RelationshipObject:
insert()
addAll()
add()
and addressed the issue with put using Integer as a key
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Object.Java
Platforms: All
DevKey: MAB192
Summary: Projecting data types as primitive Java types
Description:
This change adds an option to project data types
properties as primitive Java types. Thus a property of type %Integer
may be projected as int instead of as java.lang.Integer. Null values cannot be
set for such a projected property from Java client. Attempts to retrieve
a property with NULL value will cause a CacheNullValueException.
This change has 2 main objectives: facilitate migration of Java
Binding applications from Caché 4 (that used primitive Java types) to
Caché 5 and provide easier way to write applications that stores
mostly non-NULL values in database.
To project a property as primitive type one must specify its JAVATYPE
parameter. For instance, if the JAVATYPE is "int", the property will be
projected as int, if it is "double" it will be projected as double,
etc. Relevant conversions will be attempted when needed, thus it is
valid to project %Integer or even %String properties as double
(provided %String always contains a valid double value).
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: Object.Java
Platforms: All
DevKey: MAB193
Summary: Minor issues storing and retrieving data from SList
Description:
SList store / retrieval operations currently have the following
limitations:
- Boolean objects cannot be added. list.add(new Boolean(true))
produces an exception, even though a user can create a list containing single boolean value.
- Character objects and nulls cannot be added either (this would
rather be an enhancement).
- get(int index) method instantiates an Integer object for all
integral types, even if this leads to an overflow when the value
is too great for an Integer.
- The output of SList.toString() is cryptic which doesn't help
testing it or debugging programs.
These have been addressed as follows:
- Boolean, Character and null objects can be added to SList via add method.
- SList.get(int index) now instantiates Long if value if the value
in the list is greater than will fit in an Integer.MAX_VALUE
- Improved SList.toString() method
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Object.Java
Platforms: All
DevKey: MAB197
Summary: Limits when writing to streams from Java.
Description:
Limits on the amount of data that can be written to
streams using the Java
Binding have been removed.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.Java
Platforms: All
DevKey: MAB201
Summary: OpenByQuery() doesn't work for an empty condition
Description:
Allow empty query in Database.openByQuery()
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.Java
Platforms: All
DevKey: MAB204
Summary: Methods openByQuery() now work in full Java Binding
Description:
This change implements family of methods
openByQuery(...) for the full Java Binding. The implementation opens objects
on the server and puts them into a %ListOfObjects collection. They are
then retrieved from this collection using normal collection
methods.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.Java
Platforms: All
DevKey: MAB205
Summary: Added deployment mode for Java client that bypass checking of consistency between Caché class and its Java Projection
Description:
A new value for the system property
com.intersys.classes.update.user is added. If this property is set to
"nocheck" than consistency checking is bypassed. It will speed up
initial class loading into JVM.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1133
Summary: Project method unless same in passed arguments and different in return type
Description:
If there were any differences in method signature
between the class and the primary superclass, the behavior WAS as
follows:
- Caché would generate a comment for the method in the projection code
for the class.
- The method would still be accessible from the class because it is
accessible in the primary superclass, BUT the method is not validly
callable. This is because the Caché class does not pick up its
method from the primary superclass.
We cannot change the latter since this mismatch is
unsolvable.
Instead, we modify the behavior to do the
following: if the method arguments differ then we project the method
and it will be picked up by Java and C++ overloading.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1140
Summary: Rules for handling methods when non-identical or conflicting signatures with method in primary superclass
Description:
Two methods have conflicting signatures if they have
the same argument prototypes but differ in return types.
Consider a
method that is in a class and in the class's primary superclass. If the
method (considered in its class) has a conflicting signature with the
method (considered in the primary superclass), then the method as it is
exists in the class is not generated in the code for the class. That
is,
- If class C extends classes A and B;
- And, a method M in class C has a conflicting signature with method M in
class A;
- Then, do not generate a method M for class C because of this
conflict.
The above, however, is modified further.
Two methods have non-identical signatures if they differ in return
type or in the prototype of one of their arguments or their number of
arguments.
-
If the method as it exists in the class is not identical in signature
compared to the method as it exists in the primary superclass,
- Then we generate a
method for the class as the method exists in the primary
superclass,
- Except that
we generate a method that throws an exception when invoked.
For example,
suppose we have a class C that extends classes A and B.
Suppose further that method M in C is not identical to the same method
in class A.
In this case, we do generate a method M for class C as it exists in
class A.
Here are examples of the generated exceptions:
d_status User_Complete::X(Database *__db)
{
throw Db_err(ERR_USER, "We cannot invoke this method since there is
a conflict between the method X in this class User.Complete and its
primary superclass User.A");
}
public static void X (Database db) throws CacheException {
throw new CacheException("We cannot invoke this method since
there is a conflict between the method X in this class
User.Complete and its primary superclass User.A");
}
If we did not guard this call with an exception,
there would be an irresolvable conflict because of the difference in
definition between the method in the class and the method in its
primary superclass.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1143
Summary: If a property is a Serial and the server is Pramati then GetCMPSupported should return 1
Description:
There was an issue generating the code for get_S1()
when S1 was a serial property that contained serials because the
contained serials were flagged as "CMP Unsupported". They are
supported because they are not primitive types. It is only properties
that are primitive types that are "CMP Unsupported" because Pramati
cannot map them to the server. Derived types are okay.
This has been corrected.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1144
Summary: Allow error message from getConnection to bubble up
Description:
In getConnection, we now return the full text of
the exception including the stack data rather than just the shorter message.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1145
Summary: Don't generate code for dynamic queries
Description:
We skip over dynamic queries. Since such queries do
not have a fixed number of parameters we cannot generate static code
for them.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1146
Summary: Put a $ztrap around call to query_GetInfo
Description:
If a SQL query fails to compile it can throw a
<SYNTAX> error. We trap these and other Caché errors and
return an error code. They are not included in the generated code.
If display is set in the call to the Java or C++ generator then any
errors will be displayed.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1149
Summary: Ignore serveronly flag in certain cases
Description:
We now ignore serveronly under the following circumstances:
- Generator is for Java (for C++ behavior is unchanged)
- PropGet method derives from property Prop
- The Property is calculated
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1155
Summary: Address error in projection of Relationship Objects to Java
Description:
RelationshipObject was recently subsumed under
Collection. The algorithm for calculating property accessors has
changed;
it now
uses information about the relationship derived appropriately.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Moderate |
No |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1173
Summary: Address calculation of default ROOTDIR on UNIX and OpenVMS
Description:
The projection was calculating the default ROOTDIR
using "\" as the path separator on all platforms. On OpenVMS, the path
separator is "." and "]". On UNIX it is "/". This resulted in
projections failing on OpenVMS and UNIX when they used the default
ROOTDIR.
This has been corrected.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1177
Summary: Integrate EJB Session Beans with Studio
Description:
The writing of Session Bean methods with .inc files
is now deprecated.
Instead in your Caché Session Bean Class (indicated by SESSIONBEAN
parameter being 1), write your methods using [language = java], for
example,
Class ISC.SessReg Extends %RegisteredObject
{
Parameter SESSIONBEAN = 1;
Method RunTest(r As ISC.SessRegress) As ISC.SessRegress [ language = java ]
{
ISC.EJBSessRegress _result = null;
ISC.Utility utility = new ISC.Utility();
EJBSessRegress r1 = null;
try {
System.out.println("fetch from regression id = 1");
utility.dumpRegression("r from id 1: ",r);
Context jndiContext = null;
try {
jndiContext = new InitialContext();
}
catch (NamingException ne) {
utility.logtrace("NamingException in new
InitialContext()"+ne.getMessage());
ne.printStackTrace(System.out);
throw new EJBException(ne.getMessage());
}
String jndi_name = null;
jndi_name = "SessReg_ISC_EJBSessRegress";
Object home = null;
try {
home = jndiContext.lookup(jndi_name);
}
catch (NamingException ne) {
System.out.println("Could not find
SessReg_ISC_EJBSessRegress in "+jndi_name);
System.out.println("NamingException in
jndiContext.lookup"+ne.getMessage());
ne.printStackTrace(System.out);
throw new EJBException(ne.getMessage());
}
EJBSessRegress_Home homeISC_SessRegress = null;
homeISC_SessRegress = (EJBSessRegress_Home)
javax.rmi.PortableRemoteObject.narrow(home,
EJBSessRegress_Home.class);
r1 = null;
System.out.println("about to create new regression");
try {
r1 =
homeISC_SessRegress.create(r.get_MyBit(),r.get_MyBitList(),
r.get_MyPerson(),r.get_MyPersonList());
System.out.println("after create of new regression");
}
catch (javax.ejb.CreateException ce) {
System.out.println("CreateException: ce.getMessage()");
}
System.out.println(" create new regression id = "+r1.get_ID());
System.out.println("setting fields in new regression");
utility.setFirstFromSecond(r1,r);
utility.dumpRegression("new r1 :",r1);
}
catch (java.rmi.RemoteException ce) {
StringWriter wr;
wr = new StringWriter();
PrintWriter out = new PrintWriter(wr);
logerror("SQLException:"+ce.getMessage());
ce.printStackTrace(out);
logerror("Stack trace:"+wr.toString());
throw new EJBException (ce.getMessage());
}
Context jndiContext = null;
try {
jndiContext = new InitialContext();
}
catch (NamingException ne) {
System.out.println("NamingException in new
InitialContext()"+ne.getMessage());
ne.printStackTrace(System.out);
}
String jndi_name = null;
jndi_name = "SessReg_ISC_EJBSessRegress_Local";
EJBSessRegress_Home_Local home = null;
try {
home = (EJBSessRegress_Home_Local)jndiContext.lookup(jndi_name);
}
catch (NamingException ne) {
System.out.println("Could not find
SessReg_ISC_EJBSessRegress_Local in "+jndi_name);
System.out.println("NamingException in
jndiContext.lookup"+ne.getMessage());
ne.printStackTrace(System.out);
throw new EJBException(ne.getMessage());
}
EJBSessRegress_Local local = null;
try {
local = home.findByPrimaryKey( new EJBSessRegress_Pk(new
Integer(1)));
}
catch (javax.ejb.FinderException ex) {
utility.logtrace("primary key 1 not found");
throw new EJBException("primay key 1 not found");
}
utility.logtrace("local.get_MyString()="+local.get_MyString());
try {
System.out.println("removing new regression");
home.remove(r1.getPrimaryKey());
}
catch (javax.ejb.RemoveException ex) {
System.out.println("RemoveException: REMOVE: "+ex.getMessage());
}
catch (RemoteException ex) {
System.out.println("RemoteException: REMOVE: "+ex.getMessage());
}
// _result = r1;
_result = null;
return _result;
}
Note that it is still possible to use .inc files,
but they cannot be mixed with "language = java", the
preferred methodology.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Object.Library
Platforms: All
DevKey: MAK726
Summary: Add a scrollable and savable resultset object
Description:
Add a new class with the ability to move forward,
backward and jump to any location in the result set. It can also be
saved and loaded. It works by running the entire query in the Execute
and storing the results in a global. Then, you can move around the
results by setting the CurrRow and you may also call Previous as well
as the standard Next. In addition you may save this resultset and then
load it potentially in a different process at a later date and
continue reading from it, for example:
Set results=##class(%ScrollableResultSet).%New("Classname:QueryName")
Do results.Execute()
Do results.Next()
Write results.Data("fieldname")
Do results.%Save()
Set id=results.%Id()
Kill results
Set results=##class(%ScrollableResultSet).%OpenId(id)
Do results.Next()
Write results.Data("fieldname")
There is also a Count method to find the total number of entries in
this resultset.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Object.Library
Platforms: All
DevKey: MAK770
Summary: Prevent UNDEFINED error in %ResultSet
Description:
If the Fetch did not define the 'Row' parameter then
this could cause an UNDEFINED error in %ResultSet class. It now accepts
this undefined Row as "".
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.Library
Platforms: OpenVMS, Windows
DevKey: MAK787
Summary: %File.GetFilename("name") did not work correctly on OpenVMS
Description:
On Windows or UNIX if you called 'Write
##class(%File).GetFilename("myfile.txt")' it would return 'myfile.txt'
but on OpenVMS it would return ''. This caused an issue with importing
CSP files from Studio to a OpenVMS system, the files would show up without
any filename portion. This now works correctly.
Also change %File to use the case sensitive directory normalization
function so it will not lower case all filenames when calling the
normalization methods on Windows.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.Library
Platforms: All
DevKey: MAK798
Summary: %RoutineMgr and %Routine Exists methods did not handle versions of routine properly
Description:
If you called
Write ##class(%Routine).Exists("MyRtn.MAC;1")
and there was a version
stored on disk it would still report '0' because it was checking the
wrong global. Now the Exists method in %Routine and %RoutineMgr work
correctly with versions of routines.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.Library
Platforms: All
DevKey: MAK842
Summary: Ftp class should use a timeout on the data read
Description:
When reading a file using the %Net.FtpSession class,
the main read loop did not have a timeout on the read, so if for some
reason the other end stopped sending data then the process would just
hang. Now it honors the timeout and reports a timeout error.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.Library
Platforms: All
DevKey: MAK852
Summary: Prevent <UNDEFINED> in %DeleteId of %ScrollableResultSet object
Description:
Calling %DeleteId of the %ScrollableResultSet object
would cause an <UNDEFINED> error. This is now addressed.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.Library
Platforms: All
DevKey: MXT464
Summary: Allow user to specify port number in %Net.POP3
Description:
Add port property to %Net.POP3 defaulting to 110.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Object.Soap
Platforms: All
DevKey: MXT471
Summary: Address SOAP Client Wizard interoperability issues
Description:
The following changes have been made to the SOAP
Client Wizard:
- Address SOAP Client Wizard and SOAP client to deal
with long XML type and element names taking account of Caché class,
method and property name length limitations.
- Generate TYPENAMESPACE parameter, if different from NAMESPACE the
WSDL target_Namespace, for the target_Namespace of the schema contained
in the WSDL.
- Use classes %xsd.double and %xsd.float for the double and float XML
data types. %xsd.double and %xsd.float are extended to accept value
INF, -INF and NaN which are stored as strings.
- Change %xsd.base64Binasry and %xsd.hexBinary to not have a length
limit.
- When importing %SOAP.Fault, ignore any unknown elements.
- Address XMLNAME property parameter to be the actual name from the
schema. Was name from schema with "_", "-" and "." removed.
- Improve namespace handling for SOAP clients with methods that have
different SoapBodyUse values. For SOAP client methods change
SoapNamespace to override TYPENAMESPACE as well as NAMESPACE for
classes generated for the method.
- Do not generate SoapNamespace override for web methods unless
value differs from the NAMESPACE parameter.
- Temporary change to ignore datasets instead of having an unexpected shutdown.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Object.Soap
Platforms: All
DevKey: MXT477
Summary: Address SOAP Client Wizard support for document literal WSDL
Description:
Address errors in SOAP client wizard that prevented
producing a SOAP client for a WSDL file with
<soap:body use="literal">
and
<soap:binding transport=... style="document" />
Make the list of classes output by SOAP Client Wizard Add-in
accurate.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.Storage
Platforms: All
DevKey: DLP1048
Summary: Address transaction rollback
Description:
An issue was addressed where, under certain rare conditions,
the %RollBack method of a class could fail because of untrapped error conditions.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: Object.Storage
Platforms: All
DevKey: DLP1072
Summary: Lock globals when performing uniqueness checks
Description:
Uniqueness checks are performed in persistent
classes using %CacheStorage by invoking $Data() with a unique reference formed
from the index global reference. There are no unique constraints
possible without a corresponding index. Other storage classes
(%CacheSQLStorage) don't require an index in order to enforce a unique
constraint. Concurrency issues involved in enforcing unique
constraints can be therefore resolved in such classes by locking the
index global reference using only the subscripts corresponding to
properties included in the unique constraint definition.
This change implements lock behavior when concurrency is active in a
manner consistent with the way the SQL filer implements such
locks. All uniqueness checks are now performed with locks in place
(assuming concurrency is active). Locks are also acquired for the
duration of the transaction when an object with a unique constraint is
deleted.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: Object.Storage
Platforms: All
DevKey: DLP1080
Summary: Storage fails when migration includes 3.x to 4.1.x to 5.0.x
Description:
In migrating applications from
3.x to 4.1.x to 5.0.x,
an issue occurs because the storage type class in 3.x is not package
qualified.
A qualified name will be required for the later migration.
The conversion code has been updated to accept either a qualified or
unqualified name.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: Object.Storage.Default
Platforms: All
DevKey: DLP1065
Summary: Allow bitmaps when IDKEY is based on single integer property
Description:
Previously, only classes with system assigned IDs
were allowed to have bitmap indices. This restriction was relaxed for
classes using %CacheSQLStorage if the IDKEY was based on a single
property whose type was %Integer and the MINVAL is greater than
zero. This change relaxes the restriction under the same conditions
for classes using %CacheStorage.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.Storage.Default
Platforms: All
DevKey: DLP1069
Summary: Address bitmap index filing in %CacheStorage when idkey is not system assigned
Description:
Caché allows bitmap indices to be used when the
idkey is based on a single property that is a positive integer. There
are situations that don't properly check for 'positive integer'
and also filing issues when generating the chunk and offset when the
idkey is not system assigned. Both issues are addressed by this
change.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.Storage.Default
Platforms: All
DevKey: DLP1089
Summary: Address construction of baseref for child classes using default storage
Description:
This issue is rather obscure and rarely encountered.
The baseref for any address in the
compiled extent of a persistent class using default storage
(%CacheStorage) was not properly constructed. It was missing leading
and trailing literal subscripts.
The baseref is now properly
constructed.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.Storage.Default
Platforms: All
DevKey: DLP1090
Summary: Use an extent level lock when a deleting a large number of objects in a single transaction
Description:
When deleting a parent object that has over 1000
children the lock table could be filled, causing an error to be
reported. Now, when more than 1,000 object locks are in place within a
single transaction, subsequent locks will be made on the extent. This
significantly reduces the chance of the lock table filling up.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: Object.Storage.Default
Platforms: All
DevKey: DLP1093
Summary: Address extent lock release
Description:
There was an inconsistency in the lock escalation logic. If an
extent lock failed, Caché was still releasing the lock. That would cause a
previously acquired lock to be released improperly. Now Caché checks to see
if the lock was acquired before releasing it.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: Object.Stream
Platforms: All
DevKey: MAK815
Summary: Redirect temporary file stream location
Description:
If the global ^%SYS("TempDir") is defined, then this
is now used as the temporary location for stream data. If this is not
defined, then it will work as before using "" as the directory which
puts the stream data in the current directory - normally the
location of the cache.dat file.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.Sys
Platforms: All
DevKey: CDS420
Summary: Address circular reference check when many objects in list
Description:
An <INVALID OREF> error could happen because
an object was erroneously closed when it was a member of a
relationship containing more than 1018 members.
This is addressed and the error is no longer possible.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.XML
Platforms: All
DevKey: MAK838
Summary: <COMMAND> error for XML export of object code
Description:
$SYSTEM.OBJ.Export method for object code gives
<COMMAND> error:
TEST>d $system.OBJ.Export("test.OBJ","c:\aaa\export.xml")
Exporting to XML started on 08/06/2003 17:03:53
Exporting object code: test.obj
<COMMAND>Export+34^%occSAX
This is now addressed.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.XML
Platforms: All
DevKey: MXT453
Summary: Create %XML.Writer class for easier export of an XML document
Description:
The new class %XML.Writer will control export of XML
from Caché. The %XML.Writer class will generate a complete XML
document including the <?xml> tag. To improve performance it
will work sequentially, outputting the XML as it goes.
%XML.Writer works in two phases. During the first phase, any required
parameters are set for the entire document. For example indentation,
charset, output media. In the second phase the root element and its
child elements are exported. The root element may be the export of a
single object and its referenced objects. Or the root element may be
a simple element with any number of objects exported as its children.
Control of XML output is implemented as properties of %XML.Writer.
- Format = "literal" or "encoded", "literal" is the default.
"literal" is formatted according to the schema for this document,
"encoded" is using SOAP encoding as specified by section 5 of the SOAP
1.1 standard.
- Charset is %String, "utf-8" is the default.
The charset to use for encoding the XML output.
- Indent is %Boolean, 0 is the default.
Indent specifies indentation of the XML output.
- IndentChars is %String, " " is the default.
IndentChars specifies the character sequence to be used for each
indent level if Indent=1.
- RuntimeIgnoreNull is %Boolean, 0 is the default.
If XMLIGNORENULL = "runtime", then the behavior of XMLIGNORENULL is
determined by the RuntimeIgnoreNull property. RuntimeIgnoreNull
specifies the value of XMLIGNORENULL="" at runtime.
- Summary is %Boolean, 0 is the default.
If Summary is true, then use export the summary that is specified by
the XMLSUMMARY class parameter. Otherwise, export the entire object.
- NoXMLDeclaration is %Boolean, 0 is the default.
If NoXMLDeclaration is true, then the XML declaration will be
suppressed.
- ElementQualified is %Boolean, 0 is default.
ElementQualified indicates whether or not locally declared elements
must be qualified. See elementFormDefault schema attribute.
- AttributeQualified is %Boolean, 0 is default.
AttributeQualified indicates whether or not locally declared
attributes must be qualified. See attributeFormDefault schema
attribute.
- DefaultNamespace is %String, "" is Default.
DefaultNamespace is the XML namespace to use for any exported classes
that do not have the NAMESPACE parameter specified. If the NAMESPACE
parameter is specified for a class, then the namespace specified in
the class is always used.
The destination for XML output is specified by the Output... methods.
Only one of these methods may be called. If none are called, the
default is to output to the current device.
- OutputToDevice() sets output to the current device and is the default.
- OutputToString() sets output to be directed to a string.
- GetXMLString may be called after output is complete to a string to
retrieve the output.
- OutputToStream([export]) sets output to be directed to a stream.
[export] is the exported stream. If [export] is the oref of a stream,
the XML document will be written to this existing stream at the
current position. If [export] is "", then a new %FileCharacterStream
will be created to contain the XML document and its oref returned.
In this case, [export] must be passed by reference.
- OutputToFile([filename]) sets output to be directed to a new file.
The new file is named [filename] and is created with parameters "WNS"
whenever the root object or element is completed.
The actual output of XML may accomplished by calling the RootObject()
or RootElement() methods.
RootObject([oref],[tag],[namespace],[local]) will output the document
as a single object instance and all its references. The RootObject()
method initializes itself based on the properties of the %XML.Writer
instance and does the output. When output is complete, it writes the
final end tag and closes the output device. At this point, the
%XML.Writer properties may be modified and RootObject() or
RootElement() called again to output another document.
- [tag] optionally specifies the tag name to be used for this element.
- [namespace] optionally specifies the default namespace for this
object. If the NAMESPACE parameter is specified for a class, then the
namespace specified in the class is always used.
- [local] specifies if
the element is treated as a local element -- default is 0 -->
-- (false).
If the Format="encoded" property is used and a RootObject() method,
then all object instances will be output as embedded in the top level
object. This is usually not desired and therefore objects to be
output using SOAP encoding should usually be enclosed in by a root
element using RootElement() and EndRootElement().
The RootElement() method writes only the root element of the XML
document. Child elements must be written by the user. The
RootElement() method initializes based on the properties of the
%XML.Writer instance and does the output. EndRootElement() writes the
final end tag and closes the output device. After EndRootElement() is
called, the properties may be modified and RootObject() or
RootElement() called again to output another document.
There are two
possible formats for the RootElement method:
- RootElement([root],[namespace]) where [root] is the tag name of the
root element directly specifies the tag to be used. [namespace]
optionally specifies the default namespace for this element and any
nested elements.
- RootElement([element],[namespace]) where [element] is the oref of a
%XML.Element instance that defines the element. [namespace]
optionally specifies the default namespace for this element and any
nested elements. See below for a description of %XML.Element.
EndRootElement() is the method to end the root element.
Elements that are contained in the root element may be output using
the Caché ObjectScript Write command or Basic Print command. In this case the user
is responsible for proper management of namespaces and nesting.
Additionally, the Object() and Element() methods may be used to output nested
elements.
- Object([oref],[tag],[namespace],[local]) outputs the object instance
specified by [oref] as XML. [tag] optionally specifies the tag name
to be used for this element. [namespace] optionally specifies the
default namespace for this object. If the NAMESPACE parameter is
specified for a class, then the namespace specified in the class is
always used.
- Element([tag],[namespace]) outputs the start element named [tag] and
initializes for any nested elements. [namespace] optionally specifies
the default namespace for this element and any nested elements.
[local] specifies if the element is treated as a local element -- default is 0 (false).
- Element([element],[namespace]) outputs the start element that defines
the %XML.Element instance whose oref is [element]. [namespace]
optionally specifies the default namespace for this element and any
nested elements. See below for a description of %XML.Element.
- EndElement() outputs the end element for the matching element started
with the Element() method.
The Reset() method may be called after an XML document has been output
by RootObject() or RootElement() to reinitialize the properties of the
XML document.
Namespace handling is for the most part automatic. %XML.Writer adds
namespaces and their automatically created associated prefixes to the
XML output as needed. The usage of namespaces is controlled by the
ElementQualified, AttributeQualified and DefaultNamespace properties,
and any [namespace] argument to an Object or Element call. However,
it is possible to control when a namespace is introduced into the
document and the prefix used with the AddNamespace() method.
- AddNamespace([namespace],[prefix]) adds a namespace to the XML
document at all elements added at this nesting level. The prefix to
be used for the namespace may optionally be specified with the
[prefix] argument. For example, if many children of an element will
use the same namespace, it is better to add the namespace above the
containing element, so that the prefix may be defined only once at the
containing level using the xmlns:[prefix] attribute.
- AddInstanceNamespace([prefix]) adds the schema instance namespace to
the document using the optional [prefix]. If the [prefix] argument is
not specified, "xsi" is used as the prefix.
- AddSchemaNamespace([prefix]) adds the schema namespace to the document
using the optional [prefix]. If the [prefix] argument is not
specified, "s" is used as the prefix.
- AddSOAPNamespace([soapPrefix],[xsiPrefix]) adds the SOAP encoding,
schema and schema instance namespaces to the document using the
optional [soapPrefix] for SOAP encoding, [schemaPrefix] for schema and
[xsiPrefix] for schema instance. The default for [soapEncoding] is
"SOAP". The default for [schemaPrefix] is "s". The default for
[xsiPrefix] is "xsi".
The %XML.Element class defines an XML element to be used by
%XML.Writer. The tag name, attributes and namespace may be defined.
To get a new instance of %XML.Element call
%New([tag])
where [tag] is the tagname to be used for the element.
The Tagname property may alternatively be set to the tag name.
The Namespace property is set to the namespace to be used for this
tag. If Namespace is not set then %XML.Writer will use the default
namespace or no namespace if no default is set.
The Local property is %Boolean, default is 0.
The Local property determines how the tag is qualified for the case of
elementFormDefault="unqualified".
The AddAttribute([name],[value],[namespace],[valueNamespace]) method
adds an attribute to this element. [name] and [value] are required.
[namespace] is the optional namespace for the attribute name. If
[namespace] is not specified, then the default namespace is used for
the attribute name. [valueNamespace] is the namespace for the value.
If [valueNamespace] is not specified (the most usual case), no
namespace prefix is used for the value. [valueNamespace] is used for
attributes like xsi:type whose value comes from an XML schema
namespace.
In addition, support is added for the NAMESPACE class parameter for
XML enabled classes. The NAMESPACE parameter specifies the XML
namespace to be used when that class is projected to XML. The
NAMESPACE parameter is supported by %XML.Writer. However, direct
calls to XMLExport ignore the NAMESPACE class parameter, since
XMLExport does not directly support XML namespaces.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Object.XML
Platforms: All
DevKey: MXT458
Summary: Correct SOAP server SoapBodyUse
Description:
The SOAP Service has been corrected to properly create WSDL when some
web methods have SoapBodyUse = literal and some have SoapBodyUse =
encoded.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.XML
Platforms: All
DevKey: MXT459
Summary: Address miscellaneous XML Schema Wizard errors
Description:
The following changes have been made:
- Handle large schema by using ^CacheTemp to store
parsed schema rather than local array.
- The Caché class compiler requires that class names do not differ
only in case. If the schema wizard creates class names that differ
only in case, then makes names unique by adding integer.
- Map xsd:base64Binary XML type to %xsd.base64Binary.
- Map xsd:hexBinary XML type to %xsd.hexBinary.
- Address handling of relative include or import paths with "/"
separators on Windows.
- Non-unique names can be created for the inverse property of a
relationship when the class contains a relationship with one of its
subclasses. Make these added inverse property names unique by
concatenating an integer.
- If the specified package name contains a ".", then classes
generated for inline elements where being created with only the first
part of the package name. Change to use the entire package name in
this case.
- Pass classes to compile as array instead of string to avoid
<MAXSTRING> error.
- Address algorithm for unique long names to always have 3 digits after
22 characters. Previously, sometimes 4 digits were added.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.XML
Platforms: All
DevKey: MXT462
Summary: Change CSP XML sample to use %XML.Writer
Description:
Change the xmlclasses.csp sample CSP page to use
%XML.Writer instead of XMLExport.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.XML
Platforms: All
DevKey: MXT465
Summary: Add Schema Wizard features
Description:
The following features have been added or modified:
- Support <xs:group ref=....> by including
elements inline.
- Note use of xs:restriction by adding the restriction information
to the class description.
- Avoid multiple includes of the same schema. The purpose is to
keep from creating classes multiple times and then needing to reduce
which reduces memory usage. This change will also avoid infinite loops
in certain cases.
- Only generate compileAfter list for a class that includes
referenced datatype classes. compileAfter was cut down to prevent
compile circularities. compileAfter is not needed for non-datatype
classes since we no longer check for XML enabled at compile time.
- Delay resolution of <element ref= > until after all types
created in order to address issues with inline XML types created for
<element ref=...>. The issues were excessive types created
and type not able to be found in case of loops in imported
schema.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Object.XML
Platforms: All
DevKey: MXT466
Summary: Improvement to XML schema wizard handling of groups especially choice groups.
Description:
The following changes were made:
- Add "Parameter XMLSEQUENCE = 1;" to created
classes to enforce ordering on import. This change deals with
properties in a class with duplicate XMLNAMEs.
- However, XMLSEQUENCE cannot ever be added to a class that contains
a choice group. This is a temporary change until full support of
xs:choice is implemented.
- Do not allow properties within a choice group to be marked as
Required since they cannot all appear. This is a temporary change
until full support of xs:choice is implemented.
- Change default for xs:element minOccurs to the correct value of 1
unless element is in a choice group.
- xs:all only allowed in complexType, restriction or extension. Set
XMLSEQUENCE parameter to 0 for xs:all.
- Normalize ".." in include paths to avoid including schema file
multiple times.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Object.XML
Platforms: All
DevKey: MXT469
Summary: Address XML schema wizard to display utf-16 files
Description:
XML Schema wizard was not displaying schemas that
were stored as utf-16. This has been corrected.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.XML
Platforms: All
DevKey: MXT472
Summary: Address XML export with format encoded of serial objects
Description:
With the format specified as encoded, the generated XML is incorrect
if it pertains to a serial object which contains a reference to a
persistent object. Once the persistent object is projected, the
remainder of the XML serial object properties are projected at the
embedded level instead of at root level.
The change is to change XMLExport for serial objects to defer export of
referenced non-serial objects until the top level of the export is
reached.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.XML
Platforms: All
DevKey: MXT474
Summary: Maintain namespace information when exporting mixed XML node
Description:
Modify %XML.Reader, SOAP web service and %SOAP web
client to maintain namespace attributes in %XML.String mixed nodes.
Make sure all attributes in %XML.String text are exported correctly
including the prefix.
Export empty tags in %XML.String as <tag/>
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Object.XML
Platforms: All
DevKey: MXT476
Summary: The XML export XMLNAME is ignored for array of serial objects
Description:
Address issues with Array of serial objects:
- property's XMLNAME was being ignored and class name always used for
tag
- change the incorrect code that was being generated for export in
encoded format of an array of serial objects.
- Do not generate subclasses of %RegisteredObject, %SerialObject,
%Persistent, members of %XML package or members of %SOAP
package.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: SQL
Platforms: All
DevKey: DPV2041
Summary: Address lock removal if transaction is aborted
Description:
An issue has been addressed where the lock obtained on a
row during a query run with READ_COMMITTED isolation level was not
released when the query encountered an error resulting in the query's
error trap code being run.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: SQL
Platforms: All
DevKey: DPV2048
Summary: Function {fn WEEK ()} now returns the same results as SQLServer
Description:
The Caché function, {fn WEEK ()}, now returns
the same value as SQLServer.
Previously, it counted the first Sunday as the transition from week 1
to week 2. When the year started on a Sunday, this was incorrect and
has been accounted for.
This was changed for compatibility and ease of use in importing and exporting data.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
Yes |
No |
No |
Category: SQL
Platforms: All
DevKey: DPV2050
Summary: Add ORIGINATING_PROPERTY Column to %Library.SQLChildTables query
Description:
%Library.SQLCatalog.SQLChildTables query now has a
column named ORIGINATING_PROPERTY:
ORIGINATING_PROPERTY:%String - The name of the property which produced the
projection of this Child Table. If the child table was projected
because of an ARRAY or LIST collection, the name of the collection
property is returned. Otherwise, it is assumed the child table
resulted from a relationship and the property name of the parent
reference field is returned. In this case, the parent reference
field's property is the name of the relationship.
The rowspec for this query is now defined as:
ROWSPEC = "TABLE_NAME:%String(MAXLEN=128),
COLLECTION_TYPE:%String(MAXLEN=12),
ELEMENT_TYPE:%String(MAXLEN=10),
CLASS_NAME:%String(MAXLEN=128),
ORIGINATING_PROPERTY:%String(MAXLEN=128)"
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: SQL
Platforms: All
DevKey: DPV2058
Summary: Add INVERSE_RELATIONSHIP column to %Library.SQLCatalog.SQLChildTables query
Description:
The column INVERSE_RELATIONSHIP has been added to
the %Library.SQLCatalog.SQLChildTables catalog query. The
documentation for this catalog query is now as follows:
SQLChildTables Procedure
%Library.SQLCatalog_SQLChildTables('tablename')
This method takes one %String/VARCHAR type parameter which is the name of a
BaseTable, and returns any child tables of the named table.
The ROWSPEC descriptions is:
- TABLE_NAME:%String - Name of the Child Table.
- COLLECTION_TYPE:%String - 'ARRAY' or 'LIST' if the table was projected
as the result of a collection, else RELATIONSHIP.
- ELEMENT_TYPE:%String - If COLLECTION_TYPE is ARRAY or LIST, this
will contain the type of elements in the collection 'PERSISTENT',
'SERIAL', or 'DATATYPE'. If COLLECTION_TYPE is RELATIONSHIP, this
field is NULL.
- CLASS_NAME:%String - Name of the class which projected the table.
- ORIGINATING_PROPERTY:%String - Name of the property which produced the
projection of this Child Table.
- INVERSE_RELATIONSHIP:%String - If this child table is the result of a
RELATIONSHIP, the relationship in the Parent table that is the inverse
of the ORIGINATING_PROPERTY relationship. NOTE: If the child table is
projected as a result of the deprecated IDENTIFIEDBY class parameter,
this INVERSE_RELATIONSHIP will be NULL, even though the
COLLECTION_TYPE is reported as RELATIONSHIP.
The rows are returned in arbitrary order.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: CSP.Tags
Platforms: All
DevKey: MXT454
Summary: Fix SQL statement used by csp:search to avoid duplicate columns
Description:
Normally the SQL select statement that is generated
by csp:search will add an ID column as the first column. This change
makes it so that an ID column is not added if the ID field is already
in the select list. This change is made to avoid duplicate columns
which causes Informix issues when used through the SQL
Gateway.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: SQL.JDBC
Platforms: All
DevKey: AND357
Summary: Added the ability to control the JDBC Connection Pool Size
Description:
With this change, it is possible to control the
connection pool size. There are now two new InterSystems proprietary
APIs
associated with this in CacheConnectionPoolDataSource:
- public void setMaxPoolSize(int max);
which sets the maximum pool size
- public int getMaxPoolSize();
which returns the current maximum size
Default maximum size is set to 40. When the pool maximum size is reached,
connections will not be pooled any more. The underlying physical
connections will be closed, and all corresponding structures will
be made available to the garbage collector.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: SQL.JDBC
Platforms: All
DevKey: AND359
Summary: Add support for ?username=foo&password=bar as part of the connection URL
Description:
This change adds the ability to pass username and password as
part of the URL string.
The new URL syntax is:
jdbc:Cache://machine:port/namespace/logfile:eventclass:nodelay?username=foo&password=bar
where logfile, eventclass, nodelay and ?username=foo&password=bar
are all optional.
If password and username are supplied as part of the
URL string, they will be used in attempting the connection. Otherwise, other
mechanisms already in place will be invoked. Note that the new username/
password syntax is case-sensitive.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: SQL.ODBC
Platforms: All
DevKey: AND352
Summary: ODBC: Implement SQLGetData random column access
Description:
Previously, we did not support random column access in ODBC.
While random column access using SQLGetData is a not a standard feature,
it turns out some tools rely on it.
This capability has been added.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: SQL.ODBC
Platforms: All
DevKey: MIT260
Summary: ODBC: parameter substitution in IN clause with one parameter
Description:
Now, Caché performs substitution
of parameters in the IN clause: IN(constant). Previously, we stated that
no substitution will be done for a constant enclosed within
parentheses. In this case, a way not to perform substitution is to add
an extra pair of parentheses: IN((constant))
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: SQL.ODBC
Platforms: All
DevKey: MIT261
Summary: Dynamic SQL:parameter substitution: IN clause with one literal
Description:
Now, Caché performs substitution
of parameters in the IN clause: IN(constant). Previously, we stated that
no substitution will be done for a constant enclosed within
parentheses. In this case, a way not to perform substitution is to add
an extra pair of parentheses: IN((constant))
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: AK570
Summary: Improve queries using DESCending order on a bitmap
Description:
This changes corrects an issue where queries that
specified:
"... ORDER BY id DESC"
would sometimes return data in ascending order instead of
descending when the data was retrieved using a bit-map index
or a bit-map temp-file.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: SQL.Query Processing
Platforms: All
DevKey: DPV2055
Summary: A query with DESC keyword returns wrong resultset
Description:
An issue has been addressed where certain queries with
ORDER BY xxx DESC would order in ascending order rather than
descending order. The situation happened in some cases where there were
multiple conditions in an IN clause or OR clause.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: SQL.Query Processing
Platforms: All
DevKey: DPV2056
Summary: The function "fn week" failed if the DateFormat or DateSeparator was not the default.
Description:
An issue has been addressed with the SQL WEEK function when
a non-default DateFormat or DateSeparator was used. The function
might have returned an <ILLEGAL VALUE> error prior to the change if a
non-default format or separator was used by the process running the
query. Now it does not.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
Yes |
No |
No |
Category: SQLManager
Platforms: All
DevKey: DLP1062
Summary: Implement PropertyInfo method in %SQL.Manager.Catalog
Description:
A new PropertyInfo method has been added to the
named class.
It returns all property
names and associated SQL column name for all properties projected to
SQL for a class. The information is sorted either by property name or
SQL column number, specified by input parameter. The result is in the
form of a Caché ObjectScript array with the base node set to the number of properties
and each node in the array is:
<array>(<ptr>) = <property name> _ $c(22,35,1) _ <SQL column name>
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: SQLManager
Platforms: All
DevKey: PYD095
Summary: SQLMigration now handles table imports requiring the table be split
Description:
The SQLMigration package was failing with a routine
too big to save error when trying to import tables that had a large
number of columns (>400).
The Generated SQLImport routine needed to be split into multiple INT
routines when compiled.
It now does this.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: SQLManager
Platforms: All
DevKey: YSD610
Summary: Namespace Privileges in SQL Manager
Description:
This enhancement enables user to grant/revoke Namespace
privileges in SQL Manager.
There is a new tab on the User/Role Privileges property called
Namespace. If the ODBC Namespace Security Enabled is set to No in the
Configuration Manager, then all users and roles will have the
Namespaces privileges granted.
If the ODBC Namespace Security Enabled is set to Yes in the
Configuration Manager, then when you (the logged in user) click on a
user or role then only the namespaces that you have the privileges for
seeing will be shown.
If you are the system manager, then you can
grant/revoke privileges in the same fashion as you do for General
system permissions.
To grant/revoke all namespaces to a user/role, right click on the
first row (the row that says Namespace) and see the popup menu.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: SQLManager
Platforms: All
DevKey: YSD611
Summary: Misleading prompt in Execute Query
Description:
The SQL statement executed from the Execute Query
dialog in SQL Manager had an unquoted occurrence of 'delete'. As a
result,
the
following misleading prompt was displayed:
'Are you sure you want to
PERMANENTLY delete the data? Undo not available!'.
SQLManager will now check, within the first 10 characters, for an
instance of the
word "DELETE", allowing a space or two. If it finds it, then the warning
for Deletion will come up. Otherwise it will proceed without the
warning.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: SQLManager
Platforms: All
DevKey: YSD625
Summary: Set $zeof on in Configuration Manager breaks data import
Description:
Previously,
if the user set Configuration Manager to use $ZEOF instead of <ENDOFFILE>,
then the import could not stop properly after it finishes importing
the rows.
This has been corrected.
(The class already handles the case when <ENDOFFILE> is
used.)
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: SQLManager
Platforms: All
DevKey: YSD626
Summary: Data import - truncated records display incorrectly
Description:
An ASCII import of csv (comma-separated values) data with missing fields at the end of the record
appear in the display screen with all 'missing' fields set to the last
actual data field. This now works correctly; missing fields are
indicated correctly.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: SQLManager
Platforms: All
DevKey: YSD631
Summary: SQL Manager: Add shortcut F4 for changing namespace
Description:
The F4 key now invokes the dialog for changing the namespace.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: SQLManager
Platforms: All
DevKey: YSD632
Summary: Improve ASCII import for relational data
Description:
Previously,
the column order after import was displayed in collated order by
column name.
This usually contrasts with the exported order from the origination RDBMS>
Caché has been modified to preserve the column order of the import.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: SQLManager
Platforms: All
DevKey: YSD636
Summary: Show popup menu even if the first cell is empty
Description:
If the result of running a query in the SQL manager returned a number
of rows in which the first column of the first row was null, then it
is impossible to select and copy all rows. It is also not possible to
select the column and right-click on the header to do sorting.
Caché has been changed it so that the popup menu would always be
available.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Studio
Platforms: All
DevKey: AGC238
Summary: Studio Caché ObjectScript, XML parsers - make the ' entity an alternative to single quote
Description:
The Caché ObjectScript
parser has been changed so it accepts "'" as an alternative to
the single quote character "'" when it is used as a monadic operator
(logical not) or as a modifier to a dyadic operator (for example "'<").
"'" is not accepted as an alternative to "'" in "#'"
(pre-processor line comment) or in "#'...'#" (CSP extension).
The "&" character is still accepted as itself except where it is
followed by "apos;".
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: All
DevKey: DVU795
Summary: "Send to Server" appears when change namespace and Namespace tab is open in Workspace
Description:
An erroneous report of a "Send to Server" failure
was eliminated.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: All
DevKey: DVU796
Summary: XML, CSS, and JS files don't appear in Workspace in Studio
Description:
Previously, the Namespace tab of Studio
did not show XML, CSS, or JS files.
This has been changed to show all files of these types in the
CSP directory.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: All
DevKey: DVU801
Summary: Find in Files changes
Description:
If the "Find what" or "in files" combo boxes were
empty, the "Find" button was disabled, and
"*.* was missing from list of available types. This has been addressed.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: All
DevKey: DVU805
Summary: Report project name in Studio title
Description:
Studio has been changed to include the
project name as part of the title bar. This makes it easier to
distinguish among multiple simultaneous Studio instances.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: All
DevKey: DVU806
Summary: Choose file type by keyboard from NEW dialog
Description:
In the NEW dialog (that may be called from File/New or by Ctrl-N), if
a user moves by keyboard from the General Tab to another Tab (CSP File or
Custom), there is no way to select a file type by keystrokes, as none of
the types are highlighted initially. This has been corrected.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: All
DevKey: DVU807
Summary: NEW Dialog: Remember previously selected page and file type
Description:
Studio now remembers the previously chosen
page and file type.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Studio
Platforms: All
DevKey: DVU812
Summary: Jump from Find in Files not quite right
Description:
The transition from a search for text to the actual
location of the text in a routine, class, method, and so on placed the
cursor slightly off from where it should have been.
Studio now positions the cursor properly.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Studio
Platforms: All
DevKey: DVU817
Summary: Up and down arrows in a project list move you to the top of the list
Description:
In Studio, after selecting a member of a long list
of projects by typing the first letter of its name, the up-arrow and
down-arrow keys wrapped around to the bottom or top of the list
respectively rather than stopping at either end. This disorienting
behavior no longer occurs.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Studio
Platforms: All
DevKey: DVU821
Summary: Add *.CSS, *.JS and *.XML to list of files in Find in Files
Description:
Studio has been changed to include Cascading
StyleSheet (css), JavaScript (js) and eXtensible Markup Language (xml)
file types in its Find list.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Studio
Platforms: All
DevKey: DVU827
Summary: Used only the class name (with no package) for the default file to export to.
Description:
When exporting a class definition from Studio, the
Export command now uses the class name, without the package name, as
the default export file name. It used to include the package name as
well.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: All
DevKey: DVU833
Summary: "New File" button in "export to remote file" appears as "pressed" even it is not pressed.
Description:
The
"New File" button in "export to remote file" appears as "pressed" even
it is not pressed. This has been addressed.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: All
DevKey: DVU841
Summary: UndoCheckout option for SourceControl menu
Description:
Add UndoCheckout to the list of source
control options for a document.
This will go with the current list of checkout/checkin/get latest.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: All
DevKey: DVU846
Summary: Remove *.prj filter from Open Dialog, invoked from Export
Description:
The Open Dialog, displayed within the Studio export
window, no longer includes *.prj as a file filter as it does not make
sense to select projects in this context.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: All
DevKey: DVU849
Summary: Foreign Key Wizard - add support for extended property name
Description:
In foreign key definitions, it is now
acceptable to entered an extended property name. For example,
ForeignKey FK1(Home.Zip) References Sample.USZipCode(ZipIDX);
The only requirement is that Home's
type class must be a serial class.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Studio
Platforms: All
DevKey: DVU850
Summary: Focus lost after closing active output window
Description:
In rare circumstances, Studio would incorrectly lose
the window focus when the last active window was closed, and a user
could not thereafter regain it. Studio would have to be restarted.
This condition has been addressed.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: All
DevKey: DVU851
Summary: Default Project
Description:
When the user does not have a Project default, one will
be automatically open. It will be named Default_UserName. The
main difference from a user defined project is that "Default Project"
will be automatically saved without questions.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: All
DevKey: DVU855
Summary: Studio handling of .csp files corrected
Description:
When running Studio and attempting to open a CSP
file from the command line, the Connection Manager dialog appeared.
It now behaves
correctly.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: All
DevKey: DVU858
Summary: Add match whole word to Find
Description:
The ability to constrain matches to whole words has
been added to the Find capability in Studio.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: Studio
Platforms: All
DevKey: DVU862
Summary: If regeneration of class failed error message not helpful
Description:
If an attempt to regenerate class information fails,
sometimes the warning of the condition failed to appear. This
has been corrected.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: All
DevKey: DVU863
Summary: Studio does not mark document as modified after a Replace All
Description:
Studio now correctly notes that the document has
changed after a "replace all" operation.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: All
DevKey: DVU865
Summary: Do not allow override of final members
Description:
Previously, Studio would show final methods in its
list of methods that could be overridden, even though this is incorrect.
Now, these are no longer displayed that way.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: OpenVMS
DevKey: DVU866
Summary: Studio Open dialog not working correctly on OpenVMS
Description:
In some instances, Studio failed to construct pathnames correctly when
trying to open files on OpenVMS systems. This is changed.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: All
DevKey: DVU867
Summary: Use current connection as default
Description:
When multiple copies of Studio were running
simultaneously on the same machine, they failed to keep individual
copies of the "last namespace used" information. An attempt to change
namespaces in one copy of Studio would then use the information from
the last time either of them had selected a namespace.
This is incorrect and the behavior has been changed.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: All
DevKey: JN129
Summary: Output more specific error messages in Studio
Description:
Add an expansion of HRESULT to the regular error message
when an error HRESULT
is returned from the UDL parser.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: All
DevKey: MAK792
Summary: Error #5019 appears when try to delete CSS, JS, or XML file
Description:
If, from the Open dialog while browsing a CSP
application, you right click on a non-CSP/CSR file and select 'Delete',
you would get an error dialog saying you cannot delete this item. But
it would in fact be deleted. Now it deletes this item without
displaying the error.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: All
DevKey: MAK807
Summary: In %AbstractDocument the AtEnd property was not delegated to the Code property
Description:
The %AbstractDocument has a property that is a
stream which contains its data. However, it is also an example of a
stream itself, as this is required by Studio. This works because all
the stream methods delegate to the Code property.
However, the AtEnd
property was originally missed so ..AtEnd was always '1'. Now it
correctly calls '..Code.AtEnd' to return the true value.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: All
DevKey: MAK808
Summary: Add a way to lock the source control class so it cannot be changed by any user of Studio
Description:
From Studio, you can modify the source control class
for this namespace. However you may wish to lock this value so any
developer cannot modify the source control class. This can be done by
setting:
Set ^SYS("SourceControlLock")=1
in the namespace where you wish to lock the setting of the source
control class. Then if someone attempts to modify the source control
class from Studio they will get the error:
The source control class is locked and cannot be changed in Studio.
To allow it to be modified again either kill the SourceControlLock
node or set it to 0.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: All
DevKey: MAK811
Summary: New backup files do not overwrite previously created backups
Description:
The creation of backups of routines when you save a
routine from Studio was saving the first 'x' backups correctly where
'x' is the number of backups it will keep, but then it never stores
any more backups.
Now it correctly keeps the most recent specified number of backups.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: Studio
Platforms: All
DevKey: MAK818
Summary: Performance statistics in CSP counted included pages incorrectly
Description:
If you have a <csp:include> in a page and then
access this page once, the ^%CspPerformance counters would show two
hits against this page rather than one. With this change, you
will see one hit against the initial page and one hit against the
included page.
In addition, the previous statistics for the included page would be
inaccurate because the timers were not correctly stacked when the
included page was called. This is also changed now.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: All
DevKey: MAK820
Summary: Unable to open files in Studio with "_" in the name
Description:
From Studio,
a CSP file with a filename that contained an underscore (_) character
did not open when it was selected from a list in the Open dialog.
This has been fixed.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: All
DevKey: MAK837
Summary: Report correct error message if we cannot load a routine
Description:
If you define a source control class such as:
Class Test.SourceError Extends %Studio.SourceControl.Base [ ProcedureBlock ]
{
Method OnBeforeLoad(InternalName As %String) As %Status
{
Quit $system.Status.Error(9965,"Wrong info")
}
}
and then attempt to load a routine you were getting the error message:
Failure to create %RoutineMgr.
Error 5912: CSP Page '<name_of_routine>' does not exist.
This was confusing as this was not a CSP page in the first place. It
now reports the true error returned by the source control class.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: OpenVMS
DevKey: MAK839
Summary: Import local XML file fails on OpenVMS if the local filename is not a valid OpenVMS filename
Description:
An attempt to import a local XML project file having
two dots in its filename (for example myproj.1.xml) into a OpenVMS machine fails
with message:
ERROR #6301: SAX XML Parser Error: Line: -1 Offset: -1
An exception occurred! Type:XMLPlatformException,
Message: Could not determine base pathname of the file
at line 0 offset 0
This is now changed.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: All
DevKey: MAK841
Summary: Add LockItem method to %RoutineMgr class
Description:
Add a new method, ##class(%RoutineMgr).LockItem(item,lock),
which returns a %Status code and, if lock=1, will lock the item
requested (the default). If lock=0, it will unlock the item
requested. This provides a single entry point to lock any of our
document types.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: All
DevKey: MAK848
Summary: Address <UNDEFINED> error on RemoveFromSourceControl Studio call
Description:
When you removed an item that was under source
control, Studio asked if you wanted to remove it from source control
in the latest version of Studio. However, this caused an <UNDEFINED>
error because it was not being passed a description argument. Now we
accept a null description correctly.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Studio
Platforms: OpenVMS
DevKey: MAK857
Summary: Studio not browsing subdirectories of a CSP application on OpenVMS
Description:
On OpenVMS,
the subdirectory name did not appear as part of the Open dialog
and the file was not later saved to the right directory. This has
been corrected.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: System
Platforms: All
DevKey: CDS431
Summary: Prevent shutdown in Basic compiler
Description:
This addresses a very rare access violation when
compiling a Basic routine.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
Yes |
No |
Yes |
Category: System
Platforms: All
DevKey: CDS435
Summary: Close objects during HALT
Description:
Objects which were left open when a process halted
were not being closed.
Now, as part of HALT processing, all open objects will be closed so
their
%OnClose method can do any necessary cleanup.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: System
Platforms: All
DevKey: JB141
Summary: Task Manager consuming 100% CPU
Description:
using a start date earlier than today's date, and an
expiration date set equal to the start date caused the Task Manager to
consume
100% of the CPU as in the example below. The %SYSTEM.TaskHistory will also be
bombarded with entries.
The only way to resolve this is to RESJOB the TASKMGR code and address the
task which is causing the issue.
Set obj=$system.Task.%New()
Set obj.StartDate=$zdh("7/14/03")
Set obj.EndDate=obj.StartDate
Set obj.Name="100% CPU"
Write obj.%Save()
The issue is the StartDate which is in the past because year is 1903
and the default on a task is to Expire this task never runs so the
Reschedule never removes the scheduling date.
Previously Caché checked and rescheduled a task when it is
expired until it is no longer expired.
Because this task never runs, the reschedule will never remove the
scheduled date.
Caché now determines that the task will never run and removes
the task.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: System
Platforms: All
DevKey: JB149
Summary: TASKMGR conversion creates duplicate system entries
Description:
Caché 5.0, 5.0.1, 5.0.2 system tasks
were duplicated when converting to Caché there were no user tasks. This
no longer happens.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: System
Platforms: All
DevKey: JLC492
Summary: New pattern codes for 2nd alphabet
Description:
There are 3 new pattern codes, "R", "B" and "M",
which are currently only available in the 8-bit Russian Windows locale
(ruw8). They match:
R - any Cyrillic character (192-255)
B - uppercase Cyrillic characters (192-223)
M - lowercase Cyrillic characters (224-255)
Examples:
USER>f i=192:1:255 w $C(i)?1R
1111111111111111111111111111111111111111111111111111111111111111
USER>f i=192:1:255 w $C(i)?1B
1111111111111111111111111111111100000000000000000000000000000000
USER>f i=192:1:255 w $C(i)?1M
0000000000000000000000000000000011111111111111111111111111111111
In every other locale these pattern codes will fail to match any
character.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
Yes |
Yes |
No |
Category: System
Platforms: UNIX
DevKey: JLC515
Compatibility: 8
Summary: Improve SET command speed
Description:
Some forms of the SET command for Solaris/UltraSPARC are now slightly faster.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: System
Platforms: UNIX
DevKey: JLC517
Compatibility: 8
Summary: Align resources to improve cache hits
Description:
Make sure some spin locks are properly aligned on
cache line boundaries and fit in a single line so as to reduce
contention and avoid false sharing.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: System
Platforms: All
DevKey: JLC520
Summary: Translate all outgoing strings on DTM/DCP
Description:
A Caché server now correctly translates via
NLS all DTM/DCP outgoing strings.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: System
Platforms: UNIX
DevKey: JLC533
Compatibility: 10
Summary: Improve code generation options for UltraSPARC
Description:
Changes some C compiler options for building
Caché
for Solaris/UltraSPARC that slightly reduce object code size and make it a bit faster.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: System
Platforms: All
DevKey: JO1682
Summary: Address <ACCVIO> if "CacheTemp" is dismounted
Description:
An issue has been resolved where deleting cachetemp
could result in an access violation in the write daemon.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: System
Platforms: All
DevKey: JO1717
Summary: Rolling journal restores for clusters & new backup jrn restore dialogue
Description:
This change introduces a new interface for performing cluster journal
restores to perform some specific operations. This interface is
accessed by running CLUMENU^JRNRESTO.
The operations supported are:
- Run the "classic" cluster journal restore. This is the same as
running ^JRNRESTO. The user specifies the information required to find
the journal files for all the cluster members, the starting and ending
journal file for each cluster member, the starting and ending sequence
number for the restore and all the databases/globals to be processed
as well as any redirection information if some/all databases are not
going to be restored to the same location as is recorded in the
journal. This interface assumes that the system that is running
^JRNRESTO is one of the "sources" of data for the restore.
- Produce a single common format output file from the cluster journal
files. JCONVERT takes a journal file from a single system and writes
it out in a common format which lets it be ready by %JREAD. This is
useful for restoring journal files across versions of Caché where the
journal files are not compatible (for example as part of an "almost rolling"
upgrade) or as part of failing back to an earlier release. It can also
be used to write out the journal file in a way that it can be loaded
into another platform such as DSM. The user interface for this is the
same as option 1 above with some additional questions related to what
to include in the output file, the output file format, etc.
- Restore the journal files after a Caché backup restore. This is the
same as the restore performed by DBREST after a cluster backup restore
but there was no way to run it independently of restoring a backup
(for example in case something goes wrong and you need to restart the journal
restore). One difference between this option and restoring using
^DBREST is that this option does not start with the list of databases
contained in the backup; the database list must be entered by the
user. It will offer to include all currently cluster mounted databases
in the restore but if this is really being run after restoring a
backup then the databases restored by the backup are going to be
privately mounted unless the mount state was changed by the user
(for example the restore mounts them privately and leaves them privately
mounted when its done).
The rest of the options (4 through 7) relate to a new type of
operation termed a "rolling journal restore". This is an operation
that is performed on a regular basis such as daily, weekly, etc... to
replay the journal of the main system against another system to keep
it up to date. This is similar to the functionality provided by
Caché's shadowing technology. Rolling operations can either restore
the journal directly to the system or they can produce a common format
journal file for replaying with %JREAD. None of these operations
assume that the current machine is supplying data for the operation
(although it can). This means that there are no questions "about this
system" and "about the other systems"; it simply asks you to describe
the cluster, where to find the files, etc.
Two types of rolling operations are supported:
- rolling operations by date where the data to be moved is selected
based on the date it was created. One day is the smallest interval
which can be selected.
- rolling operations by backup where the data to be moved is the data
created between two backups.
Part of the goal of the user interface for this functionality is to
simplify the dialogue to prevent any mistakes since the operation is
going to be performed on an ongoing (for example daily) basis. After going
through the operation the 1st time as long as the configuration of the
cluster does not change (for example where the journal files live, the number of
cluster members, etc) pressing return to all the questions should
perform the "next" operation. To allow this simplified interface to
locate the necessary files this feature requires that each cluster
member is assigned a unique journal file prefix and the prefix must
not be changed "within" an operation. If the prefix must be changed
then it needs to be changed at a point such that the change is at the
"start" of an operation and not an end or the middle. This means that
the system should be shut down during the operation prior to the
change (for example prior to making the backup or before the end of the day)
and then started up with the new prefix name to be included in the
next operation (after the backup or so the 1st journal file created is
the 1st file of the day). Additionally, the answers to the questions
required to perform the next operation are stored in the ^SYS global
in the CACHESYS database. Thus they are only available to the system
which ran the operation last time so if the operation is run on a
different cluster member all of the questions will have to be answered
again (the 1st time).
A backup based rolling operation is probably the easier of the two to
understand. Each backup provides the end point of one operation and
the starting point of the next. It doesn't matter what kind of backup
is performed. The cluster backup code puts a marker into the journal
file which separates the data included in the backup from the data
which follows the backup. This is where a journal restore following
backup restore starts. The rolling restore by backup runs from one set
of markers to the next. To support this you need to keep the backup
file and the journal files that represent the end point on the system
until the next operation is run. At that point the files can be
removed up to the end point of that operation. In order to use backups
as the basis for rolling operations you must enable the collection of
some information used to locate the journal files that contain the
backup markers. Option (8) enables and disables the collection of this
information. The information is stored in a in
^|"^^CACHESYS"|SYS("JRNMARK") [this may move in the future] so the
rolling operation must be run on the same system which performed the
backups. When you disable collecting this information you are given
the opportunity to delete the information collected so far. If you
delete it, you will not be able to do another backup based operation
until you enable it and perform a new backup.
A date based operation is not that much more complicated than a backup
based operation. A date based operation works on "days" worth of
journal data. The journal files have a name of the form yyyymmdd.nnn
where <nnn> is a number that starts at 001 and goes up as the
journal files rollover either due to manual journal switches, backups
or they switch when they reach their user specified maximum size. A
date based operation asks for the starting date and then the number of
days to process. The number of days does not have to be the same every
time so (for instance) on Monday you can include all of the weekend's
work in one operation. The default number of days for an operation is the number
of days since the last operation was performed (for example bring all of the
available information over). The ending point of a date based
operation is where it is a little more complicated than a backup based
operation. The ending point of a date based operation is in the 1st
journal file of the 1st day not included in the operation. So if you
are processing 2 days starting on 5/13/2003 then this will include the
files named: <prefix>20030513.*, <prefix>20030514.* and
<prefix>20030515.001. This .001 file is also the starting point
of the next operation. It is ok if a cluster member is not running and
does not have a ".001" file which represents the start or end point
(assuming that the file doesn't really exist somewhere). The system
will warn you that the file is missing and ask if that is ok.
There are two special situations that are worth mentioning:
- The first is when you perform one of these rolling operations for the
1st time. In this case you are not starting with the end of a prior
operation so you have to modify some assumptions the system is going
to make.
For a backup based operation when you're asked whether this operation
starts with a backup, you say "no". The system will then start with
the earliest journal files it can find. These should have been created
by a system startup.
For a date based operation it is a little more complicated because the
system doesn't ask you if you're starting for the 1st time or
continuing from a prior operation. To start a date based operation you
enter the starting date but when it displays the information for the
restore and asks you if the information is correct you want to say
no. It will ask you if you want to edit the starting and ending
journal file offsets and you say yes. Now you set the starting journal
file offset to 0 and leave the ending journal file offset alone.
- The other special case is when something happens and you want to do a
rolling operation that ends at the end of the current data rather than
at a prior point (normally rolling operations end sometime earlier
than "right now"). This might be because the cluster has failed and
you're restoring its journal files to a stand by system or for some
other reason.
To do this with a backup based operation when the system asks if you
want have a backup to end the operation with you say no. It will end
with the most current data it can find. The next time you do a backup
based operation you want to start with the same backup file you
started with here to pick up the same information again plus the
information that gets added before the next backup.
To do this with a date based operation is similar to starting from a
point other than the last date based operation. When the summary of
the files to be restored is displayed and you are asked if the list is
correct say no and then say yes to changing the starting and ending
sequence numbers. Change the ending sequence to -1 which means "to the
end of the data". Like with the backup, if you want to perform the
rolling operation later when you have the "real end point", restart
from the same starting point to capture the information added before
the next end point. You need to do this even if the next end point is
the next day (for example there are no more journal files from the last day
being captured) because a date based restore does not end at the start
of the journal files from the ending day, it ends inside them. Thus if
you simply start with the next day you will miss some of the
information at the start of those journal files.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
Yes |
Category: System
Platforms: OpenVMS
DevKey: JO1735
Summary: Checkpid() for OpenVMS now only checks whether pid exists (like UNIX/Windows)
Description:
Caché for OpenVMS has been updated so that
$ZU(67,1,pid), which is documented as releasing a job table slot in use
by a "dead" job, will not consider a job dead as long as the process
id exists on the system.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: System
Platforms: All
DevKey: LFT1113
Summary: INTEGRIT does not find a <DATABASE> error
Description:
This enhances integrity checking by checking the
consistency of data blocks that have no right link.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: System
Platforms: OpenVMS
DevKey: LFT1139
Summary: Stop JOBEXAM from corrupting local variables on OpenVMS
Description:
An issue was addressed where JOBEXAM was corrupting local
variables in the process being examined, if the process
was reading from a Caché device. The problem can only
occur if JOBEXAM is requesting the value of a variable
that is not a string, for example an integer.
Previously, the problem was thought to be addressed
for all platforms,
but the correction was found to be incomplete on OpenVMS.
It has been rectified.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Moderate |
High |
No |
No |
Yes |
Category: System
Platforms: All
DevKey: LRS705
Summary: Avoid <ACCVIO> in $ZIO if we can't identify the principal device
Description:
This change avoids an access violation with the $ZIO special variable
if, for some reason, the principal device for a process cannot be
determined.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
Yes |
No |
Yes |
Category: System
Platforms: All
DevKey: SAP122
Summary: Halt taskmgr with other user jobs in shutdown
Description:
Fairly consistently, TASKMGR job is still active
after system shutdown. This change corrects this situation.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: System
Platforms: All
DevKey: SJ1410
Summary: Address issue with SET $BIT flipping a bit list and adding a segment at the same time
Description:
This addresses an issue in which the wrong bit was set when
attempting to set a bit into a
compressed bit list, where the bit number is greater than 65536.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: System
Platforms: All
DevKey: SJ1411
Summary: Address issues with reverse $BITFIND
Description:
This addresses an issue with certain cases of reverse
$BITFIND not finding bits.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Medium |
Low |
No |
No |
Yes |
Category: System
Platforms: All
DevKey: SML377
Summary: Add $zu(189) for socket peek to check disconnection.
Description:
Add $zu(189) to check if current TCP device is
disconnected from remote site. It returns zero if the remote site is
disconnected, otherwise it returns one.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: System
Platforms: All
DevKey: SML380
Summary: Address a lock timeout issue over network
when the remote server has to return 0 for client to do short polling.
Description:
When an ECP server has a global without subscripts
locked (for example L ^C), and the ECP client tried to lock the subscripted global
with a timeout(for example L ^C(1,2,3):1), the timeout won't be honored
correctly and will take much longer time to expire.
This has been changed.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: System
Platforms: All
DevKey: SML381
Summary: Address a possible opened transaction after
an ECP server interruption.
Description:
This addressed a possible opened transaction after an ECP
server crashed or was forced down and restarted, and client thought it
had already rolled back.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Medium |
Low |
No |
No |
Yes |
Category: System
Platforms: All
DevKey: SML385
Summary: Wait longer (2 minutes) for ECP client to reach the disabled state during Caché shutdown.
Description:
This addressed a possible stranded Cache.exe after Caché
is shut down.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: System
Platforms: All
DevKey: SML386
Summary: Calculate correct lock table size when it is reduced.
Description:
Usually users don't reduce the lock table size. If
the lock table is reduced, it just lowers the water mark, but the used
memory could be greater than the newly reduced size.
This sometimes caused the available space display to show a large
amount of space available (in reality the unsigned form of a negative number).
The calculation was changed to use the currently used space
instead of the maximum. Thus, it won't
get the negative number. But user may see the free size is bigger than
the new lock table size until the lock table space shrinks
sufficiently to honor the new maximum.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: System
Platforms: All
DevKey: SML387
Summary: Address possible stranded DELOCK_PENDING lock after lock is reset on a DCP client.
Description:
On the DCP client system, if a server tells the client
to reset its locks (to the server), and if there are some locks in
client system are in 'DELOCK PENDING' state, they may not be removed
for the client's lock table. This condition has been corrected.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: System
Platforms: All
DevKey: STC458
Summary: Address <UNDEFINED> errors in GBLOCKCOPY when converting old ISM routines
Description:
This change eliminates <UNDEFINED>
errors when doing a GBLOCKCOPY. The error originated from misspelled
variable names.
This only affects older ISM databases when mounted on a Caché system,
and then converted.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Medium |
Low |
No |
No |
Yes |
Category: System
Platforms: All
DevKey: STC459
Summary: GBLOCKCOPY now handles 2-KB multiple volume databases
Description:
If a 2-KB database with more than 1 volume was
automatically set up to be converted to an 8-KB database, then it would
always fail. This is because the re-labelling of the database was not
handled correctly. When the database was later mounted, an error would
occur. This no longer happens.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Medium |
Low |
No |
No |
Yes |
Category: System
Platforms: All
DevKey: STC462
Summary: Address <PROTECT> error during rebuildindex
Description:
When performing an upgrade of a site, if the switch
to disable kills of a top level global is set, then the building of
the routine indexes will fail. This change will set the switch allowing
kills temporarily, then reset it to its former value.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: System
Platforms: All
DevKey: STC468
Summary: Ignore standalone $c(10) in base 64 decoding.
Description:
When decoding a base-64 encoded string, we now
ignore (skip over) any $C(10) characters embedded in the string.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: System.Backup/Restore
Platforms: All
DevKey: LRS685
Summary: Address <ACCVIO> when database size is exact multiple of block size
Description:
Previously, there was an issue in incremental backup that
caused an access violation if an 8-KB database size were an exact multiple
of 488 MB (62464 blocks). This has been addressed.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
High |
Low |
Yes |
No |
Yes |
Category: System.Cluster Specific
Platforms: All
DevKey: JO1724
Summary: Increase the timeout in JRNMARK for cluster operations from 10 to 30 seconds
Description:
The timeout for switching journal files and writing
markers during a cluster backup has been increased to avoid
<READ> errors from the JRNMARK routine.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: System.Journaling
Platforms: All
DevKey: HYY774
Summary: Don't ask questions in starting journaling in QUIETLY mode
Description:
This correction addresses an issue where the user
was being prompted for journaling parameters even when journaling was meant to be started non-interactively (for example, during cluster recovery).
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: System.Journaling
Platforms: All
DevKey: HYY783
Summary: Address an issue that caused jobs to hang on I/O error even when journaling is disabled
Description:
This change addresses an issue where jobs, such as the write daemon
might hang upon a persistent journal I/O error (for example, out of disk
space for journaling) despite the "do not freeze system on journal I/O
error" setting (by default).
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
Yes |
No |
Yes |
Category: System.Journaling
Platforms: 1
DevKey: HYY787
Compatibility: 8
Summary: Update journal handling of certain records
Description:
Addressed a problem where
certain journaling functions could return a "Record address is not valid" error.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: System.Journaling
Platforms: All
DevKey: HYY790
Summary: Address validation of global names in journal restore to support dot syntax
Description:
This addresses an issue where one was unable to select
global names in dot syntax to restore from a journal.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: System.Journaling
Platforms: All
DevKey: JO1726
Summary: Integrate JCONVERT into journal restore utilities & support cluster "JCONVERT"
Description:
^JCONVERT, which is used to generate a common format
journal file for reading with %JREAD into an older version of Caché
or into another InterSystems product, has been updated so that it uses
the standard ^JRNRESTO interface for selecting the journal file(s) to
be processed. This means that a range of journal files can now be
included in a single output file and that ^JCONVERT can be used in a
cluster as well.
For customers who have used the journal conversion in
CLUMENU^JRNRESTO, the functionality provided by ^JCONVERT is the same
as available via CLUMENU.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: System.Journaling
Platforms: All
DevKey: JO1728
Summary: Add cluster wide journal marker log and use this during cluster restore by marker to display list of choices
Description:
The cluster journal restore system has been extended
to allow you to start or end a restore using the journal markers
placed in the journal files by a Caché backup.
This change introduces a new interface for performing cluster journal
restores to perform some specific operations. This interface is
accessed by running CLUMENU^JRNRESTO.
The operations supported are:
- Run the "classic" cluster journal restore. This is the same as
running ^JRNRESTO and saying "Y" when asked if this is a cluster
restore.
- Produce a single common format output file from the cluster journal
files.
This is the same as running ^JCONVERT and saying "Y" when asked if
this is a cluster operation.
JCONVERT takes a journal file, or a set
of journal files from a cluster, and generates an output file which
has a common format. The common format file can be read by
%JREAD. This is useful for restoring journal files across versions of
Caché where the journal files are not compatible (for example, as part of an
"almost rolling" upgrade) or as part of failing back to an earlier
release. It can also be used to write out the journal file in a way
that it can be loaded into another platform such as DSM. The user
interface for this is the same as option 1 above with some additional
questions related to what to include in the output file, the output
file format, etc.
- Restore the journal files after a Caché backup restore. This is the
same as the restore performed by DBREST after a cluster backup restore
and using option 3 in the "Cluster Journal Restore - Setup - Where to Start Restore"
menu from ^JRNRESTO for clusters. One difference between this option
and restoring using ^DBREST is that this option does not start with
the list of databases contained in the backup; the database list must
be entered by the user.
- Restore the journal files using a Caché backup to mark the
starting point. This is similar to #3 above except that it uses
backups which have been performed to designate where to start rather
than backups which have been restored. Functionally they are the same;
both options 3 and 4 use a marker which has been placed into the
journal file by a Caché backup as the starting point. The difference
is in the list of choices for where to start.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
Category: System.Journaling
Platforms: All
DevKey: JO1730
Summary: Address SETCLUSW^JRNMARK so it doesn't leave switch set if quiesce fails
Description:
An issue has been resolved where, if the system
failed to quiesce while adding a marker to the journal files to
support some cluster journal operation, switch 10 could be left set
resulting in a frozen system.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: System.Journaling
Platforms: All
DevKey: TCS003
Summary: Caché cluster journal files to single common file
Description:
This utility provides the ability to take a set of Caché Cluster
journal files and creates a single journal file in
DSM journal file format.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: System.Licensing
Platforms: All
DevKey: RJW739
Summary: LdumpXXX^%LICENSE Message May Display Incorrect Number of Dumped Entries
Description:
The ldumpinuse^%LICENSE and ldumpall^%LICENSE
functions responded with a confusing message if the output file was
unwritable. This change reports a more correct message in this
situation.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: System.StartUp
Platforms: All
DevKey: CFL951
Summary: Do not run startup code more than once
Description:
A test has been added to Caché to prevent running STU more than once.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: System.StartUp
Platforms: All
DevKey: JO1666
Summary: Don't freeze the system on journal errors during startup
Description:
Cache's startup process has been enhanced so that if the journal or
transaction restore process encounters errors such as
<FILEFULL> or <DATABASE> which previously might have
frozen
Caché,
they are now logged the console log and the system is started in
single-user mode.
There is a new COS utility, ^STURECOV, which
can be used to retry the failed operation, bring the system up
or ignore the errors and bring the system up. The journal restore
phase will try to do as much work as possible before they abort.
If a database triggers more than a certain number of errors,
currently set at 3, recovery of that database is aborted and the
database is left dismounted.
For transaction rollback, the first
error in a database causes rollback to skip that database in the
future. All transactions which reference that database will
not be fully replayed and will be stored for rollback during the
recovery process.
More details on the situation follow:
When the system runs into an issue during the dejournaling phase of
startup it will generate a series of console log messages
giving the details of the error. If this occurs,
enter Caché with
c:\cache50\bin\cache -sc:\cache50\mgr -B
and enter the command,
"Do ^STURECOV", for help recovering from the errors.
Starting with the "CACHESYS" directory for the installation set as
your current working directory execute the given command to enter
Caché. The above examples are for Windows. UNIX and OpenVMS have a
slightly different syntax.
Take whatever corrective action is necessary to resolve the
issue. This might involve using ^MSU to extend the maximum size of
the database, it might require freeing space on the filesystem or it
might require using ^INTEGRIT and ^REPAIR to find and correct database
degradation. As you do this work you can use ^STURECOV, option 2, to
retry the journal replay/transaction rollback as many times as
necessary. Any errors encountered, including those from the when the
system was started, can be displayed with option 1. When all the
issues have been corrected, and option 2 runs without any errors,
option 3 will bring the system up in "multi-user" mode.
If you find that you cannot resolve the issue and you want to bring
the system up anyway, option 8 will clear out the information in the
Caché image journal that triggers journal restore and transaction
rollback at startup. The current information will be logged in the
console log. Once this has been done you can use option 3 to start the
system. This facility should be used with care as it is not
reversible.
The ^STURECOV menu looks like (for Windows):
^^c:\cache50\mgr\>do ^STURECOV
Journal recovery options
--------------------------------------------------------------
1) Display the list of errors from startup
2) Run the journal restore again
3) Bring up the system in multi-user mode (includes journal restore)
4) Dismount a database
5) Mount a database
6) Database Repair Utility
7) Check Database Integrity
8) Reset system so journal is not restored at startup
--------------------------------------------------------------
H) Display Help
E) Exit this utility
--------------------------------------------------------------
Enter choice (1-8) or [E]xit/[H]elp?
If for some reason Caché was unable to store the errors during
startup in the ^%SYS() global for STURECOV to display, you may get an
initial screen that looks like this:
^^c:\cache42\mgr\>do ^STURECOV
There is no record of any errors during the prior startup
This could be because there was an issue writing the data
Do you want to continue ? No => yes
Enter error type (? for list) [^] => ?
Supported error types are:
JRN - Journal and transaction rollback
Enter error type (? for list) [^] => JRN
Journal recovery options
--------------------------------------------------------------
1) Display the list of errors from startup
2) Run the journal restore again
3) Bring up the system in multi-user mode (includes journal restore)
4) Dismount a database
5) Mount a database
6) Database Repair Utility
7) Check Database Integrity
8) Reset system so journal is not restored at startup
--------------------------------------------------------------
H) Display Help
E) Exit this utility
--------------------------------------------------------------
Enter choice (1-8) or [E]xit/[H]elp?
At the moment only journaling errors from startup are handled by this
routine. In the future, it may be extended to handle other sorts of
issues
which would have their own recovery menu.
Note that ^STURECOV is only designed for use when the system is in
single-user mode following an error during startup. Using it while the
system is in any other state (for example, is up running normally) may cause
serious damage to your data as it will restore journal information if
you ask it to. This information may NOT be the most current
data. ^STURECOV will warn you that you're using it when you shouldn't
be but it will let you force it to run.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
Yes |
Category: Utilities
Platforms: All
DevKey: CFL935
Compatibility: 8
Summary: Fix runtime overflow error in Server Manager
Description:
A defect has been fixed that caused a runtime
error in the Server Manager with large sized monitors.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Utilities
Platforms: All
DevKey: LFT1115
Summary: ^%SS show wrong number of user jobs.
Description:
^%SS was showing the wrong number of user jobs.
This has been addressed.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Utilities
Platforms: 1
DevKey: LFT1116
Compatibility: 8
Summary: Integrity checker enhancements
Description:
This improves integrity checking in several ways,
the main one being that the integrity checking function will now keep
going after some errors so that more than one error can be reported.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Utilities
Platforms: All
DevKey: RJW676
Summary: Address dump functions in ^%LICENSE on big endian systems
Description:
This corrects an issue in displaying 4-byte integers on
Unicode version of Caché for big endian 64-bit platforms.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
No |
No |
Category: Utilities
Platforms: All
DevKey: TCS005
Summary: Prompt on next line for JRNSTART and JRNSWTCH
Description:
To improve readability, the JRNSTART and JRNSWTCH utilities now read the user input on the next line.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Critical |
Low |
Low |
No |
Yes |
No |
This section provides a listing of changes between Caché
5.0.2
and
Caché
5.0.3.
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
problem 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.
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).
Present Status
The installation defaults have been changed in Caché 4.1.16 and
5.0.3 (and subsequent versions). For more information, please contact the
InterSystems Worldwide
Response Center.
Workaround for earlier releases
Log on as "root", change to the directory where Caché is
installed, and issue the command:
If Caché is not being used for CSP programming, and is not running in
conjunction with a local Apache web server, issue the command:
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 (for example 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 |
This section provides a listing of changes between Caché
5.0.1
and
Caché
5.0.2.
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.
Category: Object.Sys
Platforms: All
DevKey: CDS407
Summary: Fix object reference counting for properties
Description:
This fixes a problem with object reference counting which allowed an
object to stay active even though its system reference count was zero.
This condition happened when the object reference was stored in an
object property that was declared as a non-object data type, such as
%String or
%Integer.
Impact:
Application error
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: Object.Relationships
Platforms: All
DevKey: DLP1018
Summary: Do not add disconnected objects to SaveSet if they don't exist in extent
Description:
Previously, if two objects contained a relationship to each other,
and one of the objects was subsequently changed to delete its side of
the relationship, that deletion may have failed to propagate to disk.
This resulted in the referenced object still being present in the
relationship.
This has been fixed for "cardinality = many" and
"cardinality = children". The possibility of error still exists for
1:1 and M:N relationships.
Impact:
Application error
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
Yes |
No |
Category: System
Platforms: OpenVMS
DevKey: JO1699
Summary: Changed the generation of the network shared memory section name on OpenVMS
Description:
The method for generating the shared memory section names on OpenVMS has
been changed to avoid problems when OpenVMS allows multiple processes to
have the same process name. The prior method used the conflict in
process names to detect that another instance of Caché was running. A
limitation which arises from this change is that the name of the device which
Caché is installed on (for example, where the manager directory resides)
cannot be longer than 16 bytes (excluding the trailing ":" but
including a leading "_"). This should not pose a problem for any sites,
but Caché will refuse to start up after displaying an error message
if this is the case.
Impact:
Production hang
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
Yes |
No |
Category: System.Backup/Restore
Platforms: All
DevKey: LRS675
Summary: Improve mag tape backup performance under NT
Description:
This Caché maintenance kit includes a revision in the backup utility
that significantly improves performance for certain tape devices on
Windows platforms. This may, however, render Caché unable to read
backups from previous maintenance kits and versions.
For tape drives such as a DLT4, the backup block was being written out
as a series of much smaller blocks. This revision significantly
improves performance by ensuring that a single contiguous block is
written, but it also means that a backup generated on the same
hardware before this fix cannot be restored by a version of Caché with
this fix.
Caution:
Backups made on certain kinds of tape drives on previous versions
under Windows might not be able to be restored by a version with this
revision. Customers should make a new backup
immediately after
upgrading and/or retain a Caché instance of the prior production
version.
Impact:
Backup runs slowly
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Moderate |
Moderate |
Yes |
Yes |
Category: System
Platforms: All
DevKey: LRS678
Summary: Fix $ZHOROLOG calculation on fast Windows machines
Description:
A bug that caused the $ZHorolog special variable to return negative
values on a Windows machine with a 2.1GHz processor or faster has
been fixed.
Impact:
$ZHOROLOG is generally used in internal application
timing.
It is unlikely this will affect a production application.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK568
Summary: Generate instance methods of an abstract class
Description:
If you define a class as abstract, Caché now generates all instance methods
as well as class methods. Previously it only generated class methods.
The instance methods are needed so Caché can call these via ##super from
a subclass.
Impact:
##super now works with abstract superclasses
Likelihood |
Risk |
Ad Hoc |
Enhancement |
High |
Moderate |
No |
Yes |
Category: Object.CDL
Platforms: All
DevKey: DPV1993
Summary: Generated sqlcomputecode from Release 4.1 is not compiled correctly
Description:
Certain CDL files that loaded and compiled correctly in Cache 4.1.9 failed to
compile in Cache 5.0.1.
This is due to the table compiler adding an "=" at the end of a line.
This has been fixed.
Impact:
CDL files that did not compile now will.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK702
Summary: Allow class methods of data type classes to be called
Description:
In Caché 4.x, it was valid to call the class methods of a data type
class using the syntax:
Write ##class(=datatype).Method(args)
In Caché 5.0, this results in a class not found error. This is because
we support this syntax at the system level now and the class
descriptor that allows the system code to find where to call was not
generated for data type classes. We now generate the class descriptor
for data type classes so you can call these class methods.
Note
that calling a class method of a data type class is different from
calling the generated method when you use this data type as the type
of a property because this has a different set of parameters. For instance, as a
property of a class you can specify that a string has a maximum length of
50 characters but in the data type class itself it may default to 100
characters. When you call this data type class directly you need to
be aware that this is a different context.
Impact:
Application error
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Moderate |
Low |
No |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: DLP1043
Summary: Hide nested serial columns in SQL projection
Description:
Nested serial columns should be hidden if their properties are also projected to SQL.
This logic existed in the serial property projector but was setting the 'hidden' flag too late
in the process. It now determines correctly when the projection of serial columns should
be avoided.
Impact:
Little; projection of nested serial objects is a new feature.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
Yes |
Yes |
Category: Object.XML
Platforms: All
DevKey: MXT428
Summary: Store XML for empty character streams as "" instead of $c(0)
Description:
When saving an empty element value (<tag />) to a character stream
property, we now store "" in the stream object rather than
$c(0).
When no
element is present, we still store no stream element.
Impact:
Empty streams are now exported to XML in a better way.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Moderate |
Low |
No |
Yes |
Category: Object.XML
Platforms: All
DevKey: MXT433
Summary: XMLExport treats serial references with no data as null (no tag)
Description:
XMLExport was changed to treat references to serial objects as null if all
values in the serial object are "". A serial object with no value set
will now export without any tags. This uses the SQL test for NULL
object.
Impact:
Serial (embedded) object are not included within an XML projection if the object is NULL (i.e., all of its fields are missing).
Likelihood |
Risk |
Ad Hoc |
Enhancement |
High |
Moderate |
Yes |
Yes |
Category: System
Platforms: OpenVMS and Tru64 UNIX
DevKey: SML364
Summary: Improve cluster $INCR performance
Description:
The performance of $INCREMENT in a cluster-mounted database from a
machine other than the cluster master has been dramatically
improved. This is for ECP cluster configurations.
Note: although the risk of this happening as noted
below is high, this is not a compatibility issue. It is a performance one.
Impact:
Customers are unlikely to see any impact, because $INCREMENT
on clusters was fast enough to support thousands of users already.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
High |
Low |
No |
Yes |
Other Changes to Caché
The following list of references summarizes
changes in this version of Caché which are upwardly compatible corrections and
enhancements since the prior version. InterSystems does not expect that these
will affect the normal operation of your existing applications. For ease in
searching, they are grouped according to the area of the system they modify.
If the affected platform is not listed specifically with the change summary,
the change is effective for all supported platforms.
Category: CSP.Tags
Platforms: All
DevKey: MXT399
Summary: Fix compile error for page in Basic that contains csp:search tag
Description:
Code generated by csp:search CSP tag included a
..QuoteJS(...) method
call for pages written in basic. This is a syntax error. The
generated code for a basic page now generates
me.QuoteJS(...).
Impact:
Previously, CSP applications developed using BASIC
would have failed during compilation.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Moderate |
Low |
No |
No |
Category: CSP.Tags
Platforms: All
DevKey: MXT407
Summary: Improve csp:search sorting
Description:
Add support for ascending (ASC) or descending (DESC) sort to the csp:search tag as follows:
The format of ORDER attribute is now comma separated list of fields of
the format
where
propname is the name of
the property and
direction is optionally ASC or DESC. If
direction is
not specified then the default from the SELECT or WHERE attribute is
used.
The format of the WHERE and SELECT attributes is now a
comma separated list of fields of the format
propname alias | direction
where
propname is the name of the property,
alias
is the optional SQL alias to be used and
direction is the default
direction (ASC or DESC) to be used for this property in the ORDER
attribute if not specified there.
Impact:
Improved performance
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Moderate |
No |
Yes |
Category: CSP.Tags
Platforms: All
DevKey: MXT442
Summary: Fix CSP:SEARCH tag problems with aliases
Description:
The following fixes related to the use of alias in the SELECT and
WHERE lists were made:
- For each of the comma separated
properties, treat everything following the first space after the
property name as the alias. Ignore the optional "AS" separator
between the property name and the alias. "name alias" is equivalent
to "name As alias".
- No longer use the alias in the generated
SQL statement, since it is not needed. This change removes any
problems with the use of delimited identifiers in an alias. Delimited
identifiers in the field name already work.
- Change to passing
the order property using the property name rather than the alias.
This change fixes the problem with highlighting of the sort column
and removes the only use of the alias in the SQL statement.
Impact:
The CSP Search page now uses column aliases correctly.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Moderate |
Moderate |
No |
Yes |
Category: CSP
Platforms: All
DevKey: MAK637
Summary: When importing CSP files if no /csp/namespace pick first application that is defined in this namespace
Description:
When importing CSP files, if the application does not match because it
came from another namespace but there was a '/csp/namespace'
application defined for the current namespace, it was imported
there.
This is now extended so even if there is no
'/csp/namespace' it will pick the first alphabetically collating
application that maps to this namespace.
Impact:
Import of CSP files is improved when importing into a different namespace.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
Yes |
Category: CSP
Platforms: All
DevKey: MAK688
Summary: Licensing bug with preserve mode and %session.Login
Description:
If a Preserve=1 process terminated unexpectedly, the license that it
owned would never be released because there was no record of the
license number that it obtained.
Impact:
Gradual reduction of license capacity
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: CSP
Platforms: All
DevKey: MAK709
Summary: Long URLs could cause SUBSCRIPT error in CSP engine
Description:
A page with a long URL could cause a <SUBSCRIPT>
error in the CSP engine at
GetCSPClassName+3^%cspServer when it was
attempting to look this page up in a cache of page-to-class
translations. This was due to faulty logic in detecting when the
subscript was too long to use this global cache lookup.
Impact:
CSP application users would receive an error.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: CSP
Platforms: All
DevKey: MXT443
Summary: Netscape/Java version 1.4.0_03 returns [object] instead of [string] for csp method
Description:
Netscape 7.0.2 with Java plug-in 1.4.0_03 treats the return of a Java
method (that was called using LiveConnect) as an object rather than as
a string. JavaScript for #server is modified to concatenate "" to the
return value (which converts it to a string) in case of object return
from a Java method.
Impact:
CSP #server calls now work better with NetScape v7.0.2.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Moderate |
Low |
No |
No |
Category: Config Mgr
Platforms: All
DevKey: CFL923
Summary: The 5.0 Configuration Manager was localizing the Yes/No strings in 4.1 configuration files
Description:
A bug has been fixed where a 5.0 or later Configuration Manager was
localizing the Yes/No strings when editing a 4.1 configuration file. Such
unwanted localization prevented recognizing the expected Yes/No
attributes.
Impact:
The Configuration Manager user interface would
display inappropriate characters in non-English locales. There was no risk to production.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Moderate |
Low |
No |
No |
Category: Control Panel
Platforms: All
DevKey: CFL919
Summary: Fix namespace name truncation
Description:
This fix corrects the display of long namespace names which were
previously truncated.
Impact:
Cosmetic improvement
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: Documentation.DocBook Application
Platforms: All
DevKey: GAB007
Summary: Add search paths to DocBook application
Description:
The undocumented global,
^%SYS("DOCBOOK","SOURCE"), previously held
the default location where the documentation sources could be found.
This has been generalized to include a list of such directories. Its
use in loading documentation is also now described.
Impact:
Users who are loading their own content into the
DOCBOOK namespace will see load failures until they re-arrange their
global structures describing the source directories.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Moderate |
Low |
No |
Yes |
Category: Documentation.DocBook Application
Platforms: All
DevKey: GAB008
Summary: Correct errors in DocBook.Utils.XMLExport facility
Description:
This corrects two errors found while attempting to use the XMLExport method of DocBook.Utils.
First, an incorrect reference to a property in one of the DocBook classes (refentry) was corrected.
Prior to this, attempts to export reference material as XML would result in a
<PROPERTY DOES NOT EXIST> error.
Second, XMLExport used to generate a reference to the XML stylesheet provided
by SoftQuad for DocBook. This is vestigial since the application no
longer uses this facility. It has been removed.
Impact:
Attempts to export documentation as XML files will
now worked where previously they had failed.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
High |
Low |
No |
Yes |
Category: Explorer
Platforms: All
DevKey: CFL921
Summary: Fix crash in class import
Description:
A problem involving the import and compile of a large number of
classes has been fixed. Previously, this could result in the error
Run-time error '91': Object variable or With block variable is not set
Impact:
Developers importing XML might receive an error.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
Yes |
No |
Category: Installation.Windows
Platforms: Windows
DevKey: ALE206
Summary: Improve consistency checking among install options
Description:
This change corrects a situation involving resetting of certain component
selections during installation.
This affected Pentium 4 specific components as well as CSP and WebLink
Web server specific modules. Prior to this change, the installation program ignored the
user's choice
to install or not install web server specific modules.
It allowed a user to select or deselect these modules, but it
installed modules
for all detected Web servers regardless of the user's selection.
Furthermore, when the Web server was not detected, install didn't try
to
install these components even when they were selected by the user.
This change
does not allow users to select components for web server modules if the
corresponding web server is not detected. Users still can deselect a
particular CSP/Weblink module, which can be useful if there are
two or more web servers installed and users don't want to install CSP/Weblink for all of them.
Impact:
Install now honors the users wishes more closely.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Moderate |
Low |
No |
No |
Category: Installation.Windows
Platforms: All
DevKey: ALE188
Summary: Explorer and Control Panel now work properly from Start menu in download kits
Description:
The default configuration name for kits downloaded from our Web site is
CACHEWEB, but the
shortcuts created referred to CacheWeb instead. Caché Control
Panel and Explorer could not be started because the Windows Start menu is case-sensitive
in this area.
Impact:
Minimal: The Cube still works in the presence of
this fault.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
Yes |
Yes |
Category: Installation.Windows
Platforms: Windows
DevKey: ALE202
Summary: Client-only installation on Pentium4 system installs server components too
Description:
When proceeding with a client-only installation of Cache 5.0.1 on Windows 2000,
the server side components were also installed. This has been fixed.
Impact:
Increased disk usage and access on a client PC, as
well as possibly having unauthorized Caché servers deployed.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
High |
Low |
Yes |
No |
Category: Installation
Platforms: All
DevKey: ALE191
Summary: Load and execute cbootuser.rsa routine if it is present on installation media
Description:
Install now checks for presence of file "cbootuser.rsa" on the
installation media in the same directory as cboot (NT\Install in case
of Windows). If this file exists, install loads it and executes routine
"cbootuser". This allows customers to execute code for such things as creating databases,
loading globals/routines, and so on every time Caché is
installed from this media.
Please note that at the time this routine
is executed no namespaces are defined yet and no object code can be
used.
$zutil(5) can be used to switch between implied namespaces.
Impact:
None
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
Yes |
Category: Misc
Platforms: All
DevKey: TR960
Summary: Correct reverse $Order with ECP
Description:
Reverse $order over ECP could
return a <DATABASE> error.
Impact:
An application user may receive a false
<DATABASE> error.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
Yes |
No |
Category: Networking
Platforms: UNIX, OpenVMS
DevKey: DAS449
Summary: Change Default Packet Size to Avoid Fragmentation of UDP Packets
Description:
Previously, the default packet size on OpenVMS and UNIX systems was set to 3600
to improve performance. Because some networks do not perform fragmentation and
re-assembly of packets, this causes DCP clients to timeout and display the
<Server... is down...> message. The fragmentation problem may be due to an
operating system or router setting.
To correct this problem, the default maxudppktsiz parameter on all platforms is
now 1468, which is the maximum packet size sent by Caché. This obviates the
previous need to fragment packets. Note that the Caché Configuration Manager
allows you to increase the maxudppktsiz to a maximum of 3600, which provides a
small performance improvement on networks which know how to perform
fragmentation properly.
Impact:
The application user may see an annoying, yet benign, message <Server is Down>.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Moderate |
Low |
No |
Yes |
Category: Networking
Platforms: All
DevKey: GK199
Summary: Modify ECP client read daemon.
Description:
This change prevents a possible race condition in
between DB state changes (such as dismount) and client cache cleanup.
Impact:
ECP may fail.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: Networking
Platforms: All
DevKey: GK201
Summary: Fixed ECP array handling
Description:
In certain rare circumstances, ECP referenced an array out of bounds.
On all platforms this array is padded by the
platform compiler, and the problem wasn't exposed unless things were
relocated in memory.
Now if things are
relocated in memory this will not cause a problem.
Impact:
ECP may fail.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: Networking
Platforms: All
DevKey: GK209
Summary: Enable Caché to start even if network initialization fails
Description:
When the network takes too long to initialize, the write daemon could fail to start on a system
with a lot of buffers configured. This has been corrected.
Impact:
Caché may fail to start.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: DLP983
Summary: EXTERNALSQLNAME was not properly referenced for embedded objects
Description:
This change corrects the spelling of EXTERNALSQLNAME everywhere it is
used. This property parameter is used to define the name of a column
projected to an external SQL DB.
Impact:
An ODBC query may fail.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: DLP984
Summary: Project multiple levels of embedded object properties to SQL
Description:
When a persistent class contains a property whose type class is a
serial class (embedded object), the properties of the property's type
class are projected to SQL as columns. The name of the projected
column is the <container column>_<serial column>.
In versions prior to
5.0.1 this projection is restricted to one level of embedding. In 5.0.1 multiple
levels of embedding are projected to SQL. The name of the projected
column follows the same form as before but the <container column> can
also be a column projected from a serial class.
For example, Class
City is serial with properties City, State, Country, and
PostalCode. Class Address is serial with properties Street (type
%String) and City (type City). Class Person has a property, Home as
Address.
Prior to this change, only Home_Street and Home_City would be
projected as columns to SQL. Now Home_Street, Home_City (hidden),
Home_City_City, Home_City_State, Home_City_Country and
Home_City_PostalCode are projected.
Impact:
Enhance the projection of multi-level embedded
object properties.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
High |
Medium |
No |
Yes |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK640
Summary: Remove bad formal spec from CDL load
Description:
Old CDL files may have an extra '()' around the formal
specification of methods due to an error in a previous version of
Caché. These CDLs were not compiling because of the extra '()' in the
formal spec. We now strip the extra '()' when the CDL is loaded to
avoid this issue.
Impact:
Impedes a developer from loading certain CDL files
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK664
Summary: %SQLQuery methods retaining SQL as comments
Description:
This change makes the class compiler use the same flag to decide if it wants to
retain SQL source in the INT code as the standard MAC compiler.
Impact:
Debugging object applications which use Query methods would be a bit more difficult
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK665
Summary: Optimize pass of class compiler produces wrong code
Description:
If you create a class with the following properties:
Property Array As %String [ Collection = array ];
Property Index As %Integer;
Then create a method:
Method Test()
{
Write ..Array.GetAt(..Index)
}
If you compile this with full
optimizations on, then the code generated from this Test method will
be incorrect. The generated code attempts to find the '..Index' inside the '..Array'
object rather than in the current object. Now Caché inserts the
optimization correctly.
Impact:
Class compiler optimizer now generates correct code for collections.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK697
Summary: Expression method bracketing problem
Description:
If an expression method looked like '(a=1)||(a=2)' then the class
compiler would substitute it without adding any additional brackets,
so if the code was:
It ended up looking like:
It was not detecting that even
though this expression starts and ends with a bracket. It needs an
additional bracket so now it will substitute the expression:
Write '((var=1)||(var=2))
Impact:
Application error
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Moderate |
Low |
No |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK717
Summary: Correct ##super for generator methods
Description:
When you use '##super' the first thing it does is find where this
method was originally implemented and looks for the superclass to this
class. However, if the method is a generator method then the class is
'implemented' at every level so just look for the superclass to the
current class.
Impact:
##super directive now works with method generator methods.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: Object.EJB
Platforms: All
DevKey: JSL1076
Summary: Allow CMP deployment to follow BMP deployment
Description:
We deleted the jar from the JBoss deployment directory. This allows
CMP deployment to follow BMP deployment.
Impact:
You can now use CMP EJB deployment after using BMP deployment.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
Yes |
Category: Object.Java
Platforms: All
DevKey: JSL1066
Summary: For CMP generation, fix JNDI name in reference accessor in serial classes
Description:
When CMP generation generates support for a Caché serial class, if
the serial class has a "persistent" (a reference), the JNDI name of
that reference is generated incorrectly. This changes the generation
of the JNDI name to prefix BEANNAME before it.
Impact:
EJB CMP generation is improved for serial classes.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: MAB170
Summary: Memory leak in Caché / Java object connection
Description:
Opening and closing Java Binding connection using method
CacheDatabase.getDatabase(java.sql.Connection) caused memory
leaks. This is fixed now.
Impact:
Java-based applications may crash due to
insufficient memory.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1084
Summary: Support nested serials in EJB projection
Description:
We now support nested serials.
Suppose we have P (persistent) containing S1 (serial)
containing S2 (serial). Let's suppose they are all in package Pack1.
You might think that you access S2 from S1 but you
access it from P. For instance, you will have a dependent object
Pack1.EJBS2. The values in this dependent object for remote EJB
object p that is a proxy for Pack1.EJBP can be obtained and modified through:
P.get_S1_S2()
P1.set_S1_S2(s2)
in the above s2 is a dependent object instantiating Pack1.EJBS2.
You can also use the following:
P.get_S1().get_S2()
and
s1 =P.get_S1();
s1.set_S2(s2); // change is only in memory
P.set_S1(s1); // change is now in the database
Remember, you must always go through proxy for a persistent
(projection of a persistent) to
actually set value on Caché. Just working with serials alone is just an in memory operation.
Impact:
EJB projection now works with nested serial objects.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
Yes |
Category: Object.LanguageBindings
Platforms: All
DevKey: JSL1087
Summary: Corrected errors in EJB Wizard nested serial support
Description:
Nested serials need to be loaded in serial constructor even though they may be marked as "hidden".
Also the logic for projecting fields does not properly set the fields of a serial set accessor.
Users should take note of the fact that changing
a field from hidden to non-hidden or vice-versa
requires the EBJ code to be regenerated and recompiled.
In general, if you change any
characteristics of your classes you should regenerate EJB support.
Though it seems as if changing a field from hidden to non-hidden, or
vice-versa, will have no affect on your EJB code working,
Caché relies on the fact that changes in the description of the class
require it to be fully regenerated.
Impact:
Application error
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: Object.Library
Platforms: All
DevKey: MAK714
Summary: %Net.FTPSession doesn't go back to use $IO in one case
Description:
In
%Net.FTPSession in the method
readResponse(), if an error condition
occurred, then the current device was not reset. This left it as the TCP/IP
device to the ftp server.
Impact:
Application error.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: Object.Library
Platforms: All
DevKey: MAK715
Summary: "-d" flag do not work for %Routine.Compile on error
Description:
Calling the Compile method on
%Routine class with the '-d' flag to
prevent anything from being displayed to the current device was not
working. If there were errors with the routine it was still displaying
them. This change now honors the '-d' flag.
Impact:
None
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: Object.Library
Platforms: All
DevKey: MAK729
Summary: Add extract of directory name from path
Description:
This change adds two class methods to
%File:
- GetDirectoryLength(dirname), which returns
the number of pieces in this directory name, for example
'c:\temp\mysub' has three pieces on a Windows environment.
- GetDirectoryPiece(dirname,piece,.fullpath,.isdirectory), which returns the
asked for piece from the directory name.
For example, using the 'c:\temp\mysub'
example it will return:
Piece Return FullPath IsDirectory
1 c: c: 1
2 temp c:\temp\ 0
3 mysub c:\temp\mysub 0
Impact:
None
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: Object.Soap
Platforms: All
DevKey: JN107
Summary: %SOAP.WSDL.Reader Should Generate ClassMethods
Description:
A restriction on the use of Webmethod as a keyword of a class method
only has been introduced, but the Reader had not been updated to
reflect this change. The reader now generates class methods instead of
instance methods properly.
Impact:
None
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
Yes |
Category: Object.Soap
Platforms: All
DevKey: MXT432
Summary: Support WebMethod keyword for queries in a Web service class
Description:
The keyword WebMethod is now supported in queries specified in a
subclass of %SOAP.WebService.
A Web method, callable via SOAP,
will be created that has the same input arguments as the query that
returns the typed dataset associated with the query.
In addition,
if the Web service is pkg.class and the query is named QueryName, then
the class pkg.class.QueryName is created as a subclass of %XML.DataSet
that is typed and represents the query.
An example of the use of
WebMethod for a query has been added to the SOAP.Demo Web service
sample.
Impact:
None
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
Yes |
Category: Object.Soap
Platforms: All
DevKey: MXT435
Summary: Support property parameters for queries with WebMethod
Description:
The SoapBindingStyle and SoapBodyUse property keywords are now
supported. They will work just like these keywords for methods with
WebMethod keyword.
The SoapNameSpace property parameter may only
be used for Web clients.
Impact:
None
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
Yes |
Category: Object.Soap
Platforms: All
DevKey: MXT438
Summary: Improve error messages for Soap method keywords.
Description:
This change improves error messages for SoapBodyUse, SoapBindingStyle and
SoapNameSpace method/query keywords by adding the method or query name to
message.
Impact:
Cosmetic change
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
Yes |
Category: Object.Soap
Platforms: All
DevKey: MXT444
Summary: Allow LOCATION in %SOAP.WebClient
Description:
Now we give an error if LOCATION does not begin with http:// or
https://. Note that the use of https still requires an external
tunnel.
Impact:
Debugging becomes easier with the added information.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
Yes |
Category: Object.Soap
Platforms: All
DevKey: MXT445
Summary: Clean up variables that are left defined by %XML.Adaptor
Description:
An attempt to compile a subclass of
%XML.Adaptor was leaving defined
variables behind. Appropriate New commands were added to the method
generator code so that variables are cleaned up properly.
Impact:
Extra variable are no longer left after XML export.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
High |
Moderate |
No |
No |
Category: Object.Storage
Platforms: All
DevKey: DLP1027
Summary: Fix the name of the virtual class generated when projecting a collection as a child table
Description:
Previously, under rare circumstances, compiling an internal "virtual" class could
cause a child table to be projected to SQL. This has been corrected.
Impact:
None
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: Object.Storage
Platforms: All
DevKey: DLP1028
Summary: BitMap Extent Index not built on Create Index
Description:
When a bitmap index is added to a table, the results of subsequent
queries would often be incorrect. The bitmap extent index is not
automatically built when the first bitmap index is added to a
table.
%BuildIndices has been updated so that anytime a bitmap index
is built and no data exists in the bitmap extent index then the bitmap
extent index for that class is automatically built along with the
bitmap extent index for each subclass.
Impact:
The SQL query may return incorrect results.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Moderate |
Low |
No |
No |
Category: Object.Storage
Platforms: All
DevKey: DLP1031
Summary: Fix nested serial mapping when serial stored in node
Description:
This corrects a problem that occurs when a property is stored by itself in a
global node ('node' structure). This commonly occurs when a collection
is stored in a subnode structure and the resulting structure is
projected to SQL as a child table. The error reported is
ERROR #5502: Error compiling SQL Table ...
Impact:
The application will not compile.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Moderate |
Low |
Yes |
No |
Category: Object.XML
Platforms: OpenVMS
DevKey: JCN401
Summary: Always open XML files as Stream regardless of default file settings on OpenVMS
Description:
On OpenVMS, remotely exporting XML files via Caché Studio and reimporting them
caused routines to be stored all on one line, and then fail to
compile.
This is corrected.
Impact:
Annoys developers
Likelihood |
Risk |
Ad Hoc |
Enhancement |
High |
Low |
No |
No |
Category: Object.XML
Platforms: All
DevKey: MAK698
Summary: $SYSTEM.OBJ.Load for Globals get MAXSTRING
Description:
If you exported a global using the $system.OBJ.Export entry point that
was 32767 characters in size or near to this limit, and then you subsequently
imported it you may get the error message:
<MAXSTRING>characters^%occSAX in c:\test.xml at line 581 offset 1
This was because a variable was not cleared correctly after a global
node was imported. This is now fixed.
Impact:
Annoys developers
Likelihood |
Risk |
Ad Hoc |
Enhancement |
High |
Low |
No |
No |
Category: Object.XML
Platforms: All
DevKey: MAK704
Summary: XML Import/Export incompatibility
Description:
When exporting an expression method, export-to-XML formats it on
a single line rather than inserting a Cr/Lf after the start of the
CDATA for the method body code before the first line of code. This is
so classes exported on Caché 5.0.1 will import correctly on Caché
5.0.0.
Impact:
Class definitions exported from v5.0.1 can be loaded onto v5.0
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Moderate |
Low |
No |
No |
Category: Object.XML
Platforms: All
DevKey: MXT431
Summary: Extend %XML.DataSet to support .Net typed datasets
Description:
When a %XML.DataSet is returned from a Web service, it projects as a
Microsoft .Net dataset. Previously, only untyped datasets were
supported. This change adds support for .Net typed datasets which
include type information in the WSDL file for a Web service. This
additional information allows Visual Studio .Net to create a typed
dataset that supports IntelliSense.
A subclass of %XML.DataSet
will produce a typed dataset if the NAMESPACE parameter is specified,
and the CLASS and QUERY parameters are overridden to specify the query
underlying the dataset.
An example of the return of a typed
dataset was added to SOAP.Demo sample.
Impact:
Allows Visual Studio .Net to create a typed dataset that supports IntelliSense
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
Yes |
Category: Object.XML
Platforms: All
DevKey: MXT434
Summary: Improve runtime message if referenced class is not XML enabled.
Description:
A class that is referenced by a property in an XML enabled class must
be XML enabled. Previously, if the referenced class was not XML
enabled, then an unclear <METHOD NOT FOUND> error was given. This was
replaced by an error message stating the problem more clearly.
Impact:
None
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Moderate |
Low |
No |
Yes |
Category: Object.XML
Platforms: All
DevKey: MXT436
Summary: Support the enumeration facet for schema defined simple types
Description:
When mapping Caché simple types to XML schema types in "literal", use
the enumeration facet to represent the Caché VALUELIST datatype
parameter. XMLImport already supports type checking based on the
VALUELIST. This change modifies XMLSchema to output the enumeration
facet to represent the VALUELIST.
Enumerations are not supported
in schemas that are in "encoded" format, since Microsoft Web services
do not support enumerations for BodyUse="encoded".
Impact:
Classes now produce XML Schemas containing more information.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
Yes |
Category: Object.XML
Platforms: All
DevKey: MXT437
Summary: Support optional indentation of XMLExport output
Description:
Support optional indentation of XMLExport output as determined by the
format argument of the XMLExport call. The default indentation
behavior is the current behavior of outputting the XML as one line
with no added whitespace.
Adding "indent" to the format
argument causes the XMLExport output to be indented. "indent" should
be separated by a comma from literal/encoded part of the format. The
indentation characters to be used can be specified by enclosing the
indentation string to be used in parentheses following the "indent" in
the format argument. If not specified, the default indentation
characters string is two spaces.
Examples: To output the
object referenced by oref with the default two space indentation:
set sc=oref.XMLExport(,",indent")
To output the object referenced by oref with three space indentation:
set sc=oref.XMLExport(,",indent($c(32))")
Note that passing the space ($c(32)) as the argument increments the size
of the indentation; it does not specify the size of the indentation.
To output the object referenced by oref with tab indentation:
set sc=oref.XMLExport(,",indent("_$c(9)_")")
Impact:
Cosmetic improvement to generated XML.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
Yes |
Category: Object.XML
Platforms: All
DevKey: MXT441
Summary: Add Rewind method to %XML.Reader
Description:
Add a Rewind method to
%XML.Reader that when called will clear
correlates and restart reading from the beginning of the XML document.
Correlate must be called again after the Rewind.
Impact:
%XML.Reader is easier to use.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
Yes |
Category: Object
Platforms: All
DevKey: MAK718
Summary: $system.OBJ.Load for XML file always writes to principal device
Description:
When you load an XML file, the current device was changed to the
$PRINCIPAL device rather than keeping the device that the user
specified. This now remembers the correct device.
Impact:
Class import restores the principal device correctly.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: Object
Platforms: All
DevKey: MC410
Summary: add SOAP keywords to query
Description:
Class Query definitions now have the same SOAP-related keywords as do
methods.
This allows you to control the SOAP-binding of class queries.
Impact:
Class queries support more SOAP options.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
Yes |
Category: SQL.DDL
Platforms: All
DevKey: DPV1934
Summary: Drop Foreign Key Fails when PKEY=IDKEY
Description:
Dropping a Foreign Key that points to a mapped table failed with
following error message:
[SQLCODE: <-400>:<Fatal error occurred>]
[Cache Error: <<LIST>AlterColumn+66^%apiDDL>]
[Details: <Serverr>]
This has been corrected.
Impact:
DROP FKEY now works correctly with SQL tables mapped to legacy structures.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Moderate |
No |
No |
Category: SQL.DDL
Platforms: All
DevKey: DPV1976
Summary: DDL: Fix ALTER TABLE Create Foreign Key does not check existing rows
Description:
The sequence:
create table P(a integer primary key, b varchar(20))
create table F(one integer primary key, two integer)
insert into F(one,two) values (1,1)
alter table F add constraint toP foreign key(two) references P(a)
works up to Caché 4.1.6,
but fails to properly return an error in Caché 4.1.9 as well as in
Caché 5.0.1. This now returns an error -127
<FOREIGN KEY Constraint
failed referential check upon creation of the constraint>.
Impact:
No constraint check performed
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: SQL.GateWay
Platforms: All
DevKey: MIT239
Summary: Introduce logging and SQLCODE in the SQLGatewayConnection class
Description:
This change make it possible to log all the calls to SQLGateway in
^%SYSLOG global. It was done earlier for external tables. Now it
works for the SQLGatewayConnection class as well.
Impact:
Debugging was more tedious
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
Yes |
Category: SQL.JDBC
Platforms: All
DevKey: MAB176
Summary: Fix "*=" syntax not being parsed correctly in JDBC
Description:
The JDBC parser was incorrectly reporting the operator "*=" as an
error. This has been fixed.
Impact:
The JDBC driver correctly recognizes legacy JOIN syntax.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: SQL.JDBC
Platforms: All
DevKey: MAB167
Summary: Bug fixes in JDBC
Description:
This change corrects several defects involving getting data values back from ResultSets.
These include:
- You cannot use ResultSet.getTimeStamp(int) to read DATE.
- ResultSet.getBytes() fails when an integer is stored.
- ResultSet.getAsciiStream().read() returns negative values for Russian characters.
Impact:
In certain cases JDBC did not return data correctly.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: SQL.JDBC
Platforms: All
DevKey: MAB168
Summary: Preparsing of schema _SYSTEM fails
Description:
JDBC preparser did not recognize names, starting with '_'. This has
been fixed.
Impact:
Impeded developers
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Moderate |
Low |
No |
Yes |
Category: SQL.ODBC
Platforms: OpenVMS
DevKey: JCN385
Summary: Finish CacheODBC port and build IODBC on OpenVMS
Description:
This change ports CacheODBC to OpenVMS and provides a working IODBC.exe driver
manager for shipping with our ODBC driver.
Impact:
No ODBC access from OpenVMS client
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Moderate |
No |
Yes |
Category: SQL.ODBC
Platforms: OpenVMS
DevKey: JCN386
Summary: Port SQLGateway to OpenVMS, Rebuild IODBC with 3.0 ODBC API
Description:
Ported SQLGateway for OpenVMS platform. Rebuilt IODBC to include 3.0 ODBC
API.
Impact:
No ODBC access from an OpenVMS client
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Moderate |
No |
Yes |
Category: SQL.ODBC
Platforms: Windows
DevKey: JCN389
Summary: Fix for #Deleted problem in Access when using numeric column as primary key
Description:
Microsoft Access does not handle numeric primary keys in a consistent
way when comparing their values. Normally Access will perform an
internal comparison on the first ten primary keys..If it does not
match their internal representation, it returns a #Deleted value for a given
row.
Our ODBC driver consistently formats Numeric data converted
to SQL_C_CHAR or SQL_C_WCHAR as 0.00 if the scale is 2, whereas
SQLServer returns the same data as .00. While returning .00 will fix
the Access #deleted issue, but it should only be done for the value 0.
Since
SQLServer does not handle negative numbers in Access, our
convention of returning a leading zero before the decimal place works
in Access.
Why Access considers 0.00 to be different than 0 or .00 appears
to be a bug unique to Access. The driver will provide a
work around by returning ".00" rather than "0.00". While this is a
slight formatting change only for the 0 value, it seems a better
alternative which allows the use of numeric primary keys in Access.
Impact:
Incomplete query results
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: SQL.ODBC
Platforms: All
DevKey: JCN390
Summary: Add correct names for driver/logs on UNIX and OpenVMS platforms
Description:
Driver names reported in the log and to SQLGetInfo were correct for
Windows, but did not reflect the correct executable name on OpenVMS and
UNIX platforms.
Impact:
Impeded developers
Likelihood |
Risk |
Ad Hoc |
Enhancement |
High |
Low |
No |
No |
Category: SQL.ODBC
Platforms: All
DevKey: JCN391
Summary: Poor error message if ODBC DSN contains invalid namespace
Description:
Added "Invalid Namespace" message for to handle the case where you try
to connect to an ODBC DSN (on Windows) that contains an invalid
namespace.
Impact:
None
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Moderate |
Low |
No |
Yes |
Category: SQL.ODBC
Platforms: All
DevKey: JCN393
Summary: memory leak with streams and ADO
Description:
When ADO is used to insert streams into Caché, there was a memory leak that was corrected by
this fix.
Impact:
Gradual loss of available memory on Windows client
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: SQL.ODBC
Platforms: All
DevKey: JCN394
Summary: Select statement with Stream field fails
Description:
Characters stream fields return a default display size of "2147483647"
which causes the following printf formatting commands to core dump and
fail:
printf("%-*s", (int)display_size, pcolname);
Since it
does not hurt printf to format these with a smaller value for
display_size, Caché uses the MAX_DATA (1000) in the code to prevent this
condition from happening.
Since this is sample code only, and
users must be careful when working with character and binary streams
as their default display size is huge, and they will have to customize
applications to read this type of data in chunks.
Impact:
Application error
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: SQL.ODBC
Platforms: All
DevKey: JCN396
Summary: Allow passing of Username with no password
Description:
When a user was created in SQL with no password, there was no way for that person to
log in via the ODBC driver.
Impact:
Impeded development
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: SQL.ODBC
Platforms: All
DevKey: JCN399
Summary: Fix PutParameter used in Access with SQL_C_WCHAR data
Description:
This corrects a problem with a "string" field that has maximum length 32000.
Inserting a new row inserts null characters in the field after each
character when stored in the Caché global. For example "ABC"
becomes:
Impact:
Application error
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: AK560
Summary: Use temp-file for correlated subqueries
Description:
We now optimize correlated subqueries by saving the subquery result.
If the same correlated field values come up again, the subquery result
can be retrieved without having to run it again.
Impact:
Query may use excessive amounts of cpu time
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Moderate |
Yes |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: AK562
Summary: Apply correct processing to IN parameters
Description:
Applied to IN the same logic used for binary operators such as '=',
regarding when one argument is a field and the other is a constant/
host-variable. This normally applied only to fields of type
%Date/%Time, but resulted in string operations sometimes giving
incorrect results when attempting to find substrings.
Impact:
Substring processing is now more accurate
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Moderate |
No |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: PVA051
Summary: Queries can give the wrong answer for certain OR conditions when multiple index strategy used
Description:
In certain cases, if multiple indexes are used to satisfy an OR condition, the wrong answer could be returned.
In addition, Caché now optimizes the application of IS NULL conditions to
indexes in the case when multiple indexes are used.
Impact:
WHERE clauses involving complex conditions may give different results depending
on whether an index exists.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
High |
No |
No |
Category: SQL
Platforms: All
DevKey: DPV1977
Summary: Add SERIAL_FIELD column to %Library.SQLCatalog.SQLFields catalog query
Description:
A SERIAL_FIELD column has been added to the
%Library.SQLCatalog.SQLFields(...)
catalog query. This column contains "Yes" of the field is serial
type,
otherwise it is "No". Please refer to the class documentation for an
updated description.
Impact:
The SQLFields query in %Library.SQLCatalog now has
an additional column
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
Yes |
Category: SQL
Platforms: All
DevKey: BJB262
Summary: Fix typo in backport of AK501
Description:
This fix corrects a problem where Joins could fail at runtime with an
undefined error.
In this particular case, there was incorrect
code generated for an uncollated field retrieved before a collated
field resulting in an <UNDEFINED> error at run-time.
This
occurred with conditions such as <const>=*<field> when the field has a
collation, and the outer join cannot be satisfied by an index.
Impact:
Query compilation may fail
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
Yes |
No |
Category: SQL
Platforms: All
DevKey: DPV1894
Summary: New some variables in SQL Utilities/APIs
Description:
This corrects a problem where variables which had been new'ed were not removed
after their use was over.
Impact:
Application error
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: SQL
Platforms: All
DevKey: DPV1900
Summary: Fix copy (type 2) in copy^%qaqcpr to get offset from proper table
Description:
This corrects an error which occurred when the parent reference field is
specified in a position other than first in the IDKEY index of a child
table.
Impact:
Application error
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: SQL
Platforms: All
DevKey: DPV1969
Summary: Fix count(*) issue
Description:
Fixed a problem where the addition of a
count(*) column to a query
resulted in the returned ResultSet ignoring an "ORDER BY" clause.
Impact:
Queries may run slower
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: SQL
Platforms: All
DevKey: DPV1973
Summary: SQL Maps: Fix use of {<n>D} in NEXT code and {Field}_{Field2} in Subscript expression
Description:
Two bugs have been fixed in
%CacheSQLStorage:
- The {<n>D} (for example {2D}) reference was not recognized properly as a access level
when used in Over-ride NEXT subscript code. This has been fixed.
- A subscript expression like {table.field}_{table.field2}
incorrectly gave an error saying the field did not exist. This has
been fixed.
Impact:
Application error
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: SQL
Platforms: All
DevKey: PYD094
Summary: Return column datatype instead of VARCHAR for IFNULL
Description:
The result of
{fn IFNULL(<column>,val)} always was of datatype
SQL_VARCHAR. Now, Caché returns the datatype of <column> correctly.
Impact:
Impedes developer
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
Yes |
No |
Category: SQLManager
Platforms: All
DevKey: PYD093
Summary: SQLMigration, INFORMIX not null columns
Description:
When Importing table definitions from Informix, all the columns were
marked as NOT NULL (data for these columns was required).
Impact:
Impedes developer
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
Yes |
No |
Category: SQLManager
Platforms: All
DevKey: YSD576
Summary: SQLManager: Change the Owner of a view in SQLManager.
Description:
SQL Manager has been changed to allow changing the ownership of a
view.
Impact:
None
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
Yes |
No |
Category: SQLManager
Platforms: All
DevKey: YSD583
Summary: SQL Manager: Link table name with space or other characters in it
Description:
In Link Table wizard, if the user enters a new table name that
contains spaces or other characters, then the wizard gave an "Invalid table name"
error message. This is fixed.
Impact:
Impedes developer
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: SQLManager
Platforms: All
DevKey: YSD584
Summary: SQL Manager: Japanese characters garbled when printing to a printer
Description:
SQL Manager now sends Japanese characters to the printer properly.
Impact:
Annoys SQL Manager users
Likelihood |
Risk |
Ad Hoc |
Enhancement |
High |
Low |
Yes |
No |
Category: Studio
Platforms: All
DevKey: AGC214
Summary: Caché Studio XML parser - don't loop on "<!"
Description:
This corrects a problem in Caché Studio where the XML parser would loop upon finding
a "<!" sequence.
Impact:
Annoys developer
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: Studio
Platforms: All
DevKey: DVU673
Summary: Saving Color Table
Description:
This corrects a problem in Caché Studio where Studio failed to remember the
color table. However, if
studio A edits the table and
studio B is
already open,
studio B will continue to use the old table, because the
table is saved in the registry and there are no notifications between
them of the change.
Impact:
Annoys developer
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: Studio
Platforms: All
DevKey: DVU679
Summary: Correct tab order in File Open Dialog
Description:
This fixes problems in Caché Studio involving losing focus on dialog boxes
and buttons in various dialogs.
Impact:
Annoys developer
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: Studio
Platforms: All
DevKey: MAK662
Summary: Caché Studio becomes confused by 3rd line of an INT file
Description:
This change improves detection of an INT routine that is generated by a class compile.
The change prevents a case where the compiler determined an INT was created by a
class when it was not, and it attempted to recreate the class
descriptor which lead to an error message that the class was not valid.
Impact:
Impedes developer
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: Studio
Platforms: All
DevKey: MAK690
Summary: For export and import, directory names are concatenated on OpenVMS
Description:
On OpenVMS, the directories appear as 'ABC.DIR;1' files and so were not
being displayed in the
%File class correctly. In addition, they were
not reporting themselves as directories in the
##class(%File).DirectoryExists(dir) method. Also the parsing of the
filename did not add '.' between the pieces of the name. This has been fixed.
Impact:
Impedes developer
Likelihood |
Risk |
Ad Hoc |
Enhancement |
High |
Low |
No |
No |
Category: Studio
Platforms: All
DevKey: MAK713
Summary: Reduce the number of round trips to the server when loading classes
Description:
When opening a class, Caché Studio used to make a large number of extraneous
requests to the server. For example, opening
%ResultSet would make 277
request when only 7 were required. These unrequired request are now
avoided, which in the case of
%ResultSet means it only makes 7
requests.
Impact:
Annoys developer
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Moderate |
Low |
No |
No |
Category: Studio
Platforms: All
DevKey: MAK732
Summary: Variable was not new'ed in %RoutineMgr class
Description:
Calling the genPattern class method of the
%RoutineMgr class left
variable 'tN' after the method completed because it was not new'ed.
Impact:
Application error
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: Studio
Platforms: All
DevKey: RAW346
Summary: Caché Studio editor: fix handling of Ctrl/+, Ctrl/-
Description:
There were two problems fixed:
- Ctrl/keypad+ and Ctrl/keypad- were not honored for ExpandAll and ContractAll.
- Ctrl/+ did not work on German keyboards, where + is not a shifted character.
Impact:
Annoys developer
Likelihood |
Risk |
Ad Hoc |
Enhancement |
High |
Low |
No |
No |
Category: Studio.Editor
Platforms: All
DevKey: RAW352
Summary: Fixed an error in editing nested XML text
Description:
When the nesting level in some XML text exceeded eight levels deep,
the lines in question were shifted to the far right in the window and
you couldn't edit them due to a bug in the nesting limit check.
This has been fixed and the nesting level maximum has been increased
to 32.
Impact:
Impedes developers
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: System.Cluster Specific
Platforms: OpenVMS and Tru64 UNIX
DevKey: JO1693
Summary: Treat a cluster member as a remote system in dispatch_method_or_property
Description:
In a cluster, if one cluster member recompiles a class then the
other cluster members need to invalidate the class if it is loaded so that they can
reload the (new) class descriptor.
Impact:
Application error
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Moderate |
Low |
Yes |
No |
Category: System.Cluster Specific
Platforms: OpenVMS and Tru64 UNIX
DevKey: JO1696
Summary: Possible hang if there are no buffers available
Description:
Previously, there was a problem which, under particular and unusual circumstances, could
cause a system hang on a Caché cluster. This occurred when the write daemon entered
panic mode because there were zero free buffers. This has been resolved.
Impact:
Production application hang
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: System.Journaling
Platforms: All
DevKey: JO1692
Summary: Improve synchronization between journal daemon and jobs waiting for journal buffers to be committed to disk
Description:
The journaling daemon was changed to avoid an unneeded sleep/wakeup
when we add things to the journal queue.
Impact:
None
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Moderate |
No |
No |
Category: System.Licensing
Platforms: All
DevKey: RJW704
Summary: Fix license CPU count on Hyperthreaded Intel/Windows platforms.
Description:
When HyperThreading is active, Windows reports the number of
threads instead of the number of physical CPUs. This causes
incorrect restrictions
on the number of authorized CPUs permitted for systems
not using Enterprise licenses.
This change corrects
this problem so the number of physical CPUs is checked against license
capacity.
Impact:
Reduced license capacity
Likelihood |
Risk |
Ad Hoc |
Enhancement |
High |
Low |
No |
Yes |
Category: System.Licensing
Platforms: All
DevKey: RJW740
Summary: Provide user oriented documentation for the Caché 5 license system.
Description:
The $System.License class is extended with additional methods to
provide information about license use.
Impact:
None
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
Yes |
Category: System.StartUp
Platforms: OpenVMS
DevKey: SAP101
Summary: After startup failure due to no memory, subsequent starts fail
Description:
After a startup fails due to memory requirements too high, subsequent
efforts to start that Caché (with any config file) result in
message:
"A global section with the name "_CACHE__[etc]" already exists"
and Caché halts. This condition cannot be cleared until
system is rebooted, regardless of config used.
Impact:
Impedes restarting production
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: System.StartUp
Platforms: OpenVMS
DevKey: SAP102
Summary: On failure to allocate memory, Caché crashes
Description:
On failure to allocate full memory, Caché gets an access violation on
OpenVMS. This has been fixed.
Impact:
Impedes starting production
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: System
Platforms: All
DevKey: CDS389
Summary: Fix $QUERY on unsubscripted multidimensional property
Description:
This corrects $QUERY so that a reference to an unsubscripted global or array
produces the same result as a reference using the null string as a
subscript.
Impact:
Application error
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: System
Platforms: All
DevKey: CDS402
Summary: Fix <EDITED> error when switching namespace
Description:
This corrects an error where identically named routines in two different
namespaces which call each other would fail to re-establish the proper
routine references upon returning to the caller. This resulted in an
<EDITED> error.
Impact:
Application error
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: System
Platforms: All
DevKey: CDS406
Summary: Some $LIST constants were not compiled correctly
Description:
When some negative floating point numbers were used as a constant
value in the $LISTBUILD function, the Caché ObjectScript compiler
would generate invalid object code. This invalid code would cause the
process to halt when that line of code was executed. The constants
that caused the problem were -.1, -.01, -.001, etc. Only the use of
constants provokes this issue. The object code
is correct if the numbers were generated by arithmetic operations or
were previously stored in a variable.
Impact:
Application abort
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: System
Platforms: All
DevKey: HYY766
Summary: Address issues with large numbers of databases
Description:
We have corrected various problems that might occur when the number of databases exceeds 255.
Impact:
Some operations in the database would fail. The
exact nature of the failures cannot be categorized.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Moderate |
No |
No |
Category: System
Platforms: All
DevKey: JLC484
Summary: Correct problem with global buffer pools bigger than 4GB
Description:
This corrects a problem with buffer pools larger than 4GB where offsets into
the pool would be truncated by storing them in 32-bit cells.
Impact:
Application failure
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
Yes |
No |
Category: System
Platforms: AIX
DevKey: JLC491
Summary: Fix updating resource statistics for PowerPC systems
Description:
Resource statistics counters were modified to work properly on 64-bit PowerPC
systems. Certain internal statistics were being zeroed on AIX platforms.
Impact:
Statistics are kept accurately on PowerPC systems.
Likelihood |
Risk |
Ad Hoc |
Enhancement |
High |
Low |
No |
No |
Category: System
Platforms: All
DevKey: JLC493
Summary: Address internal error logging bug
Description:
This corrects an internal problem in error logging which could result in
bus errors during shutdown.
Impact:
Production failure during shutdown
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: System
Platforms: OpenVMS, Tru64
DevKey: JLC496
Summary: Correct an object destructor problem on Alpha machines
Description:
This corrects an internal error that caused a delay in running the object destructor
when the variable that had its oref was assigned a new value.
Impact:
Application error
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: System
Platforms: UNIX
DevKey: JO1685
Summary: Correct potential expansion problem for CACHETEMP on UNIX systems
Description:
On UNIX systems, CACHETEMP is structured as a "sparse database". This
means that when it expands, Caché does not write all of the new blocks
to the file which is required to force them to be allocated. This
facility has been updated so that Caché does write the last block of
the new space to the file. This forces the file size to be
updated.
This is important to prevent processes from getting
unexpected end of file errors reading or writing this new space as the
code that deals with detecting that the end of the file has moved is
organized around the file expansion process.
Impact:
Application error
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: System
Platforms: All
DevKey: JO1694
Summary: Count of available buffers could get out of sync in panic mode
Description:
In the unlikely event that a system runs out of global buffers and
enters panic mode, it was possible for the count of available buffers
to get out of sync. In even rarer circumstances, this could possibly
lead to a system hang but most likely would go unnoticed. A notation
is made in the console log file each time a system enters panic
mode.
Impact:
Production application hang
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: System
Platforms: All
DevKey: JO1695
Summary: GCOMPACT changes to try to avoid panic mode
Description:
The database compaction code (GCOMPACT and the global compaction
option in the Caché Control Panel) have been updated to try and avoid using
all of the free buffers because doing so triggers a write daemon panic state.
Impact:
GCOMPACT could impede application response time
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Moderate |
Low |
No |
No |
Category: System
Platforms: OpenVMS
DevKey: JO1698
Summary: Correct intermittent database expansion problem
Description:
An expansion problem which affected OpenVMS systems and 8KB databases
which were set to expand by more than 64MB at a time has been
resolved. This was an intermittent problem which when it occurred,
would result in the database being only partially expanded; one or
more 64MB chunks of space would be added but not all of the requested
space. When the expansion failed an error code of 99524 would be
recorded in the SYSLOG table.
Impact:
None
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: System
Platforms: OpenVMS
DevKey: JO1700
Summary: Correct multiple installation problem
Description:
A problem has been resolved on OpenVMS systems which install multiple
copies of Caché where each copy of Caché starts up under a different
UIC group and both installations have networking configured or attempt
to use a performance monitoring facility such as ^PERFMON.
Previously
the second installation to start up would not detect that the first
installation was running and there would be confusion about the name
of the network shared memory section. The result would be that the second
installation would not start up properly and would delete the network
shared memory section of the first installation upon shutdown.
Impact:
Production hang
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
Yes |
No |
Category: System
Platforms: All
DevKey: JO1701
Summary: Fix problems creating a database that had been dismounted & then deleted
Description:
A problem has been resolved on UNIX and Windows system where if a
dismounted database was deleted by deleting the CACHE.DAT file, MSU
would get errors trying to re-create it.
Impact:
Impedes system operator
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Moderate |
Low |
No |
No |
Category: System
Platforms: All
DevKey: LFT1084
Summary: Avoid halt while owning a block or resource
Description:
This change skips a call to halt if the process owns a block or a
resource.
Impact:
Production hang
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Moderate |
No |
No |
Category: System
Platforms: All
DevKey: LRS671
Summary: Implement $System.Util.GetEnviron class method
Description:
A new $System class method has been implemented to obtain the value
of an environment variable from the host system.
Set value=$System.Util.GetEnviron(VariableName)
This call returns the value associated with "VariableName", if one is
defined. Otherwise it returns an empty string. Under UNIX and Windows
systems, the variable is a command shell variable. Under OpenVMS, it
is a DCL symbol, rather than a logical.
Under OpenVMS, you can obtain the translation for a logical using
$ZU(12,logicalname,4) or $ZF("TRNLNM",logicalname,...). If you want
to access the value of
one using $System.Util.GetEnviron(), you can
use it in a DCL
expression involving F$TRNLNM(logicalname), the
simplest of which is
a mere attribution such as:
SYS$LOGIN = F$TRNLNM("SYS$LOGIN")
Impact:
None
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
Yes |
Category: System
Platforms: All
DevKey: NGA109
Summary: Avoid possible hang with JOB command
Description:
A possible hang caused by a job holding a global buffer while trying to job off
another process has been fixed.
Impact:
Production hang
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
Yes |
No |
Category: System
Platforms: All
DevKey: SAP094
Summary: Allow user to set other process' priority
Description:
$system.Util.SetPrio(prio[, pid]) sets either the caller's process
priority, or the priority of another process whose process id is
pid.
On
Windows and OpenVMS, callers have unlimited access to other processes
priority. On UNIX, the priority of other processes can only be
reduced, unless the calling process is running as root (not the
default for Caché terminal processes).
Impact:
None
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
Yes |
Category: System
Platforms: OpenVMS
DevKey: SAP097
Summary: Fetch base priority, not priority, on OpenVMS getprio
Description:
This corrects a long standing discrepancy in
$zu(60) that
displayed the wrong priority
for OpenVMS processes.
Impact:
Slight performance penalty for some processes
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Moderate |
Low |
No |
No |
Category: System
Platforms: OpenVMS
DevKey: SAP098
Summary: Change OpenVMS priority handling to match Windows and UNIX
Description:
OpenVMS job priorities will match Windows and UNIX.
Jobbed processes run at
parent current base priority plus the system defined job priority
modifier. Job priority modifier can be set via
$system.Util.JobPrio().
Impact:
None
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Moderate |
No |
Yes |
Category: System
Platforms: OpenVMS and Tru64 UNIX
DevKey: SML356
Summary: Correct journal recovery for cluster master on dedicated ECP connections.
Description:
When cluster master dies, the new master performs journal rollforward
and rollback from the dying master's journal files. But it does not
need to reestablish transaction state or pending ECP messages from the
failed master.
The prior behavior has been fixed.
Impact:
None
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: System
Platforms: All
DevKey: SML359
Summary: Correct problem with multiple DCP connections
Description:
When there is more than one DCP connection configured on the client
system and there are transaction operations on each remote server, a
problem could occur since the locations of the transaction file count
array are overlapped on each DCP connection. Under certain circumstances
the TROLLBACK or TCOMMIT over DCP may not completed.
Impact:
Loss of data
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
Yes |
No |
Category: System
Platforms: All
DevKey: SML360
Summary: Fix zero time out on locking parent node while child node is locked.
Description:
This change fixed a problem:
Process A:
hangs waiting for process A
Process A:
LOCK +^x(1,2):0 w:$t // $T is zero
and the lock is not granted.
The correct behavior for Process A
to lock ^x(1,2):0 should be able to grant the lock and $T is 1.
The fix also applies for an ECP/DCP network when Process
A is a client job and Process B is a server job.
Impact:
Application error
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
Yes |
No |
Category: System
Platforms: All
DevKey: SML361
Summary: Fix a Read Daemon timing problem which can cause a crash.
Description:
There is a potential system interruption condition on ECP client's Read daemon when a job
request a remote lock and cancels it after timed out. When it requests
another remote lock, the job may be returned without really granting
the lock on server. If the job releases the second lock before the
granted answer from server arrived, the ECP daemon will abort.
Impact:
Production failure
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: System
Platforms: OpenVMS, Tru64, AIX
DevKey: SML362
Summary: Fix possible hang with long strings and DCP on 64-bit platforms.
Description:
For 5.0 on OpenVMS platform, this fixed a problem for DCP networks. When
the client job tries to access long string globals (for example compiled routine's OBJ
code), it could hang.
This problem only occurred on Cache 5.0 OpenVMS
platform; for other 64 bit platform it is not likely to happen unless
large buffer pool is configured, and it only failed on DCP
network. The DCP client job fetching a global with big string will
hang, though the Control-C could interrupt the hang.
Impact:
Application user would be suspended until typing CTRL-C
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
No |
No |
Category: System
Platforms: All
DevKey: SML363
Summary: Display number of usable lock table size in ^LOCKTAB.
Description:
Now the ^LOCKTAB will display two lock table sizes, 'available' and
'usable' size. The 'available' size is the one that was previously
displayed; it is the total lock memory minus the memory used for lock
entries.
The 'usable' size is the 'available' size minus the cached
memory in each partition (job) and some of the LHB block in free
queue. The formulas are:
free size = 'available' size
- total cached size
- total free LHB pool size.
'usable' size = free size
+ (2/3 of free size or total free LHB size which ever is smaller).
Impact:
None
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Low |
Low |
Yes |
Yes |
Category: System
Platforms: All
DevKey: STC450
Summary: Enforce one compaction process per database
Description:
Database compaction was allowed to run multiple iterations at the same
time on the same database. This is now prevented by the use of a lock.
Impact:
Database degradation
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Moderate |
Low |
No |
No |
Category: System
Platforms: All
DevKey: STC451
Summary: GBLOCKCOPY allows conversion of collation 0 globals
Description:
Previously, globals with a collation type of 0 could not be selected
by GBLOCKCOPY for a conversion to standard type 5. This is now
allowed.
Impact:
Impeded migration from MSM
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Moderate |
Low |
No |
No |
Category: System
Platforms: All
DevKey: STC454
Summary: Fix erroneous blocks copied field in GBLOCKCOPY
Description:
When using GBLOCKCOPY to copy data from a database to another database
or namespace, sometimes an error would be reported that the number of
blocks copied did not match the calculated number of blocks to
copy. However, the data was actually completely copied. This has been
fixed.
Impact:
Annoys operator
Likelihood |
Risk |
Ad Hoc |
Enhancement |
Moderate |
Low |
Yes |
No |
This section provides a listing of changes between Caché
5.0.0 and Caché
5.0.1.
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. To help you assess the impact of these changes on your
applications, each change description contains a more detailed explanation of
the modification. It also includes a table giving pertinent information on the
problem likelihood, impact of the change, and whether this has already been used
successfully in production by other customers.
If the affected platform is not listed specifically with the change summary,
the change is effective for all supported platforms.
- Relational Gateway —
Relational Gateway use problematic on Tru64
- System —
Fix MD5 hash for big endian platforms
- Networking —
Accommodate largest possible size of UNICODE strings over ECP
- Object.Java —
Fix problem in creating and using finder extensions in EJB
- Object.Java —
Eliminate duplicate entries from remote interface
- CSP —
..Link() not working as designed
- Object.Class
Compiler — Do not add transient streams to save set in a deep
save
- Object.Java —
Return early from errors
- Object.Soap —
Initial fix for non-ASCII characters in SOAP response
- Object.XML —
Order inherited properties to match XML schema extension ordering
- Object.XML —
Store XML for empty character streams as "" instead of $c(0)
- Object.XML —
XMLExport serial references with no data as null (no tag)
- SQL —
Change datepart("week",date) to match SQL server behavior
- SQL.JDBC — The
same SQL normalization for JDBC and ODBC preparser
- SQL.JDBC —
Conversion of pseudo-ASCII bytes in setAsciiStream according to default
locale
- System —
Process priorities not set right for background jobs.
Platforms: OpenVMS,
Windows, HP-UX
- System.I/O —
Modify "U" mode RMS files to read formatted files correctly
Platforms:
OpenVMS
Other Changes to Caché
The following list of references summarizes
changes in this version of Caché which are upwardly compatible corrections and
enhancements since the prior version. InterSystems does not expect that these
will affect the normal operation of your existing applications. For ease in
searching, they are grouped according to the area of the system they modify.
If the affected platform is not listed specifically with the change summary,
the change is effective for all supported platforms.
Caché Direct
- Fix Caché Direct
registry key names
Config Mgr
- Fix config file
corruption when the file size > 64KB
- Correct handling of
null passwords for SQL Gateway
- Fix the ability to
map all routine types
- Disallow setting user
process priorities
- Fields of License
wizard are empty when Caché (NT) uses UNIX style cache.key
- Preserve restart
condition across multiple configuration manager edits
- Eliminate length
limit on ECP server add/edit
Control Panel
- Fix Max %Full column
in Control Panel | Local Databases
- Background integrity
check on OpenVMS produced two files, the log file and an empty
file
Platforms: OpenVMS
- Fix namespace name
truncation
- Remove "Switch
Journal File after Backup" checkbox
CSP
- Fix/enhance UNIX and
OpenVMS file renaming using $zu(140,6)
Platforms: UNIX, OpenVMS
- When importing CSP
files if no /csp/namespace pick first app that is defined in this
namespace
- OnTimeout trigger is
not called for state-aware sessions
- Anchors don't work on
#url()
- Prevent SUBSCRIPT
errors in CSPNormalizeURL^%cspServer
CSP.Gateway
- Resolve issues
whereby hyperevent calls would fail, seemingly at random, within applications
operating for extended periods of time in state-aware mode (preserve mode
1)
- Emergency fix for a
potential issue in the Gateway's garbage collector that could lead to an
accumulation of 'defunct' connections
Platforms: OpenVMS
- Resolve an issue
whereby a thread within the NSD would spin and consume excess CPU time under
Tru64 UNIX
Platforms: Tru64
- Improve the
mechanisms within the NSD for detecting, and responding to, an interrupt from
the browser
- Resolve an issue in
the page output caching mechanism that could result in a thread spinning (and
using much CPU time) under Tru64 UNIX
Platforms: Tru64
- Resolve further
issues with the UNIX implementation of change CMT071 (Manifested as the NSD
aborting on Tru64 UNIX)
Platforms: Tru64
- Introduce a better
filter for malformed URLs (and incorrectly specified components within
otherwise valid URLs)
CSP.Net
- Backport SMTP
Authentication to 5.0.1
- Function errors using
%Net.HttpRequest in a job process
CSP.Samples
- In web service, allow
LOCATION to be a relative path or unspecified
- ClassLogo.jpg not
shown in StreamServe.csp on HP
Platforms: HP
- Soap.Demo.cls has
incorrect parameter: SoapBodyUse = encoded
Cube
- The Caché service on
Windows no longer wakes up to gather statistics
Platforms: Windows
Explorer
- Fix Find/Replace on
unsubscripted nodes
- Fix Selecting in
Explorer with Multiple Wildcards
- Fix <MAXSTRING>
error when exporting thousands of classes
- Fix import from a
file with thousands of classes
- EXPLORER now allows
half-width Katakana symbols in its global mask
- Explorer gets errors
when editing globals with digits in their name
Installation
- Install all localized
resource files when in non-English locale
- CSP Autocompile
setting is preserved on upgrade installations
- Structure of /doc
directory changed
Platforms: UNIX, OpenVMS
- Fix installation
recompile hang
Installation.OpenVMS
- Set ownership of
target root directory (and all subdirs) to value of CACHE$MGRUIC
Platforms:
OpenVMS
- VMS installs
SAX
Platforms: OpenVMS
Installation.Windows
- On machines which can
run the Pentium4 optimized executable, give users the option, during install,
of P4 distribution (default) or regular
Platforms: Windows
- Upgrade installations
of CSP gateway on VMS failed to correctly modify httpd.conf
Platforms:
Windows
Languages.Caché Basic
- Backport Critical bug
fixes for CachéBasic on usparc platform
- Fix typo in calling
CanUnloadNow function in COM modules on UNIX and OpenVMS
Platforms:
OpenVMS
- Fixed <BREAK>
processing error
- Fix CachéBasic
DatePart() and DateDiff() with week parameter
- On all platforms,
make max udp packet size for DCP be 1468
Misc
- This fixes a problem
of cache coherency in the handling of modified 2k blocks over ECP
Networking
- Add process ID of
client process to journal record
- Fix occasional
segmentation violation when doing reverse $ORDER over ECP on BIG-ENDIAN
systems
- ECP answer buffer
overrun
- Improve the handling
of asynchronous messages queued from the server
- On recovery failure
acquire ECP client resource
- When running ECP over
old format databases (2Kb), optimization information was sometimes (rarely)
overwritten
- Ensure correct
concurrent synchronization in ECP when allocating space for a request
entry
- Correct rare ECP
synchronization of the application server cache (old format (2K)
databases)
- Fix handling of TCP
write errors
Platforms: Linux, HP
- ECP client didn't
maintain server unique ID
- Added $System.Server
HostName and IPAddresses
- Slowdown ECP worker
dmn creation
- Increased ECP cluster
master connection timeout
- On cluster reconnect,
exit the old ECP connection gracefully
- ECP server to keep
cluster slave session forever
- TCP-send interrupted
system call handling
- Properly handle
modifying ECP server (via control panel or config manager) when already up and
running
- Correct problem with
ECP application server restart
NLS
- Fix a NLS data
calculations
Object
- Deal with network
directory name correctly in %File:CreateDirectoryChain()
Object.ActiveX
- Don't ask password
for Namespace list in connection manager
- Fix for CachéObject:
ERROR #5802: Datatype validation failed when value < 0.1
- Objects deleted
prematurely when ResultSet used with .NET
- Make
Factory.SetOutput() work with .Net
Object.Class Compiler
- Qualify
StorageToLogical call with property name
- Check actual number
of parameters against formal spec
- Count only actual
parameters in a dynamic query
- Fix bug in check for
Class compiler interrupt
- Support object
generators for datatype methods
- Invalid code
generated if last line of procedure block method is a #define
- Problem with XML
schema validation on class import on OpenVMS
Platforms: OpenVMS
Object.Java
- Fixed bug with
Iterator.remove() in Caché Array
- constructClone
failing
- Incorrect Java
binding for Lists containing Japanese characters
- Allow DATASOURCENAME
to override data source name in bean implementation
- Fix dataSource
name
- Produce code that
compiles even when ROWID renamed
- Allow Session Bean
generation when PERSISTENCETYPE="CMP"
- Correct JBoss
connection leak
- Allow Caché' host
and port to be configurable in EJB configuration
- Fix calculation of
supers in Java binding
- Make generation of
special method exists(db,oid) depend on persistency of super not persistency
of class
- When invalid
SERVERTYPE display invalid server message
- Get accessors are
not const when they are overridden
- Don't allow CMP
generation unless primary key
- Fix potential
problem in constraint names in EJB binding
- Remove
<distributable> from web.xml and make test servlet work with JBoss and
Jetty
- Remove debug
statements from EJB Wizard
- Close quick
statement in EJB callbacks
- Let the App Server
control concurrency
- Added Support in the
CLASSPATH Variable for JBoss 3.0.6
- Add
TransactionIsolation parameter to EJB projection
- Removed
TRANSACTION_NONE from Supported Transaction Types
- Addressed Various
Issues with the Java Projection
- Improve error
message when Class in ClassList is not persistent
- Project stored
procedure methods in Language bindings
- Fix Java binding
file names
- Process Output
parameters properly
- getConnection needs
to be protected not private
- Allow datasource to
be looked up from environment
- Support generating of
extensions that are used for things like finders
- Call methods in
property accessors when overridden set or get
- Fix JSL992 handling
of calculated properties in the C++ binding
- Check if property
exists before checking if calculated
- Guard against null
DefaultArgs
- Support for
projection of queries in generated Java classes
- Added SQLProcContext
class to Java Binding client
- Enhancement for
building Java client Documentation
- Added ability to
initialize Java Binding using wrapper connection from App Server
- Improvements in
LightDatabase
- Fix for empty array
not listening to server updates
- %TimeStamp with
milliseconds throws Exception
- Java ArrayOfDataTypes
etc iterator.remove()
- Saving Non-ASCII
Characters Using Light Java Binding
Object.Java, EJB
- Guard EJB projection
against invalid parameters
Object.Library
- %Net.HttpRequest
object now reads in correct charset
- %Net.HttpRequest
object not encoding form data in correct charset
Object.Soap
- Improve SOAP client
response validation
- Handle OUT parameters
in SOAP web client
- Improve SOAP
interoperability with XMLSPY SOAP request
- Reorganize the
XMLPROJECTION parameter
- Fix
parseFormal^%occName not initializing return argument
- Resolve short class
names in web method arguments
- Show use of base
class for error handling in SOAP.Demo sample
- SOAP web client gives
error if return value not expected
Object.Stream
- %Delete leaves open
transaction
Object.XML
- Map class inheritance
to XML using schema choice group
- XMLImport loses
attributes in case of id="" for tag
- %XML.Adaptor error
handling improvements
- Allow runtime
specification of %XML.Adaptor parameter XMLIGNORENULL
- <NOTOPEN>
second call to XMLExportToStream with same stream
- In XML projection,
support summary representation of referenced classes
- In XMLImport, long
attribute value causes SUBSCRIPT error
- Add limited XMLImport
method for %XML.DataSet
- Support RuntimeMode
property of %XML.DataSet
- Optionally enforce
ordering of properties on XML import
- Allow skipping of
element tags on import and export
- Generate correct
schema for Caché array for choice group
- Add new support for
hexBinary schema type
- Create %xsd package
for Caché datatypes that map to XML schema types
- XML representation of
persistent objects using object id
- Ignore IsValidDT
whose value is always 1 for XMLImport
- Extend %XML.DataSet
to Support .Net Typed Datasets
SQL
- Add Message property
to %SQLProcContext
- Fix return type for
some ODBC Scalar functions
- Check %ALTER
privilege on the view definition when ALTER VIEW is executed
- Properly generate
include files in 2nd through Nth T# routine
- Don't include fields
from parent table in conditional map condition when turning nonnull index into
conditional index
- Rebuild indices are
after datatype has changed to/from a string via DDL
- Support use of Map
Variables in Data Access and Full Row Reference expressions
- Add support for MS
SQL Server style CONVERT function
- Add checks to make
sure string fields don't contain map piece delimiter characters
- Fix query generated
%QuickLoad function to not scan entire table
- Fix
DATEPART("wk",...) calculation
- Fix code generation
problem with large indices
- Fix QuickLoad
problem involving primary keys and SQL queries
- Fix insert select of
stream field
- Store empty
LONGVARCHAR streams with "" instead of $c(0)
- Correct TuneTable
selectivity calculation for tables with UNIQUE fields
- Support global
reference with vertical-bar syntax in mappings
- Add
CONSTRAINT_OBJECT_NAME to %Library.SQLCatalog.SQLConstraints procedure
- Field-specific
UPDATE triggers execute too often
- Support Quick
%nolock=2 which simply means behave as if standard SQL statement
- Ensured Proper
Operations of Descending-Order Sorts
SQL.DDL
- CREATE PROCEDURE
argument length omitted in Studio
SQL.GateWay
- Do not close cursor
if an error occurred
- Selecting on
generated Caché ID field fails when it is a complex key in SQL Server
- Fixed <INVALID OREF> error for
complicated dynamic query
- Fix parameter
setting
- Select count not
working
- "Undefined list
element " error when linking a table
SQL.JDBC
- Fix JDBC reporting
of foreign keys
- Correct JDBC
reporting of parent reference field
- Correct
transformation from LONGVARCHAR with getString()
- Fixed counting
characters/bytes when using getUnicodeStream from JDBC
- PreparedStatement.setAsciiStream()
does not convert chars to Unicode
- Tighten JDBC Call
Syntax
- Add (optional)
NODELAY flag at the end of JDBC URL string
- Fix potential
<FRAMESTACK> error
- Add support for
get/setXXX(String parameterName,...) JDBC 3.0 APIs
- Keep references to
currently used statements in the statement pool
- Add closed flag to
Stream classes
- Shut down the
connection after receiving message sequencing error
- Change
Statement.executeBatch error reporting behavior
- Enhance client cache
management for stored procedures
- Use a trick to make
CachéConnection object available
- Introduce new Stream
Error Code 411
- Allow calls to
getUpdateCount after executeUpdate
SQL.ODBC
- Fix calculation for
ODBC precision
- wrong default setting
for "Unicode SQLTypes"
- UNIX ODBC: SQLError
returns some garbage..
- Fix for #Deleted
problem in Access when using numeric column as primary key
- Poor error message if
ODBC DSN contains invalid namespace
- Eliminated Memory
Leak with Streams and ADO
- Allow programmatic
(on-the-fly) DSN setup
- Return length in
number of bytes for RetrieveStream
- Reintroduce
QuickStatment.close; Change in empty stream retrieval
- Force dialogs to use
narrow API when Unicode is defined, fix for Win9x
- Prevent possible
access violation on logging buffer overrun
SQL.Query Processing
- Query optimization
gives <UNDEFINED>error
- Fix JOIN optimization
bug
- Improve OR
optimization
- Fix Subscript error
on UNION with many blank fields
SQL.Server
- Add check for
<DSCON> in DieError to avoid looping
- Fix Addqout^%qserver
with > 32000 characters of data
SQL.Syntax
- Fix
<UNDEFINED> in parsing string function
SQLManager
- Corrected several
issues with SQLMigration
- Change the Owner of a
view in SQLManager
- Show plan fails when
default SQL schema name is user defined
- Link table name with
space or other characters in it
- Japanese characters
garbled when printing to a printer
Studio
- Multiple improvements
to Studio
- Importing a CSP page
fails
- Unselected classes
deleted in open dialog
- Exporting a class
behaves differently when done remote vs local
- Get Error #5019 when
deleting CSP page
Platforms: OpenVMS
- Addressed Issue in
which Studio Would Hang or Loop When Searching for Matching Text That Was in
Contracted Code
- Studio editor: copy
Unicode to clipboard on Win9x systems
- Find in Files does
not find items in CSR files
- Fix problem sorting
classes by size in Studio
- Studio imported class
when told not to
- SourceControl:
Trigger OnAfterSave not fired sometimes
- Studio becomes
confused by 3rd line of INT
- In the example source
control class allow people to create new items
System
- Encryption functions
- rename from Rijndael to AES
- Fix Callin/Callout
interfaces for 32-bit pointers on OpenVMS
Platforms: OpenVMS
- Allow ECP client send
'get file' request on ECP recovery when server is not re-started
- The error trap, %ETN,
now stores the values of formal parameters
- Fix ZQUIT not popping
enough frames
- Addressed Issue with
Task Not Rescheduling Properly
- Use correct error
macros on Windows
Platforms: Windows
- Correct overflow in
handling OS files limits on 64 bit AIX
Platforms: AIX
- Startup code could
fail in rare circumstances when over 4 GB of global buffers were
configured
Platforms: Windows, Tru64
- On OpenVMS, when we
cannot allocate as much memory as initially requested but are successful
allocating a smaller number, the system still reports the initial
value
Platforms: OpenVMS
- Change code that sets
jobtype not to use OR except for APPMODE flag & don't set APPMODE for
ENQDMN
Platforms: Tru64, OpenVMS
- COM port reads can
fail on Windows if data arrives before the read
- Make DEFNETDIRSIZ 64
KB
- ECP server should
never wait and retry on lock table full
- Fix lock_c_cleanup
for ECP server dismounts DB
- Fix DCP lock race
condition
- Display correct
message for cluster ECP connection
- Fix un-removable lock
when lock table is reset
- Change for better
network lock fairness on server
- Fix telnet
disconnection will leave an open transaction on OpenVMS and
Linux
Platforms: Linux, OpenVMS
- Display lock entry in
pending state
- Fix multi-entry lock
command over ECP problem
- Fix a problem when
Lock and ZA on the same global by the same job
- DTM lock error
fix
- Let network daemon
keep list of locks granted by it so it could handle some deadlock issue
- Fix a rare problem
where a stranded lock was left in the lock table
- Don't let network
daemon call SWCHECKSET in waitupd(), so it won't block the cluster
failover
- Display correct
cluster error message for ECP
- Fix bad lock encoding
(for example ^a("10.41"))
- Fix multi-entry lock
command live lock problem
- Start Cluster ECP
connection for slave when startup
- $ZTIMEZONE failed
unpredictably on AIX
Platforms: AIX
- Disable Nagle
Algorithm by default on TELNET devices
- Fix short timeout
problem on ECP
- Fix possible lock
memory lost when lock table full
- Limit # of Caché job
to access DSM through DDP to 1544
- Fix potential TRANSCB
LRB list corruption
- Fix hang on
multi-entry lock with same global nodes over network
- Fix ECP timing
hole
Platforms:
- Don't flush ECP
journal records to disk when ECP is only being used as a lock transport for
Caché clusters
- Fix cluster failover
potential hang
- Fix collation
detection in IF/ELSE clause
- Fix ability to map
routine types
- Fix memory leak in
Job Servers
- Fix a DTM network
emulation bug in $DATA
- Correct handling of
file sizes in a certain narrow range on OpenVMS
Platforms: OpenVMS
- Correct a situation
where very short waits (less than 100 mSec) could sometimes result in no wait
at all (platform dependent)
- Fix big buffer pool
allocation on OpenVMS & test global buffer allocation in
mcominit
Platforms: OpenVMS
- Update # of global
buffers when we reduce resident memory allocation
Platforms: OpenVMS
- Change reserved block
alloc/dealloc code to skip bad maps, not abort
- Don't skip processes
that return SS$_SUSPENDED in $GETJPI from cforce on OpenVMS
Platforms:
OpenVMS
- Set wdstop when any
write daemon exits
- Use NANOSLEEP instead
of select() for timed sleeps on HP-UX
Platforms: Tru64
- Adjust spinloop
counters on HP-UX
Platforms: HP-UX
- Fix exception
allocating more than 2^31 bytes of global bdb's
- $ZU(158) function
call failing on Caché 5 Unicode
- Corrected JOBEXAM /
Control Panel TCP read data corruption
- Create list file for
loading Caché KM in BMC Patrol
- Save/Restore the
process priority of the control process during job startup on UNIX and
Windows
- On VMS display the
correct process priority when examining processes
Platforms: OpenVMS
- Fix problem with 3 or
more argument $BITLOGIC
- TASKMANAGER - set
start date properly, improve queries, add simple menu to drive
- Fix output file error
in GBLOCKCOPY
- Lock out other
gcompact on same database
- GBLOCKCOPY allows
conversion of collation 0 globals
System.Backup/Restore
- Correct a problem
whereby a user would sometimes be forced to do a full backup when an
incremental backup should have been an option
System.Cluster Specific
- preserve wij info of
the old master for failover
- Fix a race condition
on Caché clusters
- Fix false
<FILEFULL> in cluster mounted 2kb database
- Fix expansion daemon
so it runs if another process needs it during cluster failover
- Correct problem with
cluster failover when switch 13 or 14 was set
System.I/O
- Fix rare access
violations when using |TNT| devices on Windows
- Fix timeout bug in
LAT device open (ttyopenlat)
System.Journaling
- address an issue of
journal daemon hanging
- During cluster
failover/recovery, transaction rollback would fail if the new master had more
than 254 databases mounted
- fix a bug that caused
journal daemon to skip writing some journal buffers and result in system
hang
Platforms: OpenVMS
- Address a deadlock
situation between journal daemon and write daemon during jrnswitch
- Correct race
condition on journal switching on OpenVMS
Platforms: OpenVMS
- Changed journaling to
avoid incorrect exits
System.Licensing
- Ensure that Caché can
run from directories with spaces in the names
System.Shadowing
- address a performance
problem with shadowing
- correct a potential
problem in fast-mode shadowing
System.Shutdown
- Create a
CACCVIO-PID.LOG file for PAGRDERR and PAGRDERRXM errors
- No error capture on
calls dealloc_resident_mem()
System.StartUp
- Increase SZGVXTAB to
32K
- Compiler error detail
for missing */
- Fix Customer Name in
restart splash screen
System.TCP Devices
- Increase the size of
the ctelnetd listen queue
Platforms: Windows
Utilities
- Config Manager uses
same definition of remote servers as other desktop utilities
- when we import .OBJ
code we don't update the ^rINDEX("routine_name") node
- Adjust fields for
non-English texts
- MSM-Activate did not
work against Unicode Caché server
Change Details
The remainder of this document gives the details for each
of the earlier change summary references.
Category: SQL.Query Processing
Platforms: All
DevKey: AK553
Summary: Query optimization gives <UNDEFINED>error
Description:
Corrected a somewhat exotic query optimization problem
which could result in an <UNDEFINED> error at runtime. For example, this
occurred in some cases when a ROWID was used in the WHERE clause of a subquery.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: Relational Gateway
Platforms: Tru64
DevKey: <none>
Summary: Relational Gateway use problematic on Tru64
Description:
The operational state of the Caché Relational Gateway on the Tru64 platform is
problematic. Attempts to use it will most likely result in
inconsistent results. Contact the InterSystems WorldWide Response
Center for additional details.
Category: SQL.Query Processing
Platforms: All
DevKey: AK553
Summary: Query optimization gives <UNDEFINED> error
Description:
Corrected a somewhat exotic query optimization problem
which could result in an <UNDEFINED> error at runtime. For example, this
occurred in some cases when a ROWID was used in the WHERE clause of a subquery.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: AK554
Summary: Fix JOIN optimization bug
Description:
Corrects a SQL join optimization problem which was
introduced in Caché 5.0.0 and may result in incomplete result set.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: AK556
Summary: Improve OR optimization
Description:
Take advantage of index maps while avoiding the generation
of virtual fields and conditions. This is an optimization to OR expressions in
SQL.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Medium |
Yes |
No |
Category: Installation
Platforms: All
DevKey: ALE159
Summary: Install all localized resource files when in non-English
locale
Description:
This allows changing Caché localization without having to
re-run install.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Installation.VMS
Platforms: OpenVMS
DevKey: ALE169
Summary: VMS installs SAX
Description:
Package and install VMS executables needed for CacheSAX.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Installation.Windows
Platforms: Windows
DevKey: ALE176
Summary: On machines which can run the Pentium4 optimized executable, give
users the option, during install, of P4 distribution (default) or regular
Description:
Previously the P4 executables were always installed on
machines which could run them
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: Installation.Windows
Platforms: Windows
DevKey: ALE177
Summary: Upgrade installations of CSP gateway on VMS failed to correctly
modify httpd.conf
Description:
Previously, we incorrectly edited Apache configuration
files in csp-bin directory section.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Installation
Platforms: UNIX, OpenVMS
DevKey: ALE186
Summary: Structure of /doc directory changed
Description:
It now has the same structure as on Windows platforms.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: SQL.JDBC
Platforms: All
DevKey: AND269
Summary: Tighten JDBC Call Syntax
Description:
While stored procedures through both ODBC and JDBC were
generally in a fairly good shape, there were some complaints about poor error
reporting in cases where the CALL syntax was not used in a standard way. The
CALL syntax checking has been improved by providing better error reporting.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: SQL.JDBC
Platforms: All
DevKey: AND270
Summary: Allow calls to getUpdateCount after executeUpdate
Description:
According to the JDBC spec, getUpdateCount should be called
only after a call to execute (or getMoreResults), but not afterexecuteUpdate (or
executeQuery). However, this behavior is not only strange, but also not
supported by other vendors. The driver is now changed so that one can call
getUpdateCount after executeUpdate.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: SQL.ODBC
Platforms: All
DevKey: AND273
Summary: Allow programmatic (on-the-fly) DSN setup
Description:
Caché ODBC driver now allows programmatic DSN definitions
via the SQLConfigDataSource API. Here's a list of key-value keywords that we
support:
- DSN
- SERVER
- PORT
- DATABASE
- UID
- PWD
For example, a DSN setup string should look like:
"DSN=Test\0SERVER=127.0.0.1\0DATABASE=USER\0PWD=sys\0PORT=1972\0UID=_system\0"
Any other key-value pairs will be discarded.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Medium |
No |
Yes |
Category: SQL.JDBC
Platforms: All
DevKey: AND274
Summary: Add (optional) NODELAY flag at the end of JDBC URL string
Description:
There is now
parsing logic that recognizes
optional :nodelay flag (where nodelay = {true,false}) at the end of the URL
string. Here's the updated Caché JDBC URL format:\
jdbc:Caché://localhost:port/namespace[/logfile:eventclass:nodelay]
where [/logfile:eventclass:nodelay] part is optional. Here are some
examples:
jdbc:Caché://127.0.0.1:1972/USER
jdbc:Caché://127.0.0.1:1972/USER/jdbc.log
jdbc:Caché://127.0.0.1:1972/USER/jdbc.log:event16:false
jdbc:Caché://127.0.0.1:1972/USER/jdbc.log::false
jdbc:Caché://127.0.0.1:1972/USER/::false
We have also added the following two Caché JDBC specific APIs to
CachéDataSource:
public void setNodelay(boolean nodelay);
public boolean getNodelay();
that can be also used to set nodelay flag if connecting via DataSource
object. We have still left the ability to set this flag via Properties connect
parameter. That means that if nodelay was set by specifying the flag in the URL
string (or via DataSource object), one can still override this by supplying
TCP_NODELAY property. In other words, here is how the setting of this flag is
determined. It defaults to 'true'. If supplied in URL, or by setting it through
the DataSource object, that value will be used, UNLESS TCP_NODELAY property is
set.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: SQL.JDBC
Platforms: All
DevKey: AND276
Summary: Fix potential <FRAMESTACK> error
Description:
Two instances of a potential FRAMESTACK error were
discovered by code inspection and fixed.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: SQL.JDBC
Platforms: All
DevKey: AND277
Summary: Add support for get/setXXX(String parameterName,...) JDBC 3.0
APIs
Description:
With the addition of parameter name to the parameter meta
data returned by the server, it was easy to add a number of
CallableStatement.setXXX and getXXX APIs that take parameter name (as opposed to
the parameter index) as an argument. Note: we still officially support JDBC 2.x
only. Therefore, for now, the APIs added by this change are merely an extended
functionality.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: SQL.JDBC
Platforms: All
DevKey: AND281
Summary: Keep references to currently used statements in the statement
pool
Description:
CachéStatement.finalize() called from a finalizer thread
unconditionally cleans up. That sometimes interferes with application threads
that reuse the same object. We now keep references to all currently used
statements in the statement pool to keep this from occurring.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: SQL.JDBC
Platforms: All
DevKey: AND282
Summary: Add closed flag to Stream classes
Description:
We added a closed flag to the Stream class and it's
subclasses, and added checks to prevent exceptions when stream is closed twice.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: SQL.JDBC
Platforms: All
DevKey: AND284
Summary: Shut down the connection after receiving message sequencing
error
Description:
After receiving error 452 (message sequencing error) the
connection is unusable. We have now added code that closes a connection (that
includes sending a disconnect message to %qserver) once it receives error 452.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: SQL.JDBC
Platforms: All
DevKey: AND285
Summary: Change Statement.executeBatch error reporting behavior
Description:
When executing an INSERT statement via
Statement.addBatch()/executeBatch(), if the target table does not exist the
int[] returned by atchUpdateException.getUpdateCounts() should expose the failed
statement. Instead int[] {0} is returned.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: SQL.JDBC
Platforms: All
DevKey: AND286
Summary: Enhance client cache management for stored procedures
Description:
Upon seeing a DDL statement, we clean up the client side
cache. After that, any active statements need to be reprepared. Formerly, this
applied only to regular SQL; stored procedures were not reprepared, and that was
the problem. Now all statements are reprepared.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: SQL.JDBC
Platforms: All
DevKey: AND288
Summary: Use a trick to make CachéConnection object available
Description:
Most App Servers wrap native JDBC Connection objects so
that they are not available to the end user. However we need CachéConnection
object for use in Java Binding. With this change, we have added some code to
obtain a QuickStatement object.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: SQL.ODBC
Platforms: All
DevKey: AND292
Summary: Return length in number of bytes for RetrieveStream
Description:
We added logic that computed and returned number of bytes
instead of number of characters in %qserver.ReadStream. This fixed a problem in
JDBC; however, ODBC uses RetrieveStream instead of ReadStream. We have now added
the same logic to RetrieveStream.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: SQL.JDBC
Platforms: All
DevKey: AND306
Summary: Introduce new Stream Error Code 411
Description:
Improved error reporting of Stream errors. More
specifically, "General Stream Error (412)" is now reported as "No stream object
defined for field (411)".
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: SQL.ODBC
Platforms: All
DevKey: AND309
Summary: Reintroduce QuickStatment.close; Change in empty stream
retrieval
Description:
We have changed how we store empty character streams and
now made a corresponding change in %qserver to handle empty character stream
retrieval. We have reintroduced close in QuickStatement. It needs to be invoked
in order to prevent %qserver memory leaks.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: SQL.Query Processing
Platforms: All
DevKey: BJB250
Summary: Fix Subscript error on UNION with many blank fields
Description:
AK492 made some changes to avoid subscript errors on UNION
by restricting the length of subscript to 151 char. This was not small enough.
Because the subscript was a LIST when it got encoded it could double in size.
Worst case would be a list of NULLs, 151 control characters that would need to
be quoted by the encoding, doubling the length and pushing it over the 255 char
limit for a single subscript of a global. To stay under the 255 limit the length
must be reduced from 151 to 125 in distinct^%qaqcpr.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Medium |
Yes |
No |
Category: SQL.Server
Platforms: All
DevKey: BJB252
Summary: Add check for <DSCON> in DieError to avoid looping
Description:
In Caché 5.0.0 if an ODBC server got a <DSCON> error the
server would go into a loop and start to eat up the CPU. If this happens now the
server will HALT
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Medium |
Low |
Yes |
No |
Category: SQL.ODBC
Platforms: All
DevKey: BJB253
Summary: Fix calculation for ODBC precision
Description:
If you had a numeric field with a negative MinVal it is
possible we would compute the precision incorrectly.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: SQL
Platforms: All
DevKey: BJB257
Summary: change datepart("week",date) to match SQL server behavior
Description:
DatePart("wk",date) was returning the number of the week
the date fell in based on multiples of 7 days from January 1. If now returns
weeks based on rows in the calendar, so the first Sunday of the year marks the
changing from Week one to week 2. This means week one most of the time will have
less than 7 days in it. With this change the range of values returned by this
function change from 53 to 54.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Medium |
Yes |
No |
Category: Languages.Caché Basic
Platforms: All
DevKey: CDS363
Summary: Fixed <BREAK> processing error
Description:
This fixes a problem where a direct command in Caché Basic
throwing an error at a <BREAK> prompt would cause the process to crash.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: System.StartUp
Platforms: All
DevKey: CDS374
Summary: Compiler error detail for missing */
Description:
Fixed an error where a /* comment without a closing */ in
ObjectScript gives an "Invalid command" error.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: System
Platforms: All
DevKey: CDS381
Summary: The error trap, %ETN, now stores the values of formal
parameters
Description:
%ER would incorrectly identify <UNDEFINED> variables
as having a value after an error. %ER would not display formal parameters.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Medium |
Low |
Yes |
No |
Category: System
Platforms: All
DevKey: CDS382
Summary: Fix ZQUIT not popping enough frames
Description:
A ZQUIT in an error trap did not pop a frame level. The
GOTO @$ZTRAP went back to the same error trap. For example, ZQUIT 1 should pop
one execution level. This now works properly.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Explorer
Platforms: All
DevKey: CFL861
Summary: EXPLORER now allows half-width Katakana symbols in its global
mask
Description:
We now allow half-width Katakana characters in global
subscripts. Previously, Explorer would report an invalid subscript.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Medium |
Low |
No |
Yes |
Category: Installation
Platforms: All
DevKey: CFL867
Summary: CSP Autocompile setting is preserved on upgrade installations
Description:
The CSP autocompile setting is preserved upon upgrade.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
High |
Low |
Yes |
No |
Category: Utilities
Platforms: All
DevKey: CFL868, CFL871
Summary: Adjust fields for non-English texts
Description:
Widen various fields to accommodate truncated non-English
captions.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
High |
Low |
No |
No |
Category: Control Panel
Platforms: All
DevKey: CFL869
Summary: Fix Max %Full column in Control Panel | Local Databases
Description:
Correct Max %Full column display in Control Panel | Local
Databases.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Config Mgr
Platforms: All
DevKey: CFL875
Summary: Fix config file corruption when the file size > 64KB
Description:
Configuration Manager no longer corrupts the cache.cpf file
when it's larger than 64K.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Medium |
Low |
Yes |
No |
Category: Config Mgr
Platforms: All
DevKey: CFL885
Summary: Correct handling of null passwords for SQL Gateway
Description:
Null passwords were modified whenever other edits were made
to the configuration file.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: Explorer
Platforms: All
DevKey: CFL887
Summary: Fix Find/Replace on unsubscripted nodes
Description:
Using Explore, Replace Every now correctly works on
unsubscripted global references such as "^GLOBAL=string".
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Config Mgr
Platforms: All
DevKey: CFL890
Summary: Preserve restart condition across multiple configuration manager
edits
Description:
If multiple edits were made and the last one did not
require a restart but others did, the config manager would inconsistently apply
the changes.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Medium |
Low |
No |
No |
Category: Config Mgr
Platforms: All
DevKey: CFL891
Summary: Fix the ability to map all routine types
Description:
The configuration manager now knows how to map all routine
types.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Medium |
Low |
No |
No |
Category: Explorer
Platforms: All
DevKey: CFL892
Summary: Fix Selecting in Explorer with Multiple Wildcards
Description:
Explorer handles wildcard usage with Routines better.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: Utilities
Platforms: All
DevKey: CFL894
Summary: Config Manager uses same definition of remote servers as other
desktop utilities
Description:
The Config Manager was changed to search for remote servers
in the same manner as other utilities.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Config Mgr
Platforms: All
DevKey: CFL896
Summary: Eliminate length limit on ECP server add/edit
Description:
We have removed the 15-character limit on host names for
ECP.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: System.StartUp
Platforms: All
DevKey: CFL897
Summary: Fix Customer Name in restart splash screen
Description:
If the Customer Name in the .key file contained a comma,
the start and restart splash screen displayed only the first comma-delimited
piece of the name. This is now fixed.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: Explorer
Platforms: All
DevKey: CFL901
Summary: Fix <MAXSTRING> error when exporting thousands of
classes
Description:
Corrected a problem when exporting a lot of classes from
Explorer. Previously, you might experience a MAXSTRING error at
cexport+15^%Wprog.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: Utilities
Platforms: All
DevKey: CFL902
Summary: when we import .OBJ code we don't update the
^rINDEX("routine_name") node
Description:
Importing routines in object mode did not update the
appropriate indices. So the routines did not seem to be present after import.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: Control Panel
Platforms: OpenVMS
DevKey: CFL903
Summary: Background integrity check on OpenVMS produced two files, the log
file and an empty file
Description:
Empty files were produced IN ADDITION TO the expected log
file.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: Explorer
Platforms: All
DevKey: CFL905
Summary: Explorer gets errors when editing globals with digits in their
name
Description:
This could be very serious. Digits in the global name were
dropped when EXPLORER set the new values. So unintended data loss could occur.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Medium |
Low |
No |
No |
Category: Explorer
Platforms: All
DevKey: CFL908
Summary: Fix import from a file with thousands of classes
Description:
Importing thousands of classes using Explorer, you may
encounter a <MAXSTRING> error.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Config Mgr
Platforms: All
DevKey: CFL910
Summary: Disallow setting user process priorities
Description:
The config manager no longer offers the choice of setting
operating system priorities for user processes. The niceval parameter is
deprecated in the Configuration Manager and ignored when included in the
cache.cpf configuration file.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Control Panel
Platforms: All
DevKey: CFL912
Summary: Remove "Switch Journal File after Backup" checkbox
Description:
We have removed the "Switch Journal File after Backup"
checkbox from Control Panel|Backup|Tasks|<TASK>|Edit. The journal file is always
switched in the beginning of the task, no matter that option is marked or not.
No journal switch occurs in the end of the task.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: Control Panel
Platforms: All
DevKey: CFL919
Summary: Fix namespace name truncation
Description:
Correct display of long namespace names which were
previously truncated.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: CSP.Gateway
Platforms: All
DevKey: CMT071
Summary: Resolve issues whereby hyperevent calls would fail, seemingly at
random, within applications operating for extended periods of time in
state-aware mode (preserve mode 1)
Description:
Resolve issues whereby hyperevent calls would fail,
seemingly at random, within applications operating for extended periods of time
in state-aware mode (preserve mode 1).
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: CSP.Gateway
Platforms: OpenVMS
DevKey: CMT075
Summary: Emergency fix for a potential issue in the Gateway's garbage
collector that could lead to an accumulation of 'defunct' connections
Description:
This build represents an emergency fix for a potential
issue in the Gateway's garbage collector that could result in the garbage
collector becoming temporarily suspended, which, in turn, would lead to an
accumulation of 'defunct' connections over a short period of time. The Windows
and UNIX builds will automatically recover from this issue. The OpenVMS NSD may
throw a fatal 'access violation'.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: CSP.Gateway
Platforms: Tru64
DevKey: CMT078
Summary: Resolve an issue whereby a thread within the NSD would spin and
consume excess CPU time under Tru64 UNIX
Description:
Resolve an issue whereby a thread within the NSD would spin
and consume excess CPU time under Tru64 UNIX.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Medium |
Low |
No |
No |
Category: CSP.Gateway
Platforms: All
DevKey: CMT079
Summary: Improve the mechanisms within the NSD for detecting, and responding
to, an interrupt from the browser
Description:
Improve the mechanisms within the NSD for detecting, and
responding to, an interrupt from the browser.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: CSP.Gateway
Platforms: Tru64
DevKey: CMT080
Summary: Resolve an issue in the page output caching mechanism that could
result in a thread spinning (and using much CPU time) under Tru64 UNIX
Description:
Resolve an issue in the page output caching mechanism that
could result in a thread spinning (and using much CPU time) under Tru64 UNIX.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Medium |
Low |
No |
No |
Category: CSP.Gateway
Platforms: Tru64
DevKey: CMT082
Summary: Resolve further issues with the UNIX implementation of change
CMT071 (Manifested as the NSD aborting on Tru64 UNIX)
Description:
A fault was found in the mechanism for automatically
recovering state-aware sessions after the user-driven interrupt of a request.
This error would particularly occur for requests taking a number of seconds to
service. This problem may manifest itself as an occasional SIGSEGV fault (code
11) which would often be followed by the OS issuing an abort signal (code 6) to
the NSD.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Medium |
Low |
Yes |
No |
Category: CSP.Gateway
Platforms: All
DevKey: CMT083
Summary: Introduce a better filter for malformed URLs (and incorrectly
specified components within otherwise valid URLs)
Description:
Introduce a better filter for malformed URLs (and
incorrectly specified components within otherwise valid URLs). The specific
examples are:
http://127.0.0.1/csp/samples/menu.csp?&"
http://127.0.0.1/csp/samples/menu.csp?&=
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
Yes |
Yes |
Category: System
Platforms: All
DevKey: DAS445
Summary: Fix memory leak in Job Servers
Description:
Each time a Job Server restarted the virtual memory count
would increase. This memory leak has been corrected.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Languages.Caché Basic
Platforms: All
DevKey: DAS446
Summary: Fix CachéBasic DatePart() and DateDiff() with week parameter
Description:
The "ww" option for DateDiff() and DatePart() is now
working correctly.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Languages.Cache Basic
Platforms: All
DevKey: DAS449
Summary: On all platforms, make max udp packet size for DCP be 1468
Description:
The default size had been 3600 on VMS. On some VMS
versions, this resulted in fragmentation which in turn caused occasional DCP
hangs.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Medium |
Low |
No |
No |
Category: SQL.GateWay
Platforms: All
DevKey: DLP1002
Summary: <INVALID OREF>zSQLGWExecute+5^%ooLibrary.DynamicQueryGW.1
Description:
Fixed the following sequence
temp ;
Set conn=##class(%SQLGatewayConnection).%New()
Set res=##class(%ResultSet).%New("%DynamicQuery:SQL")
Write conn.Connect("CACHE5B476 Samples","_system","")
Set res=##class(%ResultSet).%New("%DynamicQueryGW:SQLGW")
Write res.Prepare("select * from Sample.Company",,conn)
Write res.Execute()
q
which generated a <INVALID
OREF>zSQLGWExecute+5^%ooLibrary.DynamicQueryGW.1 error in 5.0. This error is
caused by an oref in a $list structure. The structure of qHandle was changed
from a $list() to a local array.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Stream
Platforms: All
DevKey: DLP1007
Summary: %Delete leaves open transaction
Description:
%Delete in a class with a character stream leaves a
transaction open if you try to delete a non-existing id.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: DLP986
Summary: Fix bug in check for Class compiler interrupt
Description:
Prior to this change an attempt to compile a large number
of classes which generated long error messages would generate a <LIST> error and
classes which do not have errors will not be runnable. After this change the
correct error message (not a <LIST> error) will be reported and other classes
which successfully compile in the same compile cycle should be runnable.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: DLP992
Summary: Qualify StorageToLogical call with property name
Description:
Corrected a problem in exporting Caché classes which have
been converted from release 4.x to 5.0.0 and subsequently exported to Java.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: DLP993
Summary: Check actual number of parameters against formal spec
Description:
Dynamic queries are preparsed and literals are replaced
with '?'. The preparsed query is used to lookup a cached query. If a suitable
cached query is found it is used otherwise a new query is constructed and
cached. The preparser recognizes '?' and reports their location. The location
and value of substituted literals is also reported. The dynamic query as
implemented in %DynamicQuery::SQL only supports 16 formal arguments. The dynamic
query compiler was incorrectly including substituted literals when checking to
see if more than 16 '?' are specified in the query. If >16 an error 'Too many
parameters' is returned.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: SQL
Platforms: All
DevKey: DLP996
Summary: Add Message property to %SQLProcContext
Description:
Additional error detail is often provided to xDBC clients
from the %msg local variable. SQL places additional information in that
variable. Stored procedures report SQL error information and rows processed in
the %sqlcontext object. However, this object did not provide a property in which
to place additional error information.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: Object.Class Compiler
Platforms: All
DevKey: DLP998
Summary: Count only actual parameters in a dynamic query
Description:
When a dynamic query is initially cached all literals are
replaced with parameters. Then all parameters are reported by GetInfo. It is not
valid that a replaced literal be reported as a parameter. GetInfo() now
constructs parameter information from the query as submitted. Only parameters
actually contained in that query will be reported by GetInfo().
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Medium |
Medium |
No |
Yes |
Category: System.I/O
Platforms: All
DevKey: DMD032
Summary: Fix rare access violations when using |TNT| devices on Windows
Description:
This fix corrects an error when using |TNT| devices that
manifested itself as access violation errors on Windows.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: System.TCP Devices
Platforms: Windows
DevKey: DMD035
Summary: Increase the size of the ctelnetd listen queue
Description:
Increased the size of the telnet daemon's listen queue to
prevent failed connection attempts if many users are connecting at approximately
the same time.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: System.Shutdown
Platforms: All
DevKey: DMD038
Summary: Create a CACCVIO-PID.LOG file for PAGRDERR and PAGRDERRXM
errors
Description:
If there is a hardware problem that leads to a SS$_PAGRDERR
or SS$_PAGRDERRXM error, this will be logged in a CACCVIO-PID.LOG file.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: SQL
Platforms: All
DevKey: DPV1895
Summary: Fix return type for some ODBC Scalar functions
Description:
Some date- and time-related functions previously reported
their results using the wrong ODBC datatype. Specifically, they returned a
DOUBLE when they should have returned an INTEGER. The functions are:
- second
- minute
- hour
- week
- month
- year
- dayofweek
- dayofmonth
- dayofyear
The following functions previously reported DOUBLE and
now report VARCHAR:
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Medium |
Yes |
No |
Category: SQL
Platforms: All
DevKey: DPV1899
Summary: Check %ALTER privilege on the view definition when ALTER VIEW is
executed
Description:
A bug has been fixed where an ALTER VIEW statement could be
executed by a user even if the user did not have %ALTER privilege on the view
definition. Now the privilege is properly checked before the ALTER VIEW
statement is executed.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: SQL
Platforms: All
DevKey: DPV1903
Summary: Properly generate include files in 2nd through Nth T# routine
Description:
There were actually two issues: 1) The #include <INCLUDE
file> was missing from the 2nd through Nth T# routines. This was because of a
simple problem in create^%qaccpq2 where the number of lines in the ^rMAC() entry
was set to one less than the actual number after the include files were added.
2) The second issue is the create^%qaccpq2 function was not handling the case
where an include file contained code. It put the include file in the MAC
routine, but it was never expanded in the INT routine, which is built alongside
the MAC routine. I added code to call LINES^%qarmac with the shell of the 2nd
through Nth routines in create^%qaccpq2. Then put the results into the ^ROUTINE
global. This means any code in the include files will be present in these
routines. This was never an issue with the first routine because it is built
slightly different in %qadctab.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Medium |
Yes |
No |
Category: SQL
Platforms: All
DevKey: DPV1910
Summary: Don't include fields from parent table in conditional map condition
when turning nonnull index into conditional index
Description:
If you have a child of a child table, and set up a nonnull
index, the following occurs. The subscripts of the index corresponding to
parentref list, which are not fields of the current child table, end up
generating not null conditions for these fields. Therefore, they will not be
satisfied by any query conditions because they aren't even fields of the child
table.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Medium |
Yes |
No |
Category: SQL
Platforms: All
DevKey: DPV1917
Summary: Rebuild indices are after datatype has changed to/from a string via
DDL
Description:
When a DDL ALTER TABLE <table name> ALTER COLUMN
statement is used to change the type of a column to or from a STRING datatype,
any indices on that column are rebuilt. This ensures that each index reflects
the correct collation.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: SQL
Platforms: All
DevKey: DPV1918
Summary: Support use of Map Variables in Data Access and Full Row Reference
expressions
Description:
Caché SQL now support references to map variables (such as
(1D1(, (1D2), (3D1), and so on) in %CacheSQLStorage RoReference and DataAccess
expressions.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: SQL
Platforms: All
DevKey: DPV1920
Summary: Add support for MS SQL Server style CONVERT function
Description:
Caché SQL now supports the CONVERT() function for ease of
migrating from MS SQL Server applications. The syntax for the function is:
CONVERT ( data_type , expression [ , style ] )
Arguments:
data_type - Any datatype supported in Caché SQL. This is the
datatype that the expression will be converted to. The datatype specified here
will use the DDL Datatype Definition Table to determine the Caché datatype to
convert it to. The only meaningful datatype parameter used is the length
(VARCHAR(20)) which is translated to the MAXLEN datatype parameter
(%Library.String(MAXLEN=20)).
expression - Any valid Caché SQL expression.
style - Is the style of date format used to convert DATE, TIME, or TIMESTAMP
data to character data (VARCHAR). In the table, the two columns on the left
represent the style values for DATE, TIME, or TIMESTAMP conversion to character
data. Add 100 to a style value to get a four-place year that includes the
century (yyyy).
Without century With century (yyyy) Input/Output**
(yy) (yyyy)
- 0 or 100 (*) mon dd yyyy hh:miAM (or PM)
1 101 mm/dd/yy
2 102 yy.mm.dd
3 103 dd/mm/yy
4 104 dd.mm.yy
5 105 dd-mm-yy
6 106 dd mon yy
7 107 Mon dd, yy
8 108 hh:mm:ss
- 9 or 109 (*) mon dd yyyy hh:mi:ss:mmmAM (or PM)
10 110 mm-dd-yy
11 111 yy/mm/dd
12 112 yymmdd
- 13 or 113 (*) dd mon yyyy hh:mm:ss:mmm(24h)
14 114 hh:mi:ss:mmm(24h)
- 20 or 120 (*) yyyy-mm-dd hh:mi:ss(24h)
- 21 or 121 (*) yyyy-mm-dd hh:mi:ss.mmm(24h)
- 126(***) yyyy-mm-ddThh:mm:ss:mmm(no spaces)
- 130* dd mon yyyy hh:mi:ss:mmmAM
- 131* dd/mm/yy hh:mi:ss:mmmAM
* The default values (style 0 or 100, 9 or 109, 13 or 113, 20 or 120, and
21 or 121) always return the century (yyyy).
** Input when converting to DATE,
TIME, or TIMESTAMP; output when converting to character data.
*** Designed for
XML use.
For conversion from DATE, TIME, or TIMESTAMP to character data, the
output format is as described in the table. Caché supports the following type
conversions using the CONVERT function:
From DATE to VARCHAR
Example: CONVERT(VARCHAR(20),CURRENT_DATE,100)
Returns: 'Jan 28 2003 03:00PM'
From TIME to VARCHAR
Example: CONVERT(VARCHAR(20),CURRENT_TIME,8)
Returns: '15:23:14'
From TIMESTAMP to VARCHAR
Example: CONVERT(VARCHAR(20),CURRENT_TIMESTAMP,0)
Returns: 'Jan 28 2003 03:00PM'
From INTEGER, SMALLINT, or TINYINT to VARCHAR
Example: CONVERT(VARCHAR(20),Age)
Returns: '47'
From DOUBLE or NUMERIC to VARCHAR
Example: CONVERT(VARCHAR(20),Total_Cost)
Returns: '197.21'
From VARCHAR to VARCHAR (used for truncation)
Example: CONVERT(VARCHAR(20),Description)
Returns: 'Weight measurement o'
From VARCHAR to DATE
Example: CONVERT(DATE,'28 Jan 2003 15:12:13:436',113)
Returns: 59197
From TIMESTAMP to DATE
Example: CONVERT(DATE,CURRENT_TIMESTAMP)
Returns: 59197
From VARCHAR to TIME
Example: CONVERT(TIME,'28 Jan 2003 15:12:13:436',113)
Returns: 54733
From TIMESTAMP to TIME
Example: CONVERT(TIME,CURRENT_TIMESTAMP)
Returns: 56508
From VARCHAR to TIMESTAMP
Example: CONVERT(TIMESTAMP,'28 Jan 2003 08:13:04:443AM',130)
Returns: '2003-28-01 08:13:04.443'
From DATE to TIMESTAMP
Example: CONVERT(TIMESTAMP,CURRENT_DATE)
Returns: '2003-28-01 00:00:00'
Note: When converting to a TIMESTAMP value, if the source
value is missing the Time component, the converted time
is 12:00:00AM
From TIME to TIMESTAMP
Example: CONVERT(TIMESTAMP,CURRENT_TIME)
Returns: '2003-28-01 15:23:34'
Note: When converting to a TIMESTAMP value, if the source
value is missing the Date component, the converted date
is the current day.
From <ANY type> to INTEGER, SMALLINT, or TINYINT
Example: CONVERT(INTEGER,CURRENT_DATE)
Returns: 59197
From <ANY type> to NUMERIC or DECIMAL
Example: CONVERT(NUMERIC,CURRENT_DATE)
Returns: 59197
Be very careful not to confuse the CONVERT(datatype, expression [,style])
function with the {fn CONVERT(expression, datatype)} ODBC Scalar function, they
are different. If an invalid value is passed to the CONVERT function, an
SQLCODE=-141 error will be returned at run-time. This is a new error code:
SQLCODE = -141
Invalid input value passed to the CONVERT function
CONVERT(TimeStamp,'abc',131)
Will throw an SQLCODE=-141 error.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: SQL.JDBC
Platforms: All
DevKey: DPV1921
Summary: Fix JDBC reporting of foreign keys
Description:
Using the JDBC getExportKeys() function, Caché did not
correctly report foreign keys when a table contained multiple foreign key
references to another table.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: SQL.JDBC
Platforms: All
DevKey: DPV1922
Summary: Correct JDBC reporting of parent reference field
Description:
When using the JDBC getExportedKeys() function, Caché did
not correctly report the name of the parent reference field.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: SQL
Platforms: All
DevKey: DPV1924
Summary: Add checks to make sure string fields don't contain map piece
delimiter characters
Description:
Caché SQL has been enhanced to automatically detect field
values that contain characters used as delimiters in the associated global node
where the field is stored. This validation, which is OFF by default, is
controlled by a new class parameter, STORAGEDELIMITERCHECK.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
Yes |
Yes |
Category: SQL
Platforms: All
DevKey: DPV1927
Summary: Fix query generated %QuickLoad function to not scan entire
table
Description:
We previously changed the Quick* functions so we treat all
ID's and references as Logical values. As part of this change I used some WHERE
conditions in an SQL statement of the form:
WHERE %INTERNAL(%ID) = :value
This caused the query to loop over all the records instead of fetching
just the record we are looking for. I'm not sure why %INTERNAL(%ID) isn't
treated the same internally as %ID, but I guess the query processor is not
optimized for it. It has been changed to just use a query of the form %ID =
:value for QuickLoad and the other instances where this code generation might
occur.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: SQL
Platforms: All
DevKey: DPV1935
Summary: Fix DATEPART("wk",...) calculation
Description:
The calculation of week numbers carried out by the DATEPART
function returned an incorrect value. For example,
DATEPART("wk","2003-02-10")
returns 6 instead of the correct result, 7. This function is included for
Sybase SQLServer compatibility.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: SQL
Platforms: All
DevKey: DPV1940
Summary: Fix code generation problem with large indices
Description:
Corrected a problem where the code generator was
erroneously splitting lines when they were longer than 200 characters. This
specific case was a long index name with 8 or more fields in the index.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Medium |
Yes |
No |
Category: SQL
Platforms: All
DevKey: DPV1941
Summary: Fix QuickLoad problem involving primary keys and SQL queries
Description:
Corrected a code generation problem with QuickLoad when
there was a Primary Key index that was also the IDKey and the loading of a row
required an SQL query instead of direct global access.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Medium |
Yes |
No |
Category: SQL.Syntax
Platforms: All
DevKey: DPV1942
Summary: Fix <UNDEFINED> in parsing string function
Description:
Corrected an <UNDEFINED> error in the SQL scalar function,
STRING.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: SQL
Platforms: All
DevKey: DPV1943
Summary: Fix insert select of stream field
Description:
Corrected a problem with INSERT ... SELECT
commands involving stream data that could result in incorrect values being
inserted.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Medium |
Yes |
No |
Category: SQL
Platforms: All
DevKey: DPV1944
Summary: Store empty LONGVARCHAR streams with "" instead of $c(0)
Description:
When saving a literal value of '' (SQL Empty String) in a
LONGVARCHAR field (GlobalCharacterStream), we now store a zero-length string
("") in the stream object rather than $c(0).
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: SQL
Platforms: All
DevKey: DPV1945
Summary: Correct TuneTable selectivity calculation for tables with UNIQUE
fields
Description:
TuneTable may incorrectly calculate the Selectivity for a
table with UNIUQUE fields.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Medium |
Yes |
No |
Category: SQL
Platforms: All
DevKey: DPV1946
Summary: Support global reference with vertical-bar syntax in mappings
Description:
Using vertical bars in global mapping references now works
as expected without compilation errors. That is:
^[$get(^nsp)]a -> always worked
^|$get(^nsp)|a -> now works
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
Yes |
Yes |
Category: SQL
Platforms: All
DevKey: DPV1947
Summary: Add CONSTRAINT_OBJECT_NAME to %Library.SQLCatalog.SQLConstraints
procedure
Description:
A column CONSTRAINT_OBJECT_NAME has been added to the
%Library.SQLCatalog_SQLConstraints stored procedure. This column contains the
Object name of the foreign key or index which projected the constraint. The full
rowspec of the SQLConstraints procedure is now:
SQLConstraints Procedure
%SQLCatalog_SQLConstraints('tablename')
Takes 1 %String/VARCHAR type parameter which is the name of a BaseTable.
Returns all fields in the table:
ROWSPEC = CONSTRAINT_NAME:%String - Name of the constraint
TYPE:%String - Type of constraint
CONSTRAINT_DATE:%String - Constraint info depends on type
CONSTRAINT_OBJECT_NAME:%String - Object name of the constraint
Rows are returned in no particular order
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: SQL.Server
Platforms: All
DevKey: DPV1954
Summary: Fix Addqout^%qserver with > 32000 characters of data
Description:
Addqout, in xDBC server, did not handle more than 32000
characters.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Medium |
No |
Yes |
Category: SQL
Platforms: All
DevKey: DPV1962
Summary: Field-specific UPDATE triggers execute too often
Description:
Corrected a problem that could cause an update trigger,
which should be executed only when the values of specific fields have changed,
to be executed when any field's value changed. Here's a specific example:
Create Trigger LogArt AFTER UPDATE OF Price on pl31607 REFERENCING NEW ROW as NR
INSERT INTO pl31607Log(LogDate,ARTID, Price)
values ( CURRENT_TIMESTAMP, NR.ARTID, NR.PRICE)
was getting executed for every update, not just updates of the Price
field.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: SQL
Platforms: All
DevKey: DPV1968
Summary: Support Quick %nolock=2 which simply means behave as if standard
SQL statement
Description:
Honor current transaction isolation in Quick* API.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Medium |
No |
Yes |
Category: SQL
Platforms: All
DevKey: DPV1969
Summary: Ensured Proper Operations of Descending-Order Sorts
Description:
Previously, a descending-order sort in certain queries (for
example, those containing "COUNT(*)") resulted in data sorted in ascending order
when it should have been descending. This has been addressed.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production |
This change is an enhancement |
Medium |
Low |
No |
No |
Category: Studio
Platforms: All
DevKey: (See below)
Summary: Multiple improvements to Studio
Description:
The following improvements were made to Studio:
- AGC185: Studio COS parser - improve handing of unclosed /*
- AGC204: Studio SQ parser - accept CONVERT scalar function
- DVU623: Allow 5 decimal points for selectivity
- DVU625: Cancel Debugger if user select Cancel in "SetDebug Target" dialog
- DVU626: Open Routine doesn't use Correct SourceControl
- DVU627: Added source control support for project and access to source
control from project tree.
- DVU628: No longer open added to project items automatically.
- DVU629: Generate valid Basic method in override Get/Set for Properties
- DVU632: No longer update the source code when copying a class
- DVU634: Change behavior of Delete Item in Studio
- DVU635: Make autocomplete in "GoTo" combo Case Sensitive
- DVU638: Template URL now have a parameter &DocumentNamespace in
addition to &Namespace.
- DVU640: The right-click menu has a trailing section-separator with no
following item, unless invoked on a package. This is fixed.
- DVU641: Remember the state of "Include System Items" in Open Dialogue
- DVU642: Change menu item 'Recent Files' to 'Recent Routines'
- DVU643: Added Message Box on Find Next before wrapping
- DVU644: Support Ctrl-Tab and Shift -Tab in Find/Replace dialog
- DVU645: Reset the STORAGESTRATEGY to "" if it was Deleted
- DVU648: Check inspector changes before closing studio.
- DVU650: 'Delete' button deletes only first element of multiple select
- DVU652: New Index Wizard. Disable Bitmap option for IDKEY, Unique and
Primary keys.
- DVU653: Eliminate error when Deleting new class
- DVU654: Address problem when creating a COS routine and then using Save As
.BAS
- DVU655: Fix Race Condition in Studio Display
- DVU656: Correct Ctrl/A behavior in output box
- DVU657: Loading class on Win XP cause multiple Inspector repaint.
- DVU658: It was possible that routine will exists without a timestamp. We
now check if it really exists before deciding that it was deleted.
- DVU659: export showed duplicate entries
- DVU660: Import dialog in Studio should have mask for *.csp,*.csr
- DVU661: If Registry is empty Connection Manager was showing "File not
find". We will not display this error any more.
- DVU673: Save color table after editing.
- DVU675: Changes to a newly created class are not saved upon exiting
Studio.
- DVU679: Correct tab order in File Open Dialog
- DVU687: Allow JavaScript editing in Studio.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.ActiveX
Platforms: All
DevKey: DVU630
Summary: Don't ask password for Namespace list in connection manager
Description:
If you have Caché Direct security turned on and you try to
use the SQL Manger you have to enter the Caché Direct User name and Password
several times. The error message for this has been fixed.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low
|
| No |
No |
Category: System
Platforms: All
DevKey: EKP009
Summary: Fix a DTM network emulation bug in $DATA
Description:
A bug in the DTM network emulation function zu107fun()
which would sometimes cause error code 258 has been corrected.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: Networking
Platforms: All
DevKey: GK169
Summary: Fix occasional segmentation violation when doing reverse $ORDER
over ECP on BIG-ENDIAN systems
Description:
Big endian gorder didn't check the returned value before
fetching on ECP systems. It was modified to check if there is a valid value
before de-referencing it.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Networking
Platforms: All
DevKey: GK170
Summary: ECP answer buffer overrun
Description:
This fixed a bug which caused answer buffer overruns in
ECP.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Networking
Platforms: All
DevKey: GK171
Summary: Improve the handling of asynchronous messages queued from the
server
Description:
This flag is set when the ECP read daemon is in the middle
of answering a request. If the flag is set then various requests may produce
asynchronous answer messages which could be inserted in the answer buffer,
otherwise asynchronous messages will be queued to be sent later.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Medium |
Low |
No |
No |
Category: Networking
Platforms: All
DevKey: GK173
Summary: On recovery failure acquire ECP client resource
Description:
On recovery failure, ECP released the exclusive ownership
of the client request buffer without owning the client resource. It has been
changed to (re)acquire the resource (if didn't own), before releasing the
exclusive ownership.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Networking
Platforms: All
DevKey: GK174
Summary: Accommodate largest possible size of UNICODE strings over ECP
Description:
5.0.0 client will hang if a 32K char uncompressed Unicode
string is set over ECP. If 5.0.1 client is connected to a 5.0.0 ECP server, a 32
char uncompressed Unicode string set will drop the ECP connection with ERSYSTM
error, and "bignet_net_read: Invalid pkt len - len.." msg in the server
cconsole.log. 5.0.1 ECP client and server is required to resolve this problem..
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Medium |
Low |
No |
No |
Category: Networking
Platforms: All
DevKey: GK175
Summary: When running ECP over old format databases (2Kb), optimization
information was sometimes (rarely) overwritten
Description:
If the block had optimization info, and the following
global reference ccc(common char count) is > optimization, then the delta was
left with a garbage value.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Networking
Platforms: All
DevKey: GK176
Summary: Ensure correct concurrent synchronization in ECP when allocating
space for a request entry
Description:
Code review uncovered a missing MEMBAR request which could
cause ECP client hangs or request corruptions. It could cause a hang or data
corruption. This has been fixed.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Networking
Platforms: All
DevKey: GK177
Summary: Correct rare ECP synchronization of the application server cache
(old format (2K) databases)
Description:
On rare occasions, if both a set AND a subsequent kill
affecting the same node in a 2Kb database had not been transmitted to the ECP
database server, the application server may misapply a delete node request.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Networking
Platforms: Linux, HP
DevKey: GK178
Summary: Fix handling of TCP write errors
Description:
Caché/Linux network connection doesn't detect network
disconnection.. Redhat 7.3 and 8.0 have a TCP bug: If you overflow the outQ,
then drop the server connection, the client doesn't detect that the connection
is gone/dead. There is no error from the platform when you write, and hangs
forever if the server is windows. MS resets the peer connection (it works fine
with windows), but other UNIXes i.e. Sparc or HPux don't. Worst of all, it
leaves the system buffers allocated for a very long time. We modified nettcp to
wakeup every 5 seconds to check for halt request.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Networking
Platforms: All
DevKey: GK179
Summary: ECP client didn't maintain server unique ID
Description:
We modified the system to remember the server GUID after
connection/session initialization. It was getting zeroed when session recovery
was denied. Then later the session wasn't recoverable because the server didn't
accept the GUID, and complained with session out of date message.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Networking
Platforms: All
DevKey: GK181
Summary: Added $System.Server HostName and IPAddresses
Description:
Added:
$system.Server.HostName()
; Returns current host name
$system.Server.IPAddresses(<OPTIONAL name host>)
;Returns specified host IPs (comma separated)
;If host name is not specified returns current host IPs.
;Note: it returns configured IPs not necessarily the actual NIC IPs
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: Networking
Platforms: All
DevKey: GK182
Summary: Slowdown ECP worker dmn creation
Description:
Pause very very briefly to allow ECP worker daemons to
start after launching.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Networking
Platforms: All
DevKey: GK184
Summary: Add process ID of client process to journal record
Description:
Modified ECP server to store the client sys number and pid
in the journal.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Medium |
No |
Yes |
Category: Networking
Platforms: All
DevKey: GK185
Summary: Increased ECP cluster master connection timeout
Description:
When running ECP as a lock transport for Caché clusters,
the timeout had been set too low to accommodate cluster failover.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Medium |
Low |
No |
No |
Category: Networking
Platforms: All
DevKey: GK186
Summary: On cluster reconnect, exit the old ECP connection gracefully
Description:
When an application server establishes an ECP connection to
a node that happens to be the master of a cluster and that node is forced down
in the narrow window when the connection is still starting up, cluster recovery
will now succeed.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Networking
Platforms: All
DevKey: GK194
Summary: ECP server to keep cluster slave session forever
Description:
If a slave node of cluster (running ECP for lock transport)
is disconnected from the network, it can cleanly reconnect later on. Previously
cleanup was incomplete so that reconnect attempts were unsuccessful.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Networking
Platforms: All
DevKey: GK195
Summary: TCP-send interrupted system call handling
Description:
We modified the system to ignore the exceptions bit on
select, if select says the call was interrupted.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Networking
Platforms: All
DevKey: GK197
Summary: Properly handle modifying ECP server (via control panel or config
manager) when already up and running
Description:
The ECP client structure is not initialized properly by ECP
reinit. This corrects the issue.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: System.Cluster Specific
Platforms: All
DevKey: HYY732
Summary: preserve wij info of the old master for failover
Description:
Fixes a problem that could cause cluster journal recovery
to fail if the previous master died nicely.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Medium |
Low |
Yes |
No |
Category: System.Journaling
Platforms: All
DevKey: HYY733
Summary: address an issue of journal daemon hanging
Description:
Corrected a problem where in rare occasions journal daemon
might skip writing some journal buffers to disk, causing the system to hang
eventually.
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: System.Journaling
Platforms: All
DevKey: HYY734
Summary: During cluster failover/recovery, transaction rollback would fail
if the new master had more than 254 databases mounted
Description:
Now the recovery code properly handles the maximum number
of databases permitted
Likelihood of happening |
Risk this change introduces new problems |
Distributed in ad hoc release and installed
in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: System.Journaling
Platforms: OpenVMS
DevKey: HYY741
Summary: fix a bug that caused journal daemon to skip writing some journal
buffers and result in system hang
Description:
Addressed a problem where journal daemon might skip writing
certain journal buffers after journal file has switched, resulting in corrupted
journal file and system hang. The circumstance that caused it to happen is
present on Windows and OpenVMS platforms in 4.1 or Windows platforms in 4.0 and
earlier. This problem is much less likely to occur in Caché than in earlier
releases. It is fixed in this release. The primary conditions for the problem to
occur are:
- "free system on journal I/O error", and
- there is no space in either primary or alternate directory at one point
and then
- some space is freed up in the alternate journal directory.
The last one, freeing up some space in the alternate directory, is
not a necessary condition, but it makes the problem much more likely to
happen.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: System.Journaling
Platforms: All
DevKey: HYY742, JO1689
Summary: Address a deadlock situation between journal daemon and write
daemon during jrnswitch
Description:
Addressed a problem on non-cluster platforms (Windows and
UNIXes) where journal daemon might hang at switching journal file.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Medium |
Low |
No |
No |
Category: System.Journaling
Platforms: OpenVMS
DevKey: HYY743
Summary: Correct race condition on journal switching on OpenVMS
Description:
Addressed a theoretical journal corruption problem caused
by the journal switch not waiting for journal asynchronous I/O to complete.
This has never been encountered in the field and effort to demonstrate this
potential problem were unsuccessful. This problem was identified during code
review related to other changes in journaling.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: System.Shadowing
Platforms: All
DevKey: HYY750
Summary: address a performance problem with shadowing
Description:
Correct a performance problem with fast-mode (or
block-mode) shadowing where the shadow may consume significant CPU locating the
end of journal (GEND^SHDWCBLK). The problem is present in Caché 4.1 and
earlier.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Medium |
Low |
Yes |
No |
Category: System.Shadowing
Platforms: All
DevKey: HYY751
Summary: correct a potential problem in fast-mode shadowing
Description:
We found a problem during code review and we believe
clients have never experienced it. Potentially, the end of the journal could
be marked incorrectly on the shadow server which would preclude further
journal restoration on the shadow.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: System
Platforms: All
DevKey: JB106
Summary: Addressed Issue with Task Not Rescheduling Properly
Description:
Fixed scheduling problem and extra GetDay label.
Previously, a task which was scheduled multiple times per day could not be
rescheduled for more than one day. On the last occurrence of the schedule, the
task should have been rescheduled but was not. This has been corrected.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production |
This change is an enhancement |
Medium |
Low |
No |
No |
Category: SQL.ODBC
Platforms: All
DevKey: JCN339
Summary: Force dialogs to use narrow API when Unicode is defined, fix for
Win9x
Description:
Several dialogs do not appear on Windows 9x platforms,
because when building the Unicode version of the driver, the Unicode version
of several dialogs were being called which is a noop on Win9x platforms. This
occurred when asking for a password or username by the driver. This has been
fixed.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Languages.Caché Basic
Platforms: All
DevKey: JCN344
Summary: Backport Critical bug fixes for CachéBasic on usparc
platform
Description:
Compiling the following .bas file using %RCOMPIL would
crash prior to this correction.
#classcontext csp.basic
Sub zOnPageBODY()
count = request.Get("COUNT",0)
end sub
#endclasscontext csp.basic
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: SQL.ODBC
Platforms: All
DevKey: JCN365
Summary: wrong default setting for "Unicode SQLTypes"
Description:
"Unicode SQLTypes" should be off by default for a
previously installed DSN. Previously it was set to on, if the Registry Key is
not present.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Medium |
Low |
No |
No |
Category: Languages.Caché Basic
Platforms: OpenVMS
DevKey: JCN377
Summary: Fix typo in calling CanUnloadNow function in COM modules on UNIX
and OpenVMS
Description:
The CanUnloadNow function is exported in CachéBasic,
CachéCOM, CachéPM, and CachéScanner. A typo in the call on OpenVMS and UNIX
was calling CanUnLoadNow with a capital "L" causing it to never be run during
the unloading of these modules by CachéCOM.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: SQL.ODBC
Platforms: All
DevKey: JCN379
Summary: UNIX ODBC: SQLError returns some garbage..
Description:
A buffer created by an application is passed to ODBC to
have the error filled in. The SQLError function in CachéODBC tried for this
particular error to pass back a new pointer to a string, but UNIX iODBC
headers only allow a Const pointer in the SQLError prototype, and the new
string is not returned. This applies only to this particular type of error, as
other errors copy string to the application buffer properly.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: SQL.ODBC
Platforms: All
DevKey: JCN381
Summary: Prevent possible access violation on logging buffer overrun
Description:
Logging could encounter a buffer overrun when appending
on the null character for the end of a string. This has been corrected.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: SQL.ODBC
Platforms: All
DevKey: JCN389
Summary: Fix for #Deleted problem in Access when using numeric column as
primary key
Description:
Access does not handle numeric primary keys in a
consistent way when comparing their values. Normally Access will perform an
internal comparison on the first ten primary keys and if it does not match
their internal representation they return a #Deleted for a given row. Our
driver consistently formats Numeric data converted to SQL_C_CHAR or
SQL_C_WCHAR as 0.00 if the scale is 2, whereas SQLServer returns the same data
as .00. While returning .00 will fix the Access #deleted issue, it should only
be done for the value 0, as SQLServer does not handle negative numbers in
Access, but our convention of returning a leading zero before the decimal
place works in Access. Why Access considers 0.00 to be different than 0 or .00
appears to be a bug unique to Access. The driver will provide a work around by
returning ".00" rather than "0.00". While this is a slight formatting change
only for the 0 value, it seems a better alternative which allows the use of
numeric primary keys in Access.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: SQL.ODBC
Platforms: All
DevKey: JCN391
Summary: Poor error message if ODBC DSN contains invalid namespace
Description:
Added "Invalid Namespace" message for 410 errors.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: SQL.ODBC
Platforms: All
DevKey: JCN393
Summary: Eliminated Memory Leak with Streams and ADO
Description:
Previously, inserting streams into Caché caused a memory
leak. This change corrects it.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production |
This change is an enhancement |
Low |
Low |
No |
No |
Category: System
Platforms: Windows
DevKey: JLC464
Summary: Use correct error macros on Windows
Description:
On very rare circumstances, the wrong OS-level error code
may have been logged on Windows platforms when a system error occurred.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: System
Platforms: AIX
DevKey: JLC467
Summary: Correct overflow in handling OS files limits on 64 bit AIX
Description:
Make the file limits check work appropriately on 64-bit
AIX.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: System
Platforms: OpenVMS
DevKey: JLC468
Summary: Correct handling of file sizes in a certain narrow range on
OpenVMS
Description:
A problem involving files size calculation with
inadequate precision has been corrected.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: System
Platforms: Windows, Tru64
DevKey: JLC484
Summary: Startup code could fail in rare circumstances when over 4 GB of
global buffers were configured
Description:
Corrected a problem with offsets into a 4GB+ buffer pool
being truncated to 32 bits.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: System
Platforms: OpenVMS
DevKey: JLC485
Summary: On OpenVMS, when we cannot allocate as much memory as initially
requested but are successful allocating a smaller number, the system still
reports the initial value
Description:
For OpenVMS when we fail to get the requested amount of
resident memory there's a loop that reduces the allocation request and retries
until we hit some minimum. This loop works fine but it never recalculates the
# of global buffers we actually have. This has been fixed.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Medium |
Low |
No |
No |
Category: Object.ActiveX
Platforms: All
DevKey: JN088
Summary: Objects deleted prematurely when ResultSet used with .NET
Description:
Customer was experiencing null object exceptions with
.Net. The problem was due to our implementation of ResultSet deleting an
object rather than decrementing a reference count. This has been fixed.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: Object.ActiveX
Platforms: All
DevKey: JN089
Summary: Make Factory.SetOutput() work with .Net
Description:
The Factory.SetOutput() method would not work with .Net.
Output from Caché would not be sent to the TextBox or other UI Control. This
now works for .Net Factory.SetOutput(TextBox1)
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: SQL.DDL
Platforms: All
DevKey: JN090
Summary: CREATE PROCEDURE argument length omitted in Studio
Description:
There was a typo, introduced a while back when a compiler
optimization bug was fixed preventing correct parsing of parameterized types
in query and method arguments. This has been fixed.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: Cube
Platforms: Windows
DevKey: JO1654
Summary: The Caché service on Windows no longer wakes up to gather
statistics
Description:
Since the system viewer is no longer available, there is
no reason for the system service to wake up to gather these.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Medium |
Low |
No |
No |
Category: System.Backup/Restore
Platforms: All
DevKey: JO1661
Summary: Correct a problem whereby a user would sometimes be forced to do
a full backup when an incremental backup should have been an option
Description:
There were occasions where internal flags that controlled
whether the next backup would be incremental we incorrectly so. This meant
that the next backup HAD TO BE a full backup. No data could be lost but
operations may have been adversely affected (since full backups require more
time than incremental).
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Medium |
Low |
No |
No |
Category: System
Platforms: All
DevKey: JO1662
Summary: Correct a situation where very short waits (less than 100 mSec)
could sometimes result in no wait at all (platform dependent)
Description:
This is mostly an internal change but the effects may
have been seen in a number of places.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Medium |
Low |
No |
No |
Category: System.Cluster Specific
Platforms: All
DevKey: JO1665
Summary: Fix a race condition on Caché clusters
Description:
This fixes a race condition on Caché clusters between
updating the available block information on disk and in memory when doing a
database expansion.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: System.Cluster Specific
Platforms: All
DevKey: JO1668
Summary: Fix false <FILEFULL> in cluster mounted 2kb database
Description:
This resolves a rare case in which a false
<FILEFULL> error could occur in a 2-KB formatted cluster-mounted database. This
is difficult to reproduce and requires extremely high rates of database
updates across multiple cluster nodes. The expansion now waits for updates
from other nodes and retries the expansion many times before reporting
<FILEFULL>.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: System
Platforms: OpenVMS
DevKey: JO1671
Summary: Fix big buffer pool allocation on OpenVMS & test global
buffer allocation in mcominit
Description:
The calculations for the # of bytes in the buffer pool on
OpenVMS were incorrect. This has been fixed.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: System
Platforms: OpenVMS
DevKey: JO1672
Summary: Update # of global buffers when we reduce resident memory
allocation
Description:
For OpenVMS, when we fail to get the requested amount of
resident memory there's a loop that reduces the allocation request and retries
until we hit some minimum. This now correctly recalculates the # of global
buffers we actually have.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: System
Platforms: All
DevKey: JO1673
Summary: Change reserved block alloc/dealloc code to skip bad maps, not
abort
Description:
The code which reserves blocks in the database now skips
erroneous map entries rather than aborting.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Medium |
Low |
No |
No |
Category: System.Cluster Specific
Platforms: All
DevKey: JO1674
Summary: Fix expansion daemon so it runs if another process needs it
during cluster failover
Description:
This improves the expansion daemon operation by allowing
it to run during cluster failover if it is needed.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Medium |
Low |
No |
No |
Category: System
Platforms: OpenVMS
DevKey: JO1675
Summary: Don't skip processes that return SS$_SUSPENDED in $GETJPI from
cforce on OpenVMS
Description:
We changed the logic of forcing jobs to terminate to
include those jobs that are suspended or unresponsive. Previously, forcing
CACHE down may have skipped certain processes. This would mean that not all
shared memory was freed which would lead to problems on restart, requiring a
second force.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: System
Platforms: All
DevKey: JO1676
Summary: Set wdstop when any write daemon exits
Description:
If a write daemon exits databases modifications will be
suspended. CFORCE will have to be used to shut down the system in this
situation. Note that certain circumstances cannot be caught for example KILL -9 on
UNIX.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: System
Platforms: Tru64
DevKey: JO1680
Summary: Use NANOSLEEP instead of select() for timed sleeps on HP-UX
Description:
This is a performance improvement on very, very busy
systems.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: System
Platforms: HP-UX
DevKey: JO1681
Summary: Adjust spinloop counters on HP-UX
Description:
This is a performance improvement on very, very busy
systems.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Medium |
Low |
No |
No |
Category: System
Platforms: All
DevKey: JO1683
Summary: Fix exception allocating more than 2^31 bytes of global
bdb's
Description:
A problem has been resolved which caused exceptions
during startup trying to allocate a global buffer pool larger than
approximately 32GB.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: System
Platforms: Tru64, OpenVMS
DevKey: JO1688
Summary: Change code that sets jobtype not to use OR except for APPMODE
flag & don't set APPMODE for ENQDMN
Description:
The ENQDMN processes, on OpenVMS and Tru64 clusters, were
categorized with the job type of Application Mode rather than System Process.
This led to confusing display in JOBEXAM.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: System.Journaling
Platforms: All
DevKey: JO1689
Summary: Changed journaling to avoid incorrect exits
Description:
Journaling was changed to eliminate a situation where it
could erroneously exit while in the middle of global operations leaving
systems resources locked.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production |
This change is an enhancement |
Low |
Low |
No |
No |
Category: Networking
Platforms: All
DevKey: JO1690
Summary: Correct problem with ECP application server restart
Description:
In certain circumstances, the connection could not be
reestablished or other errors may be reported.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Medium |
Low |
No |
No |
Category: System.Cluster Specific
Platforms: All
DevKey: JO1691
Summary: Correct problem with cluster failover when switch 13 or 14 was
set
Description:
A problem where cluster failover would be blocked if a
process had set switch 13 or 14 on the cluster master has been resolved.
Previously cluster failover would get "stuck" during the journal recovery
phases and the cluster would need to be forced down and restarted.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL1003
Summary: Return early from errors
Description:
If generating file (in a multi-file generate) had errors,
we continued to generate code for other files. We returned the bad generation
in a status. Now we will cease generation. Error will be returned immediately.
There is a trade-off here. In some ways continuing to generate code for files
was desirable. Now customer must fix all errors before he gets generated code.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
No |
No |
Low |
Yes |
Category: Object.Java
Platforms: All
DevKey: JSL1013
Summary: Allow DATASOURCENAME to override data source name in bean
implementation
Description:
There is a class parameter DATASOURCENAME. DATASOURCENAME
can be used to override the data source name in the bean implementation. For
instance, Parameter DATASOURCENAME="jdbc/common"; in the class results in the
following line being generated in bean implementation: String dataSource =
"java:/comp/env/jdbc/common";
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: Object.Java
Platforms: All
DevKey: JSL1015
Summary: Fix problem in creating and using finder extensions in EJB
Description:
To support programming finders and other extensions to
our generated EJB interface, this change form introduces the notion of
extensions. The basic idea is the following approach to adding a finder.
- Extend the generated bean implementation. ejb-jar.xml will point to this
extension as the bean implementation and the extended home and home local
interfaces. The extension will have the implementation of the finder.
- Have an extended home interface (and home local interfaces) that extends
the normal home interface. The extended home interface will contain the
finder prototype.
In this DevChange we augment the EJB Wizard to
allow it to automatically generate support for such extensions. We introduce a
new class parameter:
When this is set we change the generated code in the following way. For
the discussion, let's say the name of the persistent class from which the
entity bean is being generated is Package.Class. Let's say the EXTENSIONPREFIX
is Ext. In ejb-jar.xml, the <EJB-CLASS> is pointed to the extension. The name
of the extension is Package.EJBExt_Class_Bean. For example, for Sample.Person
the name of the normally generated bean implementation is
Sample.EJBPerson_Bean and the name of the extension (to which ejb-class
refers) is Sample.EJBExt_Person_Bean. In ejb-jar.xml, <LOCAL-HOME> points to
ISC.EJBExt_Class_Home_Local. In ejb-jar.xml <LOCAL> points to
ISC.EJBRegression_Local. Into these extensions one can put one's finder. We
generate extensions Package.EJBExt_Class_Home.java and
PackageEJBExt_Home_Local.java. Into these extensions one can put the prototype
for one's finder. We also automatically generate "stubs" for these extensions
if one sets the following class parameter
In this case we automatically generate stubs for
Package.EJBExt_Class_Bean.java, Package.EJBExt_Class.java and
PackageExt_Class_Home.java. In development, one would first turn EXTENSIONGEN
on and then turn it off once one has stubs to use. Here is an example of
defining these parameters in a class.
Class ISC.Regression Extends %Persistent [ ClassType = persistent ]
{
Parameter EXTENSIONPREFIX = "Ext";
Parameter EXTENSIONGENON=1;
etc.,
}
Here is an example of the generated home interface:
public interface EJBRegression_Home
extends javax.ejb.EJBHome,ISC.EJBExt_Regression_Home
With EXTENSIONGENON set to a non-zero value, we generate a stub for the
ISC.EJBExt_Regression_Home interface. After this stub is generated one can
place one's finder there and then turn off EXTENSIONGENON. Now one can
regenerate EJB code and one's extension will still be there and be operative,
so one's finder can accessed by EJB even after code regeneration. Note that the
extension to our generated bean can call getConnection in the bean
implementation to get the data source that can be passed to JDBC function
calls.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: Object.Java
Platforms: All
DevKey: JSL1016
Summary: Fix dataSource name
Description:
The dataSource name in EJB has been corrected. There
shouldn't be a slash after the colon.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: Object.Java
Platforms: All
DevKey: JSL1017
Summary: Produce code that compiles even when ROWID renamed
Description:
We generate value.getID() for ROWID accessor but this may
not be correct if ROWID has been defined to have a different name. This is now
fixed.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL1018
Summary: Allow Session Bean generation when PERSISTENCETYPE="CMP"
Description:
When PERSISTENCETYPE="CMP", a <PROPERTY DOES NOT EXIST>
error occurs. This has been corrected.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL1021
Summary: Eliminate duplicate entries from remote interface
Description:
For primitives we used to export to the remote interface
get_XXX and getXXX and set_XXX and getXXX which did the same thing. Now we
only export get_XXX and set_XXX.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: Object.Java
Platforms: All
DevKey: JSL1023
Summary: Correct JBoss connection leak
Description:
Previously, we consumed connections in the JBoss
connection pool every time we got the children of a many-one relationship.
This turns out to be an adverse interaction with JBoss. Our work-around is to
close the connection (used for the select) before doing a find of entity
beans.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: Object.Java
Platforms: All
DevKey: JSL1024
Summary: Allow Caché' host and port to be configurable in EJB
configuration
Description:
We introduced new projection parameters CACHEHOST and
CACHEPORT which allow the host and port of the EJB projection to be
configured. The host and port are used by the JDBC driver configuration to
connect to Caché. Host is a standard host name: it can be a DNS name like
foobar.mydomain.com or it can be a dotted decimal name like 192.168.1.105. The
default is host of 127.0.0.1 and port of 1972.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: Object.Java
Platforms: All
DevKey: JSL1025
Summary: Fix calculation of supers in Java binding
Description:
We have fixed the calculation of superclass names so that
it functions correctly.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL1028
Summary: Make generation of special method exists(db,oid) depend on
persistency of super not persistency of class
Description:
We generate a special methods exists(db,oid) when a class
is persistent. However, a class can be persistent either because its super is
persistent or because classes to the right of left-most super are persistent.
In latter case, this special method won't compile because it invokes methods
on the persistent class which the class does not extend. We changed this to
look at left-most superclass. The only special method affected in this case is
exists(db,oid)
public static boolean exists (Database db, Oid oid)
throws CachéException {
This does not affect any existing customer code. Customers who had
generated code that had this happen and met these special conditions would be
generating Java code that does not compile. So this change does not affect any
Java code that currently compiles.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL1030
Summary: When invalid SERVERTYPE display invalid server message
Description:
In EJBFlags.Validate, if the SERVERTYPE value is invalid,
an invalid server message is generated.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL1032
Summary: Get accessors are not const when they are overridden
Description:
When a get method is overridden, the C++ generator
generates code that does not compile because the methods called are not const
and cannot be called from const method.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL1034
Summary: Don't allow CMP generation unless primary key
Description:
If there are no primary keys on a class, quit with an
error when doing CMP generation.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL1042
Summary: Fix potential problem in constraint names in EJB binding
Description:
We named the finder findBy<CONSTRAINT_NAME> but
Constraint_Name is the SQL name and can contain non-Java acceptable
characters. We now use Constraint_Object_Name which is Java compatible.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL1043
Summary: Remove <distributable> from web.xml and make test servlet
work with JBoss and Jetty
Description:
We used to generate the <DISTRIBUTABLE> element.
<DISTRIBUTABLE></DISTRIBUTABLE>
The distributable element, by its presence in a web application
deployment descriptor, indicates that this web application is programmed
appropriately to be deployed into a distributed servlet container. We removed
this since it causes problems with JBoss and Jetty. The book Professional Java
Server Programming J2EE Edition by Wrox Press has a discussions on pages 406
and 472 of "Distributable Applications" regarding the requirements of writing
a distributable application. The requirement is that all attributes we set in
HttpSession are serializable. In the case of our generated Sample servlet, all
session attributes are strings, in fact a single string containing the id.
Strings are serializable so we meet the requirement to be distributable. Even
though we are distributable we take out the generation of this attribute and
the customer can add it to web.xml.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL1044
Summary: Remove debug statements from EJB Wizard
Description:
This changes removes debugging code that was
inadvertently left in the released version.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL1045
Summary: Close quick statement in EJB callbacks
Description:
QuickStatement uses resources on the server side that
must be released. The JDBC driver frees these resources when close is called.
The EJB Wizard now generates code that calls close in the EJB callbacks when
they are through using QuickStatement.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL1054
Summary: Let the App Server control concurrency
Description:
We introduce a new projection parameter
APPSERVERCONTROLSCONCURRENCY. The default is zero. When it is set to 1 the App
Server controls concurrency and QuickLoads act like SELECTS and QuickStores
acts like UPDATES. When it is off (0 the default) QuickLoad acts like a
"SELECT FOR UPDATE." If one wants the JDBC isolation levels to be honored one
must set APPSERVERCONTROLSCONCURRENCY to 1. Otherwise, ejbLoad does a
QuickLoad which acts like a "SELECT FOR UPDATE" and does row level locking.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: Object.Java
Platforms: All
DevKey: JSL1055
Summary: Added Support in the CLASSPATH Variable for JBoss 3.0.6
Description:
Previously, compiling with JBoss failed, due to a new
version of that product having moved a .jar file. The CLASSPATH variable now
accounts for this change.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production |
This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL1056
Summary: Add TransactionIsolation parameter to EJB projection
Description:
This change allows an answer to the question: should the
App Server or Database control concurrency? 0 - an ejbLoad acts like a SELECT
FOR UPDATE and Database controls concurrency 1 - an ejbLoad acts like a SELECT
and App Server Controls concurrency and you use TRANSACTIONCONTROL parameter
to set isolation level
Parameter APPSERVERCONTROLSCONCURRENCY = 0;
Transaction isolationlevel TRANSACTION_READ_COMMITTED (default) or
TRANSACTION_READ_UNCOMMITTED (dirty read) or TRANSACTION_NONE
Parameter TRANSACTIONISOLATION = "TRANSACTION_READ_COMMITTED";
Transaction isolation is still a meaningful parameter when
APPSERVERCONTROLSCONCURRENCY is 0 and it interacts in some ways with ejbLoad
acting like a SELECT FOR UPDATE. IMPORTANT NOTE: This parameter is not
supported in Pramati.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: Object.Java
Platforms: All
DevKey: JSL1057
Summary: Removed TRANSACTION_NONE from Supported Transaction Types
Description:
Previously, we used TRANSACTIONCONTROL when it meant
TRANSACTIONISOLATION in projection parameter documentation for
APPSERVERCONTROLSCONCURRENCY. Also, TRANSACTION_NONE is not a valid value for
our JDBC driver transaction isolation.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production |
This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL1060
Summary: Addressed Various Issues with the Java Projection
Description:
We now use REFERENCE which might be SQLUser.Osoba instead
of REFERENCE_CLASS which is User.Osoba.
We now project a class name
rather than a table name.
We now load children of one-many or one-one
relationships does not compile.
Qs is now closed before loading related
data to get around JBoss bug.
An error message generated from bad
transaction isolation has been eliminated.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production |
This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java, EJB
Platforms: All
DevKey: JSL1062
Summary: Guard EJB projection against invalid parameters
Description:
When projections are defined on top of EJB projections
using inheritance they can work incorrectly. The problem happens when a
projection and a class that uses the projection is in the same project. The
parameters array passed to the projection ends up having bad values.
This
change guards against that.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production |
This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL1064
Summary: Improve error message when Class in ClassList is not
persistent
Description:
An ambiguous error is reported when an EJB projection
with a relationship is generated:
ERROR #6609: ClassList must contain only Persistent classes
This has been corrected by improving the Caché ObjectScript compiler to
handle this situation properly.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production |
This change is an enhancement |
Low |
Low |
No |
Yes |
Category: Object.Java
Platforms: All
DevKey: JSL962
Summary: Project stored procedure methods in Language bindings
Description:
When a method is marked as a sqlproc we now project it.
We used to exclude its projection.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL969
Summary: Fix Java binding file names
Description:
For package names that began with % the wrong file name
would be generated unless the class name was of the form %Library.ClassName.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL970
Summary: Process Output parameters properly
Description:
If a parameter was marked as output it was not processed
properly. For instance, Output Arg As %String Or *arg:%String &arg is
processed properly.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL985
Summary: getConnection needs to be protected not private
Description:
Having getConnection be protected not private allows the
entity bean we generate to be extended to provide things like finder methods.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: Object.Java
Platforms: All
DevKey: JSL986
Summary: Allow datasource to be looked up from environment
Description:
Currently we directly point at JNDI name of datasource.
With this change we go through environment for datasource which allows
application programmer to employ indirection. If The Namespace name is <NS> the
entity bean will use java:/comp/env/<NS>Database for the JNDI lookup of
datasource.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: Object.Java
Platforms: All
DevKey: JSL989
Summary: Support generating of extensions that are used for things like
finders
Description:
To support programming finders and other extensions to
our generated EJB interface, this change form introduces the notion of
extensions. The basic idea is the following approach to adding a finder.
- Extend the generated bean implementation. ejb-jar.xml will point to this
extension as the bean implementation. The extension will have the
implementation of the finder.
- Have the home interface extend an interface that contains the finder.
Since an interface can extend multiple interfaces, this allows the home
interface of the bean to have the finder prototype and announce to EJB that
the finder is defined.
In this DevChange we augment the EJB Wizard
to allow it to automatically generate support for such extensions. We
introduce a new class parameter:
When this is set we change the generated code in the following way: In
the discussion, let's say the name of the persistent class from which the
entity bean is being generated is Package.Class. Let's say the EXTENSIONPREFIX
is Ext.
- In ejb-jar.xml, the <EJB-CLASS> is pointed to the extension. The name of
the extension is Package.EJBExt_Class_Bean. For example, for Sample.Person
the name of the normally generated bean implementation is
Sample.EJBPerson_Bean and the name of the extension (to which ejb-class
refers) is Sample.EJBExt_Person_Bean.
Into this extension one can put
one's finder
- The generated remote, local, home, and local_home interfaces all extend
- Package.EJBExt_Class, and
- Package.EJBExt_Class_Home respectively
Into these
extensions one can put the prototype for one's finder. We also automatically
generate "stubs" for these extensions if one sets the following class
parameter
In this case we automatically generate stubs for
Package.EJBExt_Class_Bean.java, Package.EJBExt_Class.java and
PackageExt_Class_Home.java. In development, one would first turn EXTENSIONGEN
on and then turn it off once one has stubs to use. Here is an example of
defining these parameters in a class.
Class ISC.Regression Extends %Persistent [ ClassType = persistent ]
{
Parameter EXTENSIONPREFIX = "Ext";
Parameter EXTENSIONGENON=1;
etc.,
}
Here is an example of the generated home interface:
public interface EJBRegression_Home extends javax.ejb.EJBHome,ISC.EJBExt_Regression_Home
With EXTENSIONGENON set to a non-zero value, we generate a stub for the
ISC.EJBExt_Regression_Home interface. After this stub is generated one can
place one's finder there and then turn off EXTENSIONGENON. Now one can
regenerate EJB code and one's extension will still be there and be operative,
so one's finder can accessed by EJB even after code regeneration.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: Object.Java
Platforms: All
DevKey: JSL992
Summary: Call methods in property accessors when overridden set or
get
Description:
If the programmer/user overrides the set or get method of
a property that is a collection, serial or reference we do NOT generate the
correct code for Java or C++. At this point we can't because the class
compiler has ambiguous information about the situation. The problem is that
the class compiler generates a special stub method for such setters. The
generator sees the stub but that is the wrong stub to project to Java;
projecting that stub leads to nonsense. With this change we support in 5.1 and
5.0.1, the projection of the overridden get/set methods for datatypes. This
does not work for non-datatypes such as reference, serial or collection.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL994
Summary: Fix JSL992 handling of calculated properties in the C++
binding
Description:
Calculated properties don't go through generated user
method in the C++ binding, C++ has special processing for them. In the Java
binding, they do go through generated user method.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL995
Summary: Check if property exists before checking if calculated
Description:
We noticed a situation in which getClassMethods failed.
The problem was that in certain circumstances it returned a <SUBSCRIPT> error
because we checked to see if a property is calculated when the property did
not exist. This happens because in C++ we don't generate a method if it is
method that corresponds to calculated Get. We now guard against several cases:
1) don't run check if method name is less than 4 characters 2) don't run check
unless method is of form XXXGet 3) don't run check if inferred property name
XXX is name of non-existent property
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: JSL996
Summary: Guard against null DefaultArgs
Description:
getClassMethods will fail if DefaultArgs is null. Here is
an example of the error:
USER>s res=##class(%CPPStoredProc).getClassMethods(1,"ISC.Override")
. . s DefaultArg=$LI(DefaultArgs,i)
^
<NULL VALUE>zgetClassMethods2+42^%ooLibrary.CPPStoredProc.1
U
Previously, the C++ binding would simply fail with "method not found"
errors.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: System
Platforms: All
DevKey: LFT1073
Summary: $ZU(158) function call failing on Caché 5 Unicode
Description:
On Unicode systems enumerating Windows printers would
show only the first letter of the name. This is now fixed.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: System
Platforms: All
DevKey: LFT1076
Summary: Corrected JOBEXAM / Control Panel TCP read data corruption
Description:
JOBEXAM (or %SS or Control Panel process view) could
corrupt local variables of processes doing a TCP read. This is fixed.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Medium |
Low |
Yes |
No |
Category: CSP
Platforms: UNIX, OpenVMS
DevKey: LRS648
Summary: Fix/enhance UNIX and OpenVMS file renaming using $zu(140,6)
Description:
Copying or renaming files in the operating system, using
%Library.File.CopyFile for example, now works correctly.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: NLS
Platforms: All
DevKey: LRS649
Summary: Fix a NLS data calculations
Description:
On systems with very large buffer pools, certain offsets
were not computed correctly in the NLS utilities.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: Installation
Platforms: All
DevKey: LRS657
Summary: Fix installation recompile hang
Description:
During install, recompilation of routines in a database
containing no routines may hang.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: System
Platforms: OpenVMS
DevKey: LRS666
Summary: Fix Callin/Callout interfaces for 32-bit pointers on OpenVMS
Description:
Ensure callin-callout on VMS conforms to 32 bit calling
standards, even though internally Caché on VMS now uses 64 bit addressing.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Medium |
Low |
No |
Yes |
Category: System.I/O
Platforms: All
DevKey: LRS669
Summary: Fix timeout bug in LAT device open (ttyopenlat)
Description:
This fixes a problem where an oOpen of reverse |LAT| does
not time out when lat.exe is not running.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: Object.Java
Platforms: All
DevKey: MAB112
Summary: Support for projection of queries in generated Java classes
Description:
Added a constructor to com.intersys.objects.CachéQuery
class, which is intended to be used from generated classes.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: MAB118
Summary: Added SQLProcContext class to Java Binding client
Description:
Added SQLProcContext class to Java Binding client, so sql
stored procedures which use it can be projected.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: SQL.JDBC
Platforms: All
DevKey: MAB119
Summary: The same SQL normalization for JDBC and ODBC preparser
Description:
Changed JDBC preparser to use the same normalization as
ODBC preparser.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: SQL.JDBC
Platforms: All
DevKey: MAB120
Summary: Conversion of pseudo-ASCII bytes in setAsciiStream according to
default locale
Description:
If bytes higher than 127 are encountered in the stream
used in setAsciiStream, they are converted to characters using default locale
and to UTF-8 after that.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: MAB124
Summary: Enhancement for building Java client Documentation
Description:
Removed non-public methods from JavaDoc documentation;
added window title to all JavaDoc windows; and added Document Header to
Overview.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: SQL.JDBC
Platforms: All
DevKey: MAB126
Summary: Correct transformation from LONGVARCHAR with getString()
Description:
CachéResultSet and CachéCallableStatement incorrectly
transformed LONGVARCHAR columns when used with getString if the value was
undefined in the default locale. This should be now fixed.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: MAB134
Summary: Fixed bug with Iterator.remove() in Caché Array
Description:
Fixed bug that Iterator.remove() method for Caché Arrays
removed the next element instead of current.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
Yes |
No |
Category: Object.Java
Platforms: All
DevKey: MAB135
Summary: Added ability to initialize Java Binding using wrapper connection
from App Server
Description:
Before this change java.sql.Connection object passed
com.intersys.objects.CachéDatabase.getDatabase(Connection) method had to be
instance of com.intersys.jdbc.CachéConnection. Now it can be a wrapper object
obtained from an Application Server, provided it wraps
com.intersys.jdbc.CachéConnection.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: MAB142
Summary: Improvements in LightDatabase
Description:
We fixed a few issues with LightDatabase:
- Now collections of serial objects should work read/write regardless of
their storage.
- If an object to be opened has a different class than the one that called
open we instantiate a Java object of the right class.
Also fixed a
bug with setting null as a collection property. Backported Stream generation
in quick to 5.0.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: MAB143
Summary: Fix for empty array not listening to server updates
Description:
There was a bug that an empty array did not listen to
server updates. For example adding an element to an empty array on server side
was not reflected on the client. This change fixes the issue.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: SQL.JDBC
Platforms: All
DevKey: MAB145
Summary: Fixed counting characters/bytes when using getUnicodeStream from
JDBC
Description:
This includes changes to
jdbc.CachéInputStream/CachéReader to repeat fetch until either end of stream is reached
or requested number of units is received. It also fixed counting characters/bytes when
using getUnicodeStream.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: MAB146
Summary: %TimeStamp with milliseconds throws Exception
Description:
If a java class with a %TIMESTAMP property is generated
with Projection, and it uses the method getPropertyName to get the value of
the field, this works only if no milliseconds are saved in Caché. If the
Property has milliseconds the exception java.lang.numberFormatException: For
input string: "1.0000000" occurs.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: SQL.JDBC
Platforms: All
DevKey: MAB151
Summary: PreparedStatement.setAsciiStream() does not convert chars to
Unicode
Description:
In case when Caché server is 8-bit and it's encoding does
not match client encoding and client attempts to send a character, that is not
supported by server encoding, the exception is raised now. Previously client
would hang.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: MAB160
Summary: constructClone failing
Description:
%ConstructClone is now instance method, not a class
method, and has been deprecated. The new instance method is called
constructClone() without underscore.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: MAB161
Summary: Incorrect Java binding for Lists containing Japanese
characters
Description:
In the Java binding, when a string property of List type
includes Japanese characters, the value is sent erroneously to Java client.
The Japanese characters are being translated incorrectly. This has been fixed.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Medium |
Low |
Yes |
No |
Category: Object.Java
Platforms: All
DevKey: MAB162
Summary: Java ArrayOfDataTypes etc iterator.remove()
Description:
There was an error deleting the last element of Array
using method Iterator.remove(). The issue is fixed now.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Java
Platforms: All
DevKey: MAB163
Summary: Saving Non-ASCII Characters Using Light Java Binding
Description:
An error that caused losing Unicode information when
saving non-ASCII strings using Light java Binding is now fixed.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production |
This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Library
Platforms: All
DevKey: MAK600
Summary: %Net.HttpRequest object now reads in correct charset
Description:
The %Net.HttpRequest class when reading from the web
server would read in as much data as it could in one go. This meant that if
the headers told it to switch charset to say iso-8859-1 then it had already
read on most of the body of the message in utf-8 (as this is the charset is
reads the headers in) and so even though it switched charset tables this did
not effect data already read into the buffer. Now it reads the headers line by
line and switches charset when it gets to the body of the message so it will
use the proper charset. In addition we have added a ReadRawMode property to
the HttpRequest object which if true will force the read of the body of the
response in RAW or untranslated mode rather than using the charset specified
in the headers. There is also a property ResponseStream which if set to a
stream object will use this stream to store the body of the response rather
than constructing a stream itself. This can be used to make the HttpRequest
enter the response into a file stream rather than a global stream for example.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Studio
Platforms: All
DevKey: MAK615
Summary: Find in Files does not find items in CSR files
Description:
Searching for *.csr in the FindInFiles item in Studio was
not finding any hits because it failed to open the CSR files to look for
possible matches. It now does.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: Object.Library
Platforms: All
DevKey: MAK618
Summary: %Net.HttpRequest object not encoding form data in correct
charset
Description:
Form data inserted into the %Net.HttpRequest it URL
encoded when it is sent to the server. However if the page it is posted to is
encoded in say utf-8 then once it has URL decoded these values it also
converts it from utf-8 into the internal format. The %Net.HttpRequest class
was not encoding the value in the correct charset before URL encoding the data
and so posting non ASCII characters did not work correctly. This is fixed now.
Also issuing a Get/Post/Head would had the side effect of changing the charset
of the current device to RAW mode. It now leaves the charset of the current
device unchanged.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Utilities
Platforms: All
DevKey: MAK620
Summary: MSM-Activate did not work against Unicode Caché server
Description:
MSM-Activate did not allow Unicode data to be passed to a
Unicode Caché server. It worked fine with 8bit data, but although this was
supported by the Unicode MSM server this code was never ported to the Caché
MSM-Activate server code. Now it correctly utf-8 encodes the data being sent
as it does against a Unicode MSM server.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Medium |
Low |
No |
No |
Category: Studio
Platforms: All
DevKey: MAK625
Summary: Importing a CSP page fails
Description:
If you ask to load a CSP page from a file the load
functions in Caché now handle this case properly. Before loading a CSP page
from a file was never supported and only loading a CSP page from another local
URL was allowed.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK626
Summary: Support object generators for datatype methods
Description:
Methods of a class can be object generators which is an
object oriented way to create the method code on the fly. However you could
not write a datatype method as an object generator method because this was not
implemented, it is now fully supported.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: Studio
Platforms: All
DevKey: MAK627
Summary: Fix problem sorting classes by size in Studio
Description:
Sorting classes by size in Studio reported an UNDEFINED
error at zgetClassList+45^%ooLibrary.RoutineMgr.1
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: Studio
Platforms: All
DevKey: MAK630
Summary: Unselected classes deleted in open dialog
Description:
If in Studio you right click on a package and select
Delete and there was a class with the same name as the package then this class
would be deleted as well as the classes inside the package. This was caused by
GetPackageList returning this class in addition to the classes inside the
package. This class is not inside this package and so is returned in error.
Now the GetPackageList does not return this class which fixes the Delete
package problem.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: CSP.Samples
Platforms: HP
DevKey: MAK631
Summary: ClassLogo.jpg not shown in StreamServe.csp on HP
Description:
The encryption function in CSP could return a value with
a space in which it should not do. This prevented the decryption from working
which is the reason the stream server example page does not work on this
platform. This is fixed.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: CSP
Platforms: All
DevKey: MAK637
Summary: When importing CSP files if no /csp/namespace pick first app that
is defined in this namespace
Description:
When importing CSP files if the application does not
match because it came from another namespace but there was a '/csp/namespace'
application defined for the current namespace it was imported there. This is
now extended so even if there is no '/csp/namespace' it will pick the first
alphabetically collating application that maps to this namespace.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: CSP
Platforms: All
DevKey: MAK638
Summary: Prevent SUBSCRIPT errors in CSPNormalizeURL^%cspServer
Description:
The function that normalizes a URL did not take into
account that the string it is normalizing could be very large and so when it
attempts to create a cache of these values by setting this URL into a
subscript of a global it may get a SUBSCIPRT error because the string is too
big. To avoid this we altered the cache so it is only set and checked if the
string is small enough.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: CSP
Platforms: All
DevKey: MAK643
Summary: OnTimeout trigger is not called for state-aware sessions
Description:
When a Preserve=1 session times out in CSP the session
event class OnTimeout method was not being called. It was only called for
Preserve=0 sessions, this fix makes it behave consistently for both Preserve=0
and Preserve=1 sessions. Note that the OnEndSession method was being called
correctly in both cases.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
No |
Category: CSP
Platforms: All
DevKey: MAK645
Summary: ..Link() not working as designed
Description:
When you include another page with the <CSP:INCLUDE> tag
or the ..Include method the %request.URL and %request.PageName in the included
page were set to the name of the included page. However they should be kept at
the name of the calling page otherwise ..Link calls will not work because they
will not pick up the correct page name. Also by keeping the %request.URL the
calling page the include page can find out who is calling it.
Likelihood of happening |
Risk this change introduces new
problems |
Distributed in ad hoc release and
installed in production
| This change is an enhancement |
Low |
Low |
No |
Yes |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK646
Summary: Invalid code generated if last line of procedure block method is
a #define
Description:
If you define a method in Studio:
method Test()
{
#define A 1
}
When this is compiled it was generating the code:
And it never closed this procedure block.
This is because the macro processor did not detect the end of the procedure block on the line that was passed to it, '#define A 1 }' and it swallowed the entire line.
Now we put the '}' on a separate line in this case to avoid this problem.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: Studio
Platforms: All
DevKey: MAK647
Summary: Studio imported class when told not to
Description:
The Load function has a flag that tells it to just find a list of the items in the file but not load anything. However if you loaded a class from an XML file and passed this flag it would still alter the sequence numbers stored in the class definition, this is now fixed.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: Object.Class Compiler
Platforms: All
DevKey: MAK648
Summary: Do not add transient streams to save set in a deep save
Description:
If you have a persistent object which has a property that is transient and points to another persistent object and you start a deep save on the main object then even though the property is marked as transient and so it is not saved as part of the main objects saved data it still adds the related object to the save set. This can cause the related object to serialize itself to disk which may be unexpected.
This is particularly an issue when the property is a stream as the stream should be treated like a literal value and so if a stream property is marked as transient then the stream object should not be added to the save set. Caché now does this so transient streams are not added to the save set in a deep save.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | Yes |
Category: Studio
Platforms: All
DevKey: MAK651
Summary: SourceControl: Trigger OnAfterSave not fired sometimes
Description:
The detection of when a class was modified was not correct in the backup logic. This prevented the OnAfterSave method from being fired when the name of an element was changed such as the name of a method. If the method body was changed then it was fired correctly. Now we always fire the OnAfterSave method when saving a class from Studio.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: Object.Class Compiler
Platforms: OpenVMS
DevKey: MAK660
Summary: Problem with XML schema validation on class import on OpenVMS
Description:
You could not import a XML version of a class on OpenVMS and validate it against the schema because the directory to the schema was not calculated correctly on this platform. This is fixed.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: Studio
Platforms: All
DevKey: MAK662
Summary: Studio becomes confused by 3rd line of INT
Description:
Make detections of an INT routine that is generated by a class compile smarter to prevent a case where it thought an INT was created by a class when it was not and it attempted to recreate the class descriptor which lead to an error message that was not valid.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: Studio
Platforms: All
DevKey: MAK666
Summary: Exporting a class behaves differently when done remote vs local
Description:
Exporting a class as a CDL file on the remote machine also exports related classes but exporting it on the local machine does not. Now both only export the class you ask for.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: CSP.Net
Platforms: All
DevKey: MAK672
Summary: Function errors using %Net.HttpRequest in a job process
Description:
If you jobbed off a process so the current device was the null device and then it issues an %Net.HttpRequest, it would fail with a FUNCTION error because it is attempting to obtain the translation mode on the current device. But this is the null device.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: Studio
Platforms: All
DevKey: MAK676
Summary: In the example source control class allow people to create new items
Description:
The example source control class was not allowing people to create a new routine/class as it claimed they were locked. This is fixed.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | Yes |
Category: Studio
Platforms: OpenVMS
DevKey: MAK692
Summary: Get Error #5019 when deleting CSP page
Description:
The ##class(%File).Delete(filename) command would not work on OpenVMS unless you specified a version to delete. This now adds ';*' to delete all versions if there is no version explicitly defined in the filename.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: Object
Platforms: All
DevKey: MC347
Summary: Deal with network directory name correctly in %File:CreateDirectoryChain()
Description:
%File:CreateDirectoryChain("\\mymachine\dir1\dir2\")
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | Yes | No |
Category: SQL.GateWay
Platforms: All
DevKey: MIT218
Summary: Fix parameter setting
Description:
In some cases there was memory corruption because parameter length was interpreted as negative (signed/unsigned discrepancy). This is now fixed.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: SQL.GateWay
Platforms: All
DevKey: MIT229
Summary: Select count not working
Description:
The problem was that count ( * ) was for some reason unsupported in MySQL. It was changed to count(*).
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: SQL.GateWay
Platforms: All
DevKey: MIT231
Summary: Do not close cursor if an error occurred
Description:
The cursor for external queries (SQL gateway) does not get closed if a fetch returns non-zero in SQLCODE.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: SQL.GateWay
Platforms: All
DevKey: MIT234
Summary: Selecting on generated Caché ID field fails when it is a complex key in SQL Server
Description:
When we issue a select statement that contains the generated Caché ID field,
the ID field is just replaced by the primary key. In the case of a simple primary key, this is just simple replacement, however in the case of a complex key, this is expressed as a concatenation of the properties that make up the primary key. This is done by using the SQL concatenation operator (||).
So, in the case of a LOOKUP table, when you issue a statement:
in Caché, we must translate that to:
Select LK_TYPE||LK_Code from Lookup
to be sent to the MS Access database via ODBC.
The problem is that MSAcess does not support the standard SQL concatenation
operator. If you were to try the statement in MS Access (i tried this) you would get an error detailed by an unsupported use of '||'. The way to work-around this while still maintaining a standard call is to utilize the SQL concat function.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | Yes | No |
Category: SQL.GateWay
Platforms: All
DevKey: MIT236
Summary: "Undefined list element " error when linking a table
Description:
When testing Link table with Oracle and MySQL tables that have no schemas, you can not link those tables. You can see a list of tables in the Table window, but moving to the next window, Properties, results in an
Undefined list element
error.
Link table now works again with tables with empty schemas.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: Object.XML
Platforms: All
DevKey: MXT373
Summary: Add limited XMLImport method for %XML.DataSet
Description:
Implement XMLImport method of %XML.DataSet. Support for this is still limited, however. See the XMLImport method description for usage and example.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | Yes |
Category: Object.XML
Platforms: All
DevKey: MXT376
Summary: Support RuntimeMode property of %XML.DataSet
Description:
%XML.DataSet support the RuntimeMode property that is inherited from
%ResultSet.
The default is 1 for ODBC. RuntimeMode = 0 is LOGICAL mode and = 2 is DISPLAY.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | Yes |
Category: Object.Soap
Platforms: All
DevKey: MXT378
Summary: Initial fix for non-ASCII characters in SOAP response
Description:
Fix Xerces parser error when SOAP response contains non-ASCII characters.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Medium | No | Yes |
Category: Object.Soap
Platforms: All
DevKey: MXT379
Summary: Fix parseFormal^%occName not initializing return argument
Description:
Need to initialize each node of return argument from parseFormal. Otherwise, byref flag may be reused from previous argument.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: Object.Soap
Platforms: All
DevKey: MXT381
Summary: Resolve short class names in web method arguments
Description:
This fixes a bug where class names without packages in web method argument lists caused compile errors for Web Service or Web Client. We now generate the needed import statements in the method classes.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: Object.Soap
Platforms: All
DevKey: MXT383
Summary: Improve SOAP client response validation
Description:
Improve SOAP web client validation of response message:
- As specified by SOAP 1.1 specification section 1.1, ignore element
name of response element.
- Always assume that the first element within the response is the
return value and do not check it's element name.
- Allow override of the expected response namespace using the
SoapNameSpace method keyword.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | Yes |
Category: Object.Soap
Platforms: All
DevKey: MXT384
Summary: Show use of base class for error handling in SOAP.Demo sample
Description:
Add SOAP.BaseService class to do error handling for SOAP.Demo.
Error handling is done using new OnInternalError callback for SOAP web services that allows application to modify the fault created for Caché trapped errors. The error may not be ignored, only the contents of SOAP fault may be modified.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: Object.XML
Platforms: All
DevKey: MXT385
Summary: Optionally enforce ordering of properties on XML import
Description:
If the XMLSEQUENCE class parameter = 1, then the order of the XML elements must match the order of the class properties. This allows us to deal with XML where the same field appears multiple times and is distinguished by the order. The default is XMLSEQUENCE = 0.
If XMLSEQUENCE = 1, then the XMLIGNOREINVALIDTAG parameter is ignored and all tags must be represented as properties.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | Yes |
Category: Object.XML
Platforms: All
DevKey: MXT386
Summary: Allow skipping of element tags on import and export
Description:
We introduced new a new value, XMLIO="SKIP", which will ignore the XML element on import and skip outputting the element on export. This allows an easy way to setup a class that is a subset of an XML Schema.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | Yes |
Category: Object.XML
Platforms: All
DevKey: MXT388
Summary: Map class inheritance to XML using schema choice group
Description:
The XML choice schema tag is used to allow the interchangeable use any of a group of related elements. All elements in the group must have a type which is an extension or restriction of the base type. The XML schema choice group will map to a group of Caché classes which must all be subclasses of the property type. This subclass restriction is not needed for the XML schema and is not enforced, but is needed for the Caché property to work properly in most situations.
To indicate that a Caché class reference property may reference a choice of one a a group of classes, use the property parameter XMLPROJECTION=CHOICE. The type specified for the property is the base class and the classes referenced may be the base class and all or a subset of its subclasses.
The classes in the group may be explicitly specified in the XMLCHOICELIST property parameter as a comma separated list of classes. If XMLCHOICELIST is not specified, the subclasses of the property type that are included in the group are controlled by the XMLINCLUDEINGROUP class parameter. If XMLINCLUDEINGROUP=1, then the subclass is included. The default value set in %XML.Adaptor is 1, but may be overridden to 0 to exclude classes from the group. The default will result in all subclasses of the base class being in the group. Abstract classes will not be made part of the choice group, thus allowing the use of an abstract base class to be the head class for a choice group of subclasses.
Three additional values of XMLPROJECTION are supported for choice
groups:
- ELEMENT-CHOICE is equivalent to ELEMENT with CHOICE.
- WRAPPED-CHOICE is equivalent to WRAPPED with CHOICE.
- CHOICE is equivalent to the default, ELEMENT for single references and COLLECTION for collections.
Since the reference value may refer to one of a collection of classes, the type must be specified in the XML. If format="literal" (the default), the element name will be the xsdtype of the referenced class. If the format="encoded", then the element name must specify the property. Therefore the xsi:type attribute is used to specify the type.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | Yes |
Category: Object.XML
Platforms: All
DevKey: MXT389
Summary: Generate correct schema for Caché array for choice group
Description:
Fix up pair types used for Caché arrays in schema to correctly handle choice groups. This allows SOAP support with SoapBodyUse="literal" for choice groups.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | Yes |
Category: CSP
Platforms: All
DevKey: MXT391
Summary: Anchors don't work on #url()
Description:
The problem was that the anchor was not being correctly separated from the URL. This applied to any use of #anchor in CSP URL, not just #url()#.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | Yes | No |
Category: Object.XML
Platforms: All
DevKey: MXT395
Summary: Add new support for hexBinary schema type
Description:
Add to the support for binary XML schema types:
- %Binary is existing datatype that maps to base64Binary schema type
- %xsd.base64Binary also maps to base64Binary schema type
- %xsd.hexBinary maps to hexBinary schema type
- ENCODING property parameter is added to the %Stream datatype.
Encoding only applies to binary streams with values ENCODING="base64" (for base64Binary schema type) and ENCODING="hex" (for hexBinary schema type).
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | Yes |
Category: Object.XML
Platforms: All
DevKey: MXT396
Summary: Create %xsd package for Caché datatypes that map to XML schema types
Description:
Add XML schema types that map naturally to Caché types to %xsd package. See %xsd package for details.
Datatypes added: %xsd.string, %xsd.date, %xsd.time, %xsd.dateTime,
%xsd.boolean, %xsd.double, %xsd.decimal, %xsd.integer and types that correspond to type inheriting from schema integer type.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | Yes |
Category: Object.Soap
Platforms: All
DevKey: MXT403
Summary: Handle OUT parameters in SOAP web client
Description:
Some web services have output-only parameters for some web methods.
This situation was not previously handled correctly. This bug fix
correctly does not expect the value of the OUT parameter in the
request and returns the value of the OUT parameter in the response.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | Yes |
Category: Object.Soap
Platforms: All
DevKey: MXT404
Summary: SOAP web client gives error if return value not expected
Description:
The SOAP web client now supports web client method corresponding to a
web server method with no return value.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: Object.XML
Platforms: All
DevKey: MXT409
Summary: XML representation of persistent objects using object id
Description:
XMLREFERENCE=ID will project a reference to a persistent object as it's ID rather than as the object itself. XMLREFERENCE=OID will project a reference to a persistent object as it's OID rather than as the object itself. The OID contains the classname as well as the ID.
This feature is not at all equivalent to the XML use of IDREF and is meant to support export of an object using SOAP without it's referenced objects in a way that allows the later loading of the referenced objects.
XMLREFERENCE-"ID" or "OID" work with XMLPROJECTION = "attribute", "element", "wrapped" or not specified.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | Yes |
Category: Object.XML
Platforms: All
DevKey: MXT412
Summary: XMLImport loses attributes in case of id="" for tag
Description:
When reading XML data using %XML.Reader with literal format (the
default), an id attribute of the form <TAG id=""> caused all
attributes of a tag to be skipped. This bug is now fixed and the ""
value of the id attribute is imported correctly along with other
attributes.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: CSP.Net
Platforms: All
DevKey: MXT413
Summary: Backport SMTP Authentication to 5.0.1
Description:
SMTP authentication with the SMTP server (as defined by RFC 2554), is now supported using the LOGIN, PLAIN and CRAM-MD5 authentication mechanisms. Additional authentication mechanisms will be added as needed.
In order to use SMTP authentication, instantiate a %Net.Authemticator object, set UserName and Password properties of the authenticator and assign it to this property.
In addition an authorized sender may be specified for an authenticated message. The AuthFrom specifies the address to be used for the AUTH parameter of the MAIL FROM SMTP command for SMTP authenticated session. If specified, this property will be the argument of the AUTH= extension to the MAIL FROM command. This property may be specified as "<>" to indicate that the original submitter of the message is not known.
An example of the use of authenticator follows.
#include %occOptions
#include %occStatus
authtestmailsend ;
; Replace information marked with [[ ]]
new auth,m,s,status
set s=##class(%Net.SMTP).%New()
; use default authentication list
set auth=##class(%Net.Authenticator).%New()
set auth.UserName=[["myUser"]]
set auth.Password=[["myPassword"]]
set s.authenticator=auth
; Optional AUTH parameter to MAIL FROM.
set s.AuthFrom=[["AuthUser"]]
set s.smtpserver=[["SMTP server name"]]
set s.timezone=[["-0400"]] may remove this line to get Universal Time
set m=##class(%Net.MailMessage).%New()
set m.From=[["test@company.com"]]
do m.To.Insert([["receiver@another.com"]])
do m.To.Insert([["Joe Smith <JSMITH@ANOTHER.COM>"]])
set m.Subject="Sent by Caché mail"
set m.Charset="iso-8859-1"
do m.TextData.Write(
"This message has been sent using an SMTP server with Authentication.")
set status=s.Send(m)
if $$$ISERR(status) do $system.OBJ.DisplayError(status)
quit
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | Yes |
Category: Object.XML
Platforms: All
DevKey: MXT415
Summary: %XML.Adaptor error handling improvements
Description:
Use $ztrap to trap XMLExport Caché errors and return the error as a %Status.
Report data type validation errors correctly for attributes in XMLImport.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | Yes | No |
Category: Object.XML
Platforms: All
DevKey: MXT416
Summary: Allow runtime specification of %XML.Adaptor parameter XMLIGNORENULL
Description:
Add new value RUNTIME for class parameter XMLIGNORENULL.
When XMLIGNORENULL = 1, then both missing tags (NULL) and empty tag (<TAG /> are stored in Caché %String property as "" and both $c(0) and "" are exported as empty tag (<TAG />).
In the default case of XMLIGNORENULL = 0, make character streams work like %String. no tag becomes zero length stream and empty tag becomes $c(0).
If XMLIGNORENULL = "runtime" (runtime is not case sensitive), then the behavior of XMLIGNORENULL is determined by the format parameter of XMLExport and the IgnoreNull property of %XML.Reader. The default behavior for XMLIGNORENULL="runtime is the same as XMLIGNORENULL=0. Adding "ignorenull" to the format argument changes the behavior to that of XMLIGNORENULL=1. "ignorenull" should be separated by a comma from literal/encoded part of the format. Valid values for format are "", ",ignorenull", "literal", "literal,ignorenull", "encoded" and
"encoded,ignorenull".
In addition the XMLIGNORENULL parameter is supported for web services. XMLIGNORENULL may not be specified as runtime for web services.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | Yes | Yes |
Category: Object.XML
Platforms: All
DevKey: MXT417
Summary: Ignore IsValidDT whose value is always 1 for XMLImport
Description:
If IsValidDT returns a value of 1, then ignore the IsValidDT method.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | Yes |
Category: Object.XML
Platforms: All
DevKey: MXT418
Summary: <NOTOPEN> second call to XMLExportToStream with same stream
Description:
XMLExportToStream should leave stream open after writing XML to stream to allow additional XML to be appended.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: Object.Soap
Platforms: All
DevKey: MXT419
Summary: Improve SOAP interoperability with XMLSPY SOAP request
Description:
Add required
<S:IMPORT namespace="http://www.w3.org/2001/XMLSchema" />
to WSDL files with methods that return a %XML.DataSet.
Support XMLSPY SOAP request format that uses <PARAMETERS> element as containing element instead of <METHODNAME> element.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: Object.Soap
Platforms: All
DevKey: MXT420
Summary: Reorganize the XMLPROJECTION parameter
Description:
We overloaded the XMLPROJECTION parameter with too many complex options. XMLPROJECTION is now broken into 3 property parameters:
XMLPROJECTION = "element", "wrapped", "content", "attribute" or "collection". "collection" is a deprecated synonym for "wrapped"
XMLTYPECONSTRAINT = "choice", "substitutionGroup" or "explicit". XMLTYPECONSTRAINT may be specified only for properties whose type is an object reference. "explicit is the default and means only the specified type is allowed. "choice" and "substitutionGreoup" are as defined in DevChanges MXT377 and MXT388.
XMLREFERENCE = "id" or "oid". XMLREFERENCE may be specified only for properties whose type is an object reference. "id" and "oid" are as specified in Devchange MXT409. If XMLREFERENCE is not specified the referenced object is mapped to the entire object.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Medium | Yes | Yes |
Category: Object.XML
Platforms: All
DevKey: MXT421
Summary: Order inherited properties to match XML schema extension ordering
Description:
Order projection of class properties to XML so that the properties of the current class are last following the properties inherited from the super class. This ordering corresponds to the ordering of XML elements for types derived by extension in the XML schema.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: Object.XML
Platforms: All
DevKey: MXT422
Summary: In XML projection, support summary representation of referenced classes
Description:
Add new XMLREFERENCE values "complete" and "summary". XMLREFERENCE may be specified only for properties whose type is an object reference. XMLREFERENCE = "summary" is new and means to include only the properties of the referenced object that are listed as the summary.
The XMLDEFAULTREFERENCE class parameter specifies the default value of XMLREFERENCE if it is not specified. The default for XMLDEFAULTREFERENCE is "summary" for XML enabled classes.
If XMLDEFAULTREFERENCE may be used to specify the default XMLREFERENCE for the arguments and return value of a web service or web client. The default in this case is complete.
The summary fields to be used when an object is referenced are specified by the object's XMLSUMMARY class parameter. XMLSUMMARY is a comma separated, unordered list of properties to include in the object summary. Properties are mapped to the XML in the order that the properties appear in the class not in the list order. If XMLSUMMARY is not specified then all properties are included in the summary.
In addition XML for only the summary fields may be imported into or exported from an object. Adding "summary" to the format argument of XMLExport, XMLSchema, or XMLDTD changes the behavior to only use the summary properties. "summary" should be separated by a comma from the literal/encoded part of the format. Valid values for format are "", ",summary", "literal",
"literal,summary", "encoded" and "encoded,summary". If "ignorenull" is also used in the format it must be separated from "summary" by a comma.
Setting the Summary property of %XML.reader to 1, also changes its behavior to only import the summary properties.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | Yes |
Category: CSP.Samples
Platforms: All
DevKey: MXT423
Summary: Soap.Demo.cls has incorrect parameter: SoapBodyUse = encoded
Description:
Soap.Demo.cls has incorrect parameter set: SoapBodyUse = encoded
This parameter setting causes the GetByName Web Method to return the following error:
ERROR #6258: Invalid ENCODING parameter 'encoded' for property ''
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: Object.XML
Platforms: All
DevKey: MXT425
Summary: In XMLImport, long attribute value causes SUBSCRIPT error
Description:
The prefix part of attribute value of colonized name (i.e. prefix:name) must be less than or equal to 255 characters in length.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: Object.XML
Platforms: All
DevKey: MXT428
Summary: Store XML for empty character streams as "" instead of $c(0)
Description:
When saving an empty element value (<TAG />) to a character stream property, we now store "" in the stream object rather than $c(0). No element present still stores no stream.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: CSP.Samples
Platforms: All
DevKey: MXT430
Summary: In web service, allow LOCATION to be a relative path or unspecified
Description:
It is inconvenient to always need to specify full URL in LOCATION parameter. Change to allow LOCATION to be based on request URL for WSDL file.
If LOCATION is not specified, then the same path as the WSDL path is used. This is the most natural way to get the location.
If LOCATION is a relative path or absolute path without server name, then the WSDL request path is used as the base of the location URL.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: Object.XML
Platforms: All
DevKey: MXT431
Summary: Extend %XML.DataSet to Support .Net Typed Datasets
Description:
When %XML.DataSet is returned from a Web service, it projects as a Microsoft .Net dataset. Previously, only untyped datasets were supported.
.Net-typed datasets (which include type information in the WSDL
file for a Web service) are now supported. This additional information
allows Visual Studio .Net to create a typed dataset that supports IntelliSense.
A subclass of %XML.DataSet now produces a typed dataset if the
NAMESPACE parameter is specified, and the CLASS and QUERY parameters
are overridden to specify the query underlying the dataset.
An example of the return of a typed dataset is now part of the SOAP.Demo sample.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Medium | Low | No | Yes |
Category: Object.XML
Platforms: All
DevKey: MXT433
Summary: XMLExport serial references with no data as null (no tag)
Description:
Change XMLExport to treat references to serial objects as null if all values in the serial object are "". A serial object with no value set will now export without any tags. This uses the SQL test for NULL object.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: System.StartUp
Platforms: All
DevKey: NGA107
Summary: Increase SZGVXTAB to 32K
Description:
A limitation on the number of volumes that can be mounted has been increased.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | Yes | No |
Category: SQLManager
Platforms: All
DevKey: PYD092
Summary: Corrected several issues with SQLMigration
Description:
- When copying column definitions, the buffer size was used as the
length instead of the column precision. As a consequence, for SQL
Server NCHAR, NVARCHAR, SQL_WCHAR and SQL_WVARCHAR
datatypes, the column created in Caché was twice the size of the
original column.
- Binary data was not copied correctly.
- Some indices were copied incorrectly or missing entirely
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: Caché Direct
Platforms: All
DevKey: RAW330
Summary: Fix Caché Direct registry key names
Description:
The names of the registry keys to be used by Caché Direct were changed from MServer and FormalNamespace to MServers and FormalNamespaces. The names used in CMVISM32.DLL were not changed. The proper registry names are now used.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | Yes | No |
Category: Studio
Platforms: All
DevKey: RAW339
Summary: Addressed Issue in which Studio Would Hang or Loop When Searching for Matching Text That Was in Contracted Code
Description:
In some circumstances, when the string being searched for
was not visible because of being in a contracted block,
doc -> GetDisplayLine was returning the wrong result.
This has been addressed.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: Studio
Platforms: All
DevKey: RAW340
Summary: Studio editor: copy Unicode to clipboard on Win9x systems
Description:
On Win9x systems, an attempt to copy text to the clipboard
that had characters not in the current keyboard locale
converted the characters to '?'s. This is expected behavior,
but not necessary in all circumstances.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: System.I/O
Platforms: OpenVMS
DevKey: RFD073
Summary: Modify "U" mode RMS files to read formatted files correctly
Description:
This change allows the "U" mode for sequential RMS files on OpenVMS to correctly read an exact byte stream from files of other formats (for example "S"tream or "V"ariable). This matches the behavior of "U" mode on Windows and UNIX.
Previously, reading a formatted RMS file in "U" mode would strip out any record indicators (i.e. CR/LF in "S"tream files and length header in "V"ariable files).
Note that this does change the previous behavior of "U" in a slightly incompatible way, but only for reading other file formats.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Medium | Medium | Yes | Yes |
Category: System
Platforms: All
DevKey: RFD076
Summary: Create list file for loading Caché KM in BMC Patrol
Description:
Add a .KML "list" file to make it easier to load the Caché Knowledge Module in BMC Patrol. Loading the ISC_CACHE.kml file automatically loads all the other .KM files necessary for Caché.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: Config Mgr
Platforms: All
DevKey: RJW693
Summary: Fields of License wizard are empty when Caché (NT) uses UNIX style cache.key
Description:
This fix corrects a problem when customers copy a cache.key file from a UNIX system to a Windows system using binary ftp, the file will contain the UNIX <LF> end of line indicator instead of the DOS <CR> <LF> end of line indicator. This causes the cache.key file to be interpreted incorrectly by the Configuration Manager License Wizard, so the old values are not displayed.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: System
Platforms: All
DevKey: RJW709
Summary: COM port reads can fail on Windows if data arrives before the read
Description:
If data is written to a COM port from the remote side of the connection before a read is issued to the port, then some data may not be read from the COM port buffer. This could cause a read to continue until the timeout and return less data than expected. It could also cause an untimed read to never terminate even though there is data available in the com port buffer. This has been corrected.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | Yes | No |
Category: System.Shutdown
Platforms: All
DevKey: SAP078
Summary: No error capture on calls dealloc_resident_mem()
Description:
This assures all error returns from all shared memory deallocations are logged to cconsole.log.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: System
Platforms: OpenVMS, Windows, HP-UX
DevKey: SAP083, SAP090, SAP098
Summary: Process priorities not set right for background jobs.
Description:
The priority handling has been unified for Win/UX/OpenVMS.
All system process priorities are set internally by the system and cannot be changed by users. References to priorities are removed from the Configuration Manager and cache.cpf files.
%SS shows the system-dependent priorities for the various Caché system
processes. For OpenVMS, these range between 0 and 15 (4 is normal
priority). For Windows, these range between 1 and 31 (7 is normal
priority). For HP-UX, these range between -20 and 20 (0 is normal
priority). Priorities on NT systems (Windows 98, Win200, NT) now range between 0 and 31. 7 is normal priority, 15 and above are realtime priorities. Refer to the documentation on priority handling in 5.0.
By default, jobbed processes have priority equal to the current base priority at which the parent process is running. A system service is provided to increase/decrease the priority at which jobbed processes are started. See below.
There are 3 services provided to set and get priorities, and alter the priority of subsequent background (jobbed) processes:
$system.Util.SetPrio(n[,pid])
Raise/lower the priority of the currently executing process (or the process specified to process id "pid") by n steps from its current priority. A positive value raises the priority, a negative value lowers the priority.
The ability to raise one's priority is dependent on the system. On UX, attempts to raise a process priority fail. However, all systems allow lowering priority.
Attempts to raise/lower beyond the system imposed limits (see above) leave the priority at the highest/lowest priority.
The function returns the resulting process priority.
$system.Util.GetPrio([pid])
Returns the current priority for this process, or for the process given by "pid".
$system.Util.JobPrio(n)
Raise/lower the priority of subsequent jobbed processes by n steps from that of its parent priority. A positive value raises the priority, a negative value lowers the priority.
If the addition of the job priority increment value to the parent priority results in a priority below/above system limits, the jobbed process executes at the system limit (lowest or highest).
The function returns the current job modification value.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | Yes |
Category: System
Platforms: All
DevKey: SAP088, SAP091, SAP092
Summary: Save/Restore the process priority of the control process during job startup on UNIX and Windows
Description:
Previously the variable maintaining it was overwritten while executing JOB and so would be incorrectly reported (the priority itself was unaffected)
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Medium | Low | No | No |
Category: System
Platforms: OpenVMS
DevKey: SAP097
Summary: On VMS display the correct process priority when examining processes
Description:
This fixes a reporting issue.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
High | Low | No | No |
Category: System
Platforms: All
DevKey: SJ1403
Summary: Fix problem with 3 or more argument $BITLOGIC
Description:
This fixes problems with using the $BITLOGIC function with 3 or more arguments.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: System
Platforms: All
DevKey: SML310
Summary: Make DEFNETDIRSIZ 64 KB
Description:
The network directory table size has been increased to 64K to allow support for up to 30 networked databases.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: System
Platforms: All
DevKey: SML312
Summary: ECP server should never wait and retry on lock table full
Description:
ECP Server retry logic has been corrected so it will not repeatedly wait and retry when the lock table is full.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: System
Platforms: All
DevKey: SML313
Summary: Fix lock_c_cleanup for ECP server dismounts DB
Description:
This fix corrects a race condition where a lock request can be sent from a client to a server at the same time the server is sending a dismount message about the same database to a client.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: System
Platforms: All
DevKey: SML316
Summary: Fix DCP lock race condition
Description:
Fixes a race condition in the lock module which could result in
failure of cluster recovery when using DCP for lock transport.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: System
Platforms: All
DevKey: SML317
Summary: Display correct message for cluster ECP connection
Description:
This change causes ECP network connections to be properly identified and displayed as such.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: System
Platforms: All
DevKey: SML318
Summary: Fix un-removable lock when lock table is reset
Description:
Pending DELOCKs are now properly handled on remote servers if the lock table on that server is reset.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: System
Platforms: All
DevKey: SML320
Summary: Change for better network lock fairness on server
Description:
This improves fairness of lock promotion when more than one process
has a lock pending until the release of a higher level lock. This
only affects applications which promote locks and have high contention
on specific lock references. Also, this is only relevant for
configurations which serve locks over DCP.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Medium | Yes | No |
Category: System
Platforms: Linux, OpenVMS
DevKey: SML321
Summary: Fix telnet disconnection will leave an open transaction on OpenVMS and Linux
Description:
On Linux and OpenVMS platforms, when we disconnect the telnet session while the job still has a open transaction, the transaction won't be rolled back after the job exits. This is now fixed.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Medium | Low | No | No |
Category: System
Platforms: All
DevKey: SML322
Summary: Display lock entry in pending state
Description:
The LOCKTAB utility did not display pending state of a lock entry to remote server. So the user could get confused and think the lock is granted already (on both client and server). But it could be that the lock is granted by another job on server and it is waiting on server for the lock to be granted.
This change will display a 'P' along with '*' to indicate the lock is queued on server and waiting for it to be granted. A 'D' along with '*' to indicated the lock is waiting for server to release the lock. If neither 'p' nor 'D' is displayed it indicates the remote lock is granted.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: System
Platforms: All
DevKey: SML323
Summary: Allow ECP client send 'get file' request on ECP recovery when server is not re-started
Description:
Sometimes the ECP client would fail to re-fetch modified routines after re-connecting.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Medium | Medium | No | No |
Category: System
Platforms: All
DevKey: SML325
Summary: Fix multi-entry lock command over ECP problem
Description:
When a job requests multiple locks on a remote ECP server, and the request is blocked because one of the locks is held by another process, the request will hang because the server does not recognize when the single lock is unlocked that there are remote clients waiting to acquire it.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: System
Platforms: All
DevKey: SML329
Summary: Fix a problem when Lock and ZA on the same global by the same job
Description:
When a job uses DSM style ZA and ZD ($zu(68,8) turned on), and it uses LOCK commands and ZA commands to lock the same node without unlocking it first, it will generate null lock nodes in lock table. Eventually, this will exhaust the lock table.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | Yes | No |
Category: System
Platforms: All
DevKey: SML330
Summary: DTM lock error fix
Description:
Fix DTM server process "L " with more than one subscript.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Medium | Low | Yes | No |
Category: System
Platforms: All
DevKey: SML331
Summary: Let network daemon keep list of locks granted by it so it could handle some deadlock issue
Description:
The network daemons (ECP, DCP, DDP and DTM) now keep the list of locks granted by the daemon for the remote client system. This improves overall lock management.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: System
Platforms: All
DevKey: SML332
Summary: Fix a rare problem where a stranded lock was left in the lock table
Description:
This happened on multi-entry lock command and it has (parent node, childnode) sequence when one of the requested locks was already held by another process.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | Yes | No |
Category: System
Platforms: All
DevKey: SML334
Summary: Don't let network daemon call SWCHECKSET in waitupd(), so it won't block the cluster failover
Description:
This correction fixes a problem that could cause a client daemon job to block the progress of the recovery daemon.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Medium | Low | Yes | No |
Category: System
Platforms: All
DevKey: SML335
Summary: Display correct cluster error message for ECP
Description:
If, during remount of databases, the ECP connection failed to start, the error message displayed would indicate a DCP network instead of an ECP network.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: System
Platforms: All
DevKey: SML336
Summary: Fix bad lock encoding (for example ^a("10.41"))
Description:
The following lock node will generate bad lock encoded string.
It failed when the decimal value is teens (for example 10 to 19) and there is fraction value without trailing zero. And the number has to be a string data type. The following examples failed:
"10.11", "12.388" and "19.2334".
Though the following won't fail.
"10.40", "011.34" and "19.23340"
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | Yes | No |
Category: System
Platforms: All
DevKey: SML338
Summary: Fix multi-entry lock command live lock problem
Description:
This reduces the likelihood of an application deadly embrace
between processes if the application uses the multi-entry Lock
command (expressing several lock references within parentheses).
It also fixed a potential problem for ECP multi-entry lock problem
where
the client re-sends the lock list to lock and when
it conflicts on another node it won't release the previous granted node.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Medium | Low | No | No |
Category: System
Platforms: All
DevKey: SML339
Summary: Start Cluster ECP connection for slave when startup
Description:
This change is to start the cluster ECP connection when a slave node join the cluster. If we don't do this, a job could gets <NETWORK> error if it tries to initiate the very first request to the cluster master while cluster failover on other nodes. The cluster failover may take longer than 20 seconds. And the very first ECP connection could wait on 20 seconds to see if the connection is set up. After 20 seconds without success the job will get <NETWORK> error.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: System
Platforms: AIX
DevKey: SML341
Summary: $ZTIMEZONE failed unpredictably on AIX
Description:
This corrects a problem with $ZTIMEZONE failing to return the
correct time zone.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Medium | Low | Yes | No |
Category: System
Platforms: All
DevKey: SML344
Summary: Disable Nagle Algorithm by default on TELNET devices
Description:
This reverses a correction added in 4.1 (by default) while keeping the option of Nagel available for those who have very lossy connections.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Medium | Low | Yes | No |
Category: System
Platforms: All
DevKey: SML346
Summary: Fix short timeout problem on ECP
Description:
This corrects a problem in 5.0 that sometimes a lock with 1 second timeout over ECP could not grant the lock even though the node is not locked on server side.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: System
Platforms: All
DevKey: SML350
Summary: Fix possible lock memory lost when lock table full
Description:
This corrects a problem where lock memory may be lost when an attempt to lock a lock fails because the lock table is full.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | Yes | No |
Category: System
Platforms: All
DevKey: SML351
Summary: Limit # of Caché job to access DSM through DDP to 1544
Description:
When a Caché job's internal job number is greater than 1544, and it tried to access a DSM server DB through DDP then it will get <DDP OVERFLOW JOB> error.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: System
Platforms: All
DevKey: SML352
Summary: Fix potential TRANSCB LRB list corruption
Description:
For DCP, in most cases when a job need to send unlock request to server it removes the lock entry in local lock table right after the request is queued in network buffer. But there is a rare case that the lock entry will stay in lock table until the unlock answer is arrived. Then, the DMNNET daemon will remove this lock entry when it processes the server's answer.
The problem is that the DMNNET daemon did not hold a resource for the action. So when it removes the lock from the list, it may interfere with another job working in the table.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | Yes | No |
Category: System
Platforms: All
DevKey: SML353
Summary: Fix hang on multi-entry lock with same global nodes over network
Description:
This corrects a problem where multiple clients attempting to lock the
same global nodes over a network may experience a hang.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | Yes | No |
Category: System
Platforms:
DevKey: SML355
Summary: Fix ECP timing hole
Description:
This fixes a potential timing hole on new cluster master during failover.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: System
Platforms: All
DevKey: SML356
Summary: Don't flush ECP journal records to disk when ECP is only being used as a lock transport for Caché clusters
Description:
The cluster mechanisms take care of recovery. Not having to create
these journal records and
flush them to disk improves cluster performance
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: System
Platforms: All
DevKey: SML357
Summary: Fix cluster failover potential hang
Description:
When jobs are issuing delock requests during cluster failover,
there was a slight possibility of a hang after the failover was complete.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | Yes | No |
Category: System
Platforms: All
DevKey: STC404
Summary: TASKMANAGER - set start date properly, improve queries, add simple menu to drive
Description:
Without this fix, the first run of the task would have been skipped.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
High | Low | No | No |
Category: System
Platforms: All
DevKey: STC414
Summary: Encryption functions - rename from Rijndael to AES
Description:
The encryption methods $SYSTEM.Rijndael.Encode and
$SYSTEM.Rijndael.Decode have been deprecated.
Customers should now use $SYSTEM.AESEncode and $SYSTEM.AESDecode which
better reflects the meaning of the encryption functions.
Old names remain but will be removed in a future version.
Support for $SYSTEM.Rijndael.Encode and $SYSTEM.Rijndael.Decode will
be removed in a future version.
Users should migrate to the new names.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | Yes |
Category: System
Platforms: All
DevKey: STC417
Summary: Fix collation detection in IF/ELSE clause
Description:
This fixes a potential bug for selecting collations for globals when selecting individual globals to copy.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | Yes | No |
Category: System
Platforms: All
DevKey: STC421
Summary: Fix ability to map routine types
Description:
This change adds a new algorithm for the rINDEX mapping for each specified routine type: rMAC, rINT, ROUTINE, and rOBJ.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | Yes | No |
Category: System
Platforms: All
DevKey: STC423
Summary: Fix MD5 hash for big endian platforms
Description:
The MDS hash of a string should be the same on all platforms. On big endian Unicode platforms we convert the string to be hashed to little endian, and then hash it. After the hash, we incorrectly converted the resulting string back to big endian, when it should have been left in little endian format as to be compatible with other Caché systems.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Medium | Medium | No | No |
Category: System
Platforms: All
DevKey: STC444
Summary: Fix output file error in GBLOCKCOPY
Description:
This fixes the problem where, if you choose to look at a report from GBLOCKCOPY and for your device you enter a file name, the file will contain the report and some errors. It looks as if choosing a file to output the report ends your session in GBLOCKCOPY, instead of just sending the report off and returning control to the user.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: System
Platforms: All
DevKey: STC450
Summary: Lock out other gcompact on same database
Description:
Database compaction was allowed to run multiple iterations at the same time on the same database. This is now prevented by the use of a lock.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: System
Platforms: All
DevKey: STC451
Summary: GBLOCKCOPY allows conversion of collation 0 globals
Description:
Previously, globals with a collation type of 0 could not be selected by GBLOCKCOPY for a conversion to standard type 5. This is now allowed.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | Yes |
Category: Misc
Platforms: All
DevKey: TR959
Summary: This fixes a problem of cache coherency in the handling of modified 2k blocks over ECP
Description:
Assume we have two linked 2 KB data blocks A and B, and only
block A is in the client cache. If a new global is added at
the end of block A (by the same client), the set does not
modify and invalidate block A in the client cache, and the
server also does not invalidate the client cache (as expected).
If the client fetches block B (after completing the set request),
then block A in the client cache is linked to B missing the new global.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: Object.ActiveX
Platforms: All
DevKey: TTS042
Summary: Fix for CachéObject: ERROR #5802: Datatype validation failed when value < 0.1
Description:
ERROR #5802 may occur while saving an object from VB when the float datatype validation encounters a value < 0.1.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Medium | Yes | No |
Category: Installation.OpenVMS
Platforms: OpenVMS
DevKey: WDS005
Summary: Set ownership of target root directory (and all subdirs) to value of CACHE$MGRUIC
Description:
This is new functionality in response to a specific customer request. If the logical name CACHE$MGRUIC is defined during a new configuration installation, cinstall.com will set the owner UIC of the target directory to the value of that logical. Subdirectories and files will inherit that UIC.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | Yes | Yes |
Category: SQLManager
Platforms: All
DevKey: YSD576
Summary: Change the Owner of a view in SQLManager
Description:
SQL Manager has been changed to allow changing the ownership of a view.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | Yes | Yes |
Category: SQLManager
Platforms: All
DevKey: YSD581
Summary: Show plan fails when default SQL schema name is user defined
Description:
Show plan fails when default SQL schema name is user defined.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: SQLManager
Platforms: All
DevKey: YSD583
Summary: Link table name with space or other characters in it
Description:
In Link Table wizard, if user enters a new table name that contains space or other characters then it gave "Invalid table name" error message.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |
Category: SQLManager
Platforms: All
DevKey: YSD584
Summary: Japanese characters garbled when printing to a printer
Description:
SQL Manager now sends Japanese characters to the printer properly.
Likelihood of happening | Risk this change introduces new problems | Distributed in ad hoc release and installed in production | This change is an enhancement |
---|
Low | Low | No | No |