============================================================================== Simba SDK Release Notes ============================================================================== The release notes provide details of enhancements, features, known issues, resolved issues and workflow changes in Simba SDK 10.3.7, as well as the version history. 10.3.7 ======================================================================= Released October 2025 Enhancements & New Features * Windows ARM64 support The SDK now supports Windows ARM64 architecture. This includes: - Native ARM64 builds for Windows - ARM64 support added to sample drivers - Updated target framework to 4.8.1 for drivers using CLIDSI on Windows ARM and Windows x86 - .NET build and testing support for ARM platforms - NOTE: OLEDB Windows ARM support is experimental * [Installer] Documentation is now also provided as a separate zip file from the SDK installers. Customers that use the installers don't need to install the SDK to view the documentation. * [Documentation] Improved C++ API documentation and improved source code comments. Resolved warnings during Doxygen document generation, improving documentation clarity and accuracy. * [DSI] DSIMetadataFilter for TDW_BUFFER_ATTACHED buffer type now supports conversion. The filter now properly converts encoding when the source data has a different encoding than ICU unicode string encoding. * [SQLEngine] improved SQLEngine performance. Eliminated copying of vector that wasn't necessary. Resolved Issues The following issues have been resolved in Simba SDK 10.3.7. * [Support] Fixed SharedPtr::StaticCast() incorrectly attempting to dereference and set m_sharedObjPtr on the target type rather than on the SharedPtr instance. This could cause compilation failures or runtime crashes when the target type had an m_sharedObjPtr member. * [Support] Added boundary checking for m_wordCount in LargeInteger to handle cases where garbage data exists in m_wordArray beyond the valid word count. This was only a problem if the DSII was manually modifying the value; under normal usage garbage data shouldn't ever be there. * [JDBCClient][Client/Server] Fixed issue where the JDBC client sent a CANCELEXEC command after every execution, even when no cancellation was requested. This eliminates unnecessary server-side cancel operations. * [Support] Fixed a bug in MurmurHashUtility where the same data could produce an inconsistent hash if passed in buffers with different memory alignment. This isn't known to have caused any other issues in the SQL Engine as buffers passed for each data type were consistently aligned. * [JNIDSI] Fixed a bug where the driver could crash when a Java exception was thrown & 'caught' in our C++ code. This bug was introduced in 10.3.2/10.2.10. Platform and Compiler Support Updates ======================================== 10.3.7 ------------------------------------------------------------------ * Added platform support The SDK now supports the following platforms: - Windows ARM64 (native support) For more information about the current supported operating systems, see the Simba SDK Developer Guide. * Updated compiler support The SDK now uses .NET Framework 4.8.1 for the CLIDSI and the sample drivers. * Deprecated support for earlier operating systems The support for Windows 10 has been deprecated. For more information about the current supported operating systems, see the Simba SDK Developer Guide. 10.3.6 ================================================================== Released September 2025 Enhancements & New Features * Updated Expat support The SDK now uses Expat version 2.7.3. Previously, the SDK used Expat version 2.7.1. * Updated OpenSSL support The SDK now uses OpenSSL version 3.0.18. Previously, the SDK used OpenSSL version 3.0.17. * Updated platform support The SDK now supports Debian 13 for x64 and ARM64 architectures. * [Sample Driver] Improved DataSource implementations Enhanced DataSource implementations in sample drivers, including better hostname configuration support for JavaUltralight sample driver. Resolved Issues The following issues have been resolved in Simba SDK 10.3.6. * [Sample Driver] Fixed schema check in QSDataEngine::OpenTable for Quickstart driver. The driver now correctly handles schema checks, resolving issues where tables could not be displayed in Excel and Power BI applications. * [Sample Driver] Fixed Quickstart driver catalog function failures when schema is set to NULL on POSIX systems. Catalog functions now properly handle NULL schema parameters across different driver managers. * [Sample Driver] Fixed issue where Quickstart driver was not returning tables when schema was set to empty string. Empty string schema parameters are now handled consistently with NULL schema behavior. * [ODBC] Enhanced transaction handling support. Added proper cleanup of statement transactions after rollback notifications to ensure consistent transaction state management. * [JDBCClient] Fixed incorrect mapping of filter values from getIndexInfo to SQLStatistics. The UNIQUE and APPROXIMATE parameters are now correctly mapped to prevent "Uniqueness option type out of range" errors. Platform and Compiler Support Updates ======================================== 10.3.6 ------------------------------------------------------------------ * Added platform support The SDK now supports Debian 13 (x64 and ARM64). For more information about the current supported operating systems, see the Simba SDK Developer Guide. 10.3.5.1001 ================================================================== Released Aug 2025 Enhancements & New Features * Updated OpenSSL support The SDK now uses OpenSSL version 3.0.17. Previously, the SDK used OpenSSL version 3.0.16. * [Support][Server][DSI][ODBCClient] Various logging improvements. * [DSI][ODBC][ODBCClient] Added a new ODBCSemantics::CanBeChangedWhileCursorOpened method which allows DSIIs to allow/reject setting specified statement atttibutes while a cursor is open. Used it in the ODBC client to reject setting DSI_STMT_RETRIEVE_DATA * [Server] added a setting `SETTING_DATALENGTHLIMIT` to tune the threshold in bytes above which a cell of variable-length data will be considered 'long' data for the Client/Server protocol and and thus fetched separately. Can be used to attempt to tune performance to network conditions. The default is still 1024 so behavior shouldn't change unless adjusted. Resolved Issues * [JDBCClient] The 10.3.5.1000 build of the JDBClient contains a bug that caused connection hangs on long data. It could also cause hangs with earlier versions of the ODBCClient. This has been resolved. The protocol has also been updated to allow for the server to work with earlier clients again. * [Server] Uncommented a line which was accidentally left commented which makes the server send all 'late' output parameter data to the client before moving onto the next resultset in an execution, to make the sequence of events on the client side more closely resemble that which would occur if the DSII had been built directly as an ODBC driver and used instead. * [Support] Fixed a bug where the `TDWGuid(const simba_byte*, simba_size_t, bool)` constructor didn't initialize its `IsValid` member. * [OLEDB] Added missing locking to `ErrorLookupCache::GetDiagnosticDescription`. 10.3.5.1000 ================================================================== Released July 2025 Enhancements & New Features * [SQLEngine] TIME Casting Precision The SDK now supports fractional seconds precision when casting TIME types in SQLEngine. * [SQLEngine] Enhanced Error Reporting for CAST Issues Error messages are now more descriptive when queries include an invalid length arguments, like CHAR(-1). * [Support] Improved logging or tracing support The SDK now extends support for structured logging and distributed tracing. Resolved Issues The following issues have been resolved in Simba SDK 10.3.5.1000. * [ODBC] Some sample drivers were unable to load their configuration dialogs due to the absence of the configDSN symbol export. This issue is resolved now by introducing an additional odbc-configDSN.def file for drivers that do not include a separate configuration dialog binary, ensuring proper dialog loading behavior. * [ODBC] Fixed an issue where changes made in the connection prompt dialogs were not reflected in the output string returned by SQLDriverConnect. * [Sample Driver] The sqlitedsii sample driver is now updated to utilize SQLite version 3.49.2. * [Support][ODBC] A few format specifiers used in logging and trace statements were improperly constructed, potentially resulting in undefined runtime behavior. This issue has been resolved with corrected formatting. * [Server] In some cases, the server mishandled NULL values in long data columns, potentially causing crashes or query failures. This issue has been resolved now. * [JDBC] Connection properties with negative values were previously ignored, defaulting to preset values. This behavior has been now corrected. Known Issues * When using SDK versions 10.1.21 or later, the JDBC client behaves differently when Time and Timestamp values are converted to string. For example, when Resultset.getString() is called on a SQL_TIME column, inversions earlier than 10.1.21, the resulting string does not contain fractional seconds, even if the Time or Timestamp values had them. While in versions 10.1.21 or later, when Time is converted to a string, the result contains 3 digits of fractional seconds, and when the Timestamp is converted to a string, the result contains 9 digits of fractional seconds precision. * For Simba SDK 10.2, when using unixODBC 2.3.6 through 2.3.9, there is an issue that can result in an incorrect string length being returned when unixODBC converts from ANSI to WCHAR internally. This should only be a problem when the calling application is using ANSI API calls. For more information, seehttps://github.com/lurcher/unixODBC/issues/43. Platform and Compiler Support Updates ======================================== Simba updates compiler and platform support for the SDK to align with current supported compilers, platforms, and industry standards. Please plan accordingly. 10.3.5.1000 ------------------------------------------------------------------ * Updated platform support The SDK now supports Windows server 2025. For more information about the current supported operating systems, see the Simba SDK Developer Guide. * Updated compiler support The SDK now supports .NET 8. * Deprecated support for earlier compiler environments The support for the Visual Studio 2019 compiler environment has been deprecated. For more information about the current supported compiler environments, see the Simba SDK Developer Guide. 10.3.4.1003 ------------------------------------------------------------------ * Removed support for earlier compiler environments Beginning with this release, the support for the following compiler environments have been removed: - gcc48 - ARM 32 gcc8.3 * Deprecated support for earlier compiler environments The support for the following compiler environments has been deprecated: - gcc55 - 32-bit JNIDSI built with Java 8 * Deprecated support for earlier operating systems The support for the following operating systems has been deprecated: - CentOS 7 - Red Hat 7 - Windows Server 2012 R2 For more information about the current supported operating systems, see the Simba SDK Developer Guide. * Removed support for earlier operating systems Beginning with this release, the support for the following operating systems have been removed: - Debian 10 - SLES 12 - Ubuntu 18 For more information about the current supported operating systems, see the Simba SDK Developer Guide. 10.3.2 ---------------------------------------------------------------------- * Deprecated support for earlier operating systems The support for the following operating systems has been deprecated: - SLES 12 - Ubuntu 18 - Windows Server 2012r2 For more information about the current supported operating systems, see the Simba SDK Developer Guide. 10.3.0 ----------------------------------------------------------------------- * Removed support for certain compiler environments Beginning with this release, support for the following compiler environments have been removed: - Xcode 10.2.1 and 11.3.1 - Visual Studio 2015 and 2017 For more information about the current supported operating systems, see the Simba SDK Developer Guide. * Removed support for certain macOS versions Beginning with this release, support for macOS versions 10.14 and 10.15 has been removed. For more information about the current supported macOS versions, see the Simba SDK Developer Guide. 10.2.2 ----------------------------------------------------------------------- * [Sample Driver] Updated driver support Beginning with this release, the Simba SDK has dropped support for the codebase sample driver. It has been replaced with the new SQLite sample driver. * [JDBCClient] Updated client behavior The conversion behavior of String to Boolean has been updated. Now, only the strings (case-insensitive) f, n, false, and those that parse to numbers less than 1 are converted to false. t, y, true, and those that parse to numbers greater than or equal to 1 are converted to true; any others will cause an error. Previously, the strings false, 0, 0.0, and f were converted to false, and all others to true. * Updated parameter The type of the first parameter of simba_wstring::simba_wstring(const simba_byte*, simba_int32, EncodingType) has been changed to const void*. * [OLEDB] Updated marshalling support Implementation of INoMarshal has been removed from our OLEDB objects, and IMarshal via CoCreateFreeThreadedMarshaler is now implemented. This enables in-process marshalling across apartments. * Updated Windows support Windows 10 SDK is now required when building VS2019 and later solutions. * [JavaDSI] Updated DSI_ENV_JDBC_Version The default value of DSI_ENV_JDBC_Version, as set in DSIEnvironment, is now JDBC 4.2. Previously, it was JDBC 4. Version History ============================================================== 10.3.4.1003 ------------------------------------------------------------------ Released May 2025 Resolved Issues The following issue has been resolved in Simba SDK 10.3.4.1003. * [ODBC] Resolved the issue that could occur in some cases where there is a single unused parameter set in QueryExecutor. 10.3.4.1002 ------------------------------------------------------------------ Released April 2025 Enhancements & New Features * Updated Expat support The SDK now uses Expat version 2.7.1. Previously, the SDK used Expat version 2.6.4. Resolved Issues The following issue has been resolved in Simba SDK 10.3.4.1002. * SDK was rebuilt with vs2022 version 17.12 (LTSC). 17.13 could cause linking problems. * [Support] fixed a warning ("Simba::Support::ThreadFunctionPointer': Deprecated: Deprecated in SEN 10.3.4, use ThreadFunctionPointerNoThrow instead")that could occur when building with C++17 or later. 10.3.4.1000 ------------------------------------------------------------------ Released April 2025 Enhancements & New Features * Updated OpenSSL support The SDK now uses OpenSSL version 3.0.16. Previously, the SDK used OpenSSL version 3.0.15. * Updated ICU support The SDK now includes an updated version of ICU for non-Windows systems that use the system locale rather than just automatically defaulting to UTF-8. * Updated JSQLEngine support The SDK now improved support for arithmetic operations with large decimals. JSQLEngine now has the same support as SQLEngine. * Updated ODBC DSI SQLEngine support The SDK has now changed many assertions to throw an exception in release mode instead of aborting the process. Resolved Issues The following issues have been resolved in Simba SDK 10.3.4.1000. * [SQLEngine] Add logic to reject calls to the `EXTRACT` scalar function that specify a field not present in the type of the passed-in source value. There was some existing logic to handle parts of this, but it would error out only at runtime when the scalar function was evaluated, and we would always convert source time & time values to a timestamp first, which would negate the usefulness of that logic. Note: The existing behaviour, where it first attempts to convert any string to a timestamp remains, so it will NOT fail if the string contains a date and time, and the string=timestamp conversion accepted that (as our default converters do), even if the specified field wasn't present in the original string value. * [SQLEngine] HAVING without a GROUP BY clause now groups on no columns (i.e., treatingthe entire result as a single group) instead of acting like a WHERE clause. 10.3.3.1006 ------------------------------------------------------------------ Released Feb 2025 Resolved Issues The following issues have been resolved in Simba SDK 10.3.3.1006. * [ODBC] Fixed a bug in logging the iODBC version (when it is detected as the driver manager) was logging the pointer as a string, rather than the version string it pointed to. * [Support][ODBCClient] On Windows, fixed possible leaks of sockets, including listening sockets. 10.3.3.1005 ------------------------------------------------------------------ Released Dec 2024 Enhancements & New Features: * Updated third-party libraries The SDK now uses the following third-party libraries: - Expat 2.6.4 (previously 2.6.3) - Fast_float 6.1.6 (previously 6.1.5) * Updated platform support The SDK now supports macOS 14 xcode15.2. * Updated JSQL Engine DataEngine documentation Added JSQL Engine DataEngine properties to the C++ engine for documentation purposes. This does not affect any functionality or add new features. * Updated SQL 92 Generator support The SDK now supports PSSql92Generator for generating queries with INTERSECT. * Performance improvements The performance has been improved to SQLBindCol + SQLFetch[MW1][IC2] when certain conditions are met. The SDK's bulk fetch' logic will be used for SQLFetch of 1 row if both the highest column was bound, and DSI_RETRIEVE_DATA_ORDER_RESTRICTION was set to DSI_RETRIEVE_DATA_IN_NONDECREASING_ORDER. Improved performance of fetching bound columns, which involve char->char conversions, which are handled by Simba's optimized encoding converter reduces branching or indirection. * [JNIDSI] Updated parameter metadata The SDK now uses parameter metadata coming from an application when creating execution contexts. * [JavaDSI] Updated addHiddenKey support The SDK has been added `addHiddenKey` method to com.simba.dsi.core.utilities.ConnSettingRequestMap, which allows adding to the set of hidden keys instead of completely overriding it. * Updated support for compiler environments The SDK now supports the following compiler environments: - gcc8.5 - 74-bit JNIDSI built with Java 11 - ARM 32 gcc8.5 * Updated support for multiple operating systems The SDK now supports the following operating systems: - Red Hat 8 - Xcode 15.2 - macOS 14 For a list of supported versions, see the Installation and Configuration Guide. * OverrideDM configuration support The SDK now supports the "OverrideDM" configuration option to bypass driver manager detection. OverrideDM - [unix only] Bypasses driver manager detection and sets the driver behaviour to assume the specified driver manager is being used. This influences the default values for DriverManagerEncoding and ODBCInstLib unless they are otherwise configured. Acceptable values & descriptions: - unixODBC - "unixODBC Driver Manager, version 2.2.14 or newer" - iODBC - "iODBC Driver Manager" - DDDM - "Progress Data Direct Driver Manager" - Default - The driver will attempt to detect the driver manager. * [Support][Executor] Updated new interfaces and APIs The SDK now supports new interfaces and APIs for enhanced SQL conversion capabilities. They are: - Simba::Support::DataSource, which represents a table column or expression in the SQLEngine from which data can be retrieved. - Simba::SQLEngine::ETDataRequest has been moved to Simba::Support and renamed to DataRequest (in Include/Support/TypeDataWrapper/DataRequest.h, Include/SQLEngine/Executor/ETree/ETDataRequest.h remains, and adds a typedef for the old name). Note: Any forward declarations of ETDataRequest need to be changed to Simba::Support::DataRequest. In SqlDataFactory additions: - new OverridesStandardType() method to query whether the DSII overrides The SqlDatatype returned for the given metadata, relative to the base class. This has a default implementation that simply checks if CreateNewCustomSqlData() returns NULL or not, but this is not optimal if it _does_, and can produce false positives, so should be overridden if CreateNewCustomSqlData() is new nested WrappedSqlDataSetter type that can be used to optimize SQL conversions where the source and target metadata are not considered equivalent (such as having a different SQL type, or having a different precision or scale), but for which 'conversion' involves an unconditional 'memcpy'. In other words, the format of the data in the source SQLData and target SQLData objects are the same, and the conversion _cannot_ fail, or even cause warnings. This is the case, for example, for the default SQLData implementations for SQL_DOUBLE and SQL_FLOAT, or the default SQLData implementations for all the character types that share an encoding, and all of the binary types. - New CreateWrapperForStandardEquivalentTypes() method, which can optionally return an instance of the above (Depending on the actual 'compatibility' of the wrapper/wrapped types & and gated by OverridesStandardType()). - New SqlConverterFactory::CreateConvertingDataSource() method, which gets used (where possible) instead of the existing CreateNewSqlToSqlConverter() method. - If SqlDataFactory::CreateWrapperForStandardEquivalentTypes() succeeds, it creates a DataSource that does the 'conversion' using a WrappedSqlDataSetter (i.e., avoids doing a conversion, which should be faster than having to invoke an ISqlToSqlConverter). - Otherwise, returns a DataSource that uses logic equivalent to the existing logic to do the conversion (Including using converters returned from SqlConverterFactory::CreateNewSqlToSqlConverter()). Resolved Issues The following issues have been resolved in Simba SDK 10.3.3.1005. * [ODBCClient] Fixed a race condition that could cause an error to be returned from the server not to be exposed to the client application, instead of 'overriding' it with a 'connection dead' error. This was more likely to happen if the server immediately closes the socket after sending the error response, such as when the connection in question was rejected due to the server's maximum concurrent connection limit being exceeded. * [JSQLEngine] The Java SQLEngine now respects the com.simba.dsi.dataengine.utilities. DataEnginePropertyKey.DSIEXT_DATAENGINE_POWER_FN_FRACTIONAL_EXPONENT` data engine property, which was previously only supported by the C++ SQLEngine. * [JSQLEngine] Made the metadata of the `CURRENT_TIME`/`CURRENT_TIMESTAMP` scalar functions which take a 'precision' argument reflect that precision if it was a literal value (otherwise it might vary per row, so it keeps the previous behaviour of reporting the maximum supported precision). Also made the prepare fails if those parameters are literals AND known to be invalid (non-integral, negative, or larger than the maximum supported). For `CURRENT_TIMESTAMP`, the value is now determined using `java.time.LocalDateTime#now` (instead of the value of a default constructed `Calendar`), so the value returned can have up to nanoseconds precision (depending on the JVM's implementation) instead of the previous limit of millisecond precision. * [Server] Fixed a bug where if a server received a request for long data (a single cell in a resultset which has over 1024 bytes of data) while returning data for a catalog function (i.e. SQLTables), it would crash with the message simba_abort() called from Simba::Server::Query::GetAsSqlQuery() C:\jk\p4\SimbaEngine\Maintenance\10.3\Product\Source\ClientServer\Server\Query.h:123 for reason, should never be hit. This could also happen in cases of a client that sent a maliciously crafted request, which has also been fixed (now it will simply drop the connection instead of crashing). * [ODBCClient] Fixed a bug where a spurious or misleading error like General error: RazorResults: SendNeedRequest(): Fetching already done! could be reported when fetching long data returned in a catalog function resultset. * [JDBC][04900657] Fixed an issue where calling getObject, getBlob, getClob, or getStreamBufferSize on the result of conn.getMetaData().getClientInfoProperties() will throw a NullPointerException. * [Parser] Fixed a bug in the parser where the typename in the DataType: NonQuotedDataTypeLiteralList DataTypeAttributeList_Opt rule is reported as quoted, even though it was not. * [Parser] Fixed a bug where PSSql92Generator: GenerateConvertScalarFn and PSTransactSqlGenerator: GenerateConverScalarFn always puts quotes around the data type in the generated SQL, even if the original parse tree did not indicate that it was quoted. Added virtual GetDataTypeForConvert and GetDataTypeForCast methods in the former class to more easily allow subclasses to modify that specific behaviour, and made the latter class use the first (among some other cleanup). * [Support] A possible memory leak has been fixed in an internal component used in various places, including `Simba::Support::FormatString`. 10.3.2 ----------------------------------------------------------------------- Released August 2024 Enhancements & New Features: * Updated ICU library The SDk now uses ICU version 74.2. Previously, the SDK used ICU version 71.1. * Updated security The SDK is now built with spectre mitigations enabled (/QSpectre). * [SEN-8760] JNIDSI support macOS 13 ARM 64 now supports JNIDSI. * Updated compiler environment support The SDK now supports gcc 8.5. * Updated operating system support The SDK now supports the following operating system versions: - RHEL 8 (x86/x8664/aarch64) - Ubuntu 24.04 - macOS 13 For a list of supported versions, see the Installation and Configuration Guide. Resolved Issues The following issues have been resolved in Simba SDK 10.3.2. * [Support][SEN-5900] simba_wstring’s internal error checking has been improved. * [Support][SEN-8767] When using IWstreamConverter::ReInitialize() and the conversion state is at a trailing partial codepoint, the implementations do not clear the converter state. * [Support] When using IWStreamConverter::Convert(flush=true) and the sourcedata ends with a trailing partial codepoint, the implementations return an incorrect substitution character. * [CLIDSI][SEN-8882] .Net ODBC drivers that do not use DotNetDSIExt no longer needs to install DotNetDSIExt.dll with the driver. * [ODBC][SEN-8744] When retrieving the SQL_DTC_TRANSACTION_COSTSQLGetInfo property or retrieving or setting the SQL_ATTR_ENLIST_IN_DTC/SQL_ATTR_ENLIST_IN_XA connection properties, the ODBC driver now returns the “SQL State HYC00 (OptionalFeature Not Supported)” error message instead of “HY096 (Invalid info type)” or “HY092 (Invalid attribute type)". 10.3.1 ----------------------------------------------------------------------- Released March 2024 Enhancements & New Features: * Updated third-party libraries The SDK now uses the following third-party libraries: - Expat 2.6.2 - OpenSSL 3.0.13 * Updated security enhancements On Windows, the SDK is now built with spectre mitigations enabled (/QSpectre). * Updated ILogger static methods New ILogger static methods have been added to get a global logger (ILogger::GetGlobalLogger()), and to register or unregister an ILogger object that the global logger forwards to (ILogger::RegisterGlobalLoggerSink() and ILogger::UnregisterGlobalLoggerSink()). DSIDriverSingleton::SetInstance() now registers the driver log with this global logger, so ILogger::GetGlobalLogger() can be used instead of DSIDriverSingleton::GetInstance()->GetDriverLog(). NumberConverter's template methods have been refactored to accept any integral type, even ones outside of the simba typedefs. * Updated SQLGetInfoW support SQLGetInfoW now logs at a warning level when an unknown property is requested, down from the error level. * [Support] New SimbaSettingReader property The SimbaSettingReader property DisableOdbcAsyncExecution has been added to disable support for ODBC asynchronous execution in the SDK. This increases performance because less locking is required per (async-capable) ODBC API call. When enabled, attempting to enable asynchronous execution on a connection or statement handle will fail with a SQLState HYC00 error (i.e. optional feature not implemented). This option is not enabled by default. By default, async execution is supported. Resolved Issues The following issues have been resolved in Simba SDK 10.3.1. * [ODBC] Some SQLExecute state transitions have been fixed from statement state S4. * [ODBC] The handler function returned from Simba::DSI::IDriver::GetEventHandler was not called for ODBC functions which are capable of asynchronous execution, but were running synchronously. Async was not enabled on the associated connection or statement handle. * [Support] In some cases, SQL interval to C interval converters fails to enforce the target leading interval field precision. * [JSQLEngine] In some cases, when using multiple statements with temporary files concurrently, an error occurs. * [SQLEngine] The parser exits the process if it runs out of dynamic memory instead of returning an error. * [ODBC] When logging, there were missing names for SQLGetInfo and other attribute IDs. This issue has been resolved. The missing names have been added. * [ODBCClient] In some cases, on Windows, the ODBCClient incorrectly accepts intermediate certificates when configured to use the Windows truststore. * [ODBC] There was a missing error message in the ODBC Error message file. This issue has been resolved. The message for the MultipleTransNotSupported key has been added. * [CLIDSI] In some cases, marshalling strings containing non-ascii characters corrupts the string. * [DotNetDSI] DSIMetadataColumnFactory.CreateTypeInfoMetadata sets the nullability of the DATA_TYPE column to NULLABLE instead of NO_NULLS. 10.3.0 ----------------------------------------------------------------------- Released January 2024 Enhancements & New Features: * Updated third-party libraries The SDK now uses OpenSSL version 3.0.12 * Updated SQLEngine support [SQLEngine] The SQLEngine-based drivers now ship with the SQL-99 WITH clause, except for recursive. * Updated JSQLEngine support [JSQLEngine] The JSQLEngine-based drivers now ship with the SQL-99 WITH clause, except for recursive. * [ODBC][Support] Updated ODBC support The following changes have been made to the ODBC driver: - ISqlToSqlConverter - Added SIMBA_SAFE_CLASS (subclasses are now non-copyable by default). - TypeMetadata - Removed GetOctetLength, SetOctetLength, and m_octetLength. - Moved into SqlCTypeMetadata and SqlTypeMetadata. - Added GetLength, SetLength, and m_length (simba_unsigned_native). - Added GetIntervalPrecision, SetIntervalPrecision, and m_intervalPrecision (simba_int32). - SqlCTypeMetadata - Removed 'in_shouldReturnPrecision' parameter from constructor. - Removed GetLengthOrIntervalPrecision and SetLengthOrIntervalPrecision in favor of separate IntervalPrecision and Length fields in TypeMetadata. - Removed IsLengthOrIntervalPrecisionDefault(), IsPrecisionDefault(), SetLengthOrIntervalPrecisionOverridden(), and SetPrecisionOverridden(). They were only being used in ParamValueConverter::ConvertInputParamValue to set the C metadata based on the SQL metadata when converting to a SQL type, which goes against the ODBC specifications. - Added GetOctetLength, SetOctetLength, and m_octetLength (originally in TypeMetadata and with different signature for GetOctetLength). - SqlData - Changed the constructor to take const SqlTypeMetadata& instead of SqlTypeMetadata*, and changed the m_metadata member. - Changed the constructor to take const for SqlFixedLengthTypeBase, SqlDataTrivalGetBufferBase, SqlFixedLengthType, SqlVarLengthAttachedType, and SqlVarLengthOwnedType. - Removed the non-const overload of GetMetadata() which returned a pointer to a non-const SqlTypeMetadata&. - SqlDataFactory - Removed the deprecated SqlData* CreateNewSqlData(SqlTypeMetadata*). - Changed AutoPtr CreateNewSqlData(SqlTypeMetadata&) to AutoPtr CreateNewSqlData(const SqlTypeMetadata&). - Changed SqlData* CreateNewCustomSqlData(SqlTypeMetadata*) to AutoPtr CreateNewCustomSqlData(const SqlTypeMetadata&). - SqlTypeMetadata - Changed the constructor to take the parent factory by reference instead of by pointer - Removed GetCreateParams and SetCreateParams. - Removed GetLengthOrIntervalPrecision and SetLengthOrIntervalPrecision in favor of separate IntervalPrecision and Length fields in TypeMetadata. - Added GetOctetLength, SetOctetLength, and m_octetLength originally in TypeMetadata (and with different signature for GetOctetLength). - Replaced simba_uint32 GetColumnSize(simba_uint32) and simba_uint64 GetColumnSize(simba_uint64) with simba_uint64 GetColumnSize() and SetColumnSize(simba_uint64) with SetColumnSize(simba_unsigned_native), and changed m_columnSize to simba_uint64. - Replaced simba_uint32 GetDisplaySize(simba_uint32) with simba_uint64 GetDisplaySize() and SetDisplaySize(simba_uint32) with SetDisplaySize (simba_uint64), and changed m_displaySize to simba_uint64. - Removed GetPrecisionForDataConversion(). - Added IsLengthKnown, SetLengthKnown, and m_isLengthKnown to replace ODBCSemantics::IsLengthKnown. - Added SetBinaryTypeOctetLengthBehaviour, GetBinaryTypeOctetLengthBehaviour, and m_binaryTypeOctetLengthBehaviour. This controls whether (for binary types) GetOctetLength returns a value based on SetOctetLength or SetLength. - Added SetCharTypeOctetLengthBehaviour, GetCharTypeOctetLengthBehaviour, and m_charTypeOctetLengthBehaviour. This controls whether (for char types) GetOctetLength returns a value based on SetOctetLength or SetLength, and for the latter case, whether it multiplies the length by the code point or code unit size. Defaults to returning a value based on SetLength and multiplying by the code unit size. * [ODBC][DSI] Updated ODBC support - IColumn - Removed GetColumnSize Use SqlTypeMetadata::GetLength instead. - Changed SqlTypeMetadata* GetMetadata() to const SqlTypeMetadata & GetMetadata(). - Removed CreateHasher Use DSIExtHasherFactory::CreateHasher instead. - DSIColumn or DSIResultSetColumn - Removed the constructor which takes in raw pointer. - DSICustomMetadataColumn or DSIOutputMetadataColumn - Changed constructor to take SqlTypeMetadata or DSIColumnMetadata by AutoPtr instead of raw pointer. - DSIColumnMetadata - Removed m_charOrBinarySize. - IParameterMetadata - Changed simba_uint32 GetLength() to simba_uint64 GetLength(). - Added GetOctetLength, GetDataSourceType, and GetCustomField . - Removed all the setter methods but left them in the IParameterSource subclasses. - IParameterSource - Changed SetLength(simba_uint32) to SetLength(simba_uint64). - Added SetMetadata(AutoPtr) to allow the type metadata to be completely replaced. - Changed SqlData* GetSqlDataForOutput() to SqlData and GetSqlDataForOutput(). - Changed SqlData* GetInputSqlData() to SqlData& GetInputSqlData(). - Fixed SetCustomField to _not_ be a const method. - ODBCSemantics - Removed the already deprecated default constructor. - LongDataCacheTable - Removed the already deprecated constructor which didn't take in an IConnection. * [SQLEngine] Updated SQLEngine support The following changes have been made to the SQLEngine driver: - DSIExtAggregateFunction/DSIExtScalarFunction - Changed const std::vector& GetInputMetadata() to const std::vector& GetInputMetadata(). - Changed SqlTypeMetadata* GetOutputMetadata() to const SqlTypeMetadata and GetOutputMetadata(). - Changed bool UpdateMetadata(const std::vector&, bool) to bool UpdateMetadata(const std::vector&, bool). - DSIExtBookmarkSource - Changed GetBookmarkComparator and Constructor to return or take a reference instead of a pointer. - ICellComparatorFactory - Changed ICellComparator* MakeNewCellComparator(SqlTypeMetadata*) to ICellComparator* MakeNewCellComparator(const SqlTypeMetadata&). - ICoercionHandler - Removed column size parameters from any methods that took them, since they are now part of the SqlTypeMetadata. - IFunctorFactory - Changed SqlTypeMetadata* parameters to const SqlTypeMetadata& in all of the methods. - DSIExtParameterValue or DSIExtInputParameterValue - Changed SqlTypeMetadata* to const SqlTypeMetadata& in constructor. - DSIExtNamedInputParameterValue - Changed SqlTypeMetadata& to const SqlTypeMetadata& in constructor. - DSIExtNativeResultSet - Changed bool UpdateColumnMetadata(const std::vector&, AutoVector&) to bool UpdateColumnMetadata(const std:: vector&, AutoVector&). - DSIExtSortedResultSet - Removed the already deprecated constructor which didn't take an IStatement. - DSIExtResultSett - added a clone method needed for the implementation of the with clause support. - AEAggregate - Changed constructor & GetQueryScope() to pass query scope by SharedPtr instead of raw pointer. - AEBooleanExpr - Changed void SetMetadata(SqlTypeMetadata*) to void SetMetadata(AutoPtr). - Changed SqlTypeMetadata* GetMetadata() to const SqlTypeMetadata&. - Changed void SetColumnMetadata(Simba::DSI::DSIColumnMetadata*) to void SetColumnMetadata(AutoPtr) o Changed Simba::DSI::DSIColumnMetadata* GetColumnMetadata() to Simba::DSI::DSIColumnMetadata& GetColumnMetadata(). - Changed const Simba::DSI::DSIColumnMetadata* GetColumnMetadata() const to const Simba::DSI::DSIColumnMetadata& GetColumnMetadata() const - AEColumn - Changed AEQueryScope* GetQueryScopeResolved() to SharedPtr GetQueryScopeResolved(). - AEColumnInfo - Changed void SetQueryScopeResolved(AEQueryScope*) to void SetQueryScopeResolved(SharedPtr). - Changed AEQueryScope* GetQueryScopeResolved() to SharedPtr GetQueryScopeResolved(). - AECustomScalarFn - Changed const std::vector& GetExpectedArgMetadata() to const std::vector& GetExpectedArgMetadata(). - AEDefault - Changed void SetMetadata(SqlTypeMetadata*) to void SetMetadata(const SqlTypeMetadata&). - AENativeRelationalExpr - Changed AutoVector& GetParamMetadata() to std::vector GetParamMetadata() ***. - AENativeValueExpr - Changed SqlTypeMetadata& parameter in constructor to const SqlTypeMetadata&. - AEParameter - Changed void SetMetadata(SqlTypeMetadata*) to void SetMetadata(AutoPtr). - Changed void SetOutputData(SqlData*) to void SetOutputData(SqlData&). - AEProcedure - Changed const std::vector& GetExpectedArgMetadata() const to const std::vector& GetExpectedArgMetadata() const. - AEProxyColumn - Changed AEQueryScope* parameter in the constructor to SharedPtr. - Changed AEQueryScope* GetQueryScopeResolved() to SharedPtr GetQueryScopeResolved(). - AEScalarFn - Changed std::vector&GetExpectedArgMetadata() to const std::vector&GetExpectedArgMetadata() const. - AESimpleWhenClause - Changed SqlTypeMetadata* GetComparisonMetadata() to const SqlTypeMetadata& GetComparisonMetadata(). - AESqlTypesLookupTable - Changed GetEntry to take the SqlTypeMetadatas by reference instead of by pointer. - ETDataRequest - Changed constructors to take in SqlData by reference & SqlTypeMetadata by const reference. - Changed void SetSqlData(SqlData*) to void SetSqlData(SqlData&). - Changed void CreateSqlData(SqlTypeMetadata*, bool) to void CreateSqlData(const SqlTypeMetadata&, bool). - ETMaterializerUtils - Changed SqlTypeMetadata parameters in methods to be const. * [JDBC] Updated JDBC support The following changes have been made to the JDBC driver: - JavaDSI - TypeMetadata - Added getLength() or setLength(long) methods. - ColumnMetadata - Removed setColumnLength() method (since now length is stored in TypeMetadata). - ParameterMetadata - ParameterMetadata(int, ParameterType, TypeMetadata, long, String, boolean, Nullable) constructor loses column Length parameter (since it comes from TypeMetadata). - Removed setColumnLength() method (since now length is stored in TypeMetadata). - TypeUtilities - getColumnSize() and getDisplaySize() loses the column Length parameter (since they can get length from TypeMetadata parameter). - IResultSet - getSelectColumns() now returns List instead of ArrayList. - IQueryExecutor - getMetadataForParameters() now returns List instead of ArrayList. - ExecutionContexts - 'metadata' constructor parameter changed to List from ArrayList. - 'inputData' constructor parameter changed to List> from ArrayList>. - getMetadata() returns List instead of ArrayList. - com.simba.dsi.ext.StoredProcedure - getParameters() returns List instead of ArrayList. - JSQLEngine - CustomScalarFunction - getInputMetadata() returns List instead of List . - com.simba.sqlengine.dsiext.dataengine.StoredProcedure - getParameters() returns List instead of List. - getCurrentResultMetadata() returns List instead of List. * [DotNet] Updated DotNet support The following changes have been made to the DotNet driver: - DotNetDSI - IColumn - Removed Size property - ParameterMetadata - Removed Size property - Removed the ParameterMetadata(int, ParameterDirection, TypeMEtadta, bool) and ParameterMetadata(int, ParameterDirection, TypeMetadata, long, string, bool, Nullability) constructors. - The ParameterMetadata(int, ParaemterDirection, TypeMetadata, long, bool) constructor loses the long (i.e. length) parameter. - TypeMetadata - The LengthOrIntervalPrecision property has been replaced with separate Length (which is now a long) and IntervalPrecision properties. All the following constructors have been changed: - The ones that took a length or Interval Precision parameter replaced it with separate length and interval Precision parameters. - The others have had a length parameter added. - DotNetDSIExt - ProcedureParameterMetadata - Removed the ProcedureParameterMetadata(int, ParameterDirection, TypeMetadata, long, string, bool, Nullability, bool) and ProcedureParameterMetadata(int, ParameterDirection, TypeMetadata, long, bool, bool) constructors. Resolved Issues The following issues have been resolved in Simba SDK 10.3.0. * [Support] Removed the use of MS-banned functions, like vfprintf, which were previously missed. * [DSI] DSIColumnMetadata.m_caseSensitive now defaults to true and is now consistent with the default collation which is also case sensitive. * [JDBC][JDBCClient] The following constants have been renamed due to security scan false positives (hardcoded credentials):o com.simba.utilities.JDBCPropertyKey. - ODBC_USERID to ODBC_USER - ODBC_PASSWORD to ODBC_PW - JDBC_USERID to JDBC_USER - JDBC_PASSWORD to JDBC_PW - com.simba.client.core.SCPropertyKey - USERNAME to USER - PASSWORD to PW - SSL_TRUSTSTORE_PWD to SSL_TRUSTSTORE_PW * [ODBC] Changes have been made to the behavior of SQLSetDescField behavior. For more information see: https://learn.microsoft.com/en-us/sql/odbc/reference/syntax/sqlsetdescfield-function? view=sql-server-ver16. o Row and parameter descriptors. When setting SQL_DESC_DATETIME_INTERVAL_PRECISION, the driver incorrectly sets the precision field if the type of the record wasn't an interval. - When setting SQL_DESC_LENGTH, the driver incorrectly sets the precision field if the type of the record wasn't an interval. - When setting SQL_DESC_PRECISION, the driver incorrectly sets the LengthOrIntervalPrecision and scale field if the record wasn't an interval. - When setting SQL_DESC_SCALE, the driver incorrectly sets the precision field if the record was interval. - When getting SQL_DESC_DATETIME_INTERVAL_PRECISION, the driver incorrectly returns the precision field for approximate or exact numeric types. - When getting SQL_DESC_LENGTH, the driver incorrectly returns the precision field for approximate or exact numeric types. - When getting SQL_DESC_SCALE, the driver incorrectly returns the precision field for datetime or interval types. - When setting SQL_DESC_DATETIME_INTERVAL_PRECISION, the driver incorrectly sets the precision field if the type wasn't interval, datetime, or approximate numeric. - When setting SQL_DESC_LENGTH, the driver sets the column size if the type was interval (which isn't needed since SqlTypeMetadata has special logic for interval types that depends on the interval precision) and also sets the precision field if the type wasn't interval, datetime, or approximate numeric. When setting SQL_DESC_PRECISION, the driver incorrectly sets the scale or length, or interval precision field if the type was interval or datetime (with the exception for approximate numeric types). - When setting SQL_DESC_SCALE, the driver incorrectly sets the precision field if the type was interval or datetime. - When getting SQL_DESC_DATETIME_INTERVAL_PRECISION, the driver incorrectly returns precision field for exact numeric types. - When getting SQL_DESC_PRECISION, the driver incorrectly returns the column size for types other than approximate numeric, exact numeric, datetime, or interval types. - When getting SQL_DESC_SCALE, the driver incorrectly returns precision field for the interval or datetime types. - When getting SQL_DESC_DATETIME_INTERVAL_PRECISION, the driver incorrectly returns precision field for exact numeric and the column size for other non-interval types. - When getting SQL_COLUMN_PRECISION, the driver incorrectly returns precision field for exact numeric and interval precision for intervals. The driver now returns the column size and returns SQL_NO_TOTAL if the column size does not fit in an int32, rather than a blind cast that could overflow. - When getting SQL_DESC_LENGTH, the driver incorrectly returns precision for exact numeric. - When getting SQL_DESC_OCTET_LENGTH for string types, the driver multiplies the column size or length by the code unit size. - When getting SQL_DESC_PRECISION, the driver incorrectly returns the column size for types other than approximate num, exact num, interval, or datetime. - Previously, there used to be logic for C to SQL Interval conversions (where the source type was something other than SQL_C_CHAR/SQL_C_WCHAR/SQL_C_DEFAULT) that did the following: - If the application had not explicitly set the interval precision on the source metadata, it copied the interval precision from the target metadata to the source metadata. - If the application had not explicitly set the precision on the source metadata, it copied the precision from the target metadata into the precision & scale of the source metadata. This has been removed. This went against the ODBC specifications, which said that the default leading interval precision should be 2, and the default fractional seconds precision should be 6 for interval types. This corrupted the data, as the meaning of the fractional seconds field in a SQLC Interval struct is dependent on the precision in the metadata. - SQLEngine - AEMetadataUtils::CoerceTypeMetadataSetOp - The coercions for time and timestamp did not include fractional seconds precision. - AEBinaryValueExpr::InitializeMetadata - The coercions for timestamp +/- interval with seconds incorrectly use the maximum of the timestamp and interval fractional seconds precision. - If the coerced type was time, the driver always used the default fractional seconds precision, for example, 0. - In some cases, when the coerced type is char, the old logic overflows when computing the length, now it clamps it to SIMBA_UNSIGNED_NATIVE_MAX. - PSAbstractParseTreeBuilder - When parsing an interval literal, if the leading interval precision was not specified, it used a default of 9 (the maximum). Similarly, for the fractional seconds precision, it used 9 (also the maximum). In the ODBC and SQL-92 specifications, the defaults should be 2 and 6. These broke queries that provided a field value that exceeded the new defaults. - ETOperIntervalFunctors - The fraction field of interval types used for date, time, or timestamp +/- interval operations were always interpreted as some nanoseconds. - ETMaterializerUtils::IsMetadataEqual - SQL_CHAR/VARCHAR/LONGVARCHAR and their W variants are all treated equivalently. - SQL_BINARY, VARBINARY, and LONGVARBINARY are treated equivalently. - SQL_DOUBLE and SQL_FLOAT are treated equivalently. - DSIExtColumnsMetadataSource - The column size column incorrectly returns SQL_NO_TOTAL if the actual column size does not fit into an int32. - The buffer length column incorrectly computes the value for string columns by multiplying the length by the code point size, instead of the code unit size. Also, it incorrectly returns SQL_NO_TOTAL if the computed value does not fit into an int32. - The char octet length column incorrectly calls SqlTypeMetadata::GetOctetLength. Previously, it called the removed version and passed in EncodingInfo::GetNumBytesInCodeUnit(SIMBA_PLATFORM_WCHAR_ENCODING). Also, it incorrectly returns SQL_NO_TOTAL if the computed value doesn't fit into an int32. - DSIExtProcedureColumnsMetadataSource - The column size column incorrectly calls DSIExtParameterMetadata::GetPrecision, which returns an int16 and it does not return the precision for approximate num types when numprecradix == 2. Also, it incorrectly returns SQL_NO_TOTAL if the computed value doesn't fit into an int32. The buffer length column incorrectly computes the value for string columns by multiplying the length by the code point size, instead of the code unit size. Also, it incorrectly returns SQL_NO_TOTAL if the computed value does not fit into an int32. - The char octet length column incorrectly calls SqlTypeMetadata::GetOctetLength. Previously, it called the removed version and passed in EncodingInfo::GetNumBytesInCodeUnit(SIMBA_PLATFORM_WCHAR_ENCODING), so the value it multiplies the length bymay be different. It also incorrectly returns SQL_NO_TOTAL if the computed value doesn't fit into an int32. - SimbaDotNetoSParameter. - In previous versions, SParameter did not override DbParameter.Precision or Scale, instead of hiding them with its versions, which used short instead of byte. Now, when using the .NET standard 2.0 version of the library, it also overrides the base class properties to forward to the ones defined in SParameter. - Fixed a bug where a long would be returned for the column size (instead of an int as declared in the metadata) in the result returned from SDataReader.GetSchemaTable(). - [SimbaDoNet][SParameter]oSParameter does not override DbParameter. Precision or Scale, instead of hiding them with its versions, which used short instead of byte. Now, when using the .net standard 2.0 version of the library, it also overrides the base class properties to forward to the ones defined in SParameter. - SDataReader.GetSchemaTable() incorrectly returns a long for the column size column instead of INT. ==============================================================================