Skip to main content

InterSystems IRIS for Health™ Upgrade Checklist and Change Notes (2022.1.2)

This document is meant to help you assess the impact of upgrading to the InterSystems IRIS for Health 2022.1.2 maintenance release. It contains the upgrade checklist items since the last extended maintance (EM) release, 2021.1.0. It lists fixed issues. It lists other changes since 2022.1.0, grouped by category.

Important:

IntegratedML is not functional in this release when configured to use the default AutoML provider. A workaround is to use the H2O or DataRobot providers. See documentation on setting the ML Configuration for details.

InterSystems 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 release announcements. You can obtain the most current list at https://www.intersystems.com/support-learning/support/product-news-alerts/Opens in a new tab. InterSystems recommends that you check this list periodically to obtain the latest information on these issues.

Upgrade Checklist (Developers)

DP-404469: New privilege needed to schedule Ens.Util.Tasks.Purge* tasks

NOTE: This item may require a change to code, configuration, or operation.

Category: Interoperability
Platforms: All
Version: 2022.1.0

To schedule Ens.Util.Tasks.Purge* tasks, the user must have the %Ens_PurgeSchedule:USE privilege, which is granted by the %EnsRole_Administrator role, and which can be added to custom roles. The %Ens_MessageResubmit and %Ens_SequenceManager resources no longer exist; no customer code should have referenced them directly.

DP-407539: Improvements to purging backup logs

NOTE: This item may require a change to code, configuration, or operation.

Category: Kernel
Platforms: All
Version: 2022.1.0

In previous releases, only backup logs within the file named "idpbackup.log" (created by running ^BACKUP from terminal) were being purged by the PurgeBackupLog task, and log files generated by running backups from the Management Portal were never purged. This change makes the handling of these logs consistent: purging purges both kinds of logs. In addition, this changes the default number of days to purge logs from 7 to 30.

Changes affecting the different entry points for running backups are as follows:

  • Backups run from Management Portal: Backup logs will be created and named the same as they were before (according to the name of the task being run), but they will now be purged by the PurgeBackupLog task (before, they were never purged).
  • Backups run from Terminal (^BACKUP): Rather than appending each backup log into the same idpbackup.log file, each backup run will generate a new idpbackup_date_counter.log file. The PurgeBackupLog task will then delete these files individually rather than scanning and trimming the contents of the idpbackup.log file.
  • Backups run externally ($$BACKUP^DBACK()): The backup log file specified by the user in the arguments will be created newly or overwritten (rather than appending to it); if there is no file specified, the backup will generate a new idpbackup_date_counter.log file as for TUI backups. The PurgeBackupLog task will work as for TUI backups.

DP-407972: Language SDK unified schema caches will be purged

NOTE: This item may require a change to code, configuration, or operation.

Category: Language SDK
Platforms: All
Version: 2022.1.0

When you upgrade to this release, all Language SDK Unified Schemas will be purged from the cache. This change does not require any change to your code, but each schema will be processed and cached the first time it is accessed.

DP-408030: xDBC rejects connections when server ListFormat is not supported

NOTE: This item may require a change to code, configuration, or operation.

Category: xDBC Server
Platforms: All
Version: 2022.1.0

This change corrects a connection error with an illegal ListFormat setting that was ignored by previous releases. If the server was configured with ListFormat 2 or 3, the connection will now be rejected. This setting was never supported by the clients and could result in inconsistent behavior or data loss if the connection was allowed.

DP-408254: Do not allow insert SQL_CHAR or SQL_WCHAR values into BINARY field

NOTE: This item may require a change to code, configuration, or operation.

Category: ODBC
Platforms: All
Version: 2022.1.0

If your code uses SQL_CHAR or SQL_WCHAR for binding into a BINARY field, you need to change it to SQL_BINARY. This combination is unlikely to be used in code.

DP-408501: Replace random number generator algorithm in $Random with Splitmix64

NOTE: This item may require a change to code, configuration, or operation.

Category: Kernel
Platforms: All
Version: 2022.1.0

Before this change, $random used a pseudo random number generator algorithm. With this change, we replace it with Splitmix64, a fast pseudo random number generator algorithm that can pass rigorous statistical tests of its randomness.

In most cases, this does not impact compatibility, but if your application uses $zu(165) to specify a seed and relies on an expected sequence of random numbers, you will have to update your code with the new sequence. For example, the %Populate utilities will produce different results than prior versions with the same seed.

DP-408808: When FETCH call has two sets of INTO variables, fetch results into both sets of variables

NOTE: This item may require a change to code, configuration, or operation.

Category: SQL
Platforms: All
Version: 2022.1.0

This change restore behavior of embedded SQL when DECLARE <name> CURSOR has INTO variables and the FETCH also has INTO variables. A previous change unintentionally modified the behavior so that the code updated only the DECLARE <name> CURSOR variables.

This change restores the previous behavior of updating both sets of variables.

DP-409100: Run object destructors when a .Net application quits

NOTE: This item may require a change to code, configuration, or operation.

Category: Kernel
Platforms: All
Version: 2022.1.0

Actions performed by an object's %OnClose method, such as unlocking a record in a persistent class, were not being performed in a timely manner for a client/server application using .Net, JDBC, etc.

DP-409204: Java binding collections now behave consistently

NOTE: This item may require a change to code, configuration, or operation.

Category: Object - Java Binding
Platforms: All
Version: 2022.1.0

Previously, in Java Bindings ArrayOfDataTypes and ListOfDataTypes did not behave consistently. In this release, there is a new behavior that will be a change for each type, but the behaviors are consistent with each other. For ArrayOfDataType, previously when inserting elements there was a check to confirm the type matched the type of previously inserted elements, and would throw an error if that was the case. This change no longer checks this, as we are supporting arrays of multiple types. For both ArrayOfDataTypes and ListOfDataTypes, there used to be required conversions by the user for special types (Date, Time, and DateTime). Now, if the elementType is set to one of these types, the conversion is done automatically and the user receives an already converted value.

DP-409557: ICM has new default WebServerPort 57772

NOTE: This item may require a change to code, configuration, or operation.

Category: Cloud
Platforms: All
Version: 2022.1.0

In this release, ICM uses a default web server port 57772. In previous releases, it used 52773. If your deployment expects the previous default port, you should override WebServerPort to match your existing deployment, using the JSON field "WebServerPort".

DP-409705: Refresh .NET versions

NOTE: This item may require a change to code, configuration, or operation.

Category: Gateways - .NET
Platforms: All
Version: 2022.1.1

This change refreshes the .NET Versions to align with the versions that are still in support by Microsoft. We have removed versions that are no longer in support by Microsoft (.NET Framework 2.0, 4.0 and 4.5, and .NET Core 1.0 and 2.1).

We have also added support for two versions: .NET Framework 3.5 and 4.6.2. 

This change also updates the assembly versions so they match the new versions we support.

The new assemblies will be under a different path, so projects that use the path to the dll location under the InterSystems IRIS install location will need to update the path to correspond to the new versions. For example, a previous path would be:

<InterSystems IRIS install location>\dev\dotnet\bin\v4.5\InterSystems.Data.IRISClient.dll

That location will no longer exist under the new installation, and should be changed to:

<InterSystems IRIS install location>\dev\dotnet\bin\v4.6.2\InterSystems.Data.IRISClient.dll

In terms of compatibility between versions, the new 4.6.2 version is backwards compatible and the applications will run on systems that have any .NET Framework 4.x installed.

However, .NET Framework is not forwards-compatible, so if customers have applications that target .NET Framework 4.5, they cannot use one of our .NET Framework 4.6.2 libraries as a dependency. Their options are:

  • Change the target framework of their application to be at least 4.6.2. .NET Framework 4.5 has been out of support by Microsoft so this will also ensure users are using a supported language version.
  • Use the .NET Framework 3.5 version of our library. Users might lose access to certain features/functionality that was introduced in version 4.0.
  • Use old versions of our library that target 4.5. These will not contain the latest bug fixes or functionality, but users will not need to modify the dependencies of their applications.

DP-410011: ZWRITE preserves $ZR unless a global arg is given

NOTE: This item may require a change to code, configuration, or operation.

Category: ObjectScript
Platforms: All
Version: 2022.1.0

In this release, ZWRITE has the following new behavior:

  • If you ZWRITE a local variable (defined or not): ZWRITE will always preserve the original $ZR value. In previous releases, $ZR could be set to an unexpected value overwriting the previous $ZR value.
  • If you ZWRITE a global with or without a subscript, it will always set $ZR to be that global reference, defined or not. In previous releases ZWRITE a global would vary how it set $ZR depending on whether the global was defined with or without a subscript.

DP-410050: Correct a rare bug on class initialization

NOTE: This item may require a change to code, configuration, or operation.

Category: Kernel
Platforms: All
Version: 2022.1.0

This change corrects a very rare bug that could cause the wrong version of a class to be loaded into memory. This could lead to increased memory usage if class components are not being used. Otherwise, it only changes the time at which they are loaded into memory.

DP-410087: Change in error when dynamic dispatch is not implemented

NOTE: This item may require a change to code, configuration, or operation.

Category: Kernel
Platforms: All
Version: 2022.1.0

If a class does not implement dynamic dispatch and a method whose name ends with Get or Set is called and the method does not exist, the error is now <METHOD DOES NOT EXIST> instead of <PROPERTY DOES NOT EXIST>.

DP-410470: Change in behavior to deprecated $view(n,-5)

NOTE: This item may require a change to code, configuration, or operation.

Category: Global Module
Platforms: All
Version: 2022.1.0

Although it is now an undocumented internal function, $view(n,-5) may still be used in legacy code.

The behavior of $view(n,-5) for even values of 'n' has changed when the block in the view buffer is a (type 8) data block. If the value to be returned (the value of node number n/2) is a big string, a <VALUE OUT OF RANGE> error will now be thrown. Before this change, the big string block numbers stored in the data block would be read in a best-effort attempt to return the big string value. That however could lead to unexpected behavior on systems if the database had changed in the interim. The unexpected behavior could include <DATABASE>, an invalid value, or under very rare circumstances, a cache coherency issue. Code that uses this function may need to be reviewed and remedied as follows:

  • For callers of $view(n,-5) for even values of 'n' that intend to operate only on pointer blocks, but may have ended up with a data block in the view buffer due to concurrent changes to the database, either (a) check that the block type in the header matches the expected type or (b) trap the error and treat <VALUE OUT OF RANGE> as invalid block. Note that (a) is best practice and if not done then such code was already subject to bad behavior due to the possibility of getting an unexpected data block value that may be confused for a down pointer value.
  • For callers that intend to retrieve global values from a data block, either trap the error from $view(n,-5), or use $v(n,-6) to check the node type first. In either case, if the value is needed, get the current value by constructing the appropriate glvn (based on $view(n-1,-5)) to use $data or $get with indirection.

Note that before this change, when operating on a data block from a remote database, a big string value may have been returned as null.   With this change the behavior is the same for local and remote databases, throwing <VALUE OUT OF RANGE> error.

DP-411367: Change with XEP unified schema and maximum field length

NOTE: This item may require a change to code, configuration, or operation.

Category: Object - .NET XEP
Platforms: All
Version: 2022.1.0

Existing classes will be unaffected by this change; only classes newly generated by Unified Schemas will be affected. There should not be any new behavior except when using SQL or InterSystem IRIS Objects against these tables/classes. Prior to this change, the default MAXLEN=50 is used. With this change, the size is not constrained to a maximum length of 50. There could be differences when querying string data that exceeds the 50 character default MAXLEN.

DP-412202: Changes to $zversion String and GetPlatform() for Linux

NOTE: This item may require a change to code, configuration, or operation.

Category: Kernel
Platforms: Linux
Version: 2022.1.0

The $zv string will now include the Linux distribution version. If your code parses this string, you may have to modify it to handle this change. This string is also returned by the GetPlatform() method of %SYSTEM.Version class.

DP-412629: Improve XML Virtual Document support for 'any' element

NOTE: This item may require a change to code, configuration, or operation.

Category: Interoperability
Platforms: All
Version: 2022.1.1

Before this change, when setting XML data to an 'any' element of an XML Virtual Document, the 'any' tag would be included in the output.

Also when using a sub-transform, the XML representation used to set to a target property of element type 'any' would not include the top level. This is also corrected. The correction is to the EnsLib.EDI.XML.Document SetSubDocument() method.  This method inserts the XML representation of pSubDocument into the target document at the path specified by pPropertyPath. The XML representation is the GetValueAt using "/1" as the property path except if the target Property Path where the sub document is to be set is of type "any" then the XML representation of pSubDocument retrieved  will be the full document including top element i.e. path "/"

DP-413048: Remove Linux capability checking from InterSystems IRIS containers

NOTE: This item may require a change to code, configuration, or operation.

Category: Cloud
Platforms: Linux
Version: 2022.1.1

This change removes the no-longer-necessary Linux capability checking from InterSystems IRIS containers, to avoid incompatibilities with new versions of Docker.

This doesn't immediately affect ICM users because an older Docker version is set in Samples/defaults.json.

DP-413293: Zen Reports: do not allow use of $DATASOURCE URL parameter by default

NOTE: This item may require a change to code, configuration, or operation.

Category: Compatibility Features
Platforms: All
Version: 2022.1.2

Previously ZEN Reports would allow the report's datasource to be specified at runtime via the $DATASOURCE URL Parameter. If this is not defined, then we will use the DATASOURCE class parameter, and if that isn't defined we will use the ReportDefinition to generate the XML data. The ReportDefinition is the standard way to specify report data.

With this change, Zen Reports will no longer use the $DATASOURCE URL parameter by default. Developers are strongly encouraged to use the DATASOURCE class parameter to specify an external datasource if desired. If a report does require the $DATASOURCE URL, you can re-enable the previous behavior on a per-report or per-application basis by setting the parameter:

Parameter USEURLDATASOURCE = 1; 

in either the report class, or in the report's Application class. Setting this value is discouraged.

DP-413405: Revert Security.Events:ListAll() to preserve backwards compatibility

NOTE: This item may require a change to code, configuration, or operation.

Category: Security
Platforms: All
Version: 2022.1.0

Previously, DP-402686 added a new query called ListByFilter() to the Security.Events class and then reconfigured the ListAll() query to call this new query. In doing so, it changed the signature of ListAll(), which broke backwards compatibility.

This change reverts Security.Events:ListAll() to what it was before DP-402686. Then, to maintain the SMP fix that DP-402686 introduced, it changes the SystemEvents and UserEvents SMP pages to call the ListByFilter() query instead of ListAll().

As a result, the backwards compatibility of Security.Events:ListAll() has been restored.

DP-413775: Change a few DataMove APIs

NOTE: This item may require a change to code, configuration, or operation.

Category: DataMove
Platforms: All
Version: 2022.1.0

Several of the DataMove API's have been changed to add a new first parameter "Name" in the DataMove.API class as follows:

MapInitialize(Name as %String, Namespaces As %String)
MapGlobalsCreate(Name as %String, Namespace As %String, GblName As %String, ByRef Properties As %String)
MapGlobalsDelete(Name as %String, Namespace As %String, GblName As %String) As %Status
MapGlobalsModify(Name as %String, Namespace As %String, GblName As %String, ByRef Properties As %String)

Customer will need to update their scripts to add this new parameter.

DP-415945: Interoperability Java and DotNet Gateway services modifications for core api change

NOTE: This item may require a change to code, configuration, or operation.

Category: Interoperability
Platforms: All
Version: 2022.1.1

The classes EnsLib.JavaGateway.Service and EnsLib.DotNetGateway.Service have a new exposed setting in the Production Configuration page of "External Language Server Name" (property %gatewayName).

The value of External Language Server Name is a name given in the Management Portal at System > Configuration > External Language Servers

For an EnsLib.JavaGateway.Service, it can be %Java Server or a custom Java type entry. (Note that when used with a SQL Business Service or Operation that uses JDBC, it is still a Java type entry and not JDBC type)

For an EnsLib.DotNetGateway.Service, it can be %DotNet Server or a custom .NET type.

  Once External Language Server Name is specified, it supersedes the settings in Server and Port and the associated gateway configuration settings such as classpath , heartbeat, use passphrase and JVM.

Note it is now not possible to start a gateway that uses a passphrase without using an External Language Server Name.   The superclass EnsLib.JavaGateway.Common used by Services and Operations that use the gateway now identifies if the associated Java Gateway specifies an External Language Server Name  and uses that value rather than the Server and port values to connect to the relevant proxy gateway. 

It is intended that there will be no need for EnsLib.JavaGateway.Service and EnsLib.DotNetGateway.Service items at a later date.

DP-416085: Interoperability DotNet Gateway .Net version options update

NOTE: This item may require a change to code, configuration, or operation.

Category: Gateways - .NET
Platforms: All
Version: 2022.1.1

The EnsLib.DotNetGateway.Service provides a list of available .NET frameworks. These have been updated to:

  • Framework 4.6.2
  • Framework 4.5
  • Framework 3.5
  • Framework 2.0
  • Core 2.1
  • .NET 5.0
  • .NET 6.0

Not all binaries may be available. The default is Framework 4.6.2.

DP-416353: Check required resource in Config.Gateway.Delete()

NOTE: This item may require a change to code, configuration, or operation.

Category: Gateways - .NET
Platforms: All
Version: 2022.1.1

With this change, in order to delete a gateway, you must have the permission %Admin_ExternalLanguageServerEdit:USE.

DP-416356: Remove support of transient gateway definition in XSLT

NOTE: This item may require a change to code, configuration, or operation.

Category: Gateways - XSLT
Platforms: All
Version: 2022.1.1

With this change, it is no longer possible to start the XSLT Gateway using a transient gateway definition specified by command line arguments that override the predefined definition.

DP-416562: Correct WebSocket handling of low-level errors

NOTE: This item may require a change to code, configuration, or operation.

Category: CSP Server
Platforms: All
Version: 2022.1.1

This fix corrects a bug in the error handling for web socket connections. If an error was encountered before the CSP server dispatched to the WebSocket class, then the error would be ignored. Now the CSP server will call the Error() method in the WebSocket class. Similarly, for authentication failures, the server will call Login(). Note that by default, Login() just calls Error(). 

The websocket will also now abort the connection if OnPreServer() returns an error. Previously errors were ignored.

DP-416563: Do not allow navigation to %-CSP pages from the /csp/sys/oauth2/ application

NOTE: This item may require a change to code, configuration, or operation.

Category: CSP Server
Platforms: All
Version: 2022.1.1

This change modifies the default configuration to disallow access to %-CSP pages from the /csp/sys/oauth2/ application.

DP-416898: Mark internal methods in %Net.Remote.Service with Internal keyword

NOTE: This item may require a change to code, configuration, or operation.

Category: Gateways - .NET
Platforms: All
Version: 2022.1.1

This change marks many methods in %Net.Remote.Service with the Internal keyword. You should scan your code for uses of %Net.Remote.Service and make sure that it calls only methods that are visible.

DP-417168: Record Mapper and EDI Document Viewer file view permissions check

NOTE: This item may require a change to code, configuration, or operation.

Category: Interoperability
Platforms: All
Version: 2022.1.2

The Interoperability Record Mapper and EDI Document viewer management portal pages enforce holding the privilege %Ens_ViewFileSystem:USE before allowing the user to select a file using the file select dialog popup. This change adds the same check before a file is opened.

DP-418513: Remove Server property from toDao() method and Config.Gateways class

NOTE: This item may require a change to code, configuration, or operation.

Category: Gateways - .NET
Platforms: All
Version: 2022.1.2

This change removes the Server property from the Config.Gateways class.

DP-418706: Update some CONVERT style code behaviors to match MS SQL Server

NOTE: This item may require a change to code, configuration, or operation.

Category: SQL
Platforms: All
Version: 2022.1.2

This change will correct the behavior of CONVERT in InterSystems IRIS to output dates in the format as prescribed by MS SQL server, in order to ensure our function is compatible with MS SQL as stated in the documentation.

Similarly, for code 126, the CONVERT() function now generates output in the format yyyy-mm-ddThh:mi:ss.mmm.

DP-8357: Improve %FromJSON() error checking

NOTE: This item may require a change to code, configuration, or operation.

Category: Object
Platforms: All
Version: 2022.1.0

The %FromJSON() method would accept numeric input with an illegal format (a few example arrays [0e] and [-].) In the past this very deviant numeric syntax did not generate an error. However, some illegal numeric syntax is accepted by some third party JSON decoders by making minor corrections to illegally numeric syntax. Example arrays that will be accepted and corrected by the %FromJSON(....) method are: (1) [-5.] will become [-5.0] and (2) [-.5] will become [-0.5].  Also, the maximum input length for a JSON numeric string has been increased to 1022 characters.

DP-10904: Journaling files may be compressed

NOTE: This item may require a change to code, configuration, or operation.

Category: Kernel
Platforms: All
Version: 2022.1.0

The system can now automatically compress journal files after they are created to reduce the amount of space consumed by older journal files. Compressed files have a 'z' appended to their name. Any code which scans for journal files by name needs to be updated to cater for this change (if compression is enabled).

The size column in the %SYS.Journal.ByTimeReverseOrder query is the size on disk. Previously the size on disk and the amount of journal data in a file were more or less the same but with compressed files this is no longer the case. $$$GetJrnDataSize(%jrnfile) in %syJrninc.inc will return the amount of journal data in a file (from the journal file header) regardless of whether a file is compressed or not.

Compression is enabled by default during an upgrade from a version which did not support it.

DP-13424: Cannot connect with ECP to older releases by default

NOTE: This item may require a change to code, configuration, or operation.

Category: Kernel
Platforms: All
Version: 2022.1.0

By default, this release may compress compiled routines to improve efficiency. These compiled routines cannot be handled by previous releases of the product. Consequently, it will not allow ECP connections to instances that don't support this feature; specifically, if you attempt to connect to older instances, the result will be an error.

You may disable this compression feature system-wide with $ZU(69,87,1). If you disable this feature, then this release will be able to connect through ECP with older releases.

DP-13515: If compact double is enabled, all clients must support it

NOTE: This item may require a change to code, configuration, or operation.

Category: JDBC
Platforms: All
Version: 2022.1.0

Users who enable the Compact Double feature will need to ensure that all clients, such as xDBC and Native, have been upgraded to a version that supports Compact Double; otherwise they will fail to connect. Users who do not enable Compact Double will not be affected. In previous releases, the Compact Double Feature was not available. If you do not enable it, you will be able to connect with all clients that you could in the previous version, but if you do enable it, you may not be able to connect with some of these clients.

DP-13952: .NET compact double changes to IRISList

NOTE: This item may require a change to code, configuration, or operation.

Category: Language Bindings - Native
Platforms: All
Version: 2022.1.0

This release adds support for the Compact Double feature for .NET client technologies: ADO, XEP IRISNative, and the Object Gateway (External Language Server). If your code is connecting to a .NET server with Compact Double enabled and your code includes IRISList and you want the values stored as compact doubles, you must modify the IRISList to enable compact double. If you do not want to have IRISList store compact double values, you do not need to change your code to connect with a server that supports compact double.

Application code can check if Compact Double is enabled for the connection by checking the "IsCompactDoubleEnabled" field on the IRISADOConnection object. You can use this value to control whether a new IRISList enables compact double with the following:

IRISList list = new IRISList(connection.ServerEncoding, connection.IsCompactDoubleEnabled);

Attempting to store a compact double on a server where it is disabled will produce an error. If you embed an IRISList within another, the compact double state must be the same in both.

DP-20958: %Net.SMTP no longer sends email if server doesn't support authentication

NOTE: This item may require a change to code, configuration, or operation.

Category: Object Library
Platforms: All
Version: 2022.1.0

Before this release, if you used %Net.SMTP to try to authenticate to an SMTP server that did not support authentication, %Net.SMTP would send the email. Now in the same scenario, %Net.SMTP will return the following error and will not send the email:

ERROR #6166: Server does not support authentication

Users who prefer the old behavior and want to continue the exchange unauthenticated after a failed authentication attempt can set the new IgnoreFailedAuth property of %Net.SMTP to true. Users who do not use authentication with SMTP as well as users who do not want to continue with an unauthenticated exchange if authentication fails don't need to do anything.

DP-292449: In %Net.Http, GetJson() replaces getJSON()

NOTE: This item may require a change to code, configuration, or operation.

Category: Object Library
Platforms: All
Version: 2022.1.0

In %Net.Http, the new GetJson() replaces the getJSON() method. The new method has the following signature:

classmethod GetJson(requestURL As %RawString = "", request As %String(MAXLEN="")="") 
            as %DynamicAbstractObject
You should examine existing code and make changes as needed.

DP-401734: Prevent missed updates from the DSTIME list when using %FixBuildErrors/%ProcessFact and %SynchronizeCube

NOTE: This item may require a change to code, configuration, or operation.

Category: Business Intelligence
Platforms: All
Version: 2022.1.0

This change corrects a bug in which updates to a source record were not caught by a call to %SynchronizeCube() in the following scenario:

  1. Multiple records are updated or inserted in the source class, and logged to ^OBJ.DSTIME.
  2. CubeA, based on that source class, is synchronized, processing ^OBJ.DSTIME into ^DeepSee.Update.
  3. %ProcessFact() is called for one or more records (but not all the updated records) on CubeB, which is also based on the same source class. This updates the facts in question and runs %SetCubeDSTime() for CubeB, marking it as up-to-date with ^DeepSee.Update as of the current time.
  4. CubeB is synchronized and does not receive updates for records that were updated or inserted in step 1 but not processed in step 3.

Note that this change removes the automatic advancement of the cube's timestamp when using %ProcessFact(), so applications relying on %ProcessFact() for updates will need to manually advance the cube timestamp.

DP-401740: (Windows) Greater precision in $ZNOW and $ZTIMESTAMP

NOTE: This item may require a change to code, configuration, or operation.

Category: Kernel
Platforms: Windows
Version: 2022.1.0

With this change, on Windows, $NOW and $ZTIMESTAMP have more digits of precision than in previous releases.

Also, previous releases included the special functions $ZU(136,21,0), $ZU(136,21,1), and $ZU(136,21) for use on Windows, to work around limitations in how Windows returned time values. Windows now returns more accurate time values and these functions are not needed. If you call these functions, you must update your code.

DP-402686: Changes to Security.Events:ListAll query arguments

NOTE: This item may require a change to code, configuration, or operation.

Category: Security
Platforms: All
Version: 2022.1.0

The Security.Events:ListAll query is a public API though it is mostly used internally. If you are using it, you may need to update your code to handle the changes in the arguments. It has been changed to now only accept three arguments (Filter, OwnerFlag, Flags) instead of five (EventSources, EventTypes, Events, OwnerFlag, Flags). Therefore, after upgrading, you will have to make changes everywhere you call ListAll if you specify more multiple arguments.

Instead of searching EventSources, EventTypes, and Events separately, ListAll now combines the Source, Type, and Name of each event into one forward slash-delineated string and searches just that string. This means that the Filter argument essentially combines EventSources, EventTypes, and Events into one.

If you are only using one of EventSources, EventTypes, or Events, you can pass that value into the new ListAll as the Filter parameter and the query's behavior shouldn't change.

If you are using more than one of EventSources, EventTypes, and Events, you will have to make changes. The simplest thing to do is to combine the previous fields into one by putting a forward slash in between each field. For example, if you have EventSources="%System" and EventTypes="%Login" you can now use Filter="%System/%Login". Unfortunately, the new ListAll can't combine EventSources and Events without also having an EventType. So to specify EventSources="%System" and Events="Logout" you need to also have an EventType, for example: Filter="%System/%Login/Logout".

DP-402901: SQL PURGE QUERIES BY AGE and FREEZE BY ID changes

NOTE: This item may require a change to code, configuration, or operation.

Category: SQL
Platforms: All
Version: 2022.1.0

If you use any of the following PURGE or FREEZE constructs, you must ensure that you specify the value with a literal, not with an identifier:

  • PURGE [CACHED] QUERIES BY AGE value
  • [UN]FREEZE BY ID value
If you have used these constructs and have specified the value with an identifier, you must update your code to avoid errors.

DP-402912: Fix problem where errors within ZWRITE command are not raised to caller's error trap

NOTE: This item may require a change to code, configuration, or operation.

Category: ObjectScript
Platforms: All
Version: 2022.1.0

This change fixes a problem where errors within ZWRITE command are not raised to caller's error trap.

Now ZWRITE throws some errors that were ignored before, but they are serious show-stopper errors that should not happen in a normal environment.

DP-403240: Cube <expression> cannot have a period character in its logical name

NOTE: This item may require a change to code, configuration, or operation.

Category: Business Intelligence
Platforms: All
Version: 2022.1.0

With this release, any cube <expression> element which uses the period (.) character in the logical name will throw a compile error. Cubes that were successfully compiled in a previous release will still function exactly as they did before until they are recompiled. You should update each <expression> element to remove any period (.) characters and recompile so that future compiles will succeed.

This change means that an intermediate expression in Architect can return an object with properties, rather than a single value.

DP-404204: Upgrading containers and file ownership changes

NOTE: This item may require a change to code, configuration, or operation.

Category: Cloud
Platforms: Cloud
Version: 2022.1.0

The volume mounted for durable %SYS must now be writeable by user 51773 (irisowner), because cloning into that directory now happens as irisowner instead of root. When it isn't writeable, startup will fail. The cloud distribution now uses a non-root install, not a traditional installation. All files are now owned by 51773:51773 (aka irisowner:irisowner). The installation directory has not changed (still /usr/irissys). 

Before upgrading, users (excluding those using ICM or IKO) MUST chown their durable %SYS directory ($ISC_DATA_DIRECTORY) so that all files are owned by irisowner, for example:

chown -R 51773:51773 $ISC_DATA_DIRECTORY

This will most likely need to be done as root. IKO and ICM perform this ownership change automatically. 

For locked down images, the installation directory ($ISC_PACKAGE_INSTALLDIR) has changed from /home/irisowner/IRIS to /usr/irissys.

Upgrades with IRIS-lockeddown and IRISHealth-lockeddown between versions pre- and post- this change are not supported and will not succeed.

DP-404238: Limit use of PasswordHash to initial configuration

NOTE: This item may require a change to code, configuration, or operation.

Category: Cloud
Platforms: Cloud
Version: 2022.1.0

PasswordHash makes it easy to change system-wide passwords during the initial system configuration. The password change is effective before the instance is initialized. In previous releases, you could also use this feature to make system-wide password changes once the system was in use and no longer had the initial passwords. With this change, PasswordHash can only be used during the initial system configuration and cannot be used later to change passwords.

Specifically, PasswordHash will only be processed if the existing hash matches a known, fixed value used to set the initial password.

DP-404334: Quote $ZF() shell commands on Windows

NOTE: This item may require a change to code, configuration, or operation.

Category: Kernel
Platforms: Windows
Version: 2022.1.0

Windows shell commands must be enclosed in quotes if there are quoted arguments along with a quoted command path. Those quotes will now be added by $ZF(-1), $ZF(-2), and $ZF(-100,"SHELL").

DP-404892: Changes to how ZWRITE displays IEEE doubles

NOTE: This item may require a change to code, configuration, or operation.

Category: ObjectScript
Platforms: All
Version: 2022.1.0

There are minor changes in the way ZWRITE displays IEEE double-precision floating-point values. The new formatting is more readable and provides better cutting and pasting output values. This should not impact most code, but if your code is looking for specific text in ZWRITE output, you may have to modify it to handle these changes.

DP-405025: Changes to rounding of ObjectScript decimal floating-point values

NOTE: This item may require a change to code, configuration, or operation.

Category: Kernel
Platforms: All
Version: 2022.1.0

This release contains a slight improvement in rounding of ObjectScript decimal floating-point. One specific value of the IEEE floating point significand:

-9223372036854775808
was sometimes rounded to
-9223372036854775810
when that rounding was not supposed to happen.

This error does not involve IEEE ($DOUBLE) binary floating-point representation. It only involves ObjectScript decimal floating-point representation.

Certain computations using a decimal significand of -2**63 (or -9223372036854775808), especially multiplications by a power of 10, were incorrectly rounded up to -9223372036854775810 when -9223372036854775808 is the exact answer. This has been fixed. Note that the positive valued significand of +9223372036854775808 does not exist so it is always rounded up to 9223372036854775810. This means that -(9223372036854775808) does not equal -9223372036854775808 because the first expression is rounded up before the negation operator is applied.

DP-405034: %Net.SMTP checks server identities by default

NOTE: This item may require a change to code, configuration, or operation.

Category: Object Library
Platforms: All
Version: 2022.1.0

This change fixes a bug where the SSLCheckServerIdentity property in %Net.SMTP defaulted to false, but was documented as defaulting to true. The property now defaults to true and is in alignment with documentation. This means that, when connecting to an SSL/TLS secured web server, %Net.SMTP will check that the certificate server name matches the DNS name used to connect to the server and fail if they don't match. This is the behavior specified in RFC 2818 section 3.1.

As a result, when connecting to an SSL/TLS secured web server, the default behavior of %Net.SMTP will now be to fail if the certificate server name does not match the DNS name used to connect to the server.

This change is unlikely to cause compatibility issues, but it is possible that when using %Net.SMTP to send messages you might have issues connecting to an SSL/TLS enabled server. If this happens, and you understand the security trade-offs, you can set SSLCheckServerIdentity to 0 to restore the previous behavior.

DP-405460: Modify InterSystems IRIS to use the hash of the CPF in place of the timestamp

NOTE: This item may require a change to code, configuration, or operation.

Category: Web Gateway
Platforms: All
Version: 2022.1.0

InterSystems IRIS now sends a hashcode instead of a timestamp to indicate whether the server configuration has been changed, and the Web Gateway now accommodates these hashcodes in addition to timestamps from older servers.

A newer standalone Web Gateway connecting to older InterSystems IRIS instances functions as before. An old Web Gateway connecting to newer InterSystems IRIS instances is not and has historically not been supported, but with this change it's particularly important for customers to keep their Web Gateway up to date. Old Gateways don't handle the hash from newer InterSystems IRIS instances and thus will not update their server configurations.

DP-405610+DP-408694: (New installs) default DDL type mapping for TIMESTAMP is %Library.PosixTime

NOTE: This item may require a change to code, configuration, or operation.

Category: SQL
Platforms: All
Version: 2022.1.0

In new installations, the default DDL Mapping for type TIMESTAMP has been changed from %Library.TimeStamp to %Library.PosixTime. This does not affect instances which were upgraded from a previous release. If you port code from a previous release to a new installation of this release, you may need to modify code to handle this change.

If a field has a datatype of %Library.DateTime, the fastinsert optimization will not be used and execution will be slower. You can resolve this issue by updating the datatype to use PosixTime, which is recommended over DateTime.

DP-405689: BPL calls now respect async="true" setting

NOTE: This item may require a change to code, configuration, or operation.

Category: Interoperability
Platforms: All
Version: 2022.1.0

In previous releases, BPL calls with async="true" were run synchronously, not asynchronously. In this release, this setting is respected and the call be will run asynchronously.

DP-406134: Change to error signalled by dynamic objects and arrays

NOTE: This item may require a change to code, configuration, or operation.

Category: Kernel
Platforms: All
Version: 2022.1.0

ObjectScript programs that used to catch <PROPERTY DOES NOT EXIST> error when $GET/$DATA was applied to a %DynamicObject or %DynamicArray element must now instead catch the <ILLEGAL CLASS> error. Since $GET/$DATA always signals an error when applied to existent or nonexistent Dynamic Object elements, it is unlikely that there are any programs that are deliberately generating this error signal and testing for it.

DP-406218: Runtime Plan Choice (RTPC) is now enabled by default

NOTE: This item may require a change to code, configuration, or operation.

Category: SQL
Platforms: All
Version: 2022.1.0

The default value for the RTPC parameter has changed from 0 to 1. When RTPC is enabled (=1), InterSystems SQL queries can perform optimization based on outlier information. For further details on outlier selectivity, refer to Tune Table in the InterSystems SQL Optimization Guide.

Note that for some queries, this may not be the best choice. See Adaptive SQL Optimizer for details on RTPC and review whether you wish to use this optimization.

DP-407501: 32-bit processes and external language servers

NOTE: This item may require a change to code, configuration, or operation.

Category: Gateways - .NET
Platforms: All
Version: 2022.1.0

External language servers that do not have "Exec 32" checked will change from executing as a 32-bit process to executing as a 64-bit process when started from the Management Portal. This will only affect you if you are loading external assemblies compiled for x86 and did not check the Exec 32 box of the server definition.

DP-408802: Remove experimental database compression from CreateDatabase() method

NOTE: This item may require a change to code, configuration, or operation.

Category: System
Platforms: All
Version: 2022.1.0

This release removes an experimental feature, database compression, because the minor savings in storage did not justify the increased compute load. This removal should not impact any existing code unless you called ##class(SYS.Database).CreateDatabase() and included the compression engine parameter. If you did, you must remove this parameter or you will get a <PARAMETER> error.

Please note this experimental feature is independent of the journal compression and stream compression features, which are unaffected by this change.

DP-409755: Remove $system.Python.Install()

NOTE: This item may require a change to code, configuration, or operation.

Category: Embedded Python
Platforms: All
Version: 2022.1.0

This change removes $system.Python.Install().

To install Python packages for your system, you should only use

pip3 install

DP-409851: Change to viewing private program data on AIX

NOTE: This item may require a change to code, configuration, or operation.

Category: Kernel
Platforms: AIX
Version: 2022.1.0

With this change, on AIX, you will receive a <PROTECT> error when you attempt to view private program data that is outside of the instance's partition. You can get this error from the $VIEW function or the VIEW command. You can enable viewing and avoid the error by calling $ZU(69,23,1).

InterSystems strongly discourages users from using the $ZU(69,23,1) feature. This feature leaves Open M/SQL-UNIX open to abnormal termination of M processes and hangs due to programming errors.

DPP-367: Need new drivers for new SQL syntax features

NOTE: This item may require a change to code, configuration, or operation.

Category: JDBC
Platforms: All
Version: 2022.1.0

Although existing SQL code will continue to work with the previous JDBC and ODBC drivers, if you want to use the new SQL syntax features, such as SQL LOAD, you'll need to update your JDBC or ODBC driver to the one provided with this release. Some applications, such as DBeaver, come with an InterSystems IRIS driver included, but you can still point it to a newer version of the library if you want.

Upgrade Checklist (Administrators)

DP-408131: Accessing install directory on Windows from ODBC requires additional privileges

NOTE: This item may require a change to code, configuration, or operation.

Category: Installation
Platforms: Windows
Version: 2022.1.0

Users in "Authenticated Users" group no longer are able to write files into the installation directory in locked down install without additional privileges.

DP-408241: Change in permissions needed to run Task Manager tasks

NOTE: This item may require a change to code, configuration, or operation.

Category: Security
Platforms: All
Version: 2022.1.0

Now %SYS.TaskSuper requires %Admin_Manage:Use in order to modify the ExecuteCode field of %SYS.Task.RunLegacyTask. Previously this check was only done in the Management Portal page.

The Management Portal page now checks for %Admin_Secure:Use in order to set the RunAsUser to a user other than the current user. Previously it incorrectly checked for %Admin_Manage:Use (TaskSuper checks %Admin_Secure).

DP-408293: Web Gateway now uses PBKDF2 to hash passwords

NOTE: This item may require a change to code, configuration, or operation.

Category: Security
Platforms: All
Version: 2022.1.0

The Web Gateway provides a feature where if a plain-text password is written to CSP.ini directly, the Web Gateway encodes the password at startup. This feature will no longer work if the plain-text password starts with the string "PBKDF2|".

The CSPpwd utility is recommended if you want to avoid this limitation.

DP-412390: Require minor OS version in installs on Red Hat and SUSE

NOTE: This item may require a change to code, configuration, or operation.

Category: Platforms
Platforms: UNIX®
Version: 2022.1.1

Installation on Red Hat 7 x64 will require minor version 9 or above.

Installation on Red Hat 8 x64 and ARM64 will require minor version 2 or above.

Installation on SUSE 15 x64 will require minor version 3 or above.

DP-413960: Limit PERFMON collection (index) numbers

NOTE: This item may require a change to code, configuration, or operation.

Category: Monitoring
Platforms: All
Version: 2022.1.2

Limit all PERFMON collections to 64k. Before this change, use of collections >65535 would silently fail; now an error is returned.

DP-415808: CPF file changes related to gateways

NOTE: This item may require a change to code, configuration, or operation.

Category: CPF
Platforms: All
Version: 2022.1.1

This change updates the Gateways section of the CPF file to reorganize the fields for each gateway type, and to add a resource field.

For each gateway type, the CPF file no longer has heartbeat properties. For all types except Remote, there is a new default Resource field. The UsePassphrase property has been removed.

DP-416498: Allow CPF properties to be set to ""

NOTE: This item may require a change to code, configuration, or operation.

Category: CPF
Platforms: All
Version: 2022.1.1

A bug has been fixed where in previous versions, when setting a CPF property to a null value, if there was a default value for the property, the default value would be used instead of setting it to null.

For example, when passing the Properties array to Config.Databases.Create:

set Properties("MountAtStartup")=""
the code would ignore this and set the property to its default (0).

Starting in 2022.1.1, we will actually set the property equal to the empty string. For required properties, this will throw an error similar to:

ERROR #5659: Property 'Config.Databases::MountAtStartup(1@Config.Databases,ID=)' required

If you encounter this issue after upgrading, simply remove the setting of the Properties array to "", or explicitly set it to the desired value as in the following example:

set Properties("MountAtStartup")=0

PLATFORMS-ICU-691: ICU 69.1 & Xerces 3.2

NOTE: This item may require a change to code, configuration, or operation.

Category: Platforms
Platforms: All
Version: 2022.1.1

In this release, ICU has been updated to version 69.1. Also the current Xerces version is now 3.2.

DP-403594: Use OpenSSL MD5 Implementation

NOTE: This item may require a change to code, configuration, or operation.

Category: Security
Platforms: All
Version: 2022.1.0

This change removes the ability to use the MD5 hashing algorithm on when in FIPS mode. Refer to the class reference for %SYSTEM.Encryption, which enumerates the limitations of encryption methods in FIPS mode, for more information.

DP-404283: Changes to enabling %ZEN.Dialog classes

NOTE: This item may require a change to code, configuration, or operation.

Category: Security
Platforms: All
Version: 2022.1.0

In this release, %ZEN.Dialog.* classes cannot be run in web applications unless the web application is enabled for analytics, the namespace is enabled for interoperability productions, or it is explicitly enabled for the web application. To explicitly enable %ZEN.Dialog.* classes, enter the following:

Set ^SYS("Security","CSP","AllowPrefix",application-name,"%ZEN.Dialog.")=1

Also, with this change, any web application that is enabled for analytics or interoperability will have %ZEN.Dialog.* classes enabled by default.

DP-404679: Some tasks removed from the Task Manager

NOTE: This item may require a change to code, configuration, or operation.

Category: Work Queue Manager
Platforms: All
Version: 2022.1.0

Some of the automated maintenance tasks have been removed from the Task Manager and are now handled purely internally by the Work Queue manager. Specifically, the following tasks have been removed from the Task Manager:

  • Update SQL Query Statistics
  • Scan frozen plans
  • Cleanup SQL Statement Index
  • Resource Cleanup

DP-405941: %Monitor.Process now uses same metric names as ^PERFMON and &MONLBL

NOTE: This item may require a change to code, configuration, or operation.

Category: Monitoring
Platforms: All
Version: 2022.1.0

Modified %Monitor.Process to use the same list of metric names that the ^PERFMON and ^MONLBL routines use. If your code identifies metrics by name, you should modify it to use the new set of names.

DP-406389+DP-406711: Add versions to security tables

NOTE: This item may require a change to code, configuration, or operation.

Category: Security
Platforms: All
Version: 2022.1.0

In previous releases, you could only export and import security tables between instances with the same major version. Now the security tables have an embedded version number, which allows finer access over allowable imports. You can export security tables from versions 2021.1 and 2021.2 and then import them to this version, 2022.1.

DP-407254: Update interaction between delegated and password authentication

NOTE: This item may require a change to code, configuration, or operation.

Category: System
Platforms: All
Version: 2022.1.0

This fixes an issue with authentication ordering when delegated and password authentication are enabled. If your user authentication includes both delegated authentication and password authentication, you can choose either to call or not call ZAUTHENTICATE for password users. Typically, ZAUTHENTICATE is only used for delegated users and not for password users.

But if you want your ZAUTHENTICATE routine to also be called for password users, you should check the <b>Always try Delegated Authentication</b> in the <b>System Administration > Security > System Security > Authentication/Web Sessions Options</b> page in the Management Portal or by using the ^SECURITY utility (System Parameter Setup, Edit authentication options).

The default for <b>Always try Delegated Authentication</b> is No and ZAUTHENTICATE is not called for password users.

DP-411063: Work Queue settings removed on upgrade to 2021.2

NOTE: This item may require a change to code, configuration, or operation.

Category: Work Queue Manager
Platforms: All
Version: 2022.1.0

When upgrading to 2021.2, the settings for "Work Queue Manager Categories" are reset to the system defaults, and any user-defined settings are deleted. The new settings in version 2021.2 are not compatible with the previous settings and cannot be converted. If you have defined settings, redefine them if necessary.

Fixed Security Issues

DP-415197

CWE: CWE-84: Improper Neutralization of Encoded URI Schemes in a Web Page
Severity: Medium
CVSS Score: 4.3
Version: 2022.1.2

FIXED: An attacker may be able to craft a malicious link to the class reference documentation application to execute arbitrary JavaScript.

DP-416493

CWE: CWE-250: Execution with Unnecessary Privileges
Severity: Medium
CVSS Score: 6.3
Version: 2022.1.2

FIXED: Due to a code path that executes with unnecessary privileges, a user with developer privileges may be able to execute arbitrary commands with %All privilege.

DP-416789

CWE: CWE-459: Incomplete Cleanup
Severity: Medium
CVSS Score: 6.3
Version: 2022.1.2

FIXED: In rare circumstances, a user may be able to use administrative options such as NOCHECK, %NOLOCK, %NOINDEX, %NOTRIGGER, or %NOJOURN on SQL queries that they are otherwise authorized to run without those options.

DP-417169

CWE: CWE-862: Missing Authorization
Severity: Medium
CVSS Score: 4.3
Version: 2022.1.2

FIXED: An authenticated user would be able to use particular Ensemble/Interoperability application pages to view the file system contents and files themselves without proper permissions.

DP-417313

CWE: CWE-200: Exposure of Sensitive Information to an Unauthorized Actor
Severity: Medium
CVSS Score: 4.3
Version: 2022.1.2

FIXED: JWKS values could be logged in plaintext in ^ISCLOG data.

ADO.NET

DP-404692: Support string with exponent value in ADO Fast Insert

Category: ADO.NET
Platforms: All
Version: 2022.1.1

Before this change, System.Convert.ToInt64 and System.Convert.ToDecimal accepted strings but errored out if the strings held exponent presentation, like 1e10. Now, such strings are handled appropriaately.

DP-404743: Preserve data arrays in cached statement in ADO.NET Fast Insert

Category: ADO.NET
Platforms: All
Version: 2022.1.1

This change fixes an issue in ADO.NET Fast Insert. The issue caused the message: System.NullReferenceException : Object reference not set to an instance of an object.

DP-404823: Support truncation in ADO.NET Fast Insert

Category: ADO.NET
Platforms: All
Version: 2022.1.1

With this change, for string and binary datatypes, fast insert will check if inserted value exceeds column precision. If it does and column truncate is enabled, then the value will be truncated. If column truncate is disabled (0), the driver will throw a validation exception.

DP-404913: Correct validation of date/time fields

Category: ADO.NET
Platforms: All
Version: 2022.1.1

This change corrects the validation of date/time fields for ADO.NET Fast Insert.

DP-404946: Correct setting default values for large array in ADO.NET Fast Insert

Category: ADO.NET
Platforms: All
Version: 2022.1.1

This change corrects an issue with Fast Insert, where a row with many default values was incorrectly handled.

DP-405124: Validate temporal types using default MIN/MAX values for ADO Fast Insert

Category: ADO.NET
Platforms: All
Version: 2022.1.1

With this change, ADO.NET Fast Insert validates temporal types even if server does not have min/max values defined. These are the default MIN/MAX values (in $HOROLOG values):

DATE_MAXVAL = 2980013;
DATE_MINVAL = -672045;
TIME_MAXVAL =  86399.999999999;
TIME_MINVAL = 0;
POSIX_MAXVAL = 1406323805406846975;
POSIX_MINVAL = -6979664624441081856

DP-406739: Throw validation exception when double value too big for ADO.NET Fast Insert

Category: ADO.NET
Platforms: All
Version: 2022.1.1

ADO Core converts large numbers to Infinity, and non core throws an exception. With this change, ADO.NET Fast Insert throws an exception in both cases to be compatible with server behavior.

DP-406779: Accept Infinity or INF as valid input for double in ADO.NET Fast Insert

Category: ADO.NET
Platforms: All
Version: 2022.1.1

With this change, the ADO.NET Provider will accept string "Infinity" or "INF" in any case as valid input for double parameters.

DP-406791: Correctly handle Boolean values when inserting into binary or character columns (ADO.NET Fast Insert)

Category: ADO.NET
Platforms: All
Version: 2022.1.1

After this change, when you insert Boolean values into binary- or character-based columns, the value inserted is 1 or 0, rather than true or false.

DP-406803: Use custom format for DateTime for ADO.NET Fast Insert

Category: ADO.NET
Platforms: All
Version: 2022.1.1

For compatibility with server formatting, ADO.NET Fast Insert now uses custom format 

yyyy-MM-dd HH:mm:ss[.ffffff]
when converting DateTime values to strings.

DP-406829: Allow reading of $list type 6 and 7 as valid date values from InterSystems IRIS

Category: ADO.NET
Platforms: All
Version: 2022.1.1

This change correctly converts date values that stored on the server as type 6 or 7.

DP-406871: Validate MIN/MAX value for date and time passed as literal in ADO.NET Fast Insert

Category: ADO.NET
Platforms: All
Version: 2022.1.1

With this change, if you pass a numeric value as a literal to date/time field, the value is validated against min/max values for $HOROLOG.

DP-406895: Validate POSIX MIN/MAX when passed int value passed as string in ADO.NET Fast Insert

Category: ADO.NET
Platforms: All
Version: 2022.1.1

With this change, if you pass int or long values to a POSIX field, InterSystems IRIS validates using the MIN/MAX values.

DP-406957: Insert string to Binary will be performed as a string (ADO Fast Insert)

Category: ADO.NET
Platforms: All
Version: 2022.1.1

With this change, when you insert a string to Binary legacy code - including Java, ADO slow insert, and SMP - the string is passed without conversion.  While technically this is incorrect because Unicode strings will be saved as type 2, we do the same in Fast Insert to maintain backward compatibility.  It is up to user to convert string to byte[] and set it as byte[] if they choose to do so.

For example:

byte[] bytes = new byte[str.Length * sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);

DP-406983: Clean up conversions to Boolean (BIT) value for ADO.NET Fast Insert

Category: ADO.NET
Platforms: All
Version: 2022.1.1

This change corrects conversions from string to Boolean to insert into BIT columns.

DP-406988: Relax conversion to Integer types for ADO.NET Fast Insert

Category: ADO.NET
Platforms: All
Version: 2022.1.1

Before this change, literal values such as 1.2345 and 3.45 were accepted by slow-insert, but not by fast-insert, for a bigint field.

DP-407026: Perform Min/Max field validation in ADO.NET Fast Insert

Category: ADO.NET
Platforms: All
Version: 2022.1.1

Before this fix, ADO.NET Fast Insert did not perform Min/Max field validation.

DP-407038: Use same precision for datetime values for ADO fast insert as for slow insert

Category: ADO.NET
Platforms: All
Version: 2022.1.1

With this change, both slow insert and fast insert for ADO.NET use the same precision for datetime values.

New format: yyyy-MM-dd HH:mm:ss[.fffffff]

DP-407046: Disable Shared Memory by default on non-Windows

Category: ADO.NET
Platforms: UNIX®
Version: 2022.1.1

There are issues with shared memory on Linux, where the InterSystems IRIS process does not have the correct permissions to kill processes started by root, leaving orphaned processes stuck in a READ state when the .NET program has finished. 

The full fix for this issue will come later, but for now this change disables shared memory by default on non-Windows systems so that .NET projects will work properly.

DP-407107: Limit possible conversions to binary for ADO.NET Fast Insert

Category: ADO.NET
Platforms: All
Version: 2022.1.1

With this change, when inserting value into a binary field, Fast Insert will accept only byte[], char[] or string. Attempt to insert any other datatype will generate exception "Unsupported type conversion for Byte[]"

DP-407169: Allow $HOROLOG values to be inserted into %Timestamp and %PosixTime for ADO.NET Fast Insert

Category: ADO.NET
Platforms: All
Version: 2022.1.1

For consistency with slow insert and with the InterSystems IRIS server, this change enables Fast Insert to insert integer values into timestamp fields (%Timestamp and %PosixTime). The integer values will be treated as $HOROLOG and converted to timestamp.  The code also checks validity of actual %PosixTime values, requiring them to be in two ranges:

between 1152921504606846976(1970-01-01) and 1406323719006846976 (9999-12-31)

between -6917529114041081856(1969-12-31) and -6979664624441081856 (0001-01-01)

DP-407196: Allow only 1 or 0 to convert to Boolean for ADO.NET Fast Insert

Category: ADO.NET
Platforms: All
Version: 2022.1.1

ADO converts any integer not equal to 0 to Boolean 'true'; however InterSystems IRIS supports only 0 or 1 as a valid values.  With this change, ADO.NET Fast Insert will report a validation error if the passed numeric value (for a Boolean field) is not 1 or 0.

DP-407677: Correct ADO.NET resolve lock issues in updateCache() method

Category: ADO.NET
Platforms: All
Version: 2022.1.1

This change corrects the updateCache() method in IRISADOConnection for .NET 5.  Before this fix, it was possible to receive the exception "A read lock may not be acquired with the write lock held in this mode".

DP-408764: Correct adjusting date to server time zone if date missing

Category: ADO.NET
Platforms: All
Version: 2022.1.1

With this change, when inserting into TIMESTAMP value with DATE missing, we substitute the current server date, not the client date.

DP-409804: Correct ADO.Net logging of continuation logic messages

Category: ADO.NET
Platforms: All
Version: 2022.1.1

Before this change, when there were multiple messages with the same sequence number and statement ID (due to data larger than the TCP/IP buffer), the log did not correctly show the multiple headers. Instead the last header was shown with all the data from the prior payloads. This change just shows the messages as they are received with their header.

DP-410421: Changes for Timestamp validation

Category: ADO.NET
Platforms: All
Version: 2022.1.1

With this change, ADO.NET validates timestamp values against MIN/MAX values. The minimum value is 1840-12-31 and the maximum value is 12/31/9999 12:00:00 AM.

DP-410996: Allow DDL commands to be prepared before execution in ADO.NET

Category: ADO.NET
Platforms: All
Version: 2022.1.1

Before this change, within ADO.NET, DDL commands such as "CREATE TABLE..." would throw an error on execution if they had been prepared before execution. While calling Prepare() on these commands is not necessary because the commands do not get cached, it is better to avoid throwing the error.

This change allows users to call Prepare() and then Execute() on a DDL command without seeing an error.

DP-411899: Revert default TCP port to 1972 for ADO.NET

Category: ADO.NET
Platforms: All
Version: 2022.1.1

This change reverts the default TCP port to 1972 for ADO.NET.

Backup/Restore

DP-413772: Allow ExternalThaw to cancel a pending ExternalFreeze request

Category: Backup/Restore
Platforms: All
Version: 2022.1.1

This change corrects an issue that caused ##class(Backup.General).ExternalThaw() to fail to interrupt a hanging ##class(Backup.General).ExternalFreeze().

Business Intelligence

DP-408943: Default to showing all results in dashboard widgets

Category: Business Intelligence
Platforms: All
Version: 2022.1.2

This change allows the pivot widget to respond to a setting that influences the preview behavior on load. By default, widgets will now show all results on first load without truncation. If this is still proving to lead to extended load times, this behavior can be changed and saved with the widget definition using the setting Widget > Widget Settings > Pivot Preview = On This setting is stored as part of the .dfi definition once saved as part of a dashboard.

Analyzer behavior should be the same as before.

The message that tracks the job progress should display numbers more consistently and no longer toggles between a reset state and the actual current progress.

DP-409762: Fix internal logic used by %OR

Category: Business Intelligence
Platforms: All
Version: 2022.1.2

This change modifies the internal logic (in GetSpecForAxisNode()) used by %OR so that it can apply across a wider variety of constructs.

Before this change, %GetFiltersForCellRange returned incorrect results in some cases.

DP-410200: Fix listing export for Excel export

Category: Business Intelligence
Platforms: All
Version: 2022.1.2

This change fixes the Excel export of listings from pivot tables.

DP-410644: Reduce global references in axis loading for %ExecuteForBucket

Category: Business Intelligence
Platforms: All
Version: 2022.1.2

This change improves the performance of MDX queries, in the %ExecuteForBucket() phase.

DP-411270: Restore support for direct-to-Excel MDX export via API

Category: Business Intelligence
Platforms: All
Version: 2022.1.1

The change that made is possible to reopen an MDX result set during Excel export broke the MDX-text based %DeepSee.Utils API. This change restores the API functionality.

DP-411542: Correct handling of a %List property used in a cube listing

Category: Business Intelligence
Platforms: All
Version: 2022.1.2

Before this change, if you used a %List property from a cube's sourceClass within detail listing, certain errors were possible. Now, if the property includes the ", " delimiter used in conversion from %List type to a %String, that is displayed. Also, there is no error if the %List contains a null value.

DP-412648: Improve handling of AGGREGATE in crossjoins

Category: Business Intelligence
Platforms: All
Version: 2022.1.2

Before this change, two calculated members used in a crossjoin could lose track of the dividing line between two virtual members when the AGGREGATE function is used to create one or both of those members. This fix supports the rule that if it is possible to determine the Aggregate is defined to look like a member, it will be converted to a %OR to truly behave like a singular member. This will not apply when the Aggregate defines a measure to apply to target set, in which case the function is acting like a metric.

DP-414702: Fix unload behavior of pivotTable, Analytics pages to avoid nuisance confirmation

Category: Business Intelligence
Platforms: All
Version: 2022.1.1

This change fixes a bug in which a pivot table would prompt for confirmation when the user was not actually leaving the page.

DP-415407: Protect %SetAncestorLockKeys from undefined argument

Category: Business Intelligence
Platforms: All
Version: 2022.1.2

Protect %DeepSee.ResultSet:%SetAncestorLockKeys from an <UNDEFINED> error when no argument is supplied.

DP-417737: Correct vulnerability in Analytics User Portal

Category: Business Intelligence
Platforms: All
Version: 2022.1.2

This change corrects a vulnerability in the Analytics User Portal. The vulnerability would allow authenticated users with access to the User Portal page to execute user-specified ObjectScript commands on the server using their current security context. There are limitations; the string would be converted to uppercase before being executed, and it cannot contain any periods. There are also length limitations. 

This vulnerability has been corrected.

DP-418010: Fix detection of stale cell cache for cube relationships

Category: Business Intelligence
Platforms: All
Version: 2022.1.2

A query involving cached cell results derived from related cube subqueries could produce incorrect results if any of those related cubes were updated with new dimension members that were inserted into any dimension used in that query.

Cloud

DP-413048: Remove Linux capability checking from InterSystems IRIS containers

NOTE: This item may require a change to code, configuration, or operation.

Category: Cloud
Platforms: Linux
Version: 2022.1.1

This change removes the no-longer-necessary Linux capability checking from InterSystems IRIS containers, to avoid incompatibilities with new versions of Docker.

This doesn't immediately affect ICM users because an older Docker version is set in Samples/defaults.json.

DP-414558: Correct error in WebGateway kit

Category: Cloud
Platforms: All
Version: 2022.1.2

This change fixes the following issue in the WebGateway kit: When installing a cluster in containerless mode with a WS node, the WS node failed to install.

DP-415796: InterSystems IRIS container: Restore deprecated option (--check-caps) and disable it

Category: Cloud
Platforms: All
Version: 2022.1.1

The previous removal of the option --check-caps caused compatibility issues for a number of our products whose older versions required this option, products (such as ICM and IKO) which deploy a combination of instances in which some require the option and some do not (e.g. SAM 1.x vs. IRIS 2022.3.x), upgrade from a product that requires it to one that doesn't, and customer scripts as well. With this change, we restore the option and do nothing with it.  We do not generate a deprecation warning because such a warning is not useful.

Compatibility Features

DP-413293: Zen Reports: do not allow use of $DATASOURCE URL parameter by default

NOTE: This item may require a change to code, configuration, or operation.

Category: Compatibility Features
Platforms: All
Version: 2022.1.2

Previously ZEN Reports would allow the report's datasource to be specified at runtime via the $DATASOURCE URL Parameter. If this is not defined, then we will use the DATASOURCE class parameter, and if that isn't defined we will use the ReportDefinition to generate the XML data. The ReportDefinition is the standard way to specify report data.

With this change, Zen Reports will no longer use the $DATASOURCE URL parameter by default. Developers are strongly encouraged to use the DATASOURCE class parameter to specify an external datasource if desired. If a report does require the $DATASOURCE URL, you can re-enable the previous behavior on a per-report or per-application basis by setting the parameter:

Parameter USEURLDATASOURCE = 1; 

in either the report class, or in the report's Application class. Setting this value is discouraged.

DP-414415: Pass original data in storage when using parameternonce to communicate parameters between pages

Category: Compatibility Features
Platforms: All
Version: 2022.1.2

%DeepSee.Utils:%CreateParmeterNonce is used to store information in a global with a nonced ID assigned to it so that it can be communicated to exports without risk of violating the max length of browser URLs. The pages which receive this use %DeepSee.Utils:%GetParameterNonce to retrieve the information from temporary storage.

There is no need for this communication to contain any sort of translation, so the $ZCVT(tText,"I","UTF8") is removed from the store procedure. Any translation that might be necessary can and should be done by the functions actually writing the data to files if it is deemed necessary.

This also makes sure the deepseeCSVProvider uses UTF-8 encoding when creating files so these characters are correctly written to the .csv file.

DP-415588: Update Apache Ant from 1.7.1 to 1.10.12

Category: Compatibility Features
Platforms: All
Version: 2022.1.2

This change updates Apache Ant from 1.7.1 to 1.10.12 (the latest version) to resolve 2 high severity and 4 medium severity security vulnerabilities. Ant is still used to build severl modules that are part of Zen Reports, and that are included in the installation under the lib directory.

CPF

DP-415808: CPF file changes related to gateways

NOTE: This item may require a change to code, configuration, or operation.

Category: CPF
Platforms: All
Version: 2022.1.1

This change updates the Gateways section of the CPF file to reorganize the fields for each gateway type, and to add a resource field.

For each gateway type, the CPF file no longer has heartbeat properties. For all types except Remote, there is a new default Resource field. The UsePassphrase property has been removed.

DP-416498: Allow CPF properties to be set to ""

NOTE: This item may require a change to code, configuration, or operation.

Category: CPF
Platforms: All
Version: 2022.1.1

A bug has been fixed where in previous versions, when setting a CPF property to a null value, if there was a default value for the property, the default value would be used instead of setting it to null.

For example, when passing the Properties array to Config.Databases.Create:

set Properties("MountAtStartup")=""
the code would ignore this and set the property to its default (0).

Starting in 2022.1.1, we will actually set the property equal to the empty string. For required properties, this will throw an error similar to:

ERROR #5659: Property 'Config.Databases::MountAtStartup(1@Config.Databases,ID=)' required

If you encounter this issue after upgrading, simply remove the setting of the Properties array to "", or explicitly set it to the desired value as in the following example:

set Properties("MountAtStartup")=0

CSP Server

DP-416562: Correct WebSocket handling of low-level errors

NOTE: This item may require a change to code, configuration, or operation.

Category: CSP Server
Platforms: All
Version: 2022.1.1

This fix corrects a bug in the error handling for web socket connections. If an error was encountered before the CSP server dispatched to the WebSocket class, then the error would be ignored. Now the CSP server will call the Error() method in the WebSocket class. Similarly, for authentication failures, the server will call Login(). Note that by default, Login() just calls Error(). 

The websocket will also now abort the connection if OnPreServer() returns an error. Previously errors were ignored.

DP-416563: Do not allow navigation to %-CSP pages from the /csp/sys/oauth2/ application

NOTE: This item may require a change to code, configuration, or operation.

Category: CSP Server
Platforms: All
Version: 2022.1.1

This change modifies the default configuration to disallow access to %-CSP pages from the /csp/sys/oauth2/ application.

DP-416806: Fix encoding error in CSP server for short name-value pairs

Category: CSP Server
Platforms: All
Version: 2022.1.2

This change corrects a bug in which the CSP Server did not correctly handle the name property of an <input> on a CSP page. Before this change, if the name contained non-ASCII characters, it was encoded incorrectly.

Embedded Python

DP-412872: Intercept SYSTEM methods before Python dispatch

Category: Embedded Python
Platforms: All
Version: 2022.1.1

Prior to this change, if a %SYSTEM method that returns something is implemented in C/C++, calls to such a method using embedded Python Shell() will return empty.

This change fixes the issue. Now embedded Python can properly call %SYSTEM methods implemented in C/C++ and get the return value if there is any.

DP-413645: Correct error handling in embedded Python

Category: Embedded Python
Platforms: All
Version: 2022.1.1

This change makes multiple corrections to error handling in embedded Python.

DP-413866: Corrected invoking internal %SYSTEM methods from embedded Python

Category: Embedded Python
Platforms: All
Version: 2022.1.1

Embedded python now has access to all methods defined in the following classes:

  • %SYSTEM.DocDB
  • %SYSTEM.Encryption
  • %SYSTEM.Error
  • %SYSTEM.Event
  • %SYSTEM.Monitor
  • %SYSTEM.Process
  • %SYSTEM.Python
  • %SYSTEM.Security
  • %SYSTEM.Semaphore
  • %SYSTEM.SQL
  • %SYSTEM.Status
  • %SYSTEM.SYS
  • %SYSTEM.Util
  • %SYSTEM.Version
Invoking these methods requires resolving the method name at runtime; this change corrects the method name resolution defined by the base classes.

With this change, the product also now converts an underscore character (_) in Python method names to a percent character (%) for ObjectScript.

DP-413982: Corrected frame cleanup when embedded Python raises an error in an ObjectScript method or routine.

Category: Embedded Python
Platforms: All
Version: 2022.1.1

When embedded Python (or other code using the same code path) called ObjectScript method or routine, and that raised an error, the error handler on return with value, didn’t clean up properly. 

Based on what was left on the frame stack, the code continued and executed with incorrect information, which caused unpredictable behavior.

DP-414013: Added support for property getter methods implemented in Python

Category: Embedded Python
Platforms: All
Version: 2022.1.1

This chage adds support for property getter methods implemented in Python.

DP-414205: Modified iris.system.* python services to handle static $system, class, and instance methods consistently

Category: Embedded Python
Platforms: All
Version: 2022.1.1

Before this change, from embedded Python, we treated all %system methods as $system or a class method. With this change, we now check if the method is invoked on an instance of the class, if so to invoke the instance method.

DP-414279: Correct reporting of errors raised by InterSystems IRIS in embedded Python

Category: Embedded Python
Platforms: All
Version: 2022.1.1

This change modifies the way that embedded Python handles errors raised or thrown in InterSystems IRIS.

DP-414434: Fix To2DListTyped wstring handling on macOS

Category: Embedded Python
Platforms: macOS
Version: 2022.1.2

Before this change, To2DListTyped assumed wide character takes two bytes on all platforms, while it can take four bytes on macOS. This resulted in string truncation on macOS.

This change properly handles the case if wide character type takes four bytes on certain platforms.

DP-415680: Corrected InterSystems IRIS method invocation from embedded Python

Category: Embedded Python
Platforms: All
Version: 2022.1.1

Before this change, if embedded Python called a class method, Python would throw the runtimeError 'Class not found'.

DP-415831: Corrected instance method invocation from embedded Python

Category: Embedded Python
Platforms: All
Version: 2022.1.2

This change corrects an error in which calling an instance method from embedded Python resulted in a runtime error of 'Method not found'.

DP-419409: Corrected embedded Python out-of-memory handling

Category: Embedded Python
Platforms: All
Version: 2022.1.2

This change corrects an error in which embedded Python received an out-of-memory error.

Gateways - .NET

DP-409705: Refresh .NET versions

NOTE: This item may require a change to code, configuration, or operation.

Category: Gateways - .NET
Platforms: All
Version: 2022.1.1

This change refreshes the .NET Versions to align with the versions that are still in support by Microsoft. We have removed versions that are no longer in support by Microsoft (.NET Framework 2.0, 4.0 and 4.5, and .NET Core 1.0 and 2.1).

We have also added support for two versions: .NET Framework 3.5 and 4.6.2. 

This change also updates the assembly versions so they match the new versions we support.

The new assemblies will be under a different path, so projects that use the path to the dll location under the InterSystems IRIS install location will need to update the path to correspond to the new versions. For example, a previous path would be:

<InterSystems IRIS install location>\dev\dotnet\bin\v4.5\InterSystems.Data.IRISClient.dll

That location will no longer exist under the new installation, and should be changed to:

<InterSystems IRIS install location>\dev\dotnet\bin\v4.6.2\InterSystems.Data.IRISClient.dll

In terms of compatibility between versions, the new 4.6.2 version is backwards compatible and the applications will run on systems that have any .NET Framework 4.x installed.

However, .NET Framework is not forwards-compatible, so if customers have applications that target .NET Framework 4.5, they cannot use one of our .NET Framework 4.6.2 libraries as a dependency. Their options are:

  • Change the target framework of their application to be at least 4.6.2. .NET Framework 4.5 has been out of support by Microsoft so this will also ensure users are using a supported language version.
  • Use the .NET Framework 3.5 version of our library. Users might lose access to certain features/functionality that was introduced in version 4.0.
  • Use old versions of our library that target 4.5. These will not contain the latest bug fixes or functionality, but users will not need to modify the dependencies of their applications.

DP-409708: Add support for .NET 6

Category: Gateways - .NET
Platforms: All
Version: 2022.1.1

This change adds support for .NET 6 for all .NET features.

DP-411455: No longer convert $char(0) to empty string in IRISNative and Gateway

Category: Gateways - .NET
Platforms: All
Version: 2022.1.1

As of this change, IRISNative and Gateway no longer convert $character(0) to an empty string. This conversion was intended only for SQL data.

DP-414366: Correct closing of Gateway

Category: Gateways - .NET
Platforms: All
Version: 2022.1.1

This change corrects a bug in which when a variable containing a Gateway is left around until after a new Gateway is created, the delayed destruction of the first Gateway can potentially close the device that's used by the second Gateway.

DP-414468: Update StartGateway confirmation logic to use SSLConfigurationClient

Category: Gateways - .NET
Platforms: All
Version: 2022.1.1

Before this change, StartGateway with confirmation set to 1 returned failure because it was not using SSLConfigurationClient.

DP-415975: Ensure Gateway to grant access to %SYS globals

Category: Gateways - .NET
Platforms: All
Version: 2022.1.1

This change ensures that the user account that starts the Gateway and connecting to it has the permissions needed for those actions.

DP-416085: Interoperability DotNet Gateway .Net version options update

NOTE: This item may require a change to code, configuration, or operation.

Category: Gateways - .NET
Platforms: All
Version: 2022.1.1

The EnsLib.DotNetGateway.Service provides a list of available .NET frameworks. These have been updated to:

  • Framework 4.6.2
  • Framework 4.5
  • Framework 3.5
  • Framework 2.0
  • Core 2.1
  • .NET 5.0
  • .NET 6.0

Not all binaries may be available. The default is Framework 4.6.2.

DP-416104: Change to how passphrase is passed to Gateway

Category: Gateways - .NET
Platforms: All
Version: 2022.1.1

This change modifies how the passphrase is passed to the Gateway process.

DP-416108: Fix bug that Gateway hangs during system shutdown

Category: Gateways - .NET
Platforms: All
Version: 2022.1.1

This change corrects a bug that caused the Gateway to hang during system shutdown.

DP-416353: Check required resource in Config.Gateway.Delete()

NOTE: This item may require a change to code, configuration, or operation.

Category: Gateways - .NET
Platforms: All
Version: 2022.1.1

With this change, in order to delete a gateway, you must have the permission %Admin_ExternalLanguageServerEdit:USE.

DP-416405+DP-416125: Internal calls now use server name

Category: Gateways - .NET
Platforms: All
Version: 2022.1.1

This change modifies the %Net.Remote classes to use the Gateway server name rather than host+port.

DP-416898: Mark internal methods in %Net.Remote.Service with Internal keyword

NOTE: This item may require a change to code, configuration, or operation.

Category: Gateways - .NET
Platforms: All
Version: 2022.1.1

This change marks many methods in %Net.Remote.Service with the Internal keyword. You should scan your code for uses of %Net.Remote.Service and make sure that it calls only methods that are visible.

DP-416960+DP-41705: Can use gateway if hold %Admin_ExternalLanguageServerEdit resource

Category: Gateways - .NET
Platforms: All
Version: 2022.1.1

With this change, if a user has %Admin_ExternalLanguageServerEdit resources, which permits the user to edit the external language server definitions, the user can also use any language Gateway.

DP-418513: Remove Server property from toDao() method and Config.Gateways class

NOTE: This item may require a change to code, configuration, or operation.

Category: Gateways - .NET
Platforms: All
Version: 2022.1.2

This change removes the Server property from the Config.Gateways class.

DP-418539: Correct toDao() method of %Net.Remote.ObjectGateway

Category: Gateways - .NET
Platforms: All
Version: 2022.1.2

This change corrects the toDao() method of %Net.Remote.ObjectGateway so that it only creates properties that do exist in Config.Gateways. This change makes it possible to create remote gateways.

DP-419265: Restore %Net.Remote.Service::PingGateway

Category: Gateways - .NET
Platforms: All
Version: 2022.1.2

This change restores the method PingGateway() to %Net.Remote.Service. This method now simply calls the %Ping() method of %Net.Remote.Gateway.

Gateways - JDBC

DP-413359: JDBCGateway to load third-party JAR files into system class loader

Category: Gateways - JDBC
Platforms: All
Version: 2022.1.2

This change forces all JDBC third party JAR files to be loaded into system class loader. This will resolve the problem of unchecked memory leak.

Gateways - ODBC

DP-415600: FIX - upgrade iODBC version for ODBC gateway support on Mac M1

Category: Gateways - ODBC
Platforms: AIX,macOS
Version: 2022.1.1

This change updates the iODBC version from 3.52.04 to 3.52.15.

Gateways - Python

DP-406468: External Server - fix <UNDEFINED> error encountered when starting a Python gateway

Category: Gateways - Python
Platforms: All
Version: 2022.1.2

This change fixes a bug in %Net.Remote.ObjectGateway that resulted in an <UNDEFINED> error when starting a Python gateway.

DP-413814: Activate Python SSL support in IRISPython 3.2

Category: Gateways - Python
Platforms: All
Version: 2022.1.1

This change activates Python SSL support in IRISPython 3.2.

DP-414026: Fix bug that failed SLL connection hangs PythonGateway Server

Category: Gateways - Python
Platforms: UNIX®
Version: 2022.1.1

This change ensures that a failed SSL connection will not hang the PythonGateway Server. This bug was present on Unix systems.

DP-414102: Modify Gateway SSL argument to use ":" as delimiter instead of "?"

Category: Gateways - Python
Platforms: UNIX®,macOS
Version: 2022.1.1

The Gateway SSL argument format is ssl:/<xml-filename>?<password>, with the question mark as the delimiter. However, the question mark causes problems because it is treated as a wildcard on Mac and some Unix shells.

This change causes the delimiter to be ":" instead.

DP-414166: Correct handling of SSL cryptographic settings in Python

Category: Gateways - Python
Platforms: All
Version: 2022.1.1

This change corrects the handling of SSL cryptographic settings. Here is the new logic:

  • In the current version of Python's SSL implementation, TLSv1.3 ciphers are not changeable.
  • For TLSv1.3, only Ciphersuites is used, its value must be exactly this list: TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256 (order may vary)
  • For versions lower than TLSv1.3, only CipherList is used. Its value is used to call set_ciphers().

DP-414221: Add "Verify SSL Host Name" to Python Gateway settings

Category: Gateways - Python
Platforms: All
Version: 2022.1.1

This change adds "Verify SSL Host Name" to the Python Gateway settings.

DP-416351: Give a default resource for Gateway if not specified in Create()

Category: Gateways - Python
Platforms: All
Version: 2022.1.1

This change ensures that however you create a gateway, the default for Resource Required is %Gateway_Object. Before this change, when you created a gateway in the Terminal, Resource Required was an empty string (which was not consistent with what happened when you created a gateway in the Management Portal).

Gateways - XSLT

DP-416356: Remove support of transient gateway definition in XSLT

NOTE: This item may require a change to code, configuration, or operation.

Category: Gateways - XSLT
Platforms: All
Version: 2022.1.1

With this change, it is no longer possible to start the XSLT Gateway using a transient gateway definition specified by command line arguments that override the predefined definition.

DP-418573: Fix memory leak when using streams in %XML.XSLT.Transformer

Category: Gateways - XSLT
Platforms: All
Version: 2022.1.2

This change fixes a memory leak that occurred when using streams in the callback handler in ##class(%XML.XSLT.Transformer).TransformStream.

ICM

DP-416244: Exclude async members from shard broker host configuration

Category: ICM
Platforms: All
Version: 2022.1.2

With this change, ICM does not set shard brokered hosts on async mirror members.

IDEs

DP-413625: Corrects an access problem for server-side editing from VSCode

Category: IDEs
Platforms: All
Version: 2022.1.1

Before this change, when a user wanted to enable server-side editing from VSCode, the user had to run this command for each namespace:

GRANT EXECUTE ON %Library.RoutineMgr_StudioOpenDialog TO %Developer
With this change, that step is no longer necessary.

DP-416045: Correct Studio bug with View Web Page for a class that had a fully qualified LOCATION parameter

Category: IDEs
Platforms: All
Version: 2022.1.2

This change fixes a bug in which the View Web Page option did not work for a class whose LOCATION parameter is a full path with the scheme prepended (http:// or https://).

DP-416194: Show calculated properties as "Calculated" instead of nonprintable characters

Category: IDEs
Platforms: All
Version: 2022.1.2

With this change, IDEs show calculated properties as "Calculated" instead of as nonprintable characters.

DP-417920: Correct access to the Atelier debug agent

Category: IDEs
Platforms: All
Version: 2022.1.2

This change fixes an earlier change that ensures that the Atelier debug agent is dispatched to from a REST context. Before this fix, it was possible to receive the error ERROR #5916: Illegal Web Request [zOnPreServer+7^%Atelier.v5.XDebugAgent.1:%SYS]

Installation

DP-410240: Add log parsing tool to Web Gateway installers

Category: Installation
Platforms: All
Version: 2022.1.1

This change adds a log parsing tool to all Web Gateway installers.

DP-410894: Handle bad mappings in CPF file during conversion

Category: Installation
Platforms: All
Version: 2022.1.1

While converting the CPF file during a Caché to InterSystems IRIS conversion, the code now updates the [Map.*] sections and replaces any references to the CACHE* system databases to the corresponding InterSystems IRIS* system databases.

In one scenario, there was a line that was not converted correctly, causing the conversion to fail.

DP-412431: Require 2MB free space in the manager database before continuing installation

Category: Installation
Platforms: All
Version: 2022.1.1

It is now necessary to have at least 2 MB of freespace in the manager database before the installer can run. With this change, the installer checks the manager database and does not allow the installer to proceed unless there is enough space.

DP-413191: Distinguish Linux platforms for unsupported InterSystems IRIS platforms

Category: Installation
Platforms: UNIX®
Version: 2022.1.1

This change improves the installer prompts shown when one tries to install InterSystems IRIS on an unsupported platform. Previously, the prompts did not provide enough information to distinguish some of the Linux platforms.

DP-413447: Do not install intersystems-integratedml-*.jar on Windows unless IntegratedML is installed

Category: Installation
Platforms: Windows
Version: 2022.1.1

Wit this change, the installer will not install dev\java\lib\1.8\intersystems-integratedml-*.jar on Windows unless the IntegratedML feature is selected for install.

DP-413651: Remove .../dev/java/lib/datarobot/*.jar files from kits

Category: Installation
Platforms: All
Version: 2022.1.1

This change removes .../dev/java/lib/datarobot/*.jar files from kits.

DP-414541: Remove .NET 2 files from Windows kits

Category: Installation
Platforms: Windows
Version: 2022.1.1

This change removes references to .NET 2 from Windows install.

DP-414705: remove old files in upgrade on macOS before copying new version

Category: Installation
Platforms: macOS
Version: 2022.1.1

macOS does not always refresh executable signature cache when files are overwritten by "cp" command. As a workaround, the installer will remove old version before copying a new one on this platform.

DP-414750: Update Xerces to 3.2.3

Category: Installation
Platforms: All
Version: 2022.1.1

xerces_c version used by InterSystems IRIS build is upgraded from 3.2.2 to 3.2.3.

DP-415894: Always overwrite httpd modules upon upgrade

Category: Installation
Platforms: Windows
Version: 2022.1.2

With this change, the installer will always overwrite Apache httpd *.so modules on upgrade because normal versioning rules to not apply to .so files. This change fixes an error in which the Management Portal would not work after upgrade.

DP-416718: Fix conversion of remote gateway address of 127.0.0.1

Category: Installation
Platforms: All
Version: 2022.1.1

This change corrects a bug in which performing an upgrade would lose the Remote Server Address for a remote gateway.

DP-418665: Allow InterSystems IRIS upgrade after an OS upgrade on Unix

Category: Installation
Platforms: UNIX®
Version: 2022.1.2

With this change, the Unix install will allow InterSystems IRIS upgrade to proceed when irisdb cannot start due to missing OS libraries caused by OS upgrade.

IntegratedML

DP-416027: AutoML fix for SUSE 'sys' module bug

Category: IntegratedML
Platforms: Linux
Version: 2022.1.2

This change works around a Python bug (resolved in Python 3.8) that affects %ML.AutoML.Provider. The bug had resulted in the error AttributeError: module 'sys' has no attribute 'argv'

DP-416137: Correct incompatibilities raised by TensorFlow and tensorboard

Category: IntegratedML
Platforms: All
Version: 2022.1.2

This change fixes incompatibilities raised by TensorFlow and tensorboard.

DP-418508: Shared/Utility code(CacheList) should not assume casting an unsigned char to (char) or (int) will make it signed

Category: IntegratedML
Platforms: All
Version: 2022.1.2

This change corrects an issue that occurred when casting (unsigned char) to (char) or (int) on ARM. Before this change, the unsigned char was not sign extended.

Interoperability

DP-410236: PATCH verb supported by EnsLib.HTTP.OutboundAdapter

Category: Interoperability
Platforms: All
Version: 2022.1.1

The EnsLib.HTTP.OutboundAdapter now supports the PATCH verb and passes it to %Net.HttpRequest.

The new adapter methods are Patch(), PatchFormDataArray(), and PatchURL().

DP-410391: Modify setting 'raw' XML to a property path to aid determination of order

Category: Interoperability
Platforms: All
Version: 2022.1.1

There was a previous correction that corrected the output order for a single property path in a sequence where a prior array sibling had more than one element. This correction lead to a possible change in output order when 'raw' XML (for example from a source XML VDoc complex property) was set using a Property path syntax. The latter change is now corrected.

A new transient property of EnsLib.EDI.XML.Document is introduced to allow the prior behavior. The property is ByPassPropCacheForMixed.

When setting 'raw' XML to a Property path (as opposed to a DOM path), this flag allows setting the data directly to the internal DOM storage. While this might improve performance, the output may have nodes in a different order than desired when combining with single property path sets.

This setting is provided for backwards compatibility. The default is to set to the internal intermediary Property storage.

DP-412203: XML Virtual Document schema correction when collapsing only one inner ComplexType Sequence Element

Category: Interoperability
Platforms: All
Version: 2022.1.1

When generating the schema for an XML Virtual document using an XSD, the code collapses redundant inner elements - see documentation

Certain XSD with complex types for the inner elements were collapsed so that even the last single child was collapsed, resulting in having no virtual properties being available. This is now corrected.

DP-412629: Improve XML Virtual Document support for 'any' element

NOTE: This item may require a change to code, configuration, or operation.

Category: Interoperability
Platforms: All
Version: 2022.1.1

Before this change, when setting XML data to an 'any' element of an XML Virtual Document, the 'any' tag would be included in the output.

Also when using a sub-transform, the XML representation used to set to a target property of element type 'any' would not include the top level. This is also corrected. The correction is to the EnsLib.EDI.XML.Document SetSubDocument() method.  This method inserts the XML representation of pSubDocument into the target document at the path specified by pPropertyPath. The XML representation is the GetValueAt using "/1" as the property path except if the target Property Path where the sub document is to be set is of type "any" then the XML representation of pSubDocument retrieved  will be the full document including top element i.e. path "/"

DP-412700: Enterprise Monitor QueueCount sorting correction

Category: Interoperability
Platforms: All
Version: 2022.1.2

Sorting by QueueCount on the Enterprise Monitor Status management portal page has been corrected. The page has also been improved in various ways, including wording changes, tooltips, and a change to how the page is refreshed.

DP-414905: XML VDoc SetSubDocumentAt did not copy attributes for top node

Category: Interoperability
Platforms: All
Version: 2022.1.1

An error had been introduced into the SetSubDocumentAt API used by the DTL SubTransform for XML Virtual Documents whereby the attributes of the top node of the sub document being used as the source were not being being populated. This is now corrected.

DP-415234: Improvements to the Message Purge API

Category: Interoperability
Platforms: All
Version: 2022.1.2

This change improves the performance of the Message Purge API and makes it possible to have different retention periods for different production configuration items.

It is now also possible to specify which config items to limit a particular purge request to.

The user running the updated Purge API requires SQL SELECT privilege on the Ens.MessageHeader table. This is a change from the existing API in Ens.MessageHeader::Purge.

For details on the Purge() method, see Ens.Message Header in the class reference.

The Purge Task has been updated to allow specifying the optional Work Queue Category, the WQBatchSize.

The new settings (properties) exposed for Ens.Util.Tasks.Purge are optionalMessageLimitToConfigItems, optionalMessageWorkQueueBatchSize, and optionalMessageWorkQueueCategory. There are no default values.

To configure a task to use the multi-threaded purge, set the value of optionalMessageWorkQueueCategory to Default or to a custom category.

See Configuration > Work Queue Manager Categories in the Management Portal and documentation.

If optionalMessageWorkQueueCategory is set, then optionalMessageWorkQueueBatchSize can also be set.

optionalMessageLimitToConfigItems is independent of whether you use multi-threaded message purge.

DP-415411: Project FullSize property to SQL for all EDI document types

Category: Interoperability
Platforms: All
Version: 2022.1.2

This change projects the FullSize property to SQL for X12, EDIFACT, and ASTM.  The property had already existed for all three (plus HL7), and the projection was already included for HL7.

DP-415945: Interoperability Java and DotNet Gateway services modifications for core api change

NOTE: This item may require a change to code, configuration, or operation.

Category: Interoperability
Platforms: All
Version: 2022.1.1

The classes EnsLib.JavaGateway.Service and EnsLib.DotNetGateway.Service have a new exposed setting in the Production Configuration page of "External Language Server Name" (property %gatewayName).

The value of External Language Server Name is a name given in the Management Portal at System > Configuration > External Language Servers

For an EnsLib.JavaGateway.Service, it can be %Java Server or a custom Java type entry. (Note that when used with a SQL Business Service or Operation that uses JDBC, it is still a Java type entry and not JDBC type)

For an EnsLib.DotNetGateway.Service, it can be %DotNet Server or a custom .NET type.

  Once External Language Server Name is specified, it supersedes the settings in Server and Port and the associated gateway configuration settings such as classpath , heartbeat, use passphrase and JVM.

Note it is now not possible to start a gateway that uses a passphrase without using an External Language Server Name.   The superclass EnsLib.JavaGateway.Common used by Services and Operations that use the gateway now identifies if the associated Java Gateway specifies an External Language Server Name  and uses that value rather than the Server and port values to connect to the relevant proxy gateway. 

It is intended that there will be no need for EnsLib.JavaGateway.Service and EnsLib.DotNetGateway.Service items at a later date.

DP-416059: Update to interoperability Java and DotNet Gateway services

Category: Interoperability
Platforms: All
Version: 2022.1.1

With this change, the EnsLib Gateway services use a dynamic object instead of the now-deprecated %Net.Remote.ObjectGateway class.

DP-416310: Use correct API to stop External Language Server

Category: Interoperability
Platforms: All
Version: 2022.1.1

This change corrects the Interoperability Gateway service so that it uses the correct API to stop the External Language Server.

DP-416568: Modifications to how productions start/stop/update as _Ensemble

Category: Interoperability
Platforms: All
Version: 2022.1.2

This change modifies how the implementation of the internal wrapper methods that allow Interoperability Production Host Items to run as InterSystems IRIS user _Ensemble.

DP-416858: Add optional use of Access Token for SASL XOAUTH support in EnsLib email adapters

Category: Interoperability
Platforms: All
Version: 2022.1.2

The email adapters now provide a new setting for a configured OAuth2 Application to use for SASL XOAUTH2. The adapters will use the associated Access Token if the application is authorized.

The new settings include OAuth2ApplicationName, which is an optional OAuth2 Client Configuration Application name to use. If specified, this indicates that OAuth 2 is to be used and the name is used in the Authorization and Access Token retrieval process.

DP-417168: Record Mapper and EDI Document Viewer file view permissions check

NOTE: This item may require a change to code, configuration, or operation.

Category: Interoperability
Platforms: All
Version: 2022.1.2

The Interoperability Record Mapper and EDI Document viewer management portal pages enforce holding the privilege %Ens_ViewFileSystem:USE before allowing the user to select a file using the file select dialog popup. This change adds the same check before a file is opened.

DP-417266: Disable EXTERNAL INTERRUPT in production when invoking via %SOAP.WebService

Category: Interoperability
Platforms: All
Version: 2022.1.2

This change disables external interrupts when calling into Interoperability productions (CreateBusinessService) via core %SOAP.WebService.

DP-417996: SOAP adapter/service syncrequest to support response timeout recovery

Category: Interoperability
Platforms: All
Version: 2022.1.2

With this change, the SOAP adapter/service will support optional Response Timeout Recovery for requests that depend on possibly long running synchronous sends within the production.

When a client system retries, it is up to the receiving code to handle whether to fully reprocess the request or look for a response that has been created already. The Interoperability framework by default will attempt to fully reprocess each request. The framework provides for asynchronous request coupled with secondary attempts to obtain the response using the Deferred Sending mechanism which uses deferred response tokens.

A new feature has been added to aid existing code that uses a synchronous request to process a client message within the SOAP protocol and the client times out waiting for the initial response and retries. The new feature is designed to prevent multiple processing of the same retried request. The support relies on the SOAP service processing to continue even when the original client request and that the original response is returned to the client on a retry attempt.

Both the SOAP client and SOAP service need to be configured to support Synchronous Delayed Response Support for SOAP client requests. Only one SendRequestSync in the particular SOAP Service web method call is supported.

The EnsLib.SOAP.OutboundAdapter can be configured to include the request key in the HTTP headers to identify uniquely its request and whether the request is a retry. The Adapters response timeout setting is also included in a new header. The new HTTP headers are VND.InterSystems.IRIS.RequestKey, VND.InterSystems.IRIS.RetryRequestKey and VND.InterSystems.IRIS.ResponseTimeout.

The value for VND.InterSystems.IRIS.RequestKey and associated VND.InterSystems.IRIS.RetryRequestKey are to be the same.

The setting that controls the inclusion is IncludeRequestKeyInHTTPHeader. The default is OFF. The new setting is displayed under the category of DelayedResponseSupport

A new setting SupportDelayedSyncRequest (under the category of DelayedResponseSupport) is provided for SOAP Business Services that extend EnsLib.SOAP.Service or business services that are invoked via CreateBusinessService from a %SOAP.WebService subclass and extend a new class Ens.Helper.Service.SyncResponseHandler.HTTP. The default is OFF.

Two other settings are provided: OverrideClientResponseWaitTimeout and GatewayTimeout.

Support for Delayed Sync Request is implemented when the service is enabled for SupportDelayedSyncRequest and the client sends includes VND.InterSystems.IRIS.RequestKey on first request and VND.InterSystems.IRIS.RetryRequestKey on subsequent retries:

SendRequestSync call will record the client request key and the request header for the SendRequestSync in a temporary object Ens.Temp.XREF.DelayedClientRequest. The storage global is ^IRIS.Temp.EnsRuntimeAppData($NAMESPACE,"_syncdelayed","D") When a client times out and retries before the original request is completed, the SendRequestSync call will examine the Ens.Temp.XREF.DelayedClientRequest table for an outstanding response handling. If it is determined that processing is still taking place the SendRequestSync call will wait until either the original response is returned or the client times out. (The intention of waiting until the client times out is because there is no control over the custom code flow in the service after the SendRequestSync call.) When a delayed response is returned for the original request, the entry is in Ens.Temp.XREF.DelayedClientRequest. When a delayed response is returned on a retry, the entry in Ens.Temp.XREF.DelayedClientRequest is left in case the client was disconnecting at the point of response being returned. After the second retry with response returned, the entry in Ens.Temp.XREF.DelayedClientRequest is removed. It is, therefore, possible that entries in Ens.Temp.XREF.DelayedClientRequest can remain but these are not expected to be common. That is, this feature is intended to help for what is regarded as edge cases.

JDBC

DP-419175: Correct xDBC static cursor execution with runtime plan choice

Category: JDBC
Platforms: All
Version: 2022.1.2

This change corrects an issue in JDBC Static Cursor query execution where an <UNDEFINED> error occurred during Close of the cached query. The error reported by the server was as follows:

java.sql.SQLException: [SQLCODE: <-400>:<Fatal error occurred>]
[Error: <<UNDEFINED>%OnClose+3^%sqlcq.SAMPLES.HIQN7Dljzf5.cls1.1>]
[Location: <ServerLoop>]
    at com.intersystems.jdbc.IRISConnection.getServerError(IRISConnection.java:976)
    at com.intersystems.jdbc.IRISConnection.processError(IRISConnection.java:1121)
    at com.intersystems.jdbc.InStream.readMessageInternal(InStream.java:314)
    at com.intersystems.jdbc.InStream.readMessage(InStream.java:201)
    at com.intersystems.jdbc.InStream.readMessage(InStream.java:183)
    at com.intersystems.jdbc.IRISPreparedStatement.Query(IRISPreparedStatement.java:95)
    at com.intersystems.jdbc.IRISPreparedStatement.executeQuery(IRISPreparedStatement.java:47)
    at com.intersystems.jdbc.test.legacy.test18.fastSelect.SimpleTest.runTest(SimpleTest.java:178)
 

Journaling

DP-410180: Do not change journal directory when unrelated journal property changes

Category: Journaling
Platforms: All
Version: 2022.1.2

This change corrects an issue that caused journaling to change back to the primary directory when a journal property change unrelated to journal directories is activated.

DP-414668: Properly create 2GB or larger journal files on Unix platforms

Category: Journaling
Platforms: UNIX®
Version: 2022.1.1

Addressed an issue that could cause journal decompression to fail or hang on Unix platforms when the original (uncompressed) file size is 2GB or greater.

DP-415782: Fix a problem that caused JRNDUMP not to display specific journal files

Category: Journaling
Platforms: All
Version: 2022.1.2

Before this fix, if you deactivated an encryption key after turning off journal file encryption, that caused JRNDUMP not to display any journal files created before journal file encryption was disabled.

DP-417229: Ensure that ^STU has access to system data

Category: Journaling
Platforms: All
Version: 2022.1.2

This change ensures that ^STU has access to system data. Before this change, it was possible for %ZSTART code (which calls ^STU) to fail occasionally because the _Ensemble user and the Security.System 'SYSTEM' object could not be found.

Kernel

DP-412948: Correct display for the GBLOCKCOPY monitor

Category: Kernel
Platforms: All
Version: 2022.1.2

This change corrects the output display of the GBLOCKCOPY monitor.

DP-413143: Upgrade zlib to 1.2.12

Category: Kernel
Platforms: All
Version: 2022.1.1

This change upgrades zlib to version 1.2.12.

DP-413859: Corrected a CPP dispatcher issue

Category: Kernel
Platforms: All
Version: 2022.1.1

This change fixes a rare problem with class methods implemented in Python or C++. If the method implementation calls back into InterSystems IRIS and invalidates context, after invalidation, the class/context may cause an unpredictable result. In this case python.Import() tries to new an object of the same type but the class object is freed/reused for something else.

DP-414175: Fix mirroring failure when mirror set name starts with numeric character

Category: Kernel
Platforms: All
Version: 2022.1.1

This change fixes a mirroring failure when a mirror set name starts with a number.

DP-414224: Handle error() call in Windows mailbox thread

Category: Kernel
Platforms: Windows
Version: 2022.1.1

Under very unusual conditions, a $VIEW(-1,pid) of another process could cause that process to terminate with an exception.

DP-414650: Fix error that could cause ECP daemon not finding lock entry for delock.

Category: Kernel
Platforms: All
Version: 2022.1.1

This change fixes an error in ECP that would sometimes result in a message like the following: Could not find lock entry for delock request, tid=70000, token=6f3261, sfn=3, lock=^ER1DCS(921208056)

DP-414757: Prevent dead lock on MISC resource during pidtab expansion

Category: Kernel
Platforms: All
Version: 2022.1.2

This change prevents a dead lock on MISC resource during pidtab expansion.

DP-414973: Avoid missing journal entry in primary when mirrored is re-mounted.

Category: Kernel
Platforms: All
Version: 2022.1.1

Avoid missing journal entry in primary when mirrored is re-mounted.

DP-415307: JRNZIP now finds first uncompressed mirror journal file at startup

Category: Kernel
Platforms: All
Version: 2022.1.2

A problem has been resolved where the last journal file an async member was receiving when it was shut down remained uncompressed after the instance is started.

DP-415602: Improve %ToJSON() performance when writing to streams or files

Category: Kernel
Platforms: All
Version: 2022.1.2

The performance of the %DynamicAbstractObject method %ToJSON() has been improved when the JSON representation of a complex JSON object is being sent to a stream or file.   (The performance when writing to a string had already been improved.)

DP-415977: Support /ENV argument for CPIPE open

Category: Kernel
Platforms: All
Version: 2022.1.1

This change adds a /ENV argument to the CPIPE Open command. It specifies environment variables to be set in the new process. There are two ways to specify the values - explicitly or in an array. The examples show two names but there can be any number. The explicit list must be enclosed in parentheses.

Explicitly:

  /ENV=(name1:value1,name2:value2)
In an array:
  Set arr(name1)=value1
  Set arr(name2)=value2
  /ENV=arr...

DP-416121: Fixed an issue in ECP that resulted in <WIDE CHAR> error when using $ORDER in reverse

Category: Kernel
Platforms: All
Version: 2022.1.2

This change corrects an issue in ECP that sometimes resulted in a <WIDE CHAR> error when using $ORDER in reverse.

DP-416181: kill fix

Category: Kernel
Platforms: All
Version: 2022.1.1

The new KILL code introduced an extremely rare possibility that a KILL (most likely a large kill) could result in a hang of the system (the write daemon freezes and processes eventually stop running).   No database degradation occurs.  It is recommended that anyone who installed a version with the new KILL code eventually update to a maintenance release with this fix at a convenient time.

DP-416283: Support /ENV on $ZF(-100)

Category: Kernel
Platforms: All
Version: 2022.1.1

This change adds /ENV to the $ZF(-100) flags argument. It specifies environment variables to be set in the new process. There are two ways to specify the values - explicitly or in an array. The explicit list must be enclosed in parentheses.

This is similar to /ENV for CPIPE (DP-415977) but subtly different for explicit values. With CPIPE the name and value are expressions - they can be string literals (quoted strings) or variable names or any expression. With $ZF(-100), because the entire flags argument is a string, the name and value are always treated as strings, not variable names. If they contain characters that would interfere with parsing the rest of the string, such as colon or comma, they must be enclosed in quotes, which must be doubled because they are within the flags string.

The format is /ENV=(name:value) There can be multiple name:value pairs separated by a comma.

This example will run the command with variable MYNAME equal to "Tom" and MYARG equal to "comma,".

do $ZF(-100,"/ENV=(MYNAME:Tom,MYARG:""comma,"")",command)
An alternate format is /ENV=var... where var is an array. The subscript is the environment variable name and the node value is the value to be set.

This example produces the same result as the previous one.

set arr("MYNAME")="Tom"
set arr("MYARG")="comma,"
do $ZF(-100,"/ENV=arr...",command)

DP-416662: Fix check for $C(num)=0 when num#256=48

Category: Kernel
Platforms: All
Version: 2022.1.2

This change corrects an issue on x64 platforms. Before this change, set var=$C(num),result=var=0 would set result=1 for all num values where num#256=48.

DP-416949: Corrected an error in which a multidimensional property was incorrectly treated as a Python method

Category: Kernel
Platforms: All
Version: 2022.1.2

This change corrects an error in which a multidimensional property was incorrectly treated as a Python method, raising a wide chararacter error.

DP-416971: Corrected handling of new format routines

Category: Kernel
Platforms: All
Version: 2022.1.2

This change corrects handling of obj code for routines with no source. Before this change, it was possible to have <SYSTEM> errors after restart.

DP-417018: Corrected routine invalidation order across ECP

Category: Kernel
Platforms: All
Version: 2022.1.2

This change corrects an issue in which routine recompilation didn't invalidate rOBJ blocks consistently relative to routine invalidation on application servers. The application servers would continue to run the old version.

DP-417668: Corrected embedded Python IO redirection

Category: Kernel
Platforms: All
Version: 2022.1.2

This change corrects embedded Python IO redirection.

DP-418023: Correct variable states in %ETN or %STACK

Category: Kernel
Platforms: All
Version: 2022.1.2

This change corrects an error that cause the error trap %ETN, or the %STACK utility, to omit the data value for a variable, given a particular order of NEW commands in the execution stack.

Before this change, doing a $$LOG^%ETN() stack dump could sometimes die, resulting in an incomplete dump in the ^ERRORS global.

DP-418343: Fix %SYS.Trace change trace directory

Category: Kernel
Platforms: All
Version: 2022.1.2

This change corrects an issue that was seen when using ^TRACE UI or %SYS.Trace API to change the directory for trace files to a path with a shorter length. Before this correction, an incorrect directory was used until the time the system is restarted.

DP-419462: Global iterator: Correct compact unicode/vector big string value handling and don't cache big strings by default

Category: Kernel
Platforms: All
Version: 2022.1.2

This change correct compact unicode/vector big string value handling and also no longer caches big strings by default.

DP-419666: Correct method dispatch cache invalidation

Category: Kernel
Platforms: All
Version: 2022.1.2

This change corrects a very rare error that could result in segfault errors.

DP-419771: Include Red Hat version in $zv on lnxrh9x64, lnxrharm64 and lnxrh9arm64 platforms

Category: Kernel
Platforms: All
Version: 2022.1.2

$zv will include Red Hat version on Red Hat 8 arm64 and both Red Hat 9 platforms

Management Portal

DP-413589: Support paging for results tables produced by %CSP.UI.Component.SQLTables

Category: Management Portal
Platforms: All
Version: 2022.1.1

This adds the ability for the SQLTables component to produce paged results, which reduces the rendering burden of huge HTML tables and improves user experience.

DP-417081: Update Database page to sort correctly

Category: Management Portal
Platforms: All
Version: 2022.1.2

This change corrects the Database page to display data correctly when you sort by available space.

Mirroring

DP-412174: Changing async member type between DR and Reporting now restarts dejournaling

Category: Mirroring
Platforms: All
Version: 2022.1.2

This correction ensures that when you change the async member type between DR and Reporting, that change also restarts dejournaling.

Before this correction, in such a scenario, dejournaling was not restarted and consequently, multiple updater jobs were left running.

DP-412459: Allow users to correct the "ERR" failure in ProcessValidationFailure^MIRROR.

Category: Mirroring
Platforms: All
Version: 2022.1.2

This change allows users to correct the "ERR" failure in ProcessValidationFailure^MIRROR.

DP-415939: Allow users to delete all mirror journal files when deleting a mirror set configuration.

Category: Mirroring
Platforms: All
Version: 2022.1.2

This change allows users to delete all mirror journal files when deleting a mirror set configuration.

DP-418792: Fix 30 seconds delay on primary sending journal data to async members

Category: Mirroring
Platforms: All
Version: 2022.1.2

This change removes an unnecessary 30 second delay on the primary member sending journal data to async members.

Monitoring

DP-413960: Limit PERFMON collection (index) numbers

NOTE: This item may require a change to code, configuration, or operation.

Category: Monitoring
Platforms: All
Version: 2022.1.2

Limit all PERFMON collections to 64k. Before this change, use of collections >65535 would silently fail; now an error is returned.

DP-415166: Fix <PROTECT> error in %Monitor.Process

Category: Monitoring
Platforms: All
Version: 2022.1.2

This change allows ##class(%Monitor.Process).Metrics() to be called from a non-privileged account in any namespace.

OAuth

DP-416533: /csp/sys/oauth2/ web application should not require %All

Category: OAuth
Platforms: All
Version: 2022.1.2

This change modifies the /csp/sys/oauth2/ web application so that it does not run with the %All role. The %All role will no longer be added to the application roles. If the web application already exists this role, the application is updated to no longer use this role.

The CSPURL parameter has also been added to the following pages, so that they cannot be executed from other /csp/sys/ applications:

  • OAuth2.Response.cls

  • OAuth2.PostLogoutRedirect.cls

  • OAuth2.JWTServer.cls

  • Object - .NET Binding

    DP-416247: Allow IRISDate and IRISTime to be created from string values from server

    Category: Object - .NET Binding
    Platforms: All
    Version: 2022.1.2

    In the .NET Bindings, when a value returned from the server is expected to be a date or time, we need to convert it to type IRISDate or IRISTime. Before this change, the conversion occurred only if the type returned from the server was IRISDate/IRISTime or Long/Int.

    With this change, a string from the server containing an ODBC date/time value or similarly formatted date/time (such as 01-01-2021) can also be turned into the corresponding IRISDate/IRISTime object.

    Object - .NET XEP

    DP-408900: Correct how .NET XEP detects the number of defined indexes

    Category: Object - .NET XEP
    Platforms: All
    Version: 2022.1.1

    This change corrects how .NET XEP detects the number of defined indices from the storage schema. Previously, a error would be possible for some queries.

    DP-408901: Fix bug in subscript mapping caused by null/empty string problem

    Category: Object - .NET XEP
    Platforms: All
    Version: 2022.1.2

    By default, the subscript for the base data node used by a persistent class is not specified. This is specified in the Unified schema as either null or "", depending on how the subscript is specified in the storage definition. .NET constructs a subscript map using the subscript from the unified storage schema. This change normalizes both null and empty string ("") to null when constructing that map.

    DP-408902: .NET XEP - update handling of reference and embedded types

    Category: Object - .NET XEP
    Platforms: All
    Version: 2022.1.2

    XEP supports embedded objects (%SerialObject) and references to persistent objects.

    This change allows .NET XEP to process new schema definitions for embedded and reference types.

    DP-410585: Add check for serializable attribute in arrays of objects for .NET XEP

    Category: Object - .NET XEP
    Platforms: All
    Version: 2022.1.1

    In XEP when determining the type of a field, if the field is an array, XEP determines the type based on the elements of the array. However, there was a bug in the .NET version where no further checks would be made to determine if the array field was annotated as serializable or not, which caused errors down the line.

    This change makes the behavior consistent with Java XEP, and will set the type of an array field to be serializable if it is annotated as such.

    In addition, there was a bug when reading serialized arrays in which no actual data was read, and the resulting array was always empty. This change fixes that issue as well.

    DP-411312: Correctly deserialize serializable XEP object arrays in .NET 5

    Category: Object - .NET XEP
    Platforms: All
    Version: 2022.1.1

    This change uses a new implementation to deserialize serializable XEP object arrays.

    DP-412574: Remove console write from .NET XEP

    Category: Object - .NET XEP
    Platforms: All
    Version: 2022.1.1

    Before this fix, when storing data, an unnecessary line was printed to the console, giving information about the elapsed server write time.

    Object Compiler

    DP-416571: SQL: Correct Iregression with class query (SQL) that includes $$$OK macro reference

    Category: Object Compiler
    Platforms: All
    Version: 2022.1.2

    This change corrects an issue in which a class query of type %SQLQuery might fail to compile if the SQL query references an InterSystems IRIS system macro, such as $$$OK, in the query text.

    DP-416677: Correct error when opening a %Dictionary class

    Category: Object Compiler
    Platforms: All
    Version: 2022.1.2

    This change corrects an error in which the system did not release a lock on a %Dictionary package class. The error occurred when the class dictionary version for the class was out of date and the attempt to automatically upgrade the version failed.

    Object Library

    DP-407820: Add qualifier to verify class storage is not changed during class compile

    Category: Object Library
    Platforms: All
    Version: 2022.1.2

    This change adds a qualifier to enable you to verify class storage that not changed during class compile. If this qualifier is enabled, if class storage is changed, the compiler now reports an error as this can lead to problems using this storage against existing data. The qualifer is called /checkstoragedefined. Pass in /checkstoragedefined=1 turn this checking on.

    DP-409668: Don't display verbose OAuth errors after redirect failures

    Category: Object Library
    Platforms: All
    Version: 2022.1.2

    This change fixes a issue in which the OAuth2.Response and OAuth2.PostLogoutRedirect classes would display a custom error page with verbose errors under certain redirect failure conditions. Now, those pages display the web application's default error page and log the verbose errors.

    DP-414164: Suppress generation of idkey index with no properties

    Category: Object Library
    Platforms: All
    Version: 2022.1.1

    When a unified schema contains an index defined as the idkey but does not define any fields on which the index key is based, then the assumption is that the index key is generated by the system. There is no way to define that index in InterSystems IRIS because the system assigned keyword is a CompiledIndex property only and not an IndexDefinition property. This change fixes the problem by suppressing the definition of an index that is flagged as the IDKEY but does not define any fields.

    DP-414418: Reject unrecognized client assertion types in OAuth2 server

    Category: Object Library
    Platforms: All
    Version: 2022.1.1

    This change updates the OAuth server code to reject token requests whose client_assertion_type value is not "urn:ietf:params:oauth:client-assertion-type:jwt-bearer" with a 400 status code.

    DP-414475: Return 400 error when no client authentication sent to OAuth token endpoint

    Category: Object Library
    Platforms: All
    Version: 2022.1.1

    When no basic auth, client_assertion, or client_id is sent to the OAuth Token endpoint to authenticate a client, the server now returns a 400 error with "invalid_client". Previously it had returned a 500 server error.

    DP-414511: Reinstate accidentally removed return value to OAuth2.Server.Token:Authorize()

    Category: Object Library
    Platforms: All
    Version: 2022.1.1

    This change reinstates the successful return value from OAuth2.Server.Token:Authorize(),

    DP-414548: Avoid duplicate rebuild of routine/class index

    Category: Object Library
    Platforms: All
    Version: 2022.1.1

    This change removes redundant steps in the logic that builds the routine/class indexes.

    The change also increases the timeout for the routine/class index when doing a rebuild from 5s to 120s, as an index build can take a short while and other processes need to wait for the first process to complete.

    DP-414767: Fix host key crash in FIPS mode

    Category: Object Library
    Platforms: All
    Version: 2022.1.1

    When running in FIPS mode, making an SSH connection could crash because FIPS specifically disallows the traditional MD5 hashes and the libssh2 function returns a NULL pointer that the code was not checking for.

    DP-415659: Drop histogram info when exporting with /exportversion <2021.2 for Caché

    Category: Object Library
    Platforms: All
    Version: 2022.1.2

    This change modifies the class export code (such as $system.OBJ.ExportPackage()) so that it omits histogram information if /exportversion is 2021.2 or earlier.

    DP-415703: Allow %OAuth2.JWT:GetJWK() to find keys by algorithm without a kid

    Category: Object Library
    Platforms: All
    Version: 2022.1.2

    This change modifies the GetJWK() method in %OAuth.JWT to return a key even if no JWK is found with the matching kid.

    If no key is found with a matching kid and alg, then we will return the most recently added key with a matching alg, regardless of the kid in the the JWKS.

    This corrects a bug in the case where the JWKS is generated from an x509 configuration on both the server and client. In this case, the kid values will not match.

    DP-415716: Remove illegal syntax from code generated by %JSON.Adaptor

    Category: Object Library
    Platforms: All
    Version: 2022.1.2

    Before this fix, if a class extended %JSON.Adaptor and included a property defined as a list of streams, that class could not be compiled.

    DP-416517: Drop the 'histogram' info while exporting with /exportversion <2021.2 for InterSystems IRIS

    Category: Object Library
    Platforms: All
    Version: 2022.1.2

    This change corrects code export with /exportversion <2021.2. Now the export will not include the 'histogram' information, which is not accepted in earlier releases.

    DP-416632+DP-416639: Fix variable leaking in %DocDB.Database

    Category: Object Library
    Platforms: All
    Version: 2022.1.2

    This change ensures that no internal variables are left after you call %CreateDatabase() of the class %DocDB.Database.

    DP-416725: Prevent <UNDEFINED> error for %Studio.Project::InstallFromGbl()

    Category: Object Library
    Platforms: All
    Version: 2022.1.2

    This change prevents an <UNDEFINED> error that was possible when using %Studio.Project::InstallFromGbl().

    The error message included the text

    <UNDEFINED>SaveLocalSettings+78^%occStorage
    

    DP-416814: Fix direct reference to %RuntimeMode in %ScrollableResultSet

    Category: Object Library
    Platforms: All
    Version: 2022.1.2

    This change corrects a refactoring that changed ..RuntimeMode to (incorrect) i%RuntimeMode.

    DP-417775: Allow globals to be killed in HALT cleanup even if GlobalKillEnabled=0

    Category: Object Library
    Platforms: All
    Version: 2022.1.2

    This change ensures that the system cleans up globals correctly (without <PROTECT> errors) during the global cleanup logic in HALT handling, even if the CPF file has GlobalKillEnabled=0.

    Object Parser

    DP-418357: Enable embedding token recognition for JavaScript template literals

    Category: Object Parser
    Platforms: All
    Version: 2022.1.2

    This change corrects an error that caused compilation errors for a class that contained JavaScript template literals.

    Object Storage

    DP-416355: Avoid UNDEFINED error in %RemoveFromSaveSet() for item not in save set

    Category: Object Storage
    Platforms: All
    Version: 2022.1.2

    Before this change, when calling %RemoveFromSaveSet for a class that is not in the save set (for example, a transient property), the result could be an <UNDEFINED> error. Now %RemoveFromSaveSet() detects such cases and skips removing items that are not in the set of objects to save.

    ObjectScript

    DP-412709: Prevent access violation with long strings in background job

    Category: ObjectScript
    Platforms: Windows
    Version: 2022.1.2

    This change corrects an issue in which a running routine that contains $listfromstring with very long string input in a background job could cause an access violation on Windows.

    ODBC

    DP-415573: Corrects ODBC connections that use passwords

    Category: ODBC
    Platforms: All
    Version: 2022.1.1

    This change fixes a problem with ODBC connections that use passwords. The problem was that when you attempt to open a table linked to an InterSystems IRIS table would hang for long time, show errors, and display cells incorrectly. After this change, however, a call to SQLDriverConnect() will return the full connection string, including password.

    DP-417170: Correct fastSelect with UNION query and literals in select list

    Category: ODBC
    Platforms: All
    Version: 2022.1.2

    This change corrects an issue where a SELECT query over xDBC that is a UNION query and the first leg of the UNION query has literal values in the SELECT list might return incorrect results.

    DP-418276: Correct ODBC parser handling of ORDER BY within GROUP BY

    Category: ODBC
    Platforms: All
    Version: 2022.1.2

    This change corrects an issue using the ODBC driver to run queries that include an ORDER BY clause within a GROUP BY clause.

    Platforms

    DP-412390: Require minor OS version in installs on Red Hat and SUSE

    NOTE: This item may require a change to code, configuration, or operation.

    Category: Platforms
    Platforms: UNIX®
    Version: 2022.1.1

    Installation on Red Hat 7 x64 will require minor version 9 or above.

    Installation on Red Hat 8 x64 and ARM64 will require minor version 2 or above.

    Installation on SUSE 15 x64 will require minor version 3 or above.

    PLATFORMS-ICU-691: ICU 69.1 & Xerces 3.2

    NOTE: This item may require a change to code, configuration, or operation.

    Category: Platforms
    Platforms: All
    Version: 2022.1.1

    In this release, ICU has been updated to version 69.1. Also the current Xerces version is now 3.2.

    PLATFORMS-RH9: Add RH9 support

    Category: Platforms
    Platforms: UNIX®
    Version: 2022.1.2

    This release adds support for Red Hat 9.x for x86-64 or ARM64.

    PLATFORMS-UBUNTU-2204: Add Ubuntu 22.04 support

    Category: Platforms
    Platforms: UNIX®
    Version: 2022.1.1

    This release adds support for Ubuntu 22.04.

    SAM - System Alerting and Monitoring

    DP-415663: Updates ^STU to no longer include code for System Alerting and Monitoring

    Category: SAM - System Alerting and Monitoring
    Platforms: All
    Version: 2022.1.1

    Updates ^STU to no longer include code for System Alerting and Monitoring, which is now built as an independent module.

    Security

    DP-410314: Only create refresh tokens after scopes have been customized and accepted

    Category: Security
    Platforms: All
    Version: 2022.1.2

    This change fixes a bug where OAuth servers would issue refresh tokens to clients even when users explicitly denied the clients' request for a refresh token.

    DP-411420: Remove pre-Apache 2.4 support

    Category: Security
    Platforms: All
    Version: 2022.1.1

    This change removes unsupported code, primarily pre-Apache v 2.4 support.

    DP-412784: Return HTTP 400 when OAuth Token endpoint doesn't find client

    Category: Security
    Platforms: All
    Version: 2022.1.2

    With this change, the OAuth server code now properly checks that a client has been opened before trying to operate on said client. Before this change, in some cases, there were internal server errors instead of invalid client errors.

    DP-412786: Set default value for subject_types_supported for InterSystems IRIS OAuth/OIDC servers

    Category: Security
    Platforms: All
    Version: 2022.1.2

    The OAuth server metadata property subject_types_supported, which is required for OAuth servers, was previously never set to a value. It is now set to "public".

    DP-415141: Return status correctly in %SYS.Audit:Import()

    Category: Security
    Platforms: All
    Version: 2022.1.1

    This change fixes a bug in the Import() method of %SYS.Audit, where an error status code was not being returned for an error condition.

    DP-416839: Reset SSL cache on failed connection to LDAP

    Category: Security
    Platforms: All
    Version: 2022.1.2

    This change fixes a bug in which it was possible to get an "UNKNOWN CA" error when logging in, when using LDAP to authenticate.

    This change provides a new option the method %SYS.LDAP:SetOption. The option is described in the class reference.

    For the example of "LDAP host names" parameter, to specify multiple host names, separate the names by spaces. If the LDAP server is configured to use a particular port, you can specify it by appending ":portname" to the host name; typical usage is not to specify a port and to let the LDAP functions use the default port, such as:

    ldapserver.example.com
    ldapserver.example.com ldapbackup.example.com
    

    If you have multiple replicated domain servers on your network like

    ldapserver.example.com
    ldapserver1.example.com
    ldapserver2.example.com
    ldapserver3.example.com
    

    You can specify the domain "example.com" as your host name. LDAP will perform a DNS query asking for the addresses of all the matching ldap servers, and then automatically select one to connect to.

    DP-417677: Allow InterSystems IRIS to start when FIPSMode=1 in CPF file for RedHat 9

    Category: Security
    Platforms: RedHat 9
    Version: 2022.1.2

    This change allows InterSystems IRIS to start on RedHat 9 when FIPSMode=1 in the CPF file.

    DP-418534: Set Content-Type header correctly in OAuth2.JWTServer

    Category: Security
    Platforms: All
    Version: 2022.1.2

    This change modifies OAuth2.JWTServer to set the Content-Type header in the OnPreHTTP() Method instead of in the OnPage() method. 

    This change prevents a <PROTECT> error.

    Sharding

    DP-415310: Pass %NOINDEX query hint to shards

    Category: Sharding
    Platforms: All
    Version: 2022.1.2

    This change fixes a problem in which the %NOINDEX query hint was not passed to shard-local queries, causing it to be ignored when executing sharded queries.

    DP-416531: Don't set properties fields to "" for defaults when mapping globals

    Category: Sharding
    Platforms: All
    Version: 2022.1.1

    This change causes sharding logic, when setting up a properties array for a call to ##class(Config.MapGlobals), to not set any properties for which the default is intended, rather than setting such properties to "".

    DP-416775: Fix shared lock leak in $system.Sharding.VerifyShards()

    Category: Sharding
    Platforms: All
    Version: 2022.1.2

    This change fixes a problem in which VerifyShards() could sporadically fail to release a shared lock on a shard's entry in the sharding metadata global.

    DP-417495: VerifyShards: don't set master backup address when called recursively

    Category: Sharding
    Platforms: All
    Version: 2022.1.2

    This change fixes a problem in which VerifyShards failed with a <SUBSCRIPT> error, if called in a mirrored sharded cluster, in which the master node has no backup failover member.

    DP-417989: Sharding only activate namespace once after series of mapping operations

    Category: Sharding
    Platforms: All
    Version: 2022.1.2

    This change fixes a problem in which, when a master namespace contains many user-defined mappings, it could take an unacceptably long time for sharding to propagate them to shards.

    DP-418033: Disable sharding debug tracing in Backup.ShardedCluster methods

    Category: Sharding
    Platforms: All
    Version: 2022.1.2

    This change fixes a problem in which a sharded cluster could become hung in a quiesced state if the Quiesce, JournalCheckpoint, or ExternalFreeze methods of Backup.ShardedCluster were called while sharding debug tracing was enabled.

    SQL

    DP-408485+PLUS: Corrects bugs in the SQL 'EXPLAIN' feature

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change refactors the SQL EXPLAIN feature in order to fix multiple bugs. The SQL EXPLAIN statement is now fully supported via the following interfaces:

    • Embedded SQL [Both <select stmt: single row> and <select stmt: multi row> (e.g. DECLARE)]
    • Dynamic SQL [e.g. %SQL.Statement class]
    • SQL Shell [do $SYSTEM.SQL.Shell()]
    • Management Portal [System Explorer -> SQL -> Query]
    • JDBC
    Given the newly refactored code, it should be possible for future enhancements to add more interfaces that support our SQL *EXPLAIN* statement.

    Our SQL *EXPLAIN* statement is best described via the following BNF:

    <explain> ::= EXPLAIN [ <explain option list> ] [ INTO <host ref> ] <selct>
       -- <selct> denotes the SELECT Statement, which is the only valid query currently supported with <explain> 
    <explain option list> ::= [ <alt option ] [ <stat option> ]
    <alt option>  ::= ALT | ALL
    <stat option> ::= STAT | STATS
                      -- The <stat option> and <alt option> can be specified in any order
    

    <decl> ::= DECLARE <ident> CURSOR FOR <selct> [ FOR <updtcls> ] | DECLARE <ident> CURSOR FOR <explain> [ FOR <updtcls> ]

    The following examples show how the SQL *EXPLAIN* statement can be used:
    // --- Returns the query plan as an XML string ---
    EXPLAIN SELECT Name,DOB FROM Sample.Person where Name [ 'Q'
    // --- Returns the query plan and performance stats (by module) as an XML string ---
    EXPLAIN STAT SELECT Name,DOB FROM Sample.Person where Name [ 'Q'
    // --- Returns the alternate query plans as an XML string ---
    EXPLAIN ALT SELECT Name,DOB FROM Sample.Person where Name [ 'Q'
    // --- Returns the alternate query plans and performance stats as an XML string ---
    EXPLAIN ALT STAT SELECT Name,DOB FROM Sample.Person where Name [ 'Q'
    
    This change also enhances the following methods/APIs within the %SYSTEM.SQL class that relate to the SQL *EXPLAIN* statement:
    • GetSQLPlan(sqlStr,showStats,planType,sqlPlan)
    • RefactorSQLPlan(planRef) (Previously named:�CollectPlans(planRef) )
    • Explain(sql,qualifiers,dynargs,plan)
    DP-408910: Fix <NOLINE> in EXPLAIN in ShowPlan() and ShowPlanAlt()

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change corrects a bug that could cause a _<NOLINE>_error when processing the EXPLAIN statement (with the STAT qualifier) during query compilation, when either of the following methods are invoked:

    • do $SYSTEM.SQL.ShowPlan(...)
    • do $SYSTEM.SQL.ShowPlanAlt(...)

    DP-409827: Close loophole where SQL privileges could be dropped

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change corrects an issue where a user at the terminal prompt could make a call to an API in %SYS.SQLSEC and if the correct arguments were passed in, could delete a user's SQL privileges.

    DP-412636: Add MAP_SELECTABLITY column to Index information

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    A map's usability by the SQL Query optimizer can be turned off using the $SYSTEM.SQL.Util.SetMapSelectability() API.  If a map's selectability is OFF, it is now easier to see that in the following locations:

    • In the SQL section of the Management Portal, for a table's Maps/Indices, we now display Yes/No if the map is selectable by the SQL query optimizer. 
    • In the INFORMATION_SCHEMA.INDEXES catalog table, there is a new column MAP_SELECTABILITY which will display where an index map is selectable by the SQL Query optimizer. 

    DP-412869: Fix tune table to correctly mark outliers when outlier selectivity and sample size are both small

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    With this change, tune table now correctly marks outliers when outlier selectivity and sample size are both small.

    DP-412965: Support %SQL.Statement Prepare/ExecDirect without privilege checking

    Category: SQL
    Platforms: All
    Version: 2022.1.1

    When preparing dynamic SQL statements via %SQL.Statement, there is now an option to not perform privilege checking.

    The %Prepare() method for %SQL.Statement now takes an optional second argument called checkPriv.  If checkPriv=0, SQL privileges are not checked on the statement.  The default value for checkPriv is 1.

    For example:

    USER>set stmt=##class(%SQL.Statement).%New()
    USER>set sc=stmt.%Prepare("DELETE FROM T",0) // No privileges checked
    USER>set stmt2=##class(%SQL.Statement).%New()
    USER>set sc=stmt2.%Prepare("DELETE FROM T") // Privilege is checked
    
    There is a new class method in %SQL.Statement called %ExecDirectNoPriv.  This is the exact same behavior and interface as %ExecDirect() except that no privileges are checked.

    Note, the %ExecDirectNoPriv() method may not be called directly in application mode. If it is called directly in application mode, it will immediately return "" and the statement will not be executed.  An example of attempting to call this directly in application mode would be something like:

    iris terminal MyInstance "##class(%SQL.Statement).%ExecDirectNoPriv(,\"truncate table T\")"
    
    This change provides application code with an option to use its own security checking when using dynamic queries.  Suppose you do not want users to be able to execute adhoc queries against table T, but within your application, you do want users to be able to run method M where method M internally runs a SELECT query against table T.  You don't want to use embedded SQL within your method because your code needs the flexibility of Dynamic SQL.  You can now develop your code in method M that Prepares/Executes the query against table T without privilege checking.

    DP-413117: Disable block sampling for sparse disk data master map

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change disables block sampling for tables with a sparse disk data master map, such as the tables using %Storage.SQL.

    DP-413121: Tune table now correctly samples compound ID

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change corrects an error in which uncached queries timed out in the management portal when they are first run but ran quickly after that initial failure. The extent size of the table was also calculated incorrectly. The error occurred in tables that had default storage and a compound IDKey.

    DP-413511: Correct string concatenation in subqueries

    Category: SQL
    Platforms: All
    Version: 2022.1.1

    This change corrects an issue where string concatenation in a subquery was not working.

    DP-413782: Return results in the correct selectmode for UNION %PARALLEL queries

    Category: SQL
    Platforms: All
    Version: 2022.1.1

    This change fixes a problem in which UNION %PARALLEL queries would only return results in logical mode.

    DP-413800: Correct code generation for FIRST_VALUE(col)

    Category: SQL
    Platforms: All
    Version: 2022.1.1

    Before this change, the system generated incorrect code for the FIRST_VALUE function. Specifically, the code was inappropriate for string values.

    DP-413802: Update SQL window function SUM to throw -37 error when used over a stream field

    Category: SQL
    Platforms: All
    Version: 2022.1.1

    This fix updates the SQL window function SUM to behave consistently with ordinary aggregates in the way that it handles streams.

    DP-413867: Kill %ROWLIMIT's rowcount variable in close

    Category: SQL
    Platforms: All
    Version: 2022.1.1

    This change corrects a problem where a query that specified %ROWLIMIT was executed over xDBC and then executed a second time.  The first execution returns the correctly limited number of rows.  The second execution returned no rows.

    DP-413934: Fixed a recursion problem that caused compilation errors for queries with FULL JOIN

    Category: SQL
    Platforms: All
    Version: 2022.1.1

    This change fixes a compliation error for specific queries. To get the error, the query must be a FULL JOIN, st have more than one condition in the ON, and must have an OR in the WHERE clause.

    DP-413975: Throw -37 error for SQL window function that uses an unsupported aggregation over a stream field

    Category: SQL
    Platforms: All
    Version: 2022.1.1

    This change ensures that InterSystems IRIS throws an error when a query attempts to use an SQL window function with an unsupported aggregation over a stream field.

    DP-414119: Do not hide Multivalue MVASSOCIATION properties

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change corrects an issue in which collection fields with an MVASSOCIATION were erroneously marked as hidden and never output during a SELECT *. With this change, fields that have an MVASSOCIATION will not be marked as hidden and will still be output.

    DP-414230: Fix class compile error related to RTPC

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change corrects an error in runtime plan choice that could result in an error like the following when compiling a class that contains SQL:

    ERROR #5475: Error compiling routine: ... 
    #1020: Expected period : 'SQLrtpcv45=$g(18),SQLrtpcv46=$g(1)' : Offset:21 [%OnNew+8^%sqlcq.USER.cls1.1]
    

    DP-414559: Correct parsing of USING clause's JSON when not specified in a literal constant

    Category: SQL
    Platforms: All
    Version: 2022.1.1

    This change fixes an issue in parsing the LOAD DATA statement that included a USING clause. The USING clause allows for a JSON object expression either as a JSON object \{...} or a string literal '\{...}'. Before this fix, an error occurred if you used a JSON object. With this fix, both forms are handled correctly.

    DP-415465: Correct datatype mismatch error when using COALESCE

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change corrects an error in which a query that used COALESCE could result in the following error message:

    Datatype mismatch in arguments to 'COALESCE' function.  
    

    DP-415661: Handle TO_NUMBER() correctly

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This query corrects an issue affecting queries that use TO_NUMBER(). Before this correction, such queries returned incorrect results, unless the query also included the %NOINDEX option.

    DP-415788: Fix <SUBSCRIPT> error in sortedSample when building histogram

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change corrects a <SUBSCRIPT> error in sortedSample when building histogram.

    DP-416320: Fix query error 'MAXLEN parameter value must be a positive integer'

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change corrects an error in which some queries would fail to compile. The error message was

    ERROR #5554: MAXLEN parameter value must be a positive integer: ...
    

    DP-416453: DDL: Correction for creating external language functions

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change fixes an error that occurred when parsing CREATE FUNCTION with an EXTERNAL LANGUAGE of Python.

    DP-416476: Correct query compilation error "too many arguments/subscripts"

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change corrects an issue in which a query against a very large table might fail to compile with an error #1031: Too many arguments/subscripts.  This issue can happen if more than 1024 $list slots are specified for a single storage node, and the query selects fields that are 1024 or more storage slots apart.

    DP-416479: Add XMLELEMENT, XMLATTRIBUTES and XMLFOREST support to the query regeneration logic

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change adds support for XMLELEMENT, XMLATTRIBUTES, and XMLFOREST functions to the query reconstruction logic used by regular %PARALLEL processing (not Adaptive Parallel Processing).

    DP-416552: Avoid <DIVIDE> error in queries that use RTPC

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change avoids a <DIVIDE> error in queries that contain a NOT condition that referred to a property with selectivity equal to 1. It was possible to execute such queries only by using the %NORUNTIME hint. With this change, it is not necessary to use the %NORUNTIME hint to avoid the error.

    DP-416681: Add privilege checking to %SYSTEM.java.SQL and %SYSTEM.python.SQL class methods

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    With this change, the following class methods require the %Admin_ExternalLanguageServerEdit resource in order to execute:

    • %SYSTEM.java.SQL.addPath()
    • %SYSTEM.java.SQL.closeGateway()
    • %SYSTEM.python.SQL.addPath()
    • %SYSTEM.python.SQL.closeGateway()

    This means %Admin_ExternalLanguageServerEdit is also required to call the following stored procedures:

    • %SYSTEM_java.add_Path(...)
    • %SYSTEM_java.close_Gateway()
    • %SYSTEM_python.add_Path(...)
    • %SYSTEM_python.close_Gateway()

    DP-416691: Change HOUR function back to taking first piece of $zt output

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    The HOUR function takes some time value and outputs only the hour portion of that time value. For logical %Date/$HOROLOG time values, we convert the time portion of the logical value to HH:MM:SS format with $ZTIME. A previous update that added proper validation of the time input (to allow error throwing in the case of invalid input) accidentally changed the output from %Date/$HOROLOG input values to take the second piece of the $ZTIME output, when the first piece should be taken.

    DP-416723: Correct Tune Table behavior when extent size = 0

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change corrects an error in which when you ran tune table on a table that had no records (such as a table on a development system), that affected the storage definition. Now auto-tune should never update storage if the table is empty.

    DP-416803: Store RTPC information in opaque structure to prevent query compilation error

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change codifies how InterSystems IRIS stores RTPC information (such as outliers, truth values, range conditions, and list length conditions). Before this change, depending on the stored data, it was possible to have errors like the following when compiling queries.

    ERROR #5475: Error compiling routine: ...
    #1019: Expected colon : 'SQLrtpcrtexpr1=$S(OTHERSTUFF"="' : Offset:35 [%OnNew+6^%sqlcq.USER.cls1.1]
    

    DP-416924: Correct query with HAVING or ORDER BY with implicit join

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change corrects an error in which a query could return duplicate records if the query included a HAVING clause or included an ORDER BY clause that contained an implicit join.

    DP-416962: %PARALLEL: Move RTPC detection to later phase in processing

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    With this change, we detect RTPC conditions at a later phase in processing when all required information is available. Before this change, with queries that use %PARALLEL, it was possible to receive errors like the following:

    [SQLCODE: <-400>:<Fatal error occurred>]
    [%msg: <Cannot apply partition range compiling embedded cached query ...
    

    DP-417080: Correct type returned for TO_NUMBER() scalar function

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    A problem has been corrected where the type reported by a TO_NUMBER(...) function was not a numeric type.

    TO_NUMBER(_val_) will now return the following type:

     
    VARCHAR, VARBINARY, TIME --> NUMERIC
    BIT -> TINYINT
    DATE ->INTEGER
    TIMESTAMP, POSIXTIME -> BIGINT
    all others -> type of val
    

    DP-417267: RTPC: Add normalization on literal and host variable input values

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change corrects an issue in which SQL comparison of numeric strings with a leading zero had unexpected results.

    DP-417280: Correct %ValidateIndices utility for tables with row-level security

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This correction fixes the %ValidateIndices utility method for classes that use row-level security.  The general flaw in the utility is that an index was traversed and when an index value was found that belonged to a row the user did not have privileges to read, the utility thought the row did not exist.  If the utility was called with pFix=1, the utility would then delete the row.

    %ValidateIndices has been updated to allow the utility to validate all rows in the table regardless if the caller has the privilege to read all rows from the table or not.  If the class/table uses row-level security, the display of any issues found will obscure the error messages so that no data in the table is displayed to the caller of %ValidateIndices.

    DP-417432: Correct <SUBSCRIPT> error for parallel query on table with %SPACE collation

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change corrects a <SUBSCRIPT> error that occurred when running a parallel query on a table with %SPACE collation.

    DP-417498: Fix collation of scalar subqueries

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change fixes the collation of scalar subqueries during view recursion.

    Before this change, it was possible to have different query plans for equivalent queries that differ only in trivial ways.

    DP-417933: Fix max length, precision, and scale metadata for window functions

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change corrects the metadata that is generated for queries using window functions.

    DP-418002: Correct issue with NOT IN

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change corrects a regression in query performance related to queries using the NOT IN clause. In some cases, a <DIVIDE> error was also possible.

    DP-418072: Fix block sampling when DataLocation global includes one or more leading subscripts

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    For block sampling for tune table, before this fix, it was possible to get a <DIVIDE> error if the DataLocation global includes one or more leading subscripts. This error has been corrected.

    DP-418154: SQL DDL: Correct missing variable NEW in CreateMethod^%apiDDL

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change corrects an error that caused an <UNDEFINED> error when exporting a class created via DDL.

    DP-418158: Disable auto-parallel if query contains constant and mode is %Runtime/%FDBMS

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change disables the auto-parallel mode for a query that contains a constant and that is run in either the %Runtime or %FDBMS mode. Such queries, when run in parallel, did not return expected results.

    DP-418248: Improve performance of queries with outer-join conditions involving multiple view tables

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change improves the performance of queries with outer-join conditions involving multiple view tables.

    DP-418360: Make log file writeable in WriteToLogFile()

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change ensures that if you run tune table with a log file specified, the log file is writeable and is generated correctly.

    DP-418404: Improve error handling in TT

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change improve error handling in tune table and prevents a <DIVIDE> error.

    DP-418419: Correct <SUBSCRIPT> error when creating view definition using arrow syntax

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change corrects an issue seen when creating a view definition where the query uses -> syntax.  The symptom was a <SUBSCRIPT> error when parsing the query.

    DP-418470: RTPC/xDBC Cached query lock leak correction

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change corrects an error in CreateNewRunTimeQuery^%SYS.SQLRTUMAKER in which the code acquired an exclusive lock and returned without unlocking.

    DP-418476: DDL: Create temporary tables in process-private globals

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change corrects an issue in which queries like

    CREATE GLOBAL TEMPORARY TABLE table ... AS SELECT ..
    
    Incorrectly created regular tables instead of process-private globals.

    DP-418706: Update some CONVERT style code behaviors to match MS SQL Server

    NOTE: This item may require a change to code, configuration, or operation.

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change will correct the behavior of CONVERT in InterSystems IRIS to output dates in the format as prescribed by MS SQL server, in order to ensure our function is compatible with MS SQL as stated in the documentation.

    Similarly, for code 126, the CONVERT() function now generates output in the format yyyy-mm-ddThh:mi:ss.mmm.

    DP-418751: Handle system with 'GlobalKillEnabled=0' in resource cleanup

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    Before this change, the resource cleanup logic that we run periodically to remove globals/semaphores/events could get a <PROTECT> error if the system has 'GlobalKillEnabled=0' in the configuration. Now, the resource cleanup logic is able to successfully work in all cases.

    DP-418975: Fix errors running tune table while purging cached queries in the background

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change corrects an issue that occurred when running tune table while purging cached queries in the background. The issue caused errors like the following:

    ERROR #5521: SQLError: SQLCODE=-400 %msg=Fatal error occurred::
    There are 1 errors in routine %sqlcq.USER.1
    ...
    
    ERROR #5521: SQLError: SQLCODE=-400 %msg=Fatal error occurred::
    Error executing code for 
    Getting sample of rows from data blocks ...
    

    DP-418978: Add lock to prevent RTPC xDBC runtime cached queries from getting purged

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    This change corrects an issue that occurred when running some RTPC queries via ODBC while purging cached queries in the background. The issue resulted in errors like the following:

    LogMessage: SQLState: (HY000) NativeError: [478] Message: [Iris ODBC][State : HY000][Native Code 478] 
    [d:\iris223\bin\IRISDB.EXE] 
    Query recompiled: Result Set mismatch 
    And:
    ERROR #6022: Gateway failed: Execute.  SQLState: (HY000) NativeError: [400] Message: [Iris ODBC][State : HY000][Native Code 400]
    [SQLCODE: <-400>:<Fatal error occurred>]
    [Error: <<LIST>decomposeStatus+23^%occSystem>]
    [Location: <ServerLoop>]
    And:
    ERROR #6022: Gateway failed: Execute.  SQLState: (HY000) NativeError: [400] Message: [Iris ODBC][State : HY000][Native Code 400]
    [SQLCODE: <-400>:<Fatal error occurred>]
    [Location: <ServerLoop>]
    [%msg: <Process 19388 failed to compile Cached Query Class %sqlcq.USER.HUZh7INt1mZ.cls3 with these errors: 
     

    DP-419115: Correct error in NULLIF

    Category: SQL
    Platforms: All
    Version: 2022.1.2

    After this change, NULLIF will always explicitly compare the first argument with the second argument.

    SQL Search

    DP-418450: Correct <UNDEFINED> on xDBC query prepare for table with functional index

    Category: SQL Search
    Platforms: All
    Version: 2022.1.2

    This change corrects an issue that caused an <UNDEFINED> error during the Prepare step for a SELECT statement of the form:

    select * from khoj.Relationship where %ID %FIND search_index("relationiFind", 'SUC') 
    
    The table has a functional index.  The <UNDEFINED> error occurred when attempting to determine if the query can use fastSelect or not.  This has been corrected.

    System

    DP-414251: Fix Integrity Check selected global list when number of jobs is 1

    Category: System
    Platforms: All
    Version: 2022.1.1

    This change corrects a problem introduced in 2022.1.0 with integrity check when performed using $$CheckList^Integrity, the management portal, or the integrity check task.  If the check was specified to use a list of selected globals AND to be performed in just a single job, it would incorrectly include many other globals from the same database. This is corrected.

    DP-414797: Allow [Gateways] section to be removed from CPF file

    Category: System
    Platforms: All
    Version: 2022.1.1

    This change makes [Gateways] an optional section of the CPF file, simplifying the upgrade code.

    DP-416744: Fix incorrect resource name in irisstat, SYS.Stats.Resource, etc.

    Category: System
    Platforms: All
    Version: 2022.1.1

    Starting in 2021.2, irisstat, the SYS.Stat.Resource class, and similar functionality that display the system resource statistics by name had a missing entry in the table of names that caused the resource names to be shifted by one.   The numbers are correct and the names are correct through "ECP_S_TRANS", which includes all of the singular/static resources, like the "Globals" resource.   The name of the "OCSP" resource mistakenly had the next name concatenated to it, after which all of the following names were shifted, with resource number n mistakenly associated with the name of resource number n+1.

    DP-416836: Fix quoting of Windows commands issued via $ZF in ^SystemCheck

    Category: System
    Platforms: All
    Version: 2022.1.1

    An issue has been resolved in which all \^SystemCheck reports produced on Windows systems would not contain any of the following data:

    • Operating System Version
    • Extended System Information
    • Key File
    • First and second runs of TASKLIST -V
    • First and second irisstat snapshots
    • ipconfig /all
    • netstat -ano
    • netstat -s
    • Bin Directory
    • Dump files in Manager's Directory

    This issue was present in InterSystems IRIS 2021.1.1.

    DP-418519: Correct CPF [Gateway] .NET line when no resource specified

    Category: System
    Platforms: All
    Version: 2022.1.2

    This change corrects how the CPF file is updated when you create a .NET external language server with an empty resource.

    DP-418812: Mount databases for directio on Unix when wdwrite_asyncio_max is non-zero

    Category: System
    Platforms: UNIX®
    Version: 2022.1.2

    This change fixes a bug where a database which had been dismounted and remounted would not have direct I/O enabled on a system where the write daemon is using async I/O (the default configuration).

    Task Manager

    DP-417474: Allow task to be scheduled by user without permissions on the task namespace

    Category: Task Manager
    Platforms: All
    Version: 2022.1.2

    This change corrects a regression within the permission checks for scheduling tasks. With this change, in order to create a task, the user needs READ access on the task class, as well as access to the namespace where the task will run, and the permissions required by any other operations performed by the class. Note that a user needs %Admin_Secure to configure a task to run as a user other than themself.

    Tasks

    DP-417244: Add check for EndDate="" to ImportTasks method.

    Category: Tasks
    Platforms: All
    Version: 2022.1.2

    This change modifies ImportTasks() to prevent importing a Task that has EndDate="" (i.e., no EndDate).

    Web Gateway

    DP-414563: Correct IIS-only regression processing chunked requests

    Category: Web Gateway
    Platforms: All
    Version: 2022.1.2

    This dechange fixes an IIS-specific regression for chunked POST requests. The regression caused the Web Gateway to report Request Entity Too Large and refuse to pass the request through. Now, it processes the request and sends it to the InterSystems IRIS server, as it did before.

    Work Queue Manager

    DP-409294: Do not add messages.log entry for expected external interrupt error

    Category: Work Queue Manager
    Platforms: All
    Version: 2022.1.2

    With this change, the Work Queue Manager no longer adds entries to messages.log for expected interrupt messages.

    DP-414171: Avoid <MAXSTRING> when truncating output

    Category: Work Queue Manager
    Platforms: All
    Version: 2022.1.2

    Before this change, if a Work Queue Manager task produced very long output of around 3.5Mb and also returned a long %Status code return value, it was possible to get a <MAXSTRING> error when serializing this data.

    With this change, we explicitly take into account the length of the %Status code and leave sufficient space for this to avoid getting <MAXSTRING> errors.

    DP-414360: Removes duplicate "1" value in Work Queue Manager Category dropdowns

    Category: Work Queue Manager
    Platforms: All
    Version: 2022.1.1

    Before this change, the Work Queue Manager Category could include duplicate "1" values.

    DP-414996: Truncate output if there are 16-bit wide chars

    Category: Work Queue Manager
    Platforms: All
    Version: 2022.1.2

    This change truncate Work Queue Manager output if there are 16-bit wide chars. This change avoids <MAXSTRING> error on big output.

    DP-415039: Do not report DISCONNECT errors in WQM as alerts

    Category: Work Queue Manager
    Platforms: All
    Version: 2022.1.2

    Before this fix, if the work queue manager got an async DISCONNECT error during some parts of processing, it would log these as errors to messages.log file when they are to be ignored. Now we detect and ignore these errors.

    DP-415819: Fix <UNDEFINED> error in Work Queue Manager code

    Category: Work Queue Manager
    Platforms: All
    Version: 2022.1.2

    This change fixes an undefined error in WaitForComplete^%SYS.WorkQueueMgr. Before this fix, if a work queue was deleted, checking ##class(%SYSTEM.Event).Count() threw an <UNDEFINED> error.

    xDBC

    DP-418608: Correct hang when running RTPC xDBC Cached Queries

    Category: xDBC
    Platforms: All
    Version: 2022.1.2

    This change corrects an issue has been corrected where a SELECT query executed over xDBC that uses RTPC might hang the client/server connection if one or more of the tables/views used by the query is from an ECP client and the class was recompiled on the remote server.

    xDBC Server

    DP-409007: Add Feature Tracker information to xDBC clients

    Category: xDBC Server
    Platforms: All
    Version: 2022.1.1

    This change expands the information provided by xDBC clients to the Feature Tracker.

    Zen Reports

    DP-413884: Correct NullPointerException in Zen Report RenderServer

    Category: Zen Reports
    Platforms: All
    Version: 2022.1.1

    The Zen Report RenderServer code failed to initialize a field in a class, which resulted in a NullPointerException when the render server attempted to read the request from the server. Then, because the communication with the render server would fail, the server rendered the report directly, which was very slow.

    This change removes the NullPointerException bug.

    For Additional Help

    If you need assistance with evaluating how upgrading to this maintenance release will affect your applications, systems, or related plans, please contact the InterSystems Worldwide Support Center:

    • Phone:  +1.617.621.0700
    • Fax:  +1.617.734.9391
    • Email:  support@intersystems.com

    Current release notes (and complete product documentation) can be found online at https://docs.intersystems.com.

    FeedbackOpens in a new tab