SQL Anywhere 12.0.1 Release Notes for Windows Copyright © 2011, iAnywhere Solutions, Inc. All rights reserved. All unpublished rights reserved. Installation notes ------------------ The 32-bit MobiLink server is not installed on 64-bit Windows operating systems. Only MobiLink client components will be installed. For upgrades from version 12.0.0, the 32-bit MobiLink server components are not upgraded to version 12.0.1; only MobiLink client components will be upgraded. Documentation ------------- The documentation is available on DocCommentXchange at: http://dcx.sybase.com DocCommentXchange is an online community for accessing and discussing SQL Anywhere documentation on the web. DocCommentXchange is the default documentation format for SQL Anywhere 12. If you prefer to use a local copy of the documentation, documentation may also be installed from: www.sybase.com/detail?id=1069195 SQL Anywhere Server ------------------- o Databases from SQL Anywhere 9 and earlier must be rebuilt before they can be used with SQL Anywhere 12. After installing SQL Anywhere 12, consult the documentation for information about rebuilding databases. o When restoring a tape archive backup made with a version earlier than version 12.0.0, the tape will be ejected once during the restore. Reinserting the tape will allow the restore to continue. MobiLink -------- o The MobiLink server requires an ODBC driver to communicate with the consolidated databases. The recommended ODBC drivers for a supported consolidated database can be found from the Sybase home page through the following link: http://www.sybase.com/detail?id=1011880 o For information about the platforms supported by MobiLink, see: http://www.sybase.com/detail?id=1002288 QAnywhere --------- o The Java environment on Windows Mobile that QAnywhere supports is the WebSphere Everyplace Micro Environment, Personal Profile 1.1. To use the Java QAnywhere client, qaclient.jar, with a SQL Anywhere message store on Windows Mobile, the following JDBC 3.0 interface classes must be in the boot classpath of the Java VM: java/sql/Array.class java/sql/BatchUpdateException.class java/sql/Blob.class java/sql/CallableStatement.class java/sql/Clob.class java/sql/Connection.class java/sql/DatabaseMetaData.class java/sql/DataTruncation.class java/sql/Date.class java/sql/Driver.class java/sql/DriverManager.class java/sql/DriverPropertyInfo.class java/sql/ParameterMetaData.class java/sql/PreparedStatement.class java/sql/Ref.class java/sql/ResultSet.class java/sql/ResultSetMetaData.class java/sql/Savepoint.class java/sql/SQLData.class java/sql/SQLException.class java/sql/SQLInput.class java/sql/SQLOutput.class java/sql/SQLWarning.class java/sql/Statement.class java/sql/Struct.class java/sql/Time.class java/sql/Timestamp.class java/sql/Types.class If these classes are not available in a JAR file on the Windows Mobile device in a particular WEME deployment, then they may be extracted from a Sun 1.4.x JDK, packaged in a JAR file, and deployed to the device. Administration Tools -------------------- o Plug-ins may fail to load after reinstall - If you have previously installed and used Sybase Central, and then reinstall SQL Anywhere to a different installation directory, plug-ins will fail to load. Perform the following steps to correct this problem: 1. Open Sybase Central, and then choose Tools > Plug-ins. 2. Unregister the old plug-ins. Select a SQL Anywhere plug-in from the list and click Unregister. Repeat this step until you have unregistered all the SQL Anywhere plug-ins. 3. Restart Sybase Central. The plug-ins will be registered. UltraLite --------- o There are no items at this time. SQL Anywhere Monitor -------------------- Upgrading SQL Anywhere Monitor 11 to SQL Anywhere Monitor 12 ------------------------------------------------------------ Uninstalling the Monitor removes the application, as well as the list of resources and collected metrics. If you want to upgrade your 11.0.1 Monitor resources and metrics to version 12, do not uninstall the older version of the Monitor until you have performed the following steps: 1) Make a backup of your SQL Anywhere Monitor database. 2) Install a new version of the Monitor. 3) Migrate the resources and metrics. Detailed instructions for migrating your data and settings from 11.0.1 to 12, are provided in: SQL Anywhere 12 - Changes and Upgrading > Upgrading to SQL Anywhere 12 > Upgrading the SQL Anywhere Monitor and migrating resources and metrics Bugs fixed in this maintenance release -------------------------------------- This section lists bugs that were fixed in this release. It does not list bugs that were fixed in earlier releases. For bug fix lists from earlier releases, go to MySybase, at http://www.mysybase.com. Note that this maintenance release may not contain all of the bug fixes from recent EBFs (Express Bug Fixes) made available from MySybase, since EBFs for earlier releases can occur after this maintenance release. If you are changing from an EBF of an earlier maintenance release and you require a recent bug fix, you may require a recent EBF for this maintenance release. The bug fix descriptions are in English because the list is generated from engineering tools used to track changes to the software. A translated version of the bug list may be available from a local Sybase web site. SQL Anywhere Maintenance Release Notes for Version 12.0.1 ========================================================= Contents ======== * Description of download types o Express Bug Fixes o Maintenance Release * Introduction * 12.0.1 Behavior Changes and Critical Bug fixes o MobiLink - Synchronization Server (1) o SQL Anywhere - Server (1) * 12.0.1 New Features o MobiLink - Java Plugin for Sybase Central (12) o MobiLink - Monitor (1) o MobiLink - Relay Server (2) o MobiLink - SA Client (1) o MobiLink - Streams (1) o MobiLink - Synchronization Server (6) o MobiLink - Utilities (4) o SQL Anywhere - ADO.Net Managed Provider (2) o SQL Anywhere - JDBC Client Library (1) o SQL Anywhere - ODBC Client Library (1) o SQL Anywhere - OLEDB Client Library (2) o SQL Anywhere - Other (2) o SQL Anywhere - Server (17) o SQL Anywhere - Sybase Central Plug-in (3) o SQL Anywhere - Utilities (6) o UltraLite - Runtime Libraries (4) o UltraLite - UltraLite.NET (1) o UltraLiteJ - Runtime (2) * 12.0.1 Bug fixes o MobiLink - Java Plugin for Sybase Central (48) o MobiLink - MobiLink Agent (7) o MobiLink - Monitor (1) o MobiLink - QAnywhere client (3) o MobiLink - QAnywhere server (2) o MobiLink - Relay Server (17) o MobiLink - RelayServer plug-in for Sybase Central (4) o MobiLink - SA Client (8) o MobiLink - Streams (3) o MobiLink - Synchronization Server (19) o MobiLink - Utilities (15) o MobiLink - iAS Branded ODBC Drivers (4) o MobiLink - scripts (1) o SQL Anywhere - ADO.Net Managed Provider (18) o SQL Anywhere - DBLIB Client Library (7) o SQL Anywhere - JDBC Client Library (5) o SQL Anywhere - ODBC Client Library (14) o SQL Anywhere - OLEDB Client Library (10) o SQL Anywhere - Other (13) o SQL Anywhere - SNMP Extension Agent (2) o SQL Anywhere - Server (248) o SQL Anywhere - Sybase Central Plug-in (47) o SQL Anywhere - Utilities (102) o Sybase Central Java Viewer - Java Viewer (1) o UltraLite - Runtime Libraries (8) o UltraLite - Sample Application (1) o UltraLite - UL Java Provider for Sybase Central (4) o UltraLite - UltraLite Engine (5) o UltraLite - UltraLite for M-Business Anywhere (1) o UltraLite - UltraLite.NET (3) o UltraLite - Utilities (7) o UltraLiteJ - Runtime (16) o UltraLiteJ - Utilities (4) * Some useful links o iAnywhere.com Support Page - http://www.ianywhere.com/support/support.html o EBF downloads page - http://downloads.sybase.com o SQL Anywhere newsgroups - http://www.ianywhere.com/support/newsgroups.html o SQL Anywhere Main Page (links to evaluation software, tech support, whitepapers, etc) - http://www.ianywhere.com/products/sql_anywhere.html o SQL Anywhere supported platform matrix - http://www.ianywhere.com/products/supported_platforms.html ================================================================================ Description of download types ============================= Express Bug Fixes A subset of the software with one or more bug fixes. The bug fixes are listed below. A Bug Fix update may only be applied to installed software with the same version number. Moderate testing has been performed on the software, but full testing has not been performed. Customers are encouraged to verify the suitability of the software before releasing it into a production environment. Maintenance Release A complete set of software that upgrades installed software from an older version with the same major version number (version number format is major.minor.patch). Bug fixes and other changes are listed in the "readme" file for the upgrade. For answers to commonly asked questions please use the following URL: Frequently asked Questions ================================================================================ Introduction ============ Release 12.0.1 is a regularly-scheduled maintenance release, containing fixes to reported problems with the software as well as some new features. ================================================================================ 12.0.1 Behavior Changes and Critical Bug fixes ============================================== If any of these bug fixes apply to your installation, iAnywhere strongly recommends that you install this fix. Specific testing of behavior changes is recommended. MobiLink - Synchronization Server ===============(Release Build - Engineering Case #648497)=============== When a consolidated was running on an Oracle server, the MobiLink server would not have advanced the next_last_download timestamp value (it is used for generating the download in the next synchronization) after it had run for certain time, even if a synchronization did contain a download request. After this occurred, the MobiLink server would have downloaded the same rows over and over again. This has now been fixed. The work around is to restart the MobiLink server. SQL Anywhere - Server ===============(Release Build - Engineering Case #642313)=============== Execution of the statement "BACKUP DATABASE DIRECTORY '' TRANSACTION LOG RENAME TRANSACTION LOG ONLY" would have left a gap in the offsets between the renamed transaction log and the live transaction log. This would have affected replication, synchronization and the ability to recover from backups. This has been fixed. ================================================================================ 12.0.1 New Features =================== This section contains a description of new features added since the release of version 12.0.0. MobiLink - Java Plugin for Sybase Central ===============(Release Build - Engineering Case #657185)=============== The MobiLink Agent for central administration of remote databases now supports a file delete command that does not fail if the file to be deleted does not exist. The existing behaviour of failing if the file to be deleted does not exist is the default. ===============(Release Build - Engineering Case #657518)=============== When deploying a Synchronization Model to a remote database, a synchronization profile is created to hold several deployment options. For a SQL Anywhere remote database, the created synchronization profile contains the subscription name and the MobiLink password. For an UltraLite remote database, the synchronization profile contains the stream type and stream options, the MobiLink user name and password, the publication, and the script version. The Deployment Wizard's MobiLink User and Subscription page (for SQL Anywhere databases) and MobiLink User page (for UltraLite remote databases) have been merged into the MobiLink User and Synchronization Profile page, which has an option to specify the synchronization profile name. For SQL Anywhere remote databases, the same name is used for the synchronization subscription. The default name combines the publication name and MobiLink user name, since the profile is linked to the publication and user. It is automatically updated to be of the form _ when the mobilink user name is changed, but is uncoupled when it is directly edited. The deployment option to name the synchronization profile replaces the option to name the subscription for a SQL Anywhere remote database that was added in version 12.0.0. This feature removes the need to manually create a synchronization profile after deploying a synchronization model to use with central administration of remote databases. ===============(Release Build - Engineering Case #657423)=============== The first page of the Deploy Synchronization Model wizard now has an option when deploying to a remote database to initialize the wizard with settings appropriate for creating remote tasks for central administration of remote databases. This option is selected by default. When the "Initialize with settings for central administration of remote databases" option is selected, the defaults are changed for the following deployment settings: - On the New SQL Anywhere Remote Database page, the "Create a remote SQL Anywhere database" option is not selected. - On the New UltraLite Remote Database page, the "Create a remote UltraLite database" option is not selected. - On the Existing Remote Database page, the "Connect to the remote database to directly apply the changes" option is not selected. - On the MobiLink User and Synchronization Profile page (formerly MobiLink User or MobiLink User and Subscription) the following are changed: - The user name is set to {ml_username}. - The password is set to {ml_password}. - The "Register this user in the consolidated database for MobiLink authentication" option is not selected. With this option selected, deployment with create a remote database SQL file that can be used in a remote task. The {ml_username} and {ml_password} macro values are replaced with the MobiLink user and password being used by the MobiLink Agent when the SQL is executed on the remote database. ===============(Release Build - Engineering Case #657411)=============== When adding table mappings to a Synchronization Model in the Create New Table Mappings window, the option to add corresponding tables to the remote schema is now selected by default. ===============(Release Build - Engineering Case #657203)=============== The MobiLink Agent for central administration of remote databases now supports a random delay for task execution. The motivation for this feature is to address scalability issues in a large deployment of centrally administered remote databases. If a given task sends results to the MobiLink server after execution, or causes a remote database to synchronize with the server, and it is triggered simultaneously across a large number of remotes, then setting a random delay for the task will uniformly distribute the synchronization workload for the server over a configurable period of time. A remote task can have a "random delay interval", which is an interval N, in seconds, with which each agent generates a random number of seconds in [0, N) to delay each task execution. If the task is a scheduled task, the random delay is generated before the first task execution, and used for each execution. The task is executed at the scheduled times offset by the random delay. This ensures that the deltas of the task execution times are consistent with the schedule. It is not recommended that the random delay interval be larger than smallest delta time of a scheduled task. If the task is an "on demand" task, that is initiated by the server, the random delay is generated and used to delay the execution each time the task is initiated. If the task is a "run on receipt" task, the random delay is generated and used to delay the execution at the first and only time the task is executed. ===============(Release Build - Engineering Case #657200)=============== The MobiLink Agent for central administration of remote databases now supports two new variables for task conditions, {is_online} and {network_conn_name}. The variable {is_online} can be used to check whether the client device is connected to a network on which the MobiLink server of the agent can be reached. Note that this variable is not equivalent to a ping of the MobiLink host machine, nor of the MobiLink server itself. The host machine may be offline and the variable will still evaluate to 1 (true). This variable evaluates to 1 if and only if the client device is connected to a network such that there is a route to the IP address of the MobiLink server. This variable is supported for agents running on Windows and Windows Mobile operating systems. The variable {network_conn_name} evaluates to the name of the network connection that will be used by the agent for communication with its MobiLink server. This variable is only supported on Windows operating systems. The list of possible network connection names for a given Windows-based device can be obtained by going to Control Panel/Network Connections on Windows XP, or going to Control Panel/Network and Sharing Center on Windows Vista and Windows 7. Alternatively, the list of network connection names can be obtained from the information returned by the ipconfig command line utility. The network connection name for the loopback connection (destination IP address 127.0.0.1) is "Loopback interface". If there is no network connection that can be used by the agent to communicate to the MobiLink server, this variable evaluates to "?". ===============(Release Build - Engineering Case #657306)=============== Synchronization Models can now be created with Sybase IQ consolidated databases. For IQ tables, table mappings are download-only by default. If the table mapping for an IQ table is changed to bi-directional or upload-only, a warning is given to ensure that uploads are serialized. The requirement for serializing uploads with Sybase IQ is described in the following topic: MobiLink - Server Administration » Using MobiLink server technology » MobiLink consolidated databases » Sybase IQ consolidated database ===============(Release Build - Engineering Case #640779)=============== In Sybase Central, the "Commands" panel for remote tasks now contains a help button for the command being edited. ===============(Release Build - Engineering Case #640486)=============== The Agent wizard and property sheets now allow a description to be set for agents that are defined. The description is free form text. ===============(Release Build - Engineering Case #640222)=============== Remote schema names can now be imported into a project from a consolidated database. Import remote schema names can be done a number of ways: 1. Right-click "Remote Schema Names" in the "Folders" panel and click the new "Import" menu item. 2. When adding a consolidated database to a project, either with the Project wizard or the Consolidated Database wizard, the wizards will automatically check if there are any remote schema names defined in the consolidated database that are not already in the project. If there are, the wizards will ask if they should be imported. ===============(Release Build - Engineering Case #640037)=============== The Create Group wizard now allows the members (Agents) for a group to be selected by pointing to a text file which contains the names of the Agents. The ability to add members by browsing the Agents defined in a consolidated database is also still supported. Note, the text file containing the Agent names must have each Agent name on its own line. ===============(Release Build - Engineering Case #657301)=============== Synchronization models using SQL Anywhere, Sybase IQ, IBM DB2 LUW and MySQL consolidated databases can now use timestamp-based downloads without having to use triggers to maintain timestamp columns. Instead of triggers, column default values can be used to automatically update the timestamp column in a row when the row is inserted or updated. This can improve performance, since such column defaults are less costly than triggers in the consolidated database. A new "Use column default instead of a trigger" option has been added to both the Timestamp Download Options page of the Create Synchronization Model Wizard and the Download Type tab of the Table Mapping Editor. This feature is required for Sybase IQ and is now the default option for SQL Anywhere. DB2 and MySQL only allow one automatic timestamp column per table, so the default for those consolidated database types is to use triggers. The following column defaults are used: - For SQL Anywhere and Sybase IQ: DEFAULT TIMESTAMP - For DB2: GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP - For MySQL: DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP Note that a trigger must be used if a shadow table is used to hold the timestamp column. MobiLink - Monitor ===============(Release Build - Engineering Case #657519)=============== The MobiLink collector for the SA Monitor now supports an additional metric: "Is Consolidated Available?". This value will be true if the MobiLink server can connect to the consolidated database. If the consolidated database becomes unavailable, a "Consolidated database unavailable" alert will be raised. Also, the "Bytes Read Rate" and "Bytes Written Rate" have been renamed to "TCP Bytes Read Rate" and "TCP Bytes Written Rate". MobiLink - Relay Server ===============(Release Build - Engineering Case #639289)=============== The Relay Server extension for the Apache webserver now supports Apache 2.2.15 on Linux. Apache 2.2.15 now offers more security enhancements. ===============(Release Build - Engineering Case #639289)=============== The Relay Server extension for the Apache webserver now supports Apache 2.2.15 on Linux. Apache 2.2.15 now offers more security enhancements. MobiLink - SA Client ===============(Release Build - Engineering Case #657557)=============== HTTP and HTTPS synchronizations are now done using persistent connections by default. MobiLink - Streams ===============(Release Build - Engineering Case #632359)=============== For 11.0.1, ECC curve support for MobiLink end-to-end encryption has been reduced to the same 7 ECC curves supported by the createcert and createkey utilities and by SA's TLS support. For 12.0.0, ECC curve support for end-to-end encryption, the createcert and createkey utilities, and for the TLS protocol for both MobiLink and SA, has been extended to support the 15 curves recommended by NIST: sect163k1 sect283k1 sect571k1 secp256r1 sect163r2 sect283r1 sect571r1 secp384r1 sect233k1 sect409k1 secp192r1 secp521r1 sect233r1 sect409r1 secp224r1 MobiLink - Synchronization Server ===============(Release Build - Engineering Case #657413)=============== Improvements to the MobiLink Server required some changes to system objects in the consolidated database. Upgrade scripts have been provided for every consolidated database type MobiLink supports. The upgrade script file is named with the following format: upgrade_x.sql where x can be sa, ase, mss, ora, db2, and mys; and represent upgrade scripts for SQL Anywhere, Sybase ASE, Microsoft SQL Sever, Oracle, DB2, and MySQL, respectively. These upgrade script files can be found in MobiLink\Upgrade\x.y.z of the SQL Anywhere installation, where x.y.z stands for the earlier version that is currently in use. For instance, when upgrading from MobiLink version 9.0.2 to version 12.0.1 with an Oracle consolidated database, the upgrade script needed is upgrade_ora.sql that can be found in the directory, MobiLink\Upgrade\9.0.2 in the SQLAnywhere 12.0.1 installation. ===============(Release Build - Engineering Case #657343)=============== The MobiLink Server can now automatically adjust the number of database worker threads based on load, with the goal of maximizing throughput. The existing -w option has been slightly changed, and the -wm option has been added, as follows: -w set the initial number of concurrent database worker threads (up to -wm) -wm set the maximum number of concurrent database worker threads Notes: - The -w option has been changed to be the _initial_ number of concurrent database worker threads - The -wm option now defaults to -w, ie. no automatic adjustment will occur when -wm is unset. In other words, the automatic adjustment is triggered by the presence of the -wm option - The number of database worker threads is now automatically adjustable anywhere between the initial (-w) value and the -wm value - The -wu value is not automatically adjusted, and its meaning remains basically the same, with one important difference: If not specified, uploads may be applied on any or all database worker threads (which is now a variable number). If specified, uploads may only be applied concurrently on the given number of database worker threads. So by default, when feature attempts to ramp up the number of database worker threads in an attempt to increase throughput, contention may increase in the short term until it is detected and the thread-count is eventually decreased. - The automatic adjustment means that some customers may find optimal throughput only when -wu is set explicitly, because leaving it unset causes download throughput to be artificially limited by the contention of the uploads. Setting -wu is most likely to be required in high-load environments where uploads are constantly intermixed with download-only synchronizations. - If contention in the consolidated is the cause of throughput degradation, then this new feature will reduce the number of worker threads REGARDLESS of the cause of the contention (eg. other syncs vs. a contentious batch process outside of syncs). - Each ML server in a farm makes thread-count decisions independently. Over time, on average, each server in an ML farm should end up at the same thread-count number assuming a uniform load distributed evenly across the farm. ===============(Release Build - Engineering Case #657208)=============== The MobiLink server now requires the ASE ODBC driver from Sybase SDK 15.5 ESD #4, which contains a few bug fixes, especially for the ASE cluster edition. The ASE ODBC driver from Sybase 15.0 SDK ESD #16 that was recommended for 12.0.0 GA is no longer recommended. ===============(Release Build - Engineering Case #657210)=============== The MobiLink server now supports two new named system parameters, 'new_username' and 'new_remote_id'. They are available in the authenticate_user and begin_synchronization connection scripts, and the begin_synchronization table script for every sync table. The format of these two named parameter is the same as that for all other named system parameters, that is: {ml s.new_username} and {ml s.new_remote_id} These new named parameters are not available through question marks (?) in any MobiLink server events. The values of the s.new_username and s.new_remote_id parameters would be the MobiLink user name (used for user authentication) and the remote ID, respectively, if the user name and remote ID are new in the consolidated database (they are not in the ml_user and ml_database tables). Otherwise, their values will be NULL: more precisely, the s.new_username will be NULL if the MobiLink user name is already in the ml_user table, and the s.new_remote_id will be NULL if the remote_id is already in the ml_database table. ===============(Release Build - Engineering Case #641081)=============== The MobiLink server, and MobiLink and UltraLite clients, now support DER encoded public and private keys. Previously, only PEM encoded keys were supported. ===============(Release Build - Engineering Case #640015)=============== The MobiLink server on Windows and Linux systems now supports consolidated databases running on an ASE 15.5 server. In order to properly support it, an ASE native ODBC driver from Sybase SDK 15.5 ESD#2 or later is required. MobiLink - Utilities ===============(Release Build - Engineering Case #657297)=============== The MobiLink Replay utility can now repeatedly replay recorded protocol. A new option, -rep , has been added to specify how many times each simulated client should replay the recorded protocol. Each repetition can be customized if a replay DLL/shared object is used. The following callbacks are called per repetition: · GetUploadTransaction (this callback may be called several times based on how many syncs and upload transactions appear in the recorded protocol file being replayed) · GetDownloadApplyTime · ReportEndOfReplay · DelayStartOfReplay The purpose of the above callbacks has not changed with the addition of this new feature. The differences are the repetitionNum and numRepetitions parameters will no longer always be 1 and GetUploadTransaction may now be called concurrently. Another new option has been added as well, -ls, which tells the Replay utility to log statistics about each simulated client. In particular, using the –ls option will log the total running time, the total time spent replaying, and the total number of repetitions completed successfully, failed, or skipped for each simulated client. The Replay utility will still log a summary just before exiting containing the total number of repetitions completed successfully, failed, or skipped, as well as the total time spent replaying and the total running time, even when the –ls option is used. ===============(Release Build - Engineering Case #657201)=============== The MobiLink Replay utility command line options –n and –sci can now be used together as long as the number of simulated clients specified by the –n option is less than or equal to the number of simulated clients in the simulated client information file. If the –sci and –n options are used together, the number of simulated clients mlreplay will run will be the number specified by –n. Allowing these two options to be used together allows one simulated client information file specifying x simulated clients to be used to replay recorded protocol with 1 to x simulated clients, where as before, it could only be used to replay recorded protocol with exactly x simulated clients. ===============(Release Build - Engineering Case #657199)=============== The –os command line option can be used to limit the maximum size of a log file produced by the MobiLink Replay utility (mlreplay) or the mlgenreplayapi tool. When the log reaches the specified size (minimum 10 KB), it will be renamed to YYMMDDxx.rlg and a new log file is started with the original name. ===============(Release Build - Engineering Case #657198)=============== The MobiLink Replay utility (mlreplay) and mlgenreplayapi tool now log any command line options in the log. If any of the command line options are passwords, then the passwords will be replaced with a string of ‘*’. SQL Anywhere - ADO.Net Managed Provider ===============(Release Build - Engineering Case #637146)=============== Two xml mapping files have been added to support SQL Server 2008 Integration Services: - MSSqlToSA.xml --- mapping SQL Server 2008 data types to SA data types. - SAToMSSql10.xml --- mapping SA data types to SQL Server 2008 data types. These files will be installed to "%SA%\Assembly\V2" folders. The utility SetupVSPackage.exe will copy them to, or remove them from, the "%SQL Server 2008 Dir%\DTS\Binn" folder. ===============(Release Build - Engineering Case #633600)=============== Some Visual Studio integration related problems were not handled by SetupVSPackage.exe, but were problems caused by SA installer when installing the SA ADO.NET provider and the SA Visual Studio Integration Package. Some of these problems were 1. Incorrect machine.config file. 2. SA ADO.NET provider assemblies were not added to GAC. 3. SA ADO.NET provider assemblies did not show up in Visual Studio Add Reference dialogbox. 4. Visual Studio failed to create DataSets or Entity Framework Models using SA data sources. Re-installation of SQL Anywhere was usually required to fix these problems. Now all Visual Studio integration related code has been implemented in SetupVSPackage.exe, and any Visual Studio integration problem should be fixed by running SetupVSPackage. It will perform the following tasks: 1. Add / Remove assemblies of SA ADO.NET provider and integration package to / from GAC. 2. Register or unregister SA ADO.NET provider in machine.config. 3. Create registry keys for SA integration package 4. Create registry keys for Visual Studio Add Reference dialogbox. 5. Copy / Remove SSDLToSA12.tt to / from Visual Studio 2010 folder (%VS_DIR%\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen). 6. Register or unregister SA ADO.NET provider in %SQL Server 2008 DIR%\100\DTS\ProviderDescriptors\ProviderDescriptors.xml which is used by SQL Server Integration Service. 7. Setup Visual Studio IDE for SA integration package. SetupVSPackage.exe is executed by the SQL Anywhere installer when installing or uninstalling SQL Anywhere, but SetupVSPackage.exe can be run separately. Two versions of SetupVSPackage.exe will be installed: 1. %SQLANY%\Assembly\V4\SetupVSPackage.exe - This version is built using .NET Framework 4, this version should be used if .NET Framework 4 is installed. 2. %SQLANY%\Assembly\V2\SetupVSPackage.exe - This version is built using .NET Framework 2, this version should be used if .NET Framework 4 is not installed. A performance issue when running SetupVSPackage.exe for Visual Studio 2008 and 2010 has also been fixed. SQL Anywhere - JDBC Client Library ===============(Release Build - Engineering Case #632401)=============== The SQL Anywhere JDBC driver has provided support for PreparedStatement.setBlob(), ResultSet.getBlob() and ResultSet.getClob() for some time now; but support for PreparedStatement.setClob() was not available in the SQL Anywhere JDBC driver until now. The SQL Anywhere JDBC driver now supports two of the three PreparedStatement.setClob() methods. They are: PreparedStatement.setClob( int parameterIndex, Clob x ), and PreparedStatement.setClob( int parameterIndex, Reader reader, long length ) However, support for the method: PreparedStatement.setClob( int parameterIndex, Reader reader ) is still not available in the SQL Anywhere JDBC driver. It should be noted that when using the PreparedStatement.setClob( int parameterIndex, Clob x ) overload, the user supplied Clob implementation only needs to support the Clob.length() and Clob.getCharacterStream() methods. Also, for large strings and large character streams, the new PreparedStatement.setClob() methods within the SQL Anywhere JDBC driver are preferable over the PreparedStatement.setString() and PreparedStatement.setCharacterStream() methods in terms of both performance and memory usage. SQL Anywhere - ODBC Client Library ===============(Release Build - Engineering Case #638755)=============== When an ODBC application made a SQLTables() call, the TABLE_TYPE column in the result set identified materialized views as MATERIALIZED VIEW. While doing so was not against the ODBC specification, there was nevertheless a problem with applications like Microsoft Access and Crystal Reports, which filter out anything that is not marked as TABLE, VIEW, SYSTEM TABLE, ALIAS, SYNONYM, GLOBAL TEMPORARY or LOCAL TEMPORARY. Therefore, the TABLE_TYPE value returned for materialized views has been changed to be VIEW. In addition, a new connection parameter has been added to ODBC which allows a specific string to be defined that is returned in the SQLTables() result set for materialized views. This new connection parameter is called MATVIEW, and is a string that will be returned in the TABLE_TYPE column for materialized views. For example, to have the SQLTables() function return materialized views as type TABLE, connect as follows: uid=dba;pwd=sql;eng=...;matview=table This new option can be used to override this default and return to the previous behaviour. The same string is also used when SQLTables() is called with an explicit TableType filter. SQL Anywhere - OLEDB Client Library ===============(Release Build - Engineering Case #657459)=============== The SQL Anywhere OLE DB provider now supports the DBTYPE_DBTIMESTAMPOFFSET data type. DBTYPE_DBTIMESTAMPOFFSET (146) is an OLE DB type that supports the TIMESTAMP WITH TIME ZONE (or DATETIMEOFFSET) data type. Support for this data type facilitates transfer of data tables between SQL Anywhere databases and other database management systems (include SQL Anywhere). ===============(Release Build - Engineering Case #645959)=============== Microsoft SQL Server has introduced two data types DBTYPE_DBTIME2 and DBTYPE_DBTIMESTAMPOFFSET that are not part of the OLE DB specification. Support for conversions between these two types and DBTYPE_STR, DBTYPE_WSTR, DBTYPE_DBDATE, DBTYPE_DBTIME, and DBTYPE_DBTIMESTAMP has now been added to the SQL Anywhere OLE DB provider. DBTYPE_DBTIME2 differs from DBTYPE_DBTIME in that fractional seconds are included. The type corresponds to the Microsoft SQL Server TIME data type. DBTYPE_TIMESTAMPOFFSET adds support for a timezone offset (hours/minutes). The type corresponds to the Microsoft SQL Server DATETIMEOFFSET data type. SQL Anywhere - Other ===============(Release Build - Engineering Case #657427)=============== On Windows systems, the behavior when clicking Help in SQL Anywhere ODBC administrator dialogs has been changed so that . the help topics are displayed using the master help file sqlanywhere_[LL]12.chm when full HTMLHelp documentation is installed, or . if sqlanywhere_[LL]12.chm is not found, the help topics are displayed using context sensitive help file sacshelp12.chm, or . if sacshelp12.chm is also not found, the help topics are displayed in DocCommentXchange with system's default internet browser Please note that before this change, the Help buttons used dbco[LL]12.chm, which was installed in the bin32 folder by the main software installer. Now dbco[LL]12.chm is longer be provided. [LL] is the language code of the help files. ===============(Release Build - Engineering Case #643187)=============== The Unix installer now sets up the SQLANYSAMP12 environment variable in the sa_config and sample_config scripts. On Unix systems, the sample_config script may be used to create a per-user copy of the samples. This is useful for a multi-user installation. With this change, the sample_config script will now set the SQLANYSAMP12 environment variable. The sample_config script will also generate a file (sample_env) to set the SQLANYSAMP12 environment variable, which if present will be picked up by the sa_config script. The sa_config script is used to set up environment variables for Unix. If the user has run the sample_config script to create a per-user copy of the samples, it will use the generated settings file to set SQLANYSAMP12 to point to the user's copy of the samples. If the user is running a single-user installation, the sa_config script will set SQLANYSAMP12 to $SQLANY12/samples (default setting for single-user installations). SQL Anywhere - Server ===============(Release Build - Engineering Case #657536)=============== This change introduces a new performance metric to track the time connections have been connected, adds user-defined performance counters, and changes the scope of some existing performance counters so that they are now available at the connection, database, and server level. These changes improve the ability to monitor a database server running more than one database. Property for Connection Time A new connection property, ConnectedTime, returns the total length of time in seconds that a connection has been connected. There are also database and server-level versions of the same name; these return the total time that all connections to the database/server have been connected. Two notes of caution for the database and server versions: The database and server level properties are updated only when a request completes for the connection or the connection disconnects. The database/server properties can therefore lag behind for connections that are idle or busy executing for a long time in the server. The property is updated only at the end of the operation to reduce the overhead needed to maintain the property. The database and server level properties include time accrued by any connection, and this includes database events and background server connections (such as the cleaner) User-Defined Counters The SA performance counter mechanisms provides a way to monitor statistics in a running server. In some cases, a database application has similar statistics that would be useful to measure when monitoring a performance issue. To that end, new user-defined counters are defined. These are not set by the server, and must be set or incremented explicitly by calling one of two new functions. The counters can be read using any of the methods supported for performance counters (property functions, dbo.sa_performance_statistics(), performance monitor). There are two classes of counter, RAW and RATE. The RAW counters are displayed as an absolute value in the performance monitor, while RATE counters are shown by measuring the change of the counter during a measurement interval. For example, a RAW counter would be appropriate for showing the current number of keys remaining in a key pool; this value would fluctuate up and down over time. Alternatively, a RATE counter would be appropriate for showing how quickly keys are being used from a key pool. The counter would increase monotonically over time as keys are used, and the performance monitor would show the rate that keys are used per second. The new counters are named UserDefinedCounterRaw01, ..., UserDefinedCounterRaw05 and UserDefinedCounterRate01,...,UserDefinedCounterRate05. These counters are recorded at the scope of connection / database / server. Two new functions are provided to increment these values or set them to a new absolute value: create function dbo.sa_user_defined_counter_add( in counter_name varchar(128), in delta bigint default 1, in apply_to_con int default 1, in apply_to_db int default 1, in apply_to_server int default 1 ) returns int internal name 'sa_user_defined_counter_add' The sa_user_defined_counter_add() system procedure adjusts a user-defined counter by an amount (delta). The counter_name parameter is the text name of the counter to adjust. By default, the counter is adjusted by 1 at the connection, database, and server scopes. The parameters apply_to_con, apply_to_db, and apply_to_server can be either 0 (do not apply) or 1 (do apply) to control the scopes where the delta is applied. To accomodate future expansion, the delta parameter is declared as a bigint. However, values outside of the range of an int generate an error. The function returns 1 if the delta was applied, otherwise 0. create function dbo.sa_user_defined_counter_set( in counter_name varchar(128), in value bigint, in apply_to_con int default 1, in apply_to_db int default 0, in apply_to_server int default 0 ) returns int internal name 'sa_user_defined_counter_set' The sa_user_defined_counter_set() system procedure changes a user-defined counter to a new value. The counter_name parameter is the text name of the counter to adjust. By default, the counter is set to the specified value at the connection, database, and server scopes. The parameters apply_to_con, apply_to_db, and apply_to_server can be either 0 (do not apply) or 1 (do apply) to control the scopes where the value is applied. To accomodate future expansion, the value parameter is declared as a bigint. However, values outside of the range of an int generate an error. The function returns 1 if the value was applied, otherwise 0. Concurrent access to counters are applied atomically so it is safe to increment a counter from multiple concurrent requests or to set a counter from concurrent requests. New scope for properties: The following properties were previously maintained for a single connection only. In version 12.0.1, these properties are accumulate to the database and engine level, and they can now be retrieved using database_property() and property(): ApproximateCPUTime -- approximation of CPU time spent by connection/db/server ReqCountXXX -- count of times connection entered state XXX={Unscheduled,Active,BlockIO,BlockLock,BlockContention} ReqTimeXXX -- total time connection spent in state XXX={Unscheduled,Active,BlockIO,BlockLock,BlockContention} The accumulation for these properties is done at the end of a request; this means that executing requests don't update the database/server properties until the request completes. New scope for counters: Perviously, some performance counters were defined at scope "con" or "con/eng". In version 12.0.1., these are instead defined as "con/db/eng" so that the property can be attributed to a particular database when the server is running more than one database. Bytes_Received Bytes_Received_Uncomp Bytes_Sent Bytes_Sent_Uncomp Carver_Heap_Pages Client_Stmt_Cache_Hits Client_Stmt_Cache_Misses Client_Stmt_Track_Mem Client_Stmt_Tracked Commit Cursor Heaps_Carver Heaps_Locked Heaps_Query Heaps_Relocatable Open_Cursor Packets_Received Packets_Received_Uncomp Packets_Sent Packets_Sent_Uncomp Query_Heap_Pages Query_Mem_Active_Curr Query_Mem_Grant_Failed Query_Mem_Grant_Granted Query_Mem_Grant_Requested Query_Mem_Grant_Waited Query_Mem_Grant_Waiting Requests_Received Rollback Statement With this change, these counters can now be retrieved using property(), db_property(), or connection_property(). ===============(Release Build - Engineering Case #657560)=============== Dynamic multiprogramming level (MPL) network server command line options (-gna, -gns, -gnl, and -gnh) will now generate an error if they are used on the personal server. For 12.0.0, these options were silently ignored, now for 12.0.1 using any of these options on the personal server will generate the following warning: Warning: option X is ignored by Personal Server. X can be one of -gna, -gnh, -gnl, or -gns ===============(Release Build - Engineering Case #657555)=============== Web procedures that use HTTPS are now supported on Windows CE. Note that the CE server still does not support HTTPS as a server protocol (i.e. -xs https), this is only for secure web procedures (i.e. a procedure that consumes a web service from a remote server). ===============(Release Build - Engineering Case #657530)=============== The restrictions on the type of argument datatypes that are allowed in remote procedure calls has now been relaxed considerably. In particular, a remote procedure call can now contain IN parameters of type long varchar, long nvarchar and long binary. In addition, varchar, nvarchar and binary parameters are no longer restricted to 255 bytes. As a result, when defining and using a proxy procedure, you can now use any datatype for IN arguments. However, long varchar, long nvarchar, long binary, numeric and decimal datatypes are still not allowed for OUT parameters, INOUT parameters or RETURN values. ===============(Release Build - Engineering Case #657526)=============== A new stored procedure called sp_forward_to_remote_server( IN @server_name varchar(128), IN @sql long varchar ) has been added. This stored procedure allows an application to execute a SQL statement on a remote server and retrieve any result sets generated by the statement. It should be noted that the SQL statement gets sent verbatim to the remote server; hence, it is not necessary for the SQL statement to be parseable by SQL Anywhere. This new stored procedure is in addition to the already existing FORWARD TO statement; but unlike the FORWARD TO statement, this new stored procedure can be used within procedures; however, since the schema of the remote result sets is completely arbitrary, this stored procedure cannot be used within the FROM clause of a SELECT statement. You can, nevertheless, declare a cursor within a stored procedure on this stored procedure and fetch the remote result sets that way. Note that if the SQL statement returns multiple result sets, then this stored procedure will return each remote result set in turn. The server must be defined with the CREATE SERVER statement to use this system procedure. TThe arguments are as follows: @server_name Use this CHAR(128) parameter to specify the server the SQL statement will be executed on. @sql Use this LONG VARCHAR parameter to specify the SQL statement to execute on the remote server. Note that an ALTER DATABASE UPGRADE is required to get the new stored procedure. Permissions: None Side effects: There are no local side effects to executing this stored procedure; however, since the SQL statement that gets executed on the remote is completely arbitrary, there may be side effects on the remote server. Example: The following very simple example uses the sp_forward_to_remote_server() stored procedure and a local function to determine the number of tables that a remote SQL Anywhere 12 database has. -- create the remote data access server create server rem class 'saodbc' using 'driver=SQL Anywhere 12;...'; -- assume extern logins are not needed -- create the local function that in turn calls sp_forward_to_remote_server create function fetch_num_remote_tables(in server char(128) ) returns int begin declare num_tables int; declare curs cursor for call sp_forward_to_remote_server( server, 'select count(*) from sys.systable' ); open curs; fetch next curs into num_tables; close curs; return num_tables; end -- fetch the number of tables from the remote server select fetch_num_remote_tables( 'rem' ) ===============(Release Build - Engineering Case #657416)=============== The USING clause of a CREATE SERVER statement can now contain "{varname}". Similarly, the AT clause for CREATE EXISTING and CREATE PROCEDURE statements can also contain "{varname}". When a connection to the remote server is established, or when the proxy table or proxy procedure is utilized, the "{varname}" in the USING or AT clause will get replaced with the contents of the connection variable named "varname". Note that the connection variable "varname" must be a CHAR, VARCHAR or LONG VARCHAR variable. All other datatypes will be rejected. Utilizing the "{varname}" feature will allow for creating dynamic remote data access servers, proxy tables and proxy procedures. The following example gives a better idea of how this new feature can be used. Note that this example uses a directory access server for demonstration but this new feature is not at all restricted to the type of remote data access server. SSuppose a dba has a database that is sometimes started on machine A with the server name server1 and at other times the database is started on machine B with the server name server2. Now suppose the dba wants to set up a directory access server that points to the local drive d:\users on machine B which is also the network driver w:\users on machine A. In addition, the dba wants to set up a single proxy table that all users can use to get the listing of their own directory located at users\userM. With the addition of variables in the USING and AT clause, the dba can now accomplish everything needed with a single directory access server and a single proxy table as follows: First, with the database running on machine B connect as dba and execute the following in DBISQL -- define the directory access server with variables in the using clause -- the two variables in this example are for the root of the directory access server and the subdirectory level create server dir class 'directory' using 'root={@directory}\\users;subdirs={@subdirs}'; -- next create explicit extern logins for each user that will be allowed to use the directory access server create externlogin dba to dir; create externlogin user1 to dir; create externlogin user2 to dir; ... create externlogin userM to dir; -- now use one of the user accounts to create the single proxy table that all users will use create variable @directory long varchar; set @directory = 'd:'; create variable @subdirs varchar(10); set @subdirs = '7'; create variable @curuser varchar(128); set @curuser = 'user1'; create variable @server varchar(128); set @server = 'dir'; -- this will now create a proxy table that points to @directory\users\@curuser on directory access server @server create existing table dbo.userdir at '{@server};;;{@curuser}'; -- we no longer need the variables so clean them up drop variable @curuser; drop variable @subdirs; drop variable @directory; -- we also no longer need an extern login mapping for dba drop externlogin dba to dir; -- now create a procedure that all users will use to view the contents of their individual user directory create procedure dbo.listmydir() begin declare @directory long varchar; declare @subdirs varchar(10); declare @server varchar(128); declare @curuser varchar(128); -- for this example we always use the "dir' remote data access server set @server = 'dir'; -- the root directory is based on the SQL Anywhere server the user is connect to set @directory = if property('name') = 'server1' then 'w:' else 'd:' endif; -- the subdir limit is based on the connected user set @curuser = user_name(); -- all users get a subdir limit of 7 except user2 who gets a limit of 1 set @subdirs = convert( varchar(10), if @curuser = 'user2' then 1 else 7 endif); -- now we are all set to go -- with all the variables set above the proxy table dbo.userdir now points to @directory\@curuser and has a subdir limit of @subdirs select * from dbo.userdir; end grant execute on dbo.listmydir to public; If userN where userN is not in (user1, user2, ... userM) attempts to use dbo.listmydir(), the select statement will fail due to the fact that userN does not have an extern login mapping for directory access server "dir". If, on the other hand, users userI and userJ where userI and userJ are both in (user1, user2, ... userM) attempt to use dbo.listmydir(), then userI will get a listing of his/her own directory located at users\userI and userJ will get a listing of his/her own directory located at users\userJ even though both query the exact same dbo.userdir proxy table. In addition, if the database now moves from machine B to machine A, then all will continue to work since the @directory variable in the USING clause will now get set to "w:\users" instead of "d:\users". ===============(Release Build - Engineering Case #649437)=============== Version 9.0.x has an optimization for a very large number of WHERE predicates that are in Disjunctive Normal Form (DNF), which was not implemented starting with version 10.0.0. For example: WHERE (T.A1 = c11 and T.A2 = c12 and ... and T.Ak =c1k) OR ..... (T.A1 = cN1 and T.A2 = cN2 and .... and T.Ak =cNk) AND (other predicates) The values for c11, c12, ..., cNk are constants, and N is large. The following sargable IN predicates were generated from the original predicates: T.A1 IN {c11,c21, ..., cN1} AND ... T.Ak IN { c1k, ..., cNk} If there existed an index on table T with a prefix on any combination of the columns T.A1, ..., T.Ak, then a partial index scan using the sargable IN predicates could have been chosen in the best access plan. For example, if an index 'idx1' existed on T < A2, Ak > then the partial index scan [ {c12, ..., cN2} JNL {c1k, ..., cNk} JNL T ] may have been used in the best access plan. The original predicate would still have been applied after the index scan as a postfilter. This optimization was not implemented starting with SA 10.0.0, as multiindex scans introduced in SA 11.0.0 and enhanced in SA 11.0.1 provided more general access methods using any combination of UNION and INTERSECTION of indexes. Multiindex scans performed better than the above optimization for small to medium size DNF predicates. However, multiindex scans can be inefficient when the number of predicates is large, for example, DNF predicates having 1,000 or more terms. This new feature addresses, in a very general way, these extreme cases and other cases when multiindex index scans use the same index. A multicolumn inmemory table is built with the exact combinations used in a DNF term, and this table is joined with the index scan. In the example above, if an index 'idx2' on T exists, the access method [{(c11,c12,...,c1k), (c21,c22,...,c2k),..., (cN1, cN2, ..., cNk)} JNL T] will be built. Prior to this change the following multiindex scan was considered: T UNION T UNION ... UNION T This multiindex scan could have been inefficient if N was greater than 1,000. ===============(Release Build - Engineering Case #657415)=============== Performance of index maintenance on IMMEDIATE REFRESH text indexes has been substantially improved. The improvement observed will depend on the particular workload, as well as the document and text index content. Text indexes indexing long documents will benefit the most from this improvement. ===============(Release Build - Engineering Case #657341)=============== Substantial performance improvements have been made for the following spatial operations: - Loading of (multi)polygons belonging to round earth spatial reference systems. - Loading of complex (multi)polygons (i.e., polygons defined by many rings or rings containing many points) - Spatial set operations (e.g., ST_Union, ST_Intersection, etc.) applied to complex geometries - Spatial predicates (e.g., ST_Contains, ST_Intersects, etc.) where one of the geometries is complex - Spatial predicates where one of the geometries is a point ===============(Release Build - Engineering Case #657311)=============== The spatial predicate ST_WithinDistanceFilter is now supported for geometries in round earth spatial reference systems. In addition, predicates involving ST_WithinDistance or ST_Distance will now make use of a spatial index if one exists. ===============(Release Build - Engineering Case #657228)=============== A new system procedure has been added, st_geometry_load_shapefile, which will make it easier to load ESRI shape files. The procedure creates a table and loads data from an ESRI shape file into the new table. The created table's columns are based on those in the shape file and shape file attributes. This system procedure is for use with the spatial feature. Syntax st_geometry_load_shapefile( shp_filename , srid , table_name [, table_owner [, shp_encoding ] ] ) Arguments - shp_filename A VARCHAR(512) parameter that identifies the location of the ESRI shape file. The file name must have the extension .shp and must have an associated .shx and .dbf file with the same base name located in the same directory. The path is relative to the database server, not the client application. - srid An INTEGER parameter that identifies the SRID for the geometries in the shape file. - table_name A VARCHAR(128) parameter the specifies the name of the created table. - table_owner An optional VARCHAR(128) parameter the specifies the owner of the created table. The default owner is the current user. - shp_encoding An optional VARCHAR(50) parameter that identifies the encoding to use when reading the shape file. The default encoding is ISO-8859-1. Remarks The st_geometry_load_shapefile system procedure first creates the table "table_owner"."table_name" using the column names a types from the ESRI shape file. Then the procedure loads the data from the shape file into the new table. If loading the data from the shape file fails, the created table remains. This procedures makes use of the sa_describe_shapefile system procedure and the LOAD TABLE ... FORMAT SHAPEFILE statement. Permissions RESOURCE authority is required. If the -gl option has been set to DBA, DBA authority is required. If the -gl option has been set to NONE, loading the data will fail. Side effects Automatic commit See also sa_describe_shapefile LOAD TABLE Admin tools load shapefile wizard Example The following examples creates the table "esri_load" with spatial reference system 1000004326 and loads the data from c:\esri\shapefile.shp: call st_geometry_load_shapefile( 'c:\\esri\\shapefile.shp', 1000004326, 'esri_load' ); ===============(Release Build - Engineering Case #657417)=============== The 'TOP limit START AT startat' and 'LIMIT limit OFFSET offset' constructs now support simple arithmetic expressions for 'limit', 'offset', 'startat' arguments; and TOP supports the 'ALL' limit indicating that all rows are to be returned after the specified 'startat'; and the maximum value for (limit + offset) is now 9223372036854775807 = 2^64-1 The new grammar is as follows: TOP range_expression range_offset TOP T_ALL range_offset LIMIT range_expression [OFFSET range_expression] range_expression: integer_or_var | '(' simple_expression ')' ; simple_expression: integer_or_var | simple_expression '+' simple_expression | simple_expression '-' simple_expression | simple_expression '*' simple_expression | '(' simple_expression ')' ; range_offset: /* empty */ | T_START T_AT range_expression ===============(Release Build - Engineering Case #657410)=============== One of the conditions for a query to be considered for bypassing the optimizer was to have no computed columns defined for the base table referenced in the FROM clause. This restriction has been removed. Common sub-expression elimination process using computed columns is done for bypassed queries similar to the queries using the Optimizer. ===============(Release Build - Engineering Case #657409)=============== Predicates of the form 'T.X IS NOT NULL' are now treated as sargable predicates by the SQL Anywhere Optimizer. Hence, this type of predicates can be used for partial index scans interpreted as "T.X > NULL". For example: create index idx1 on T(C1, C2); select * from T where T.C1 = 10 and T.C2 IS NOT NULL The query Q may have, depending on the selectivity of the predicates "T.C1 = 10" and "T.C2 IS NOT NULL", the following plan: T where the partial index scan on is set as follows: idx1: c1 = 10 NULL < c2 ===============(Release Build - Engineering Case #657204)=============== A new option has been added to control interpolation of ST_CircularString geometries called st_geometry_interpolation. It takes a set of key=value pairs as: key1=value1;key2=value2;.... Valid keys include: relative-tolerance-percent= absolute-tolerance= The value for relative-tolerance-percent specifies the maximum variation (in percent) in the distance from the centre point of the ST_CircularString segment to the interpolated ST_LineString segment, relative to the radius of the ST_CircularString segment. This value defaults to 0.3, which gives 40 points in a complete circle. Its minimum value is 0, meaning the absolute-tolerance setting is always used. The value for absolute-tolerance specifies the maximum absolute variation (in linear units) in the distance from the centre point of the ST_CircularString segment to the interpolated ST_LineString segment. This value defaults to the tolerance specified by the SRID. Its minimum value is also the tolerance specified by the SRID. If neither key is specified, the defaults are used. If only one key is specified, the other one is set to its minimum value. If both keys are specified, the minimum number of points will be produced such that both restrictions are satisfied. Regardless of the setting, there will be at least 3 points per curve segment. Additional points may be added to ensure the ST_Envelope of the ST_LineString is the same as that of the original ST_CircularString. Furthermore, no two consecutive points on the interpolated ST_LineString will be within tolerance of each other. ===============(Release Build - Engineering Case #629411)=============== The database option UUID_HAS_HYPHENS has been re-added. It can have the values On (default) and Off. If a uniqueidentifer value is converted to a string, then the string contains hyphens if the option value is On. ===============(Release Build - Engineering Case #625314)=============== It is now possible to use the Script Execution utility (dbrunsql) to reload a database without displaying the GUI, but still log output messages (results) to a file. Previously, if the -q option was not used the dbrunsql gui was shown regardless of the -g setting. Now, the -q and -g switches work together. If -g- is specified, the GUI will not be shown except for error messages. The -q option now only controls if data and warning messages shall be output to the GUI, the console, and/or an output file. SQL Anywhere - Sybase Central Plug-in ===============(Release Build - Engineering Case #657551)=============== The SQL Anywhere plug-in's support for viewing and editing permissions has been redesigned for version 12.0.1. Permissions are now viewed and edited from tabs in the right pane of the main Sybase Central window, rather than from property sheets. In addition, the permissions editors for tables, columns and views now distinguish between permissions that were granted by different grantors. ===============(Release Build - Engineering Case #640955)=============== When using the application profiler and choosing "Overall database performance based on the database schema", a new recommendation has been added when a table definition will slow query execution time. The recommendation is based on a query that will "weigh" the distribution of wide and narrow columns in a table definition (having at least 5 columns) and complain if the majority of wide columns come before the narrow columns. ===============(Release Build - Engineering Case #641265)=============== The left pane header now contains an icon to help clarify which toolbar button represents the left pane view. SQL Anywhere - Utilities ===============(Release Build - Engineering Case #641296)=============== When choosing to localize with the Deployment wizard, the Installation Wizard would have appeared localized, but Language was not set in the registry on the target machine. This has been corrected so that the SQL Anywhere Language registry entry is now set to match the deployment language. ===============(Release Build - Engineering Case #641994)=============== With the release of the 12.0.0 SQL Anywhere Monitor, it is possible to monitor more resources than previously possible. Unfortunately though, monitoring large numbers of resources presents a challenge in the number of alerts it's possible to receive. To this end, new functionality has been added to the Monitor to make both filtering and deleting large sets of alerts easier. The first new feature is two additional options for sending alert notifications via email, found under Administration -> Configuration -> Edit... -> Alert Notification The new options behave as follows: - "Only send email notifications for high-priority alerts", when set, will filter emails sent to operators in such a way that operators will only receive email notification when high-priority alerts are raised. Medium and low priority alerts will continue to be raised and will be viewable/resolvable from the main web-based UI as before. - "Do not send more than the given number of email notifications per day", when set, places a hard cap on the number of email notifications sent to each operator per day. When an operator has reached their cap of email notifications for a day, an email is sent to them alerting them of this fact, as well as informing them of ways to reset the cap. This cap is reset every night at midnight, at which point the operators can once again begin to receive email notifications. Alternatively, an administrator can click the "Reset Email Notification Sent Count" button to immediately reset the caps so that operators may begin to receive email notifications again. The second set of changes affects how the Alert Widget deletes alerts. Previously, the user would select one or more alerts and click the delete button, deleting those alerts. However, in the case of even just a few hundred alerts, this becomes unmanageable. With this change, when the user clicks the delete button on an Alert Widget, a new dialog is displayed. Its three options behave as follows: - "Delete selected alerts" is the same as the 12.0.0 behaviour. Only those alerts selected in the Alert Widget will be deleted. - "Delete alerts received before" will delete all alerts received before the given time. Note that this option will only delete the alerts for resources included in this Alert Widget; if a resource's alerts are not being shown in the Alert Widget, its alerts will not be deleted by this option. - "Delete alerts for the following resource" will delete all alerts for the selected resource. The list of resources to choose from is the same as the list of resources whose alerts are viewable from the Alert Widget. ===============(Release Build - Engineering Case #639646)=============== A new alert has been added to the SQL Anywhere Monitor to provide users with notification if their scale-out system has a large percentage of disconnected nodes. The new "Scale-out Nodes Disconnected" alert takes a user-supplied threshold value. If during data collection it is detected that this threshold of disconnected nodes is exceeded, an alert is raised. The alert also contains a list of all the servers currently disconnected. ===============(Release Build - Engineering Case #639139)=============== In SQL Anywhere 12 the new read-only scale-out feature was introduced which allows creation of an arrangement of read-only copy nodes to offload reporting or other operations that require read-only access to the database. Now, customers can obtain at-a-glance information about the health and availability of their scale-out configuration by using the SQL Anywhere Monitor. When monitoring a SQL Anywhere resource, a new widget option is available, "SQL Anywhere Scale-Out Topology". When monitoring the root node in the scale-out system, the new Topology Widget provides an overview of the parent/child relationships of Nodes in the scale-out system, as well as basic health and availability information. The information displayed in the Topology Widget is as follows: Server Name - The name of the node given when creating the scale-out system. See "CREATE MIRROR SERVER statement" in the docs http://dcx.sybase.com/index.html#1200en/dbreference/create-mirror-server-statement.html*d5e37248 Type - The node type defined when creating the scale-out system. See "CREATE MIRROR SERVER statement" in the docs http://dcx.sybase.com/index.html#1200en/dbreference/create-mirror-server-statement.html*d5e37248 State - The connection status of the node. Can be one of "connected" or "disconnected". See "sa_mirror_server_status system procedure" in the docs http://dcx.sybase.com/index.html#1200en/dbreference/sa-mirror-server-status-sysproc.html*d5e70531 Connections - The current number of connections to this node. See "sa_mirror_server_status system procedure" in the docs http://dcx.sybase.com/index.html#1200en/dbreference/sa-mirror-server-status-sysproc.html*d5e70531 Last Updated - The time the server information was last updated. See "sa_mirror_server_status system procedure" in the docs http://dcx.sybase.com/index.html#1200en/dbreference/sa-mirror-server-status-sysproc.html*d5e70531. Note that this value is not necessarily the same as the last time the Monitor fetched topology information for this scale-out system. ===============(Release Build - Engineering Case #640008)=============== The following enhancements have been made to the typing completer: - The owner name is no longer added to completed table, view, or procedure names if there is only one object in the system catalog with the given name. - A new option has been added: "The Enter key completes text". When the option is checked, pressing the Enter key completes the text with the selected item. When the option is not checked, pressing Enter will insert a newline into the text editor, but will not complete any text. This option is checked by default. If multi-line SQL statements are usually typed, it may be that leaving this option unchecked will result in fewer inadvertent completions being done. Note: If the arrow keys are used to change the selection in the completer list, or one of the list items is selected, pressing Enter will complete the text with the selected item. In all cases, pressing the Tab key will close the completer and complete the text in the editor. - The completer can now complete method names for spatial columns. e.g. if the insertion point immediately follows "ST_" in any of the following statements, the completer will show only methods for the spatial column "Shape": select S.Shape.ST_ from SpatialShapes S select Shape.ST_ from SpatialShapes S delete from SpatialShapes where Shape.ST_ delete from SpatialShapes S where S.Shape.ST_ update set Description='x' from SpatialShapes S where S.Shape.ST_ (Note: This is not a complete list of supported syntaxes) When trying to complete a method name for an object other than a table/view column, the completer will suggest method names as well as other database objects whose names match the method name prefix. For example, if the insertion point is at the end of the following statement: select (new Point()).ST_ the completer will list spatial methods, but also st_geometry_dump, StartDate, Status, etc. ===============(Release Build - Engineering Case #639651)=============== The typing completion feature has been improved. 1. The text completer now opens automatically when typing. This can be turned off from the Options window by clearing the "Open automatically" box on the "Text Completion" page. 2. SQL statements and keywords are now included in the list of suggestions. 3. The completer now correctly handles databases where strings are treated as case-sensitive but identifiers are not. 4. Performance has been improved. 5. The keyboard accelerators for use when the completion list is open have changed: Old Accelerator New Accelerator Function Tab Ctrl+A Show a context-free list of matches + Ctrl+Plus Add the item with its parameter list * Ctrl+Asterisk Add the item with its parameter and type list " Ctrl+Apostrophe Add the item enclosed in quotation marks 6. In addition to the Enter key, pressing the Tab key while the completer list is open accepts the selected item and closes the completer. 7. Columns from internal text tables are no longer shown. 8. Completed database object names, which are also SQL keywords, are automatically quoted. 9. If a function key is pressed, or if the menu bar is used while the completer is open, the selected completion item is added, the completer is closed, and then the function key (if any) is processed. 10. The "Text Compeleter" tab in the Options window has been clarified. Options to control whether tables, views, stored procedures, and SQL functions have been removed; the SQL parsing in good enough to guide the selection of the suggested items. UltraLite - Runtime Libraries ===============(Release Build - Engineering Case #645529)=============== When run on Windows desktop, UltraLite now supports long paths when creating, opening, or deleting databases. ===============(Release Build - Engineering Case #657540)=============== The documentation for UltraLite does not specify any side effects for the SET OPTION statement. In version 12.0.0 and earlier, UltraLite always commits as a side effect of setting any option (using the SET OPTION statement or SetDatabaseOption method). As of version 12.0.1, setting an option will only commit for permanent options. These are: global_database_id ml_remote_id Options which are temporary or connection-based by nature do not have a commit side effect. These are: commit_flush_timeout commit_flush_count isolation_level cache_allocation ===============(Release Build - Engineering Case #657528)=============== UltraLite will now grow its database file cache when warranted in response to database operations and as available memory allows. The application can also resize the cache explicitly (typically in cases where the application is requested to reduce its memory usage). The 'cache_size' connection parameter is now only the initial size. Since the cache will grow on demand, the default value for 'cache_size' is smaller than it was previously - in particular, the runtime will no longer try to cache the entire file initially. New connection parameters to control the cache size limits are: 'cache_min_size' - The minimum cache size, in bytes, with k and m suffixes as with 'cache_size'. 'cache_max_size' - The maximum cache size, in bytes, with k and m suffixes as with 'cache_size'. There are platform and memory size-specific defaults for these values. The default maximum size is limited to 20Mb for devices and 50Mb for desktops. Normally, the application should not have to specify any cache-size parameters. The new database option 'cache_allocation' is used to explicitly resize the cache. The value is a percentage of the minimum-to-maximum range. A value of zero means the minimum size, and a value of 100 means the maximum size. The 'cache_allocation' property returns the current cache size as a percentage value. ===============(Release Build - Engineering Case #641068)=============== Tables in UltraLite can now be marked as download-only. Changes to the table on the consolidated database are downloaded during synchronization, but local changes are not sent up to the consolidated database. Any table with the suffix "_download_only" will be marked as download-only. Tables can also be set to download-only by specifying "SYNCHRONIZE DOWNLOAD" for the sync constraint clause of the "CREATE TABLE" and "ALTER TABLE" SQL statements. Another related change is that the sync type for a table can only be changed if it doesn't have any unsynchronized changes that need to be uploaded. Previously, the runtime was more permissive in this regard, and changing the type with unsynchronized changes could have unforeseen consequences. UltraLite - UltraLite.NET ===============(Release Build - Engineering Case #657314)=============== Several new methods have been added to the UL.Net API to support asynchronous synchronization. public delegate void ULSyncProgressedDlg( IAsyncResult result, ULSyncProgressData data ) This method is invoked during synchronization to provide progress information. Unlike the SyncProgressed method of the ULSyncProgressListener interface, the synchronization is not being held up during calls to this method and it is safe to do GUI work or make UL.NET API calls. public IAsyncResult ULConnection.BeginSynchronize() Creates a new thread to do a synchronization and then returns immediately. public IAsyncResult ULConnection.BeginSynchronize( Control control, ULSyncProgressedDlg dlg, object state ) Creates a new thread to do a synchronization and then returns immediately. The ULSyncProgressedDlg method is invoked on the provided Control object regularly during sync to provide progress information. public void ULConnection.CancelSynchronize( IAsyncResult asyncResult ) Tells the synchronization thread to terminate and then returns immediately. public void ULConnection.EndSynchronize( IAsyncResult asyncResult ) Blocks until an asynchronously launched synchronization terminates. A ULException is thrown if the sync failed. public bool ULSyncProgressData.IsFinalSyncProgress This property is true if this is the final sync progress message for a sync. UltraLiteJ - Runtime ===============(Release Build - Engineering Case #657445)=============== A new function GetParameterID has been added to the programming interface for C and C++ programming. The method returns the base-one ordinal for a named host variable in a SQL statement. The ordinal may be subsequently used to set the value of a host variable. ===============(Release Build - Engineering Case #657317)=============== Tables in UltraLiteJ can now be marked as download-only. Changes to the table on the consolidated database are downloaded during synchronizations, but local changes are not sent up to MobiLink. Tables are set to download-only by specifying "SYNCHRONIZE DOWNLOAD" for the sync constraint clause of the "CREATE TABLE" and "ALTER TABLE" SQL statements. As with other tables that are synchronized, client-side uncommitted changes may result in download conflicts. XML format for unloaded databases now includes the sync="download" attribute on tables. Note, opening a database with 12.0.1 will upgrade the database so that it is no longer compatible with 12.0.0. ================================================================================ 12.0.1 Bug fixes ================ The following is a list of bugs fixed in this version of the software, as compared to the 12.0.0 release. MobiLink - Java Plugin for Sybase Central ===============(Release Build - Engineering Case #652202)=============== When editing an "Execute SQL" command in a remote task, the caret could have been displayed in the wrong position if the text contained tab characters. This has been fixed. ===============(Release Build - Engineering Case #647547)=============== When using Adaptive Server Enterprise 15.5 as the consolidated database, checking the MobiLink System Setup could have incorrectly reported a changed or corrupt setup, with several differences reported for columns changing type from numeric to integer, like the following: Table 'ml_database' has changed: Column 'rid' has changed: type from numeric to integer If the only differences reported were "type from numeric to integer" then the error can be safely ignored. This has been fixed. ===============(Release Build - Engineering Case #637326)=============== An error could have occurred when deploying a Synchronization Model for an ASE consolidated database when a synchronized table had a MONEY or SMALLMONEY column and conflict resolution was enabled for the table mapping. ASE would have reported the error "Can't specify a length or scale on type 'money'" when deployment tried to create a temporary table for conflict resolution, and incorrectly specified the length and scale for MONEY columns. This would also have occurred for a Microsoft SQL Server consolidated database with a synchronized table having a MONEY or SMALLMONEY column, and for an IBM DB2 consolidated database with a synchronized table having a LONG VARCHAR column. These problems have been fixed. Now the generated SQL does not specify length or scale for MONEY or SMALLMONEY columns with ASE and Microsoft SQL Server, or for LONG VARCHAR with IBM DB2. ===============(Release Build - Engineering Case #643418)=============== Opening the property sheet for a remote task before deploying it could prevent it from being executed by the MobiLink Agent if its SQL condition was empty and no other condition had been specified. This has been fixed. ===============(Release Build - Engineering Case #643576)=============== Sybase Central could have crashed when deleting a deployed Remote Task while the "Results" panel was selected. This has been fixed. ===============(Release Build - Engineering Case #642285)=============== Under rare circumstances, an exception (java.lang.NullPointerException) could have been thrown when switching to another synchronization model in the project. This has been fixed. ===============(Release Build - Engineering Case #642249)=============== If a synchronization model from version 10 or 11 was added to a version 12 synchronization project, the column mapping directions were not displayed correctly for upload-only or download-only table mappings. This was only a display problem; the synchronization scripts were generated correctly. This has been fixed. ===============(Release Build - Engineering Case #641299)=============== When adding a new consolidated database to a MobiLink project, it is scanned to see if any remote schema names have been installed previously and copies them into the project file. However, if there were multiple remote schema names, only one would have been imported. This has been fixed. ===============(Release Build - Engineering Case #641104)=============== Deployed remote tasks had a context menu item "Initiate...", which when clicked, would have opened a dialog to allow selecting the recipients (agents) for which the task should be initiated. This has been changed th that the menu item is now called "Initiate For All Recipients", and instead of requiring selection of the recipients, it assumes the task on all agents should be initialed. Initiating a task for a single agent, can still be done from the "Recipients" tab in the right pane. In addition to "Initiate For All Recipients", a new "Cancel For All Recipients" context menu item has been added which requests that the given task be cancelled by all of its recipients. ===============(Release Build - Engineering Case #641268)=============== The command editor for a remote task could have been inadvertently closed if the property sheet for the remote task was opened, then OK was clicked. This has been fixed. ===============(Release Build - Engineering Case #639298)=============== Creating a server message store would have fail when attempting to create a new, encrypted SQL Anywhere database for the store. This has been fixed. ===============(Release Build - Engineering Case #637481)=============== UltraLite client message stores created from Sybase Central did not have their store IDs set, even if a store ID was given in the Client Message Store wizard. Lack of the store ID would have caused a warning message to be displayed when attempting to disconnect from the database and stop the agent from Sybase Central. This has been fixed. ===============(Release Build - Engineering Case #635660)=============== When choosing columns to add to a delete shadow table in the Download Delete Subset tab for a table mapping, the expression for which the columns were required was not shown when the download delete subset option was "Same" and the download subset option was "Custom". Changing to the Download Subset tab was required to see the expression. This has been fixed. Now the custom download subset table list and SQL expression are displayed as read-only in the Download Delete Subset tab when the download delete subset option is "Same" and the download subset option is "Custom". ===============(Release Build - Engineering Case #635433)=============== Attempting to change the type of an existing command would have put the "Commands" panel in Sybase Central in a state where it was not possible to modify the command unless some other item was selected in the "Folders" pane, then the remote task again was selected again. Other symptoms included the drop-down list for the "Command type" flashing briefly before disappearing. This has now been fixed. ===============(Release Build - Engineering Case #635336)=============== The MobiLink Server Log File Viewer would have shown empty user names and remote IDs in its "Synchronizations" and "Details" panels when running on a non-English Solaris, Mac OS X, or French Linux system, and Sybase Central was set up to run in that non-English language. This has been fixed. ===============(Release Build - Engineering Case #634938)=============== The Task Wizard would have crashed if the "This task requires or creates a remote database" checkbox was checked, but no Remote Schema Names had been added to the project. The crash happened when the "Finish" button was clicked. This has been fixed. ===============(Release Build - Engineering Case #634933)=============== Deploying a Synchronization Model with the "Run this wizard initialized with last deployment settings" option would have given an empty field for the location of the UltraLite database file, instead of using the location from the last deployment. A workaround is to use the Browse button to pick the previously deployed UDB file. This has been fixed. ===============(Release Build - Engineering Case #634898)=============== The wrong year could have been selected after clicking the "Calendar" button in a task's property sheet, or in the "Delete Agent Events" window. The problem occurred only if a date in a year other than the current one was selected. This has been fixed. ===============(Release Build - Engineering Case #634559)=============== Upgrading a version 10 Synchronization Model with server-initiated synchronization enabled would have lead to the ml_set_sis_sync_state stored procedure being called in two events, because the old end_publication script was not removed when the replacement publication_nonblocking_download_ack event script was generated. This has been fixed. ===============(Release Build - Engineering Case #634556)=============== For a Synchronization Model using server-initiated synchronization and a SQL Anywhere consolidated database, the generated publication_non_blocking_download_ack event script would have included a GO delimiter that caused an error when the script executed. This has been fixed. ===============(Release Build - Engineering Case #634198)=============== When deploying a Synchronization Model with Java or .NET table scripts, the scripts would not have been added. Instead of having the SQL to define such scripts, the generated SQL file would have included an error message "Scripts of type 'x' not supported" where 'x' was Java or .NET. This has been fixed. ===============(Release Build - Engineering Case #634195)=============== Synchronization model generated event scripts with errors or warnings could have included lines starting with #ERROR or #WARN, instead of having commented error or warning messages. This has been fixed. ===============(Release Build - Engineering Case #630547)=============== When updating an Oracle consolidated database schema for a Synchronization Model which had used a subset of owners for schema loading, by default the schema would have been loaded for all owners. Now the default is to use the same owner subset. ===============(Release Build - Engineering Case #633527)=============== When creating a Remote Task or when setting a task's properties checking the "AC Power" checkbox, and selecting "Computer is running on AC power" from a combobox, was required to specify that a task should run only when the remote computer was running on AC power. Now, the combobox has been removed and the checkbox text simply says "Computer is running on AC power". ===============(Release Build - Engineering Case #633520)=============== The "Rows awaiting upload" checkbox was enabled in the property sheet for a Remote Task even if that task was associated with a Remote Schema Name for a SQL Anywhere database. Now, the checkbox is disabled in this case. ===============(Release Build - Engineering Case #633503)=============== When attempting to name or rename a task, if the new name contained characters that were not allowed in a file name (e.g. "\" or "?"), the property sheet for the remote task would simply refuse to close without explanation. This has been fixed so that an error message is now displayed. ===============(Release Build - Engineering Case #633376)=============== In the Create Synchronization Model wizard, if a download subset was setup by user or remote ID using a joined table, and the joined table was also synchronized, then the download subset clause generated for that table would have joined the table to itself. This has been fixed. A workaround is to change the download subset in the table mapping editor to not use a joined relationship table. ===============(Release Build - Engineering Case #633243)=============== If an ASE consolidated database was added to a project, it would have been shown as a "SQL Server" database in the user interface. Now, the database type text is "Adaptive Server Enterprise". This affects the following parts of the UI: 1. The "Product" column on the "Consolidated Databases" tab 2. The property sheet for a consolidated database 3. The "Display Name and Description" page of the Add Consolidated Database Wizard 4. The "Consolidated Database Schema" page of the Create Synchronization Model Wizard 5. The "Consolidated Database Deployment Destination" page in the Deploy Synchronization Model Wizard 6. The "Consolidated Database Schema" page of the Update Schema Wizard ===============(Release Build - Engineering Case #633155)=============== When deploying a Synchronization Model on Linux, Unix or Mac systems, the .sh files generated for the MobiLink server, remote database, synchronization client and consolidated database could have failed if command-line options (such as a connection string) or deployment options (such as the MobiLink server name) contained spaces. This has been fixed. The options are now quoted in the generated .sh files. A workaround is to edit the generated files to quote the options with spaces. ===============(Release Build - Engineering Case #633269)=============== Attempting to deploy a task containing characters that were not supported by the consolidated database, would have crashed Sybase Central. For example, setting a task description containing Japanese into a latin1252 database. The crash has been fixed. The new behavior in this situation depends on the consolidated database. In most cases the string will be degraded with the unsupported characters replaced. MYSQL will raise an error. ===============(Release Build - Engineering Case #632988)=============== It was possible for the MobiLink Server Log File Viewer to crash when selecting the "Messages" or "Summaries" tab for the first time. This crash would have happened only very rarely, and has now been fixed. ===============(Release Build - Engineering Case #632766)=============== The Table Mapping editor was missing a "Download Delete Subset" cascading menu, which meant it was not possible to set the download delete subset setting for multiple table mappings in a single operation. This has been fixed. ===============(Release Build - Engineering Case #632516)=============== The Remote Task wizard offered three unsupported options for the battery level condition: "Less than 25%", "Less than 50%" and "Less than 75%". These options have now been removed from the wizard. ===============(Release Build - Engineering Case #632446)=============== The MobiLink server stream options set in the Deploy Synchronization Model wizard would not have been set in the batch file created to run the MobiLink server. This has been fixed. A workaround is to edit the generated batch file to add the stream options. ===============(Release Build - Engineering Case #631777)=============== The Command Editor was inadvertently shown after clicking "Select All" while a tab other than "Commands" was selected for a deployed remote task. This has been fixed. ===============(Release Build - Engineering Case #631672)=============== In the Create MobiLink Agent wizard, if creating agents from a file was elected and the file was previewed, then a different file was selected, the preview page was not updated to show all of the agent names in the new file. This has been fixed. ===============(Release Build - Engineering Case #631669)=============== Attempting to deploy a remote task to a consolidated database to which connection was not possible wou8ld have resulted in an assertion failure message. This has been fixed so now an error message is displayed saying that the connection failed. ===============(Release Build - Engineering Case #631633)=============== The width of the "Search" field in the Deploy Remote Task wizard could have been so small that the component was unusable. This did not happen on all computers, and was dependent on which font (and size) the computer was configured to use. This has been fixed. ===============(Release Build - Engineering Case #631493)=============== Clicking a variable name, after clicking the "Variables" button in the Remote Task wizard or property sheet, would have incorrectly resulted in a beep. Now, clicking the variable name inserts the variable name into the "SQL Condition" field. ===============(Release Build - Engineering Case #631234)=============== It was possible to create a Remote Task with an empty name (which is generally not allowed) by pasting it and then clearing the Name field in the resulting "Paste" dialog. The same problem also affected the pasting of groups. This has been fixed. ===============(Release Build - Engineering Case #631104)=============== Checking the "Enable Agent logging" checkbox on the "Logging" page of an Agent Configuration File property sheet enables six more check boxes allowing for specifying what kind of messages are to be logged. Previously, the options in the file were not read correctly so that none of those six checkboxes were ever checked, even though the configuration file was correct. This has been fixed. ===============(Release Build - Engineering Case #631096)=============== If deleting a Remote Schema Name failed for any reason, it was still removed from the project. Now, it remains in the project. In a related issue, if the Remote Schema Name cannot be deleted because there are agents still managing databases with that Remote Schema Name, an error message is now shown explaining that condition as plainly as possible. Previously, the underlying error message from the consolidated database was displayed, which was not helpful. ===============(Release Build - Engineering Case #631018)=============== A newly-created remote task command might not have been saved when a different tree item was selected. This happened very occasionally, and has been seen only on Linux computers. This has been fixed. ===============(Release Build - Engineering Case #631009)=============== Changes made to an agent's properties would not have been made permanent after clicking any of the items in the agent's "Set" menu. A similar problem affected changes made in the property sheet for a remote database to the description or the agent's connection string. These have been fixed. ===============(Release Build - Engineering Case #630403)=============== Sybase Central would have crashed if the Agent Wizard was closed before any file browser that was opened from the wizard. This has been fixed. ===============(Release Build - Engineering Case #630082)=============== The "Apply" button in the client properties window (for a given server store) was not enabled correctly, and when it was enabled, it did not consistently apply the changes. This has been fixed. ===============(Release Build - Engineering Case #630073)=============== The contents of the combobox in the "Schedule Editor" window could have been truncated on some systems, depending on which font was being used by Sybase Central. This has been fixed. ===============(Release Build - Engineering Case #629437)=============== The user name in the status message in the Installing the MobiLink System Setup dialog would have been truncated if it was more than a few characters. This has been improved, although very long names may still be truncated. A workaround is to wait until the task finished, as the completion dialog shows the full name. MobiLink - MobiLink Agent ===============(Release Build - Engineering Case #651375)=============== With a Microsoft SQL Server consolidated, MobiLink client synchronizations may have failed after making schema changes. The MobiLink synchronization log would have shown SQL Server error #16954. When using SQL Server tracing, an additional error #156 (syntax error) could have been seen. The cause appears to be a bug in SQL Server 2005, but has not been seen on SQL Server 2008. This has now been fixed. To patch an existing MobiLink system setup: 1. Shut down the MobiLink servers 2. execute the SQL in %SQLANY12%\MobiLink\Setup\syncmss_ebf.sql The patch only updates stored procedures, no data will be disturbed by this script. MobiLink systems setup after installing this fix do not need the patch to be applied. ===============(Release Build - Engineering Case #646150)=============== The MobiLink Agent for central adminstration of remote databases would have given an obscure error message like: Task task1 (ID 50): command number 1 not executed, error code 0 when a task was executed that connected to a remote database, and the adapter library (eg. mlauladapt12.dll) for that remote database was missing from the agent deployment. This has been fixed so that a clearer error message is now displayed. ===============(Release Build - Engineering Case #639397)=============== The MobiLink Agent for central adminstration of remote databases may not have shut down, or may not have shut down in a timely manner, when retrying a task that had a large number of retries or a large retry delay. This has been fixed. ===============(Release Build - Engineering Case #638896)=============== The MobiLink Agent for central adminstration of remote databases could have displayed unlocalized messages in its output window when running at v4 or higher verbosity. This has been fixed. ===============(Release Build - Engineering Case #636807)=============== The MobiLink Agent for central administration of remotes could have allowed a regular task to run concurrently with a high priority task. This was incorrect, since a high priority task is supposed to run when no other tasks are running and exclude other tasks from starting while it is present on the agent. The incorrect behavior would only have occurred if at least two regular tasks were running concurrently, and then a high priority task was deployed to the agent. This has been fixed. ===============(Release Build - Engineering Case #635442)=============== The MobiLink Agent for central administration of remotes could have failed to upload its log file if the file upload command used the variable 'agent_log' for the filename. The failure would have occurred if the full filepath of the log file was long (more than 100 bytes). This has been fixed. ===============(Release Build - Engineering Case #634184)=============== The MobiLink agent for central administration of remotes could not be configured as a Windows service with dbsvc. This has been fixed. MobiLink - Monitor ===============(Release Build - Engineering Case #638859)=============== When connection parameters were specified on the MobiLink Monitor command line, the splashscreen did not close. This has been fixed. MobiLink - QAnywhere client ===============(Release Build - Engineering Case #645659)=============== Under some conditions, the QAManager Close() method could have taken up to a minute to return. This has been fixed. The Close() method will now always complete in a reasonable amount of time. ===============(Release Build - Engineering Case #640241)=============== In rare circumstances, the QAnywhere C++ client could have deleted a received and acknowledged message before the acknowledged status was transmitted back to the sender. This has been fixed. ===============(Release Build - Engineering Case #636568)=============== The QAManagerBase.close method could have hung when using a SQL Anywhere database as a message bus (ie. the message store is initialized with qaagent -sil). This has been fixed. MobiLink - QAnywhere server ===============(Release Build - Engineering Case #651880)=============== The reply-to address for messages originating from a Weblogic 10.3 JMS server were formatted in such a way that they could not have been resolved by the JMS connector. This has been fixed. ===============(Release Build - Engineering Case #633007)=============== The following English error message could have been logged in the MobiLink server log on a non-English system: "Error canceling message. Cannot cancel a message that has already been downloaded to its recipient or is in a final state." This message has now been localized. MobiLink - Relay Server ===============(Release Build - Engineering Case #653540)=============== The Relay Server State Manager (rshost) could have crashed if initialization failed. Specifically, if creating the shared memory failed. This has been fixed. ===============(Release Build - Engineering Case #655573)=============== The integrated Outbound Enabler could have crashed Mobilink, if in a Relay Server farm environment, one of the Relay Servers in the farm was down. This has been fixed. ===============(Release Build - Engineering Case #652735)=============== When a Relay Server shuts down, it notifies connected Relay Server Outbound Enablers (RSOE) to perform an internal shutdown before the RSOE enters recovery mode. The RSOE also notifies the Relay Server via the down channel when the the RSOE shutdown is completed. The HTTP subsystem used on IIS7.5 prevented a Relay Server from receiving the shutdown notification reliably and in turn caused an unnecessary hard shutdown of the Relay Server after a 100 sec delay. This has been fixed so that the Relay Server now handles this case properly as a graceful soft shutdown without a delay. ===============(Release Build - Engineering Case #652243)=============== MobiLink clients using persistent HTTP 1.0 connections may fail occasionally when using the Relay Server. The failure was isolated to synchronizations that ran into a rare timing problem. This has been corrected. ===============(Release Build - Engineering Case #649044)=============== When a backend server drops a connection without providing any HTTP response, IIS ver7 may inject "200 OK" as a response to the client. This may have caused MobiLink clients to be fooled to spin into an infinite loop by repeatedly getting 200OK at high frequency. This change will allow the Relay Server to detect this case and explicit send a "400 Bad request with on backend server response" response. ===============(Release Build - Engineering Case #645223)=============== The Relay Server for IIS7 could have unexpectedly disconnected persistent http connections after finishing relaying a server response. This has been fixed. ===============(Release Build - Engineering Case #644112)=============== When the backend machine was under heavy load, a standalone Relay Server Outbound Enabler may have reported the following internal error HandleNotification: Error receiving for sidx= system error ({error code}) With this change, the error is now less likely to occur. ===============(Release Build - Engineering Case #644105)=============== When a heavy download occurred, the Relay Server Outbound Enabler may have unnecessarily timed out the Up channel. This has been fixed by relaxing the Up channel liveness timeout when the Down channel is busy. ===============(Release Build - Engineering Case #643812)=============== When a backend server was using an id longer than 44 characters, the client may not have been able to access the backend server. This has been fixed. ===============(Release Build - Engineering Case #643019)=============== In rare situations, data corruption may have occurred during up channel renewal when the backend server was under high load. By default, channel renewal occurs whenever 2G of data has been uploaded to the Outbound Enabler. Since the up channel renewal mechanism has been replaced by chunk encoding in the version 11.0 Apache Relay Server, and all IIS Relay Servers, this issue only applies to version 12.0 Apache or IIS Relay Servers working against older Outbound Enablers (earlier than 11.0.1.2446) which don't support chunking. Up to 64k of upload data could have been lost when this problem occurred. This problem has now been fixed. ===============(Release Build - Engineering Case #642827)=============== The Relay Server for IIS7 would have failed to stream Afaria downloads, and was causing the Afaria client to timeout. This has been fixed. ===============(Release Build - Engineering Case #641965)=============== The Relay Server could have failed to reconnect the Outbound Enabler's down channel, and displayed the following error message: "RSE1015: Invalid first 'OE_DNCHANNEL_RECONNECT' packet from the outbound enabler". This has been fixed. ===============(Release Build - Engineering Case #638268)=============== When connecting a device that supports the OMA Device Management protocol directly to an Apache based Relay Server, the device would have displayed an error stating “Invalid Host Address”. The Afaria Server still provisions the device, but the Afaria OMA-DM Server logs state: "... authentication: no credentials in message “. When sending the response back to the client, the Relay Server (when run on systems other than Linux) was incorrectly setting the content-type header as text/plain instead of application/vnd.syncml.dm+wbxml. This has now been fixed. ===============(Release Build - Engineering Case #638148)=============== When running on systems other than Linux, if the Relay Server State Manager (rshost) was not running and a client made a request invoking the client module, this request could have crashed the module. This has been fixed. ===============(Release Build - Engineering Case #635062)=============== The Relay Server Outbound Enabler (RSOE) could have failed to connect to an Apache Relay Server, with the error message "HTTP chunk length too long". The same RSOE would not have reproduced this error with a Microsoft IIS webserver. This has been fixed. ===============(Release Build - Engineering Case #633685)=============== Under rare situation, the Relay Server Outbound Enabler (RSOE) may have crashed during channel renewal. This has been fixed. ===============(Release Build - Engineering Case #631253)=============== In the property sheet for a Relay Server farm, if a custom command line for the Relay Server Outbound Enabler was specified, it was not displayed when the property sheet was subsequently opened. This has been fixed. MobiLink - RelayServer plug-in for Sybase Central ===============(Release Build - Engineering Case #633643)=============== The "Deploy Configuration File" window indicated that a Relay Server URL was to be entered, which was not correct. What was supposed to be entered was the URL suffix (everything after the host and port number). The label for the field has been changed to "Relay server URL suffix" and an example has been added under the field to illustrate typical values. Also, the code which was supposed to populate the "Relay Server URL suffix" field with whatever value was used previously was incorrect, and has been fixed. ===============(Release Build - Engineering Case #632776)=============== The descriptions for Relay Servers were always shown as empty in the "Deploy Configuration File" window, even if they were not empty. This has been fixed. ===============(Release Build - Engineering Case #632770)=============== When deploying a configuration file to multiple servers, the window titled "Deploy Configuration" could have stayed open indefinitely with the last status line "Checking Relay Server configurations". This would have happened if the security token for any backend server was empty. This has now been fixed. ===============(Release Build - Engineering Case #632736)=============== On Mac OS X systems, Sybase Central would have crashed when importing a configuration file and clicking the "Save" button. This has been fixed. MobiLink - SA Client ===============(Release Build - Engineering Case #647851)=============== During HTTPS synchronizations, MobiLink clients could have crashed in MobiLink's RSA encryption library. This has been fixed. ===============(Release Build - Engineering Case #655939)=============== The MobiLink client may have crashed while attempting to grow its dynamic cache if a memory allocation failed. This has been fixed. ===============(Release Build - Engineering Case #655810)=============== The MobiLink client was not freeing some memory when it shrank its cache. This would have caused its memory usage to increase over time. This memory leak has now been fixed. ===============(Release Build - Engineering Case #638770)=============== When using the Dbmlsync API (either the C++ or .Net version), events are retrieved using the GetEvent method. One of the events that might be returned is DBSC_EVENTTYPE_PROGRESS_INDEX, which includes an integer that is supposed to be between 0 and 1000 and indicates how close the current phase of synchronization is to completion. This value is intended to be used to update a progress indicator. Occasionally, the DBSC_EVENTYPE_PROGRESS_INDEX events would have been generated with values greater than 1000. This happened during the log scan phase of synchronization, when the -x command line option or the LogRenameSize sychronization profile option was used. It could also happen if operations were occurring to the remote database during synchronization. This has been fixed. The index should now always be between 0 and 1000. ===============(Release Build - Engineering Case #638242)=============== In rare situations, when multiple instances of the MobiLink client (dbmlsync) were run concurrently on the same machine, one or more of the instances may have crashed. It was possible that this problem might also have manifest itself as corrupt data sent to the MobiLink server, but that would have been extremely unlikely. This behaviour has been fixed. ===============(Release Build - Engineering Case #637333)=============== When using the ADO.NET Provider with a .NET Framework 4.0 Client Profile, Visual Studio 2010 generated some compile errors. This problem has been fixed. ===============(Release Build - Engineering Case #636557)=============== Attempting to delete properties and transmission rules from the clients defined within a Server Message Store, could have failed either with or without an error message. This has been fixed. ===============(Release Build - Engineering Case #635072)=============== Specifying a single, empty authentication parameter on the dbmlsync commandline, or using a synchronization profile, would have caused dbmlsync to report "out of memory". For example specifying the following on the commandline would have caused the error: -ap "" This problem has been fixed. Note, a workaround is to specify the parameter using a single comma. For example -ap , This passes a single empty authentication parameter but does not cause the "out of memory" error. MobiLink - Streams ===============(Release Build - Engineering Case #653470)=============== MobiLink clients (except UltraLiteJ) could have failed to authenticate to third party servers or proxies when using digest HTTP authentication. In particular, if the third party server's or proxy's response contained nextnonce attribute in the Authentication-Info header. This has been fixed. ===============(Release Build - Engineering Case #649135)=============== MobiLink clients (except UltraLiteJ) could have failed to authenticate to third party servers when using digest HTTP authentication. In particular, it would have failed when the algorithm was "MD5-Sess" instead of "MD5". This has been fixed. ===============(Release Build - Engineering Case #638492)=============== For MobiLink clients, except UltraLiteJ, it was possible to receive an "Out of memory" or STREAM_ERROR_MEMORY_ALLOCATION error during TLS or HTTPS synchronizations. Incorrectly attempting a very large memory allocation has bee fixed. MobiLink - Synchronization Server ===============(Release Build - Engineering Case #652609)=============== When using Oracle as a back-end database, synchronizations may have failed with the error ORA-08207. This has been fixed. ===============(Release Build - Engineering Case #647345)=============== The data for an upload stream may not have been fully uploaded into the consolidated database if the consolidated database was running on Microsoft SQL Server and errors occurred in the upload. For this to have occurred, the connection property, XACT_ABORT must have been set 'ON' in the consolidated database, and the handle_error script must have returned 1000 (skip the row and continue processing). This problem has now been fixed. ===============(Release Build - Engineering Case #648839)=============== When a consolidated database was running on an Oracle server and the MobiLink server login ID did not have permission to access the Oracle gv$transaction table, data that was modified in the Oracle database (without commit) before the MobiLink server started the download could have been excluded in the download stream. Data would never have been downloaded to this remote database, if a timestamp based download was used in their synchronization logic. This has been corrected so that now if the login ID does not have permission to access the gv$transaction table, the MobiLink server will fail the synchronization, if the sync contains a download request, and the generate_next_last_download_timestamp script is not defined. For synchronization logic that does not use timestamp based download, users must grant Select permission to the MobiLink server login ID, or create a script for the generate_next_last_download_timestamp event. This script can be defined as an ignored script using the syntax, '--{ml_ignore}'. ===============(Release Build - Engineering Case #642568)=============== If a synchronization failed with a protocol error, some later synchronization could have failed with a translator or right truncation error. It was also possible that instead of failing, the later sync could have made use of the failed syncs to, for example, insert it into the consolidated. These issues have been fixed. ===============(Release Build - Engineering Case #639825)=============== The 32-bit authentication value sent to MobiLink clients was being truncated to 16-bits. This has been fixed. In order to use this fix, both clients and server must be updated. If the use of this fix is not required, it is not necessary to upgrade both the clients and server. ===============(Release Build - Engineering Case #639012)=============== The script events publication_nonblocking_download_ack, nonblocking_download_ack and generate_next_last_download_timestamp may have incorrectly been passed the client Remote ID. This would have occurred for non-SQL scripts as well as SQL scripts that used the question mark notation. This has been fixed so that the Remote ID is no longer passed to these scripts. Note that the documentation is correct. ===============(Release Build - Engineering Case #637309)=============== The MobiLink server could have crashed at the end of a version 9 or earlier synchronization request, or while processing the upload stream from a version 10 or later synchronization request. Also, the MobiLink server was not able to distinguish between empty strings in varchar(8) or smaller columns, binary(16) or smaller values made of only 0s, the integer 0, and null values when filtering the download. This could have caused rows to be incorrectly filtered from the download. For example, if an empty string was uploaded in a row, and the only difference between a downloaded row and that uploaded row was that the empty string became null, the row would have been ommitted from the download and the remote would not have received that update. These issues have been fixed. ===============(Release Build - Engineering Case #637487)=============== In very rare cases, the MobiLink server would have generated the error: 'Function sequence error' and aborted the synchronization request, when an upload stream contained spatial data. This problem has now been fixed. ===============(Release Build - Engineering Case #636715)=============== The iAS ODBC driver for Oracle would have returned a wrong value for a parameter indicator through the ODBC API, SQLBindparameter( ..., c_type, ..., param_type, ..., &indicator ), if it was called with the following parameters: 1) the C data type of the parameter was SQL_C_WCHAR or SQL_C_CHAR 2) the type of parameter was SQL_PARAM_INPUT_OUTPUT, but the corresponding parameter used in the SQL statement was input-only Due to this problem, the data for the user-defined named parameters in the MobiLink server may have been truncated after each use when the named parameter was defined as {ml u.varname} and the parameter used in the SQL statement was input-only. This has now been fixed. ===============(Release Build - Engineering Case #637169)=============== Starting with Visual Studio 2010, class libraries built with with the default project settings will no longer work with a MobiLink server running with its default CLR version. There are two workarounds for this: 1) Change the target Framework of the VS project. When creating a new project, there is a drop down above the list of project types that contains ".NET Framework 4"; change this to ".NET Framework 2.0", ".NET Framework 3.0", or ".NET Framework 3.5". If a version 4 project has already been created, change the target framework by right-clicking on the project in the Solution Explorer, and selecting "Properties" in the context menu. The target framework can be set on the "Application" tab. When changing the target framework, there is no longer access to .NET 4.0 features; to use newer features, use the next workaround. 2) Tell the MobiLink server to load the version 4 framework. To do this, add -clrVersion=v4.0.30319 to the -sl dnet options. The "30319" is the specific build number of the framework installed and may be different on your machine. To find the correct version, look in the .NET install location, which is typically "c:\WINDOWS\Microsoft.NET\Framework\". The clrVersion to specify is the v4.0 sub-directory there. ===============(Release Build - Engineering Case #637063)=============== During a soft shutdown, the MobiLink server did not stop accepting new requests. This has been fixed. Now, when a new request connects during shutdown, the server will abort the request and print a new error, -13074: "Aborting request that started during shutdown". ===============(Release Build - Engineering Case #640035)=============== The entry in the documentation for the ml_add_column system procedure incorrectly suggested a behaviour change, that "ml_add_column names are overidden by names from the client, if they are supplied." The ml_column entries always override names and orderings sent up from the client. Note that the point is moot for the vast majority of deployments, because most deployments: (a) have one true column ordering, and (b) do downloads. MobiLink currently does not support downloads to remotes with different column orderings with the same names using the same script version. Use different script versions, each with a known column ordering, to support downloads to different column orderings. ===============(Release Build - Engineering Case #635977)=============== The MobiLink server could have hung if it was shutdown after the consolidated server was shutdown or the consolidated server had crashed. This has been fixed. ===============(Release Build - Engineering Case #635300)=============== The text displayed by an evaluation version of the MobiLink server was truncated. This has been fixed. ===============(Release Build - Engineering Case #632869)=============== Using the -ppv command line option ("print periodic performance values") could have degraded the MobiLink server's performance if there were many unsubmitted error reports. This was most noticable when using -ppv 1, and there were more than one thousand unsubmitted reports. This has been fixed by removing the NUM_UNSUBMITTED_ERROR_RPTS value from the -ppv output. The number of unsubmitted error reports can still be found by using the SQLAnywhere Monitor for MobiLink, or by counting the lines output by "dbsupport -lc". ===============(Release Build - Engineering Case #632519)=============== Changes made to INOUT script parameters in .NET scripts were ignored unless the script accepted all the possible parameters for the event. This has been fixed. ===============(Release Build - Engineering Case #631119)=============== If the empty string was passed into an SQLNativeSQL or SQLPrepare function, it was possible for the iAS Oracle ODBC Driver to have crashed. This has been fixed. The SQLPrepare function will now return the error "Invalid string or buffer length", and the SQLNativeSQL function will now simply set the out parameters to the empty string as well. ===============(Release Build - Engineering Case #632040)=============== On 64-bit systems, it was possible for the JDBC driver to crash if some statement attributes were queried. This has now been fixed. ===============(Release Build - Engineering Case #629058)=============== A Java VM running inside the MobiLink server could have run out of memory if the server had many requests with different script versions and some sync scripts made calls to DBConnectionContext.getConnection(). This has been fixed. MobiLink - Utilities ===============(Release Build - Engineering Case #652249)=============== The title line of the usage screen for the QAnywhere Stop utility (qastop) may have contained an untranslated character. This has been fixed. ===============(Release Build - Engineering Case #652247)=============== The title line of the usage screen for the MobiLink Agent stop utility (mlastop) may have contained an untranslated character. This has been fixed. ===============(Release Build - Engineering Case #650870)=============== The MobiLink Replay utility (mlreplay) could have crashed when using a replay DLL/shared object if the recorded protocol being replayed was not the same as the recorded protocol used to generate the code for the replay DLL/shared object. This has been fixed so that code can be generated once and then replayed with many different recorded protocol files so long as the schema is the same. ===============(Release Build - Engineering Case #647701)=============== Simulated clients of the MobiLink Replay utility (mlreplay) could have timed out prematurely on Linux with the following message in the log: "Unable to select socket status. The system-specific error code is 4 (hex 00000004)". This has been fixed. ===============(Release Build - Engineering Case #644090)=============== The MobiLink Replay utility (mlreplay) could have incorrectly calculated the download apply time when multiple simulated clients were replaying the recorded protocol. This has been fixed. ===============(Release Build - Engineering Case #643703)=============== The MobiLink Replay utility (mlreplay) may have logged download success messages before the download was fully completed. In the Replay utility, a download is complete once it has received all the data from the MobiLink server and the download apply time has been reached. Prior to this change, mlreplay would have logged the download success message after receiving all the data from the MobiLink server, but before the download apply time had been reached. This has been fixed. ===============(Release Build - Engineering Case #638374)=============== The MobiLink Replay utility (mlreplay) could have been run with less than 1 simulated client (using the –n option), which could have caused a “Memory allocation failed” error, or for mlreplay to have crashed. This has been fixed so that if mlreplay is run with less than 1 simulated client, it simply prints the usage message (which states the minimum number of simulated clients is 1) and exits. ===============(Release Build - Engineering Case #635357)=============== A deleted row with a blob column could have been created with an invalid format when using the MobiLink Replay utility's replay API if the code generated by mlgenreplayapi was modified so that the blob value can be passed to the Delete method of the MLReplayUploadTable_ class. The result of trying to synchronize this deleted row would have been a failed synchronization. This has been fixed. ===============(Release Build - Engineering Case #635175)=============== When there was a design problem in the Notifier property (e.g. user defined a request_cursor referencing an unknown column), the Notifier would have reported the SQLException on MobiLink server startup, but the error report did not contain enough context information to pinpoint the issue efficiently. The Notifier would also have produced repeated NullPointerException in the MobiLink log after it failed to start. This has been fixed to add context information in addition to the SQLException and stop the Notifier from running if it has encountered a design problem. The following is an example output after the fix.
[-10133] java.lang.Exception: Notifier(Simple).request_cursor: Failed to prepare request cursor
[-10133] at ianywhere.ml.notifier.Notifier.connectDB(Notifier.java:390)
[-10133] at ianywhere.ml.notifier.Scheduler.connectDB(Scheduler.java:360)
[-10133] at ianywhere.ml.notifier.Scheduler.run(Scheduler.java:428)
[-10133] at java.lang.Thread.run(Thread.java:619)
[-10133] Caused by: java.sql.SQLException: [Sybase][ODBC Driver][SQL Anywhere]Column 'bogus_content' not found
[-10133] at ianywhere.ml.jdbcodbc.IConnection.nativePrepareStatement(Native Method)
[-10133] at ianywhere.ml.jdbcodbc.IConnection.prepareStatement(IConnection.java:554)
[-10133] at ianywhere.ml.notifier.Notifier.connectDB(Notifier.java:388)
[-10133] ... 3 more
: Shutdown
: Disconnected from database ===============(Release Build - Engineering Case #633758)=============== The MobiLink Replay utility (mlreplay) had an unnecessary stack size restriction that could have caused it to crash with a stack overflow error if large objects and arrays were placed on the stack when using the replay library. This stack size restriction has been removed. ===============(Release Build - Engineering Case #632893)=============== The MobiLink replay utility could have crashed when concurrent connections to the MobiLink server were made on non-Windows systems. This has been fixed. ===============(Release Build - Engineering Case #631946)=============== An error on startup of the MobiLink server on Mac OS X systems, would have displayed text that was prefixed by random characters and/or yellow highlighting. This has been corrected. ===============(Release Build - Engineering Case #631731)=============== When starting the MobiLink Monitor with the -o or -c command line options, the result of the session should have been saved when the MobiLink server terminated, or the user manually disconnected from the MobiLink server. In the latter case, the output was not being saved and the Monitor was not shutting down. This has now been fixed. ===============(Release Build - Engineering Case #631733)=============== When connecting the MobiLink Monitor to a MobiLink server, any authentication error resulted in a poor error message from the Monitor, like: "Got unexpected data when receiving authentication result. Check version of MobiLink server (opcode=0)" This has been fixed to provide more information on the problem. The most common authentication error is now: "Invalid userid or password (auth_status=NNNN)" Other errors, for example due to an expired password, are similar. ===============(Release Build - Engineering Case #631643)=============== Changes made for Engineering case 585456 caused the queue lengths in the Utilization Graph of the MobiLink Monitor, the RAW_TCP_STAGE_LEN, STREAM_STAGE_LEN, HEARTBEAT_STAGE_LEN, CMD_PROCESSOR_STAGE_LEN metrics printed by the -ppv option, and the queue lengths available in the SQL Anywhere Monitor, to possibly have been reported as larger than they actually were. These issues have been fixed. MobiLink - iAS Branded ODBC Drivers ===============(Release Build - Engineering Case #640205)=============== In some cases, the iAS ODBC driver for Oracle could aborted the operation and given the following Oracle error: ORA-03145: I/O streaming direction error This would have occurred when the driver was used to send NULL BLOBs to a table in an Oracle database and then the rows were fetched back from this table using the same database connection, and the Oracle database was running with a multi-byte character set. This has now been fixed. ===============(Release Build - Engineering Case #632889)=============== When using the iAS Oracle ODBC Driver, a call to SQLGetStmtAttr that queried the SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_TYPE, SQL_ATTR_CURSOR_SENSITIVITY or SQL_ATTR_QUERY_TIMEOUT attributes could have returned a random value for the attribute. The driver now throws an "Optional feature not implemented" error (SQL State HYC00) for the SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_TYPE, and SQL_ATTR_CURSOR_SENSITIVITY attributes. When the SQL_ATTR_QUERY_TIMEOUT is queried, a zero is returned, and no error is reported. ===============(Release Build - Engineering Case #632612)=============== The iAnywhere ODBC driver for Oracle could have crashed, if an application made a request to convert an invalid SQL statement (for instance, a SQL statement containing a '{' that was not followed by 'call') to native SQL by calling SQLNativeSQLW. This has been fixed. ===============(Release Build - Engineering Case #631405)=============== If a result set contained a column with ROWID values, the iAnywhere Oracle driver would have returned invalid OUT parameters from calls to SQLColAttribute for the SQL_COLUMN_TYPE and SQL_DESC_DISPLAY_SIZE identifiers. As a workaround, the select statement could use ROWIDTOCHAR(ROWID) instead of ROWID. This has been fixed so that the calls to SQLColAttribute will now describe the column in the result set as a SQL_WCHAR of length 18. MobiLink - scripts ===============(Release Build - Engineering Case #638360)=============== The task status uploaded by the MobiLink Agent to the consolidated database may not have been processed. This could have meant that tasks would still have been shown in the MobiLink plug-in for Sybase Central as active, when they had in fact been completed. Task results and execution counts would also not have been updated. After applying this fix, any lost status will be recovered. The trigger for this problem appears to have been random, but was more likely when many tasks were run in a short period of time. To patch a MobiLink system setup 1. Shut down ML servers 2. execute the sql in %SQLANY12%\MobiLink\Setup\syncmss_ebf.sql The patch only updates stored procedures, no data will be disturbed by this script. If the MobiLink system setup was installed using 12.0.0.2566 or later then this patch does not need to be applied. SQL Anywhere - ADO.Net Managed Provider ===============(Release Build - Engineering Case #651510)=============== Execution of the utility SetupVSPackage, would have shown an error: "Object reference not set to an instance of an object." if machine.config file did not have the entry . This problem has been fixed. ===============(Release Build - Engineering Case #649763)=============== If an application connected with autostop=yes, and subsequently made a CLR external environment call, then the CLR external environment could have crashed when the application disconnected. This problem has now been fixed. ===============(Release Build - Engineering Case #646349)=============== The SQL Anywhere BINARY datatype was mapped to SQL Server's BINARY datatype. This could have resulted in incorrect values when exporting SQL Anywhere tables to SQL Server, as the SQL Anywhere BINARY datatype is variable length, and the SQL Server BINARY datatype is fixed length. This has been corrected by mapping the SQL Anywhere Binary datatype to SQL Server's VARBINARY datatype. ===============(Release Build - Engineering Case #643822)=============== Schema locks were not being released when the execution of ExecuteReader() encountered an exception. If a BeginTransaction was called, a Rollback or Commit should be called by the application to release the locks. Now, if BeginTransaction is not called, the transaction will be automatically rolled when an exception is encountered. ===============(Release Build - Engineering Case #643230)=============== The datatypes sysname and uniqueidentifierstr were both being mapped to char(0) in Micrsoft's SQL Server Integration Services. This has been corrected so that sysname is now mapped to varchar(30), and uniqueidentifierstr is now mapped to char(36). ===============(Release Build - Engineering Case #642563)=============== When running the install generated by the Deployment wizard, the ADO.NET provider was not registered correctly. Running the utility setupvspackage.exe manually after the install finished would have correctly registered the .NET provider. This has now been fixed. ===============(Release Build - Engineering Case #642971)=============== The utility SetupVSPackage.exe would have thrown the error "Object reference not set to an instance of an object.", if the .NET Framework 4.0 was not installed. This problem has been fixed. ===============(Release Build - Engineering Case #640786)=============== Calls to the GetSchema method would have return an error when the restrictions vector size was less than the total number of restrictions. For example, if 2 restrictions were specified for a schema rowset that took up to 3 restrictions, the GetSchema call would have resulted in an error indicating that 3 restrictions were expected. The error was due to the fact that the array size is 2, not 3. This problem has been fixed. ===============(Release Build - Engineering Case #640780)=============== The SQL Server Import and Export wizard did not list materialized views. This has been fixed by changing the values returned in the 'TABLE_TYPE' column of the schema set returned by the call to SAConnection.GetSchema("Tables") for materialized views to 'VIEW'. ===============(Release Build - Engineering Case #640611)=============== The Visual Studio Server Explorer, the Data Source Configuration Wizard, and the Entity Data Model Wizard, did not list materialized views. This has been fixed. ===============(Release Build - Engineering Case #640589)=============== The utility SetupVSPackage.exe did not modify the file machine.config for the 64 bit .NET Framework. The machine.config file is now updated for both the 32 bit and 64 bit Frameworks on 64 bit Windows. ===============(Release Build - Engineering Case #640239)=============== The SetupVSPackage.exe utility did not update SQL Server Integration Services mapping files and the ProviderDescriptors.xml file for 64 bit DTS on 64 bit Windows. This problem has been fixed. ===============(Release Build - Engineering Case #637909)=============== Executing a stored procedure and fetching the result set would have thrown the exception "Index was outside the bounds of the array" if the stored procedure selects results from a local temporary table with blob columns. The provider was determining the row buffer length prior to opening the cursor, this has been corrected so that it is done after the cursor has been opened. ===============(Release Build - Engineering Case #638231)=============== The property SAConnection.State would have indicated that the connection was still open even after the connection had been dropped. This has now been corrected. ===============(Release Build - Engineering Case #637725)=============== The Available objects list would have been empty when creating SQL Server Integration Services data source view. This problem has been fixed. ===============(Release Build - Engineering Case #634919)=============== The utility SetupVSPackage.exe did not modify the Global Assembly Cache (GAC) or the machine.config file if Visual Studio was not installed. This problem has been fixed. ===============(Release Build - Engineering Case #634504)=============== SQL Anywhere ODBC data sources were not listed in Visual Studio's Add Connection dialogbox on 64 bit Windows systems. This has now been fixed. ===============(Release Build - Engineering Case #632608)=============== The performance for fetching BLOB columns was much slower compared with the managed OLE DB provider. This problem has been corrected. SQL Anywhere - DBLIB Client Library ===============(Release Build - Engineering Case #651508)=============== If an invalid combination of TCP protocol options was specified (eg. DoBroadcast=DIRECT but no HOST=) in a connection string, the client application could have crashed. This would only have happened on Unix systems. This has been fixed. ===============(Release Build - Engineering Case #651363)=============== When a client interface could not load the language resource DLL on Windows, a message box was displayed showing the error message. This behaviour has been changed so that the message box is no longer displayed, since it could interfere with unattended systems. Instead, each client library will relay the information to its caller via appropriate methods, and dblib will set the error in the SQLCA to SQLSTATE_FAILED_TO_CREATE_STREAMS_ENV. ===============(Release Build - Engineering Case #643421)=============== If an application was attempting to connect to a server and the server shut down between the time the protocol connection was made and the time the database connection was attempted, the application could have crashed. This has been fixed. ===============(Release Build - Engineering Case #641485)=============== Attempting to make a connection with invalid TCPIP protocol options could have caused a crash in the client library. This has been fixed. ===============(Release Build - Engineering Case #638771)=============== Some incorrect connection strings could have autostarted a database server, but left the autostarted server running after the connection returned an error. For example: dbping -d -c "start=dbeng10;eng=server_name" would have returned an error, but leave a server named server_name running. This has been fixed so that the autostarted server is now stopped if the connection fails. ===============(Release Build - Engineering Case #635466)=============== When making a TCP connection to a remote machine that was unavailable (i.e. powered off, network cable unplugged, etc.), the time taken to time out could have been far longer than the value of the TIMEOUT parameter. This has been fixed. ===============(Release Build - Engineering Case #635035)=============== While very rare, it was possible for the Server Enumeration utility (dblocate) to hang. This has been fixed. SQL Anywhere - JDBC Client Library ===============(Release Build - Engineering Case #652739)=============== If an application prepared a batch insert using the SQL Anywhere JDBC driver, and the last row in the batch involved a call to setNull() and the datatype passed to setNull() was different than the previous set of setX calls for that column, then there was a chance the JDBC driver would have inserted incorrect data. This problem has now been fixed. For example, the following set of calls would have inserted incorrect data into the table test: PreparedStatement pstmt = con.prepareStatement( "insert into test values(?,?)" ); pstmt.setInt(1, 1001); pstmt.setString(2, "this is row #1" ); pstmt.addBatch(); pstmt.setInt(1, 2001); pstmt.setString(2, "this is row #2" ); pstmt.addBatch(); pstmt.setInt(1, 3001); pstmt.setString(2, "this is row #3" ); pstmt.addBatch(); // note the fact that we are switching datatypes below pstmt.setNull(1, java.sql.Types.SMALLINT); pstmt.setString(2, "this is row #4" ); pstmt.addBatch(); pstmt.executeBatch(); Again, note that this problem would not have occurred if instead of using java.sql.Types.SMALLINT, the application instead used java.sql.Types.INTEGER. In addition, if the call to setNull() was not in the last row of the batch, then again this problem would not have occurred, even if the application switched datatypes for the setNull() call. ===============(Release Build - Engineering Case #638600)=============== When connected using the SQL Anywhere JDBC 4.0 driver, calling DatabaseMetaData.getProcedureColumns() would have returned a result set with the DATA_TYPE column in the metadata result set containing an incorrect JDBC data type for nchar, nvarchar and longnvarchar columns. This problem has now been fixed. ===============(Release Build - Engineering Case #638273)=============== While connected using the SQL Anywhere or iAnywhere JDBC drivers, attempting to use setNull() in a batch update may have caused the JDBC driver to throw a datatype mismatch SQLException if the datatype specified within the setNull() call differed from other non-null set calls to the same column within the batch update. This problem has now been fixed and the datatype mismatch will now only be thrown if a non-null set call of a different type is made on the same column within a batch update. ===============(Release Build - Engineering Case #631045)=============== If an application attempted to establish a connection using the ASADataSource class available with the SQL Anywhere JDBC driver, then the application would have received a ClassCastException. This problem has now been fixed. Note that in addition to supporting the ASADataSource class, the SQL Anywhere and iAnywhere JDBC drivers now offer an SADataSource class as well. ===============(Release Build - Engineering Case #630475)=============== If an application used the SQL Anywhere JDBC driver to obtain the ResultSet from a call to DatabaseMetaData.getPrimaryKeys(), then the driver would incorrectly return a ResultSet that was sorted by catalog, schema, table name and key sequence. This has now been fixed and the ResultSet is now sorted by column name instead. Note that this fix is only for the SQL Anywhere JDBC driver. The iAnywhere JDBC driver will continue to return a ResultSet based on ODBC sorting standards. SQL Anywhere - ODBC Client Library ===============(Release Build - Engineering Case #652201)=============== The HOST connection parameter is usually of the form host:port, but can also contain a comma separated list of host and port pairs. The ODBC driver usually splits the HOST connection parameter and displays it in the Administrator as two text fields labeled host and port. When it was a list of values, it was incorrectly splitting it at the first colon. This has been fixed. ===============(Release Build - Engineering Case #650650)=============== When the action setting on the Logon page of the ODBC administrator was "Start and connect to another computer", the Autostop checkbox was missing. This has been fixed. Note, Engineering case 650345 is a similar issue in the Administration tools connection dialog. ===============(Release Build - Engineering Case #650502)=============== When an ODBC application called SQLDriverConnect to connect, and specified the SQL_DRIVER_PROMPT option so that the connection dialog was displayed, the connection string returned did not contain the DSN parameter. All other parameters were correctly returned, but DSN was stripped out. This has been fixed. ===============(Release Build - Engineering Case #649644)=============== The ODBC driver could not properly handle the following SQL statement because it thought it was improperly formed: create table [ab'cd] (i int ) This has now been fixed so that the driver now supports table names with embedded quotes enclosed in brackets. ===============(Release Build - Engineering Case #645952)=============== The ODBC functions SQLColumns and SQLProcedureColumns incorrectly returned a NULL value for the CHAR_OCTET_LENGTH column for XML and ST_GEOMETRY data types. ST_GEOMETRY is a new data type supported by SQL Anywhere in version 12. This has been fixed and the correct value of 2147483647 is now returned. ===============(Release Build - Engineering Case #645948)=============== The LITERAL_PREFIX and LITERAL_SUFFIX characters returned by SQLGetTypeInfo for binary data types were apostrophes. If these characters were used in an INSERT statement, the value stored was incorrect. For example: Store binary 0x1234 into column. INSERT INTO test (binary_col) VALUES ('1234'); The result is 0x31323334. If the LITERAL_PREFIX was 0x and the LITERAL_SUFFIX was NULL, then the value stored was correct. INSERT INTO test (binary_col) VALUES (0x1234); This problem has been corrected. The following types will now return 0x in the LITERAL_PREFIX column and NULL in the LITERAL_SUFFIX column: long binary varbinary binary ===============(Release Build - Engineering Case #638900)=============== If a certain statement was prepared and described that returned no result set, and then a DDL statement caused the same statement to return a result set, client statement caching could have caused the statement to be redescribed incorrectly. This was a client statement caching peformance optimization, and before this change, there was no way to disable this incorrect behavior. For example, the following statements executed in dbisql would have returned an error on the second call foo() statement: create or replace function foo() returns int begin return 1; end; call foo(); create or replace procedure foo() begin select 2; end; call foo(); This has been fixed so that if client statement caching is disabled by setting the max_client_statement_cached option to 0 for the connection, such a statement is now described correctly. ===============(Release Build - Engineering Case #606823)=============== The date at the beginning of the connection attempt information generated by the LogFile connection parameter was not necessarily in the locale format. This also affected the information in the Show Details dialog when using the ODBC Administrator's Test Connection feature. This has been fixed so these dates are now in the locale format. ===============(Release Build - Engineering Case #637744)=============== Options set on the Advanced page of the ODBC administrator could not have been deleted. Options could have been changed, but to delete them it was necessary to recreate the ODBC datasource, or remove the options manually from the registry. This has now been fixed. ===============(Release Build - Engineering Case #637743)=============== Calls to SQLGetTypeInfo() would have returned the wrong UNSIGNED_ATTRIBUTE column value for TINYINT. The TINYINT datatype is an unsigned type so the column should have contained a 1 rather than a 0. This problem has been fixed so that the UNSIGNED_ATTRIBUTE column result now agrees with the result returned by SQLColAttribute(SQL_DESC_UNSIGNED) for a TINYINT column. ===============(Release Build - Engineering Case #637036)=============== In the ODBC Administrator's datasource configuration dialog, the encryption field should have been treated like a password field, displaying it as a collection of asterisks, but instead it was being displayed in plain text. This has been fixed. ===============(Release Build - Engineering Case #636694)=============== The Host parameter (hostname:port) was not being written, or updated, in the registry entry for a DSN created using the ODBC administrator and the "Start and connect to a database running on another computer" option on the Login tab. This has now been corrected. ===============(Release Build - Engineering Case #635960)=============== Attempting to using Integrated Login, or Kerberos, with the NodeType connection parameter could have failed. This has been fixed. ===============(Release Build - Engineering Case #634189)=============== If a connection string was made up of parameters coming from the connection string and from the data source, and the UID and PWD/ENP parameters were not all in the connection string or all in the data source, the PWD/ENP parameters would have been ignored. For example, if DSN "foo" contained a UID but no PWD, then the connection string "DSN=foo;PWD=secret" would ignore the PWD field. This has been fixed. SQL Anywhere - OLEDB Client Library ===============(Release Build - Engineering Case #645953)=============== The DBSCHEMA_PROVIDER_TYPES rowset schema incorrectly returned 0x in the LITERAL_PREFIX column for varbit types. The apostrophe character (') is now returned in the LITERAL_PREFIX and LITERAL_SUFFIX columns instead. ===============(Release Build - Engineering Case #642865)=============== The SQL Anywhere OLE DB provider was ignoring the Location and Initial Catalog connection parameters. This problem has been fixed. "Location" can now be used to specify the host name and port of the database server. The form is hostname:port (e.g., username-pc:3628). "Location" is mapped to the SQL Anywhere "Host" connection parameter for version 12 or later and the "CommLinks" connection parameter for version 11 or earlier. "Initial Catalog" can now be used to specify the database to connect to when more than one database has been started by a SQL Anywhere database server. "Initial Catalog" is mapped to the SQL Anywhere "DatabaseName" (DBN) connection parameter. ===============(Release Build - Engineering Case #642980)=============== A number of corrections and improvements have been made to the SQL Anywhere OLE DB schema rowset support procedures: - If a catalog name is specified as one of the schema restrictions, the procedure will make sure it matches the current catalog. If it does not, a single row will be returned with NULLs. - Any rowset that can return a catalog name in a column will now return the current database name in that column instead of NULL. - The rows returned in the DBSCHEMA_PROVIDER_TYPES rowset have been slightly reordered for better results with Microsoft tools. This was done since Microsoft tools ignore the BEST_MATCH column and use the first row that matches the datatype it is searching for. - In the DBSCHEMA_PROVIDER_TYPES schema, the XML datatype will now set the DATA_TYPE column to 141 (DBTYPE_XML), the IS_LONG column to 1 and return 2GB instead of 32767 for COLUMN_SIZE. - In the DBSCHEMA_PROVIDER_TYPES schema, the TIMESTAMP WITH TIME ZONE datatype will now set the DATA_TYPE column to 146 (DBTYPE_DBTIMESTAMPOFFSET). This is supported in version 12 or later of SQL Anywhere. - An entry for the REAL datatype was missing from the DBSCHEMA_PROVIDER_TYPES rowset. This row has been added. To install these updates into a database, the Upgrade utility (dbupgrad), or the ALTER DATABASE UPGRADE statement can be used. ===============(Release Build - Engineering Case #641092)=============== The changes for Engineering case 633120, introduced a problem with returning a character string column value when the length of the column value was not bound by the consumer (i.e., the consumer does not provide a pointer to a length field). In this special case, the returned string value should be null-terminated. This has been fixed. ===============(Release Build - Engineering Case #639712)=============== The OLE DB provider's TABLES, TABLES_INFO, and VIEWS schema rowset support procedures do not identify MATERIALIZED VIEWs and TEXT CONFIGURATION objects correctly. Materialized views are now reported as "VIEWS", and text configuration objects are now identified as "TEXT", in the TABLE_TYPE column. Also, the OLE DB provider's TABLES schema rowset included an unnecessary and undocumented column "PREFIXSYSOWNED". This column has been removed from the rowset to match similar behavior of the stored procedure than produces theTABLES_INFO schema rowset. The OLE DB provider's TABLE_CONSTRAINTS schema rowset support procedure fails with the error "Column 'check' not found". This has been fixed. The Upgrade utility (dbupgrad) should be used to update the OLE DB schema rowset support in any database used with ADO, ADOX or OLE DB. ===============(Release Build - Engineering Case #638848)=============== A few improvements have been made to ADOX/OLEDB table creation. Long types are now mapped to SQL Anywhere long types. For example, an adLongVarChar column is now mapped to "LONG VARCHAR" instead of "CHAR(0)". Wide types are now mapped to SQL Anywhere nchar types instead of char types. For example, adWChar is now mapped to "NCHAR" and adLongVarWChar is now mapped to "LONG NVARCHAR". An adSingle column with no specifed precision will now default to REAL rather than FLOAT(0), which generated a syntax error. An adDecimal column with no specified precision and scale will now default to DECIMAL rather than DECIMAL(0,0), which generated a syntax error. An adNumeric column with no specified precision and scale will now default to NUMERIC rather than NUMERIC(0,0), which generated a syntax error. An adLongVarBinary column will map to the IMAGE type rather than BINARY(0), which generated a syntax error. An adCurrency column is now supported and will map to a column of type MONEY. An adDate column is now supported and will map to a column of type DATETIME. If a table or column name is not defined, OLEDB will no longer fault with a NULL pointer reference. Instead, the name "undefined" will be used. The following code fragment is a VBScript example for creating a table using ADOX statements. Set db = CreateObject( "ADOX.Catalog" ) Set ntable = CreateObject( "ADOX.Table" ) ntable.Name = "testTable" ntable.Columns.Append "Col_1", adNumeric ntable.Columns.Append "Col_2", adDate ntable.Columns.Append "Col_3", adChar, 32 ntable.Columns.Append "Col_4", adVarChar, 32767 ntable.Columns.Append "Col_5", adLongVarChar ntable.Columns.Append "Col_6", adLongVarWChar db.Tables.Append ntable ===============(Release Build - Engineering Case #634664)=============== The Microsoft SQL Server Reporting Services 2008 application uses the Linked Server mechanism to communicate via OLE DB to a SQL Anywhere server. It can send EXEC statements of the following form to the SQL Anywhere OLE DB provider: EXEC owner.procedure_name :parm1, :parm2, ... where :parm1, etc. are bound parameters. The SQL Anywhere OLE DB provider has been improved to now handle this syntax. ===============(Release Build - Engineering Case #633125)=============== Improvements to the DBSCHEMA_PROVIDER_TYPES rowset have been made to make it more consistent with Microsoft SQL Server. ===============(Release Build - Engineering Case #633120)=============== Microsoft's SQL Server 2005/2008 Replication software allocates a 0x200 byte buffer for the TYPE_NAME column of the DBSCHEMA_PROVIDER_TYPES rowset. It then creates a DBBINDING structure identifying the length of the buffer as 0x300 bytes. When the SQL Anywhere OLE DB provider initializes the buffer with nulls, a stack overrun occurs and Microsoft's Replication software faults. As a work-around for Microsoft's bug, the SQL Anywhere OLE DB provider will no longer initialize the consumer's buffer with nulls. ===============(Release Build - Engineering Case #631330)=============== Some inconsistencies between SQL Anywhere OLE DB column metadata information and run-time column information caused problems with accessing tables via the Microsoft SQL Server "Linked Server" mechanism. These problems affected NCHAR, NVARCHAR,LONG NVARCHAR, VARBIT, LONG VARBIT, and TIMESTAMP WITH TIME ZONE columns. The TIMESTAMP WITH TIMEZONE data type is new to version 12.0.0. These problems have been fixed. Table rows inserted using the OLE DB OpenRowset/InsertRows methods are now done with autocommit turned off. Once the inserts are completed, the rows are committed. For the complete fix to this problem, use the Upgrade utility (dbupgrad) to upgrade existing databases with fixes for the OLE DB schema rowset support (metadata support). SQL Anywhere - Other ===============(Release Build - Engineering Case #647854)=============== When running the fetchtst tool for testing the performance of queries (in samples-dir\SQLAnywhere\PerformanceFetch) on a SQL statement larger than 10K, fetchtst may have crashed. This has now been fixed. ===============(Release Build - Engineering Case #646305)=============== When running the uninstall for SQL Anywhere 12, after installing ado.net components, the uninstall could have failed with the following error: "Error 1723. There is a problem with this Windows Installer package. A DLL required for this install to complete could not be run. Contact your support personnel or package vendor. Action SetupVSPackageUninstall, entry: SetupVSPackageUninstall library: C:\Windows\Installer\MSIA8A0.tmp" This has been fixed. ===============(Release Build - Engineering Case #642996)=============== If a database encrypted with AES_FIPS or AES256_FIPS was copied to a CE device, the server would have been unable to start it. This has been fixed. ===============(Release Build - Engineering Case #641777)=============== The EBF installs for SQL Anywhere and the SQL Anywhere Monitor did not copy the ReadMe_EBF.html file to the product folder. This has been corrected so that now it is. ===============(Release Build - Engineering Case #641280)=============== Attempting to execute a START JAVA command from the Interactive SQL utility (dbisql) would have failed if it was installed from a 64 bit MSI created by the Deployment wizard. The error message would have been: "***** SQL error: External environment could not be started, 'external executable' could not be found". This has been corrected. ===============(Release Build - Engineering Case #640110)=============== When executing a remote procedure call to an ASE server, if the procedure involved output parameters, then there was a chance the call would have failed with the remote error "output parameters will only be returned from this stored procedure when you use only parameter markers to pass parameter values". This problem has now been fixed and the remote call should now execute correctly. ===============(Release Build - Engineering Case #640610)=============== When using the deployment wizard to create an MSI install, the Relay Server plugin did not appear in the list of plugins, and thus was not installed. The rsplugin files have now been added. ===============(Release Build - Engineering Case #640596)=============== The iAnywhere Solutions 12 Oracle ODBC driver would not have been installed by the deployment wizard. The driver was not being registered, and thus did not appear in the ODBC administrator. This has now been corrected. ===============(Release Build - Engineering Case #633118)=============== The Deployment Wizard did not deploy V3.5 and V4.0 .Net assemblies. They have now been added to the list of files we deploy. ===============(Release Build - Engineering Case #638738)=============== Windows CE applications, including SA utilities, requiring aygshell.dll to be present on the device or they would not have loaded. This worked fine on Windows Mobile 5 and later devices, but not for non-Windows Mobile CE 5.0 and 6.0 devices. This has been corrected by trying to dynamically load aygshell.dll if it is present, and skip these functions otherwise. For non-Windows Mobile CE devices, buttons are displayed on the main window for shutdown/hide/etc, instead of relying on creating menus accessible via softkeys since this would require aygshell.dll. ===============(Release Build - Engineering Case #627649)=============== The PHP driver would have crashed when trying to open multiple result sets using SASQL_USE_RESULT or sasql_real_query() and sasql_use_result(). This has been fixed. ===============(Release Build - Engineering Case #630338)=============== If the option row_counts was set to 'On', the system procedures sa_performance_statistics and sa_performance_diagnostics did not return a result set, and the procedure sa_describe_query caused an assertion failed 109512 error. These problems have been fixed. ===============(Release Build - Engineering Case #626617)=============== A synchronization request from a client prior to version 11, that was using a UTF8-encoded database, would have failed against 64-bit Unix servers. This has been fixed. Note, this problem does not occur with the 32-bit versions of the server. SQL Anywhere - SNMP Extension Agent ===============(Release Build - Engineering Case #651707)=============== The iAnywhere.mib file that shipped with the SNMP agent was not SMI compliant. This has been fixed. Note that this change did not affect the software itself. ===============(Release Build - Engineering Case #635419)=============== Attempting to retrieve the uid_has_hyphens option setting through the SNMP interface would always have returned NULL. This has been fixed. SQL Anywhere - Server ===============(Release Build - Engineering Case #654078)=============== While running a VALIDATE DATABASE statement, the server could have erroneously reported assertion failures indicating checksum failures or other errors that would indicate database corruption. The problem could only have occurred if the database file was being actively extended at the same time as the validation was being performed, and even in those circumstances the problem would have occurred only very rarely. The database was not actually corrupt and would have been valid when restarted. This has now been fixed. ===============(Release Build - Engineering Case #647836)=============== Runtime errors (for example, conversion errors) during the execution of parallel plans may have caused the server to crash. This was most likely to have occurred when running spatial queries. This has been fixed. ===============(Release Build - Engineering Case #653052)=============== Using the system procedure xp_sendmail with an attachment larger than about 55 kB may have resulted in the attachment being corrupted. This has been fixed. ===============(Release Build - Engineering Case #653185)=============== Specific spatial operations could have caused a server crash when running on systems with Pentium III processors. This has been fixed. These operations now correctly return an error. ===============(Release Build - Engineering Case #648799)=============== In some cases, the server could have returned an error ("Parameter error") for a statement using OPENSTRING with a VALUE specifying a field reference or other complex expression. For example, the following sequence could generate this error: declare local temporary table T_strs( str long varchar ); insert into T_strs values ('1,a1\n2,a2'), ('3,b1\n4,b2'); select * from T_strs T cross apply openstring( value T.str ) with( a char(10) ) as O This has been fixed. Statements such as the above are now processed correctly without an error. ===============(Release Build - Engineering Case #652411)=============== If an error occurred accessing the tape drive when beginning a tape backup, the BACKUP statement may have hung. This has been fixed. ===============(Release Build - Engineering Case #652221)=============== In some cases, calling a web services stored procedure may have crashed the server. This has been fixed. ===============(Release Build - Engineering Case #652220)=============== The server could have hung in some very rare circumstances when there was considerable temporary file growth. This has been fixed. A workaround is to pre-grow the temporary file using the ALTER DBSPACE statement, or by creating a DiskSpace event to periodically grow the temporary file. The same issue was fixed for earlier version by Engineering case 580773. ===============(Release Build - Engineering Case #653184)=============== It was possible for the server to crash while opening a statement that used a parallel execution plan if specific types of errors were detected while building the plan. One particular form of the error causing this problem could arise when using a spatial predicate on systems with Pentium III processors. Instead of reporting an error, it was possible under specific circumstances for the server to crash. This has now been fixed. ===============(Release Build - Engineering Case #651656)=============== In some cases, setting a SQL Remote option could cause a server crash. This has been fixed. ===============(Release Build - Engineering Case #651729)=============== In some rare cases, the server may have hung if diagnostic tracing had been enabled. This has been fixed. ===============(Release Build - Engineering Case #651344)=============== When running the server in 'in-memory' / 'no-writes' mode (-im nw), the CREATE DBSPACE statement would have created a file in the filesystem, rather than just emulating one inside the database server. Other than the creation of the physical file, all writes to it were emulated in memory. This has been corrected so that the server no longer creates the dbspace file on disk. ===============(Release Build - Engineering Case #651040)=============== When executing VALIDATE TABLE and VALIDATE INDEX statements, thay may not have used as much CPU parallelism as they could have. This problem has been fixed. ===============(Release Build - Engineering Case #650489)=============== If an application made a remote procedure call that made changes to a remote database and then subsequently called ROLLBACK, the changes would not have been rolled back on the remote database that the remote procedure call affected, but would have been rolled back locally and on the other remote databases that the local connection modified. This problem has now been fixed. ===============(Release Build - Engineering Case #620095)=============== Several stability problems existed with parallel queries when using low-memory strategies, which could have lead to server hangs or crashes. These have been fixed. A workaround for these problems is to disable parallelism by setting the option MAX_QUERY_TASKS=1 for all affected queries. ===============(Release Build - Engineering Case #651047)=============== In some cases, execution of parallel plans on machines with large number of cores could be poor when dynamic adjustment of the multiprogramming level is enabled. This has been fixed. ===============(Release Build - Engineering Case #651029)=============== On Linux builds where the kernel was compiled to support something other than 1024 processors, the database server could have failed to detect the correct processor geometry and could have crashed. This problem has been fixed. Note that recent Linux kernels have been built with support for up to 4096 processors. ===============(Release Build - Engineering Case #651015)=============== When executing an "INSTALL JAVA [NEW | UPDATE] JAR" statement with a compressed jar file, there was a very small chance that some of the classes or resources within the jar would have been installed incorrectly. This problem has now been fixed. ===============(Release Build - Engineering Case #650663)=============== Executing a query that involved the use of the Java external environment, and that required the server to repeatedly call the same Java method over and over again, may have resulted in the performance of the query might being very slow. The server performance in this specific case has now been improved considerably. Note that this performance improvement may not help queries where multiple Java methods are called at the same time. For example, the query: SELECT SUM( java_p(...) ) FROM ... involves repeatedly calling java_p and the performance of such queries will be improved with this fix. In addition, the query: SELECT SUM( java_p(...) ), AVG( java_p(...) ) FROM ... also involves repeatedly calling java_p, and again the performance of such queries will be improved with this fix. But, the query: SELECT SUM(java_p(...)), AVG(java_p2(...)) FROM ... which involves repeatedly calling both java_p and java_p2 will not benefit from this performance improvement. ===============(Release Build - Engineering Case #650352)=============== Procedure profiling showed statements that executed in under 1 millisecond as using zero time, even when those statements were executed many times. This has been fixed. ===============(Release Build - Engineering Case #649978)=============== Under rare circumstances, some statements involving proxy tables could have missed expression checking. This has been corrected. ===============(Release Build - Engineering Case #647154)=============== The denial-of-service attack addressed by the changes for Engineering case 610115 could still have occurred if idle timeout had been turned off on the server using the command line option -ti 0, or the system procedure sa_server_option('IdleTimeout',0). If the idle_timeout value was not 0, the server was not susceptible. This has now been corrected. ===============(Release Build - Engineering Case #649928)=============== Sending large attachment files via SMTP using the system Procedure xp_sendmail() may have crashed the server. This problem was introduced by the changes made for Engineering case 643590, and have now been fixed. ===============(Release Build - Engineering Case #649868)=============== A brief network outage in a mirroring environment could have resulted in one of the servers reporting "Alternate server name in use"; or the former mirror server restarting, but not becoming the primary server. This has been fixed. ===============(Release Build - Engineering Case #649797)=============== An index containing long values could have become corrupted if the table was subsequently altered to add columns, remove columns that did not appear in the index, or change the nullability of a column not appearing in the index. Also, for this to have happened, entries must have been deleted from the index. This has been fixed. ===============(Release Build - Engineering Case #649651)=============== If a query was executed that contained a function in the SELECT list, and the function was defined in the following very specific way: CREATE FUNCTION ... RETURNS ... BEGIN DECLARE variable ... SELECT ... INTO variable FROM ... RETURN variable END and the SELECT statement within the function referenced proxy tables, then there was a chance the server would have crashed. This problem has now been fixed. ===============(Release Build - Engineering Case #649614)=============== Column constraints using the TREAT() function or IS OF predicate could have incorrectly allowed references to columns other than the column the constraint was created on. This has been fixed. ===============(Release Build - Engineering Case #649795)=============== Queries over indexes could have returned incorrect results if long index entries (greater than ~240 bytes) appeared in the index, with index corruption a possibility. This has been fixed. ===============(Release Build - Engineering Case #649475)=============== If a JDBC application connected via jConnect called the method DatabaseMetaData.getSchemas(), then the server would have failed the request with the error "the 'FileVersion' property is no longer supported". This problem has now been fixed and the proper list of userids is now returned to the application. ===============(Release Build - Engineering Case #648786)=============== If the primary server in a mirroring system lost quorum, just as an update caused log pages to be sent to the mirror, the primary server could have hung. This has been fixed. ===============(Release Build - Engineering Case #648973)=============== In very rare situations, the server could have crashed while shutting down a connection-scoped external environment process. This problem has now been fixed. ===============(Release Build - Engineering Case #648518)=============== In very rare cases, the server may have crashed if the cache was low on memory and a SELECT statement contained a very large IN list predicate. This has been fixed. The server will now return the error SQLSTATE_SYNTACTIC_LIMIT. ===============(Release Build - Engineering Case #648179)=============== The server could have entered a state where it would consume 100% of a single CPU (ie. one 'core') and never leave that state. The problem was caused by a race condition when more than one thread simultaneously attempted to reference a foreign key index for the very first time; however, the effects of the race condition may not be observed until the server attempts to shut down. This problem has been fixed. ===============(Release Build - Engineering Case #648158)=============== Attempting to use an index in a non-system dbspace with a database that was upgraded from 10.x, would have caused an assertion. This has been fixed. ===============(Release Build - Engineering Case #645838)=============== The SQL Anywhere server erroneously allowed the Reserved_keywords option to be specified at the user and connection levels. Setting the option value at these levels could have caused problems with recovery, and for unloading and reloading a database. This has been corrected by no longer allowing non-PUBLIC settings for the Reserved_keywords option. This change now does the following: 1. Temporary and user specific settings are no longer allowed 2. Existing settings for non-PUBLIC users are ignored during execution 3. Removal of existing user specific settings is allowed in order to allow cleanup 4. dbunload sets the public option setting at the beginning of the reload script 5. dbunload ignores non-PUBLIC settings in the database being unloaded ===============(Release Build - Engineering Case #645666)=============== The server supports the optional use of the LIMIT/OFFSET clauses in SELECT statements as an alternative to the TOP/START AT clauses. If such a statement was used within a view definition then the server would have ignored the LIMIT/OFFSET specification and would have returned the entire result set of the underlying view query. This has been fixed so that the server now pays attention to the LIMIT/OFFSET clauses used within view definitions. ===============(Release Build - Engineering Case #648790)=============== After applying the fix for Engineering case 635815, if an application executed a statement of the form: INSTALL JAVA [NEW | UPDATE] JAR 'jar-name' FROM expression then there was a chance the server would have crashed. This problem has now been fixed. ===============(Release Build - Engineering Case #647682)=============== Key constraint checking and validation errors were possible when indexing long index values if the relative position of the corresponding index columns (foreign and primary) within their respective tables were not identical. This has been fixed. ===============(Release Build - Engineering Case #648631)=============== In rare cases, executing a batch statement could have caused a server crash. This has been fixed. ===============(Release Build - Engineering Case #648493)=============== If Perseat licensing was used, the error "Database server connection limit exceeded" may have been reported when it should not have. In order for this have occurred, in addition to Perseat licensing, the -gm server option, or http connections to disabled databases, must have also been used. When this problem occurred, the first time the error was reported was correct behaviour, but after disconnecting connections, the error may have continued when it should not have. This has now been fixed. ===============(Release Build - Engineering Case #646858)=============== Under very rare circumstances, the server could crash during database cleaner execution. This has been fixed. ===============(Release Build - Engineering Case #640821)=============== It was possible to get the following validation errors: Page x of database file "" references a table (y) that doesn't exist or Orphaned page (x) found in database file "". The database server could have left some pages in a state where they cannot be reused. The database would have continued to function normally in this state but it is possible to regain the lost pages by rebuilding the database file. This most likely would have occurred in a non-system dbspace, and has now been fixed. ===============(Release Build - Engineering Case #648209)=============== Shared memory connections using the IDLE connection parameter were being dropped after about thirty seconds. This has been fixed. ===============(Release Build - Engineering Case #647163)=============== Several different spatial queries could potentially have caused server crashes, either when the Cancel was pressed, or when a SQL error was encountered while executing a parallel plan. This has been fixed. ===============(Release Build - Engineering Case #647663)=============== A server running as the primary in a mirroring system could have hung when the mirror server was started. This was more likely to occur after the fix for Engineering case 637057 was applied. This has been fixed. ===============(Release Build - Engineering Case #647327)=============== In a CHECK constraint, the syntax OWNER.FunctionName() or Geometry.ST_Method1().ST_Method2() was not being accepted. This has been fixed. ===============(Release Build - Engineering Case #646703)=============== In rare circumstances, reading a substring of a value from a compressed column (not starting at the first byte) could have caused assertion failure 201501 - "Page ... for requested record not a table page". Note that the Interactive SQL utility (dbisql) fetches long values in pieces, so selecting the value using dbisql (without using substrings) may cause this problem. This only happens on compressed columns with blob indexes. This has been fixed. ===============(Release Build - Engineering Case #653706)=============== The 'TOP limit START AT startat' and 'LIMIT limit OFFSET offset' constructs now support 1 - simple arithmetic expressions for 'limit', 'offset', 'startat' arguments; 2 - TOP supports the 'ALL' limit indicating that all rows are to be returned after the specified 'startat'; 3 - the maximum value for (limit + offset) is now 9223372036854775807 = 2^64-1 The new grammar is as follows: TOP range_expression range_offset TOP T_ALL range_offset LIMIT range_expression [OFFSET range_expression] range_expression: integer_or_var | '(' simple_expression ')' simple_expression: integer_or_var | simple_expression '+' simple_expression | simple_expression '-' simple_expression | simple_expression '*' simple_expression | '(' simple_expression ')' range_offset: /* empty */ | T_START T_AT range_expression ===============(Release Build - Engineering Case #647225)=============== Attempts to edit table data in the "Results" panel would have failed with the error "Savepoint ... could not be found.", if the Transact-SQL transaction mode was Unchained. This has been fixed. Note that the default transaction mode is Chained. ===============(Release Build - Engineering Case #645801)=============== In an environment with each server in a mirroring system having two network connections, each on one of three separate networks, so that a failure in one of the networks would still allow two of the nodes to communicate, a network outage could have resulted in both partner servers acting as a primary server. This has been fixed. ===============(Release Build - Engineering Case #647524)=============== The server could have crashed when processing an operation that updated an index. This has now been fixed. ===============(Release Build - Engineering Case #647495)=============== On recent versions of Linux (with SELinux enabled), programs with executable stacks were forbidden. The program would have failed to start with an error like: dbeng12: error while loading shared libraries: libdbserv12_r.so: cannot enable executable stack as shared object requires: Permission denied This would have potentially happened with any SQL Anywhere binary, and has now been fixed. A work around is to either disable SELinux, or run execstack -c on the problematic binaries. ===============(Release Build - Engineering Case #647331)=============== Execution of an extremely complicated remote query that needed to be processed in either no passthrough or partial passthrough mode, could have resulted in a server failure. The server now properly returns error -890. ===============(Release Build - Engineering Case #643642)=============== Revoking all table permissions from a grantee that were granted by a particular grantor did not always remove the corresponding SYSTABLEPERM row. This has now been fixed. ===============(Release Build - Engineering Case #647187)=============== When attempting to insert a string into a proxy table that was the result of calling a builtin function, if the builtin function returned an empty string, then there was a chance that the Remote Data Access layer would have inserted a NULL value instead. For example, a statement like: INSERT INTO my_proxy_table(my_column) SELECT RTRIM( ' ' ) may have inserted NULL instead of '' into to my_proxy_table. This problem has now been fixed. ===============(Release Build - Engineering Case #645664)=============== Attempting o unload and reload a database that contained a proxy table with a unique constraint would have failed with the error: "feature 'alter remote table' not implemented ". This problem has now been fixed. The "alter table...add unique" statement is no longer unloaded for proxy tables. ===============(Release Build - Engineering Case #647077)=============== When run on Mac OS X systems, the server would have exited with the error "Failed to become daemon" if both the -um and -ud command line options were specified. This was due to a limitation in the OS X GUI infrastructure. This has been fixed. The -um flag is now ignored if -ud is specified. A workaround is to use dbspawn instead of -ud. ===============(Release Build - Engineering Case #647076)=============== When starting the server on recent versions of Linux using the -ux or -ui command line options, or when auto-starting a server that required a GUI-based evaluation splash screen, the server may have crashed or hang. The crash would have occurred mostly on recent versions of Linux running a GTK theme engine (e.g. Clearlooks). The hang could have happened with any supported GTK version after dismissing the evaluation splash screen. This has now been fixed. A workaround is to run without the GUI. ===============(Release Build - Engineering Case #647066)=============== The Stored Procedure Debugger was sometimes unable to set breakpoints for statements in procedures that should have allowed breakpoints. This has been fixed. ===============(Release Build - Engineering Case #646846)=============== VALIDATE TABLE could have reported a validation failure if an index on the table contained 65 or more columns, and a row existed whose index hash value was less than 256 bytes in length. This problem has been fixed. ===============(Release Build - Engineering Case #646830)=============== In very rare cases, the server may have crashed using long identifiers in SQL statements. This has been fixed. ===============(Release Build - Engineering Case #646687)=============== If a large number of concurrent connections simultaneously executed remote queries that required partial or no passthrough processing, and several of the queries made heavy usage of aliases, then the server could have crashed. This problem has now been fixed. ===============(Release Build - Engineering Case #641328)=============== A statement such as the following could have incorrectly given an error: select row_num, if row_num < 1 then 1+row_num/0 endif x from rowgenerator order by x option(force no optimization) The sub-expression 1+row_num/0 should never be evaluated as the condition row_num<1 is never true. However, in a simple statement processed by bypassing the query optimizer, if a Sort was needed to order the rows of the result, an error could be incorrectly given. This problem has been fixed. ===============(Release Build - Engineering Case #646543)=============== Spatial queries that constructed large geometry values for output may have been slow to respond to a cancel command. This has been fixed. ===============(Release Build - Engineering Case #634900)=============== The server may have become deadlocked while acquiring shared latches. This has now been corrected. ===============(Release Build - Engineering Case #642441)=============== When using the Browse button in the Deployment wizard to select the directory where the .msi file is to be created, the resulting file would only have been 199 kb in size and would have generated an error when attempting to run it. The problem would not have occurred when deploying to the default location, or manually typing or pasting in the location. This has been fixed. ===============(Release Build - Engineering Case #645926)=============== If an Open Client or jConnect application attempted to prepare and execute a statement with a large number of parameters, then the server would have failed the request, or in rare cases, could have crashed. This problem has now been fixed. ===============(Release Build - Engineering Case #645325)=============== Spatial queries that applied a predicate that measured distance (ST_WithinDistance, ST_WithinDistanceFilter, or ST_Distance) may have caused a server crash when the optional unit name was supplied to the predicate, and the optimizer chooses a parallel plan. For example, the following query would have caused a crash if the optimizer chose a parallel plan: select count(*) from my_table where my_table.geometry.ST_WithinDistance( new ST_Point( 0, 0, 4326 ), 10, 'kilometre') = 1 This has been fixed. ===============(Release Build - Engineering Case #645759)=============== Attempting to drop a temp table created by sa_copy_cursor_to_temp_table() could have failed with an error. For example, the following sequence could have given a permission error for a user without DBA authority: BEGIN DECLARE myCursor CURSOR FOR SELECT 123; OPEN myCursor; CALL sa_copy_cursor_to_temp_table( 'myCursor','myTempTable' ); drop table myTempTable; END Permission denied: you do not have permission to use the "DROP TABLE" statement SQLCODE=-121, ODBC 3 State="42000" Further, in some cases, the temp table created by the procedure could not have been found by a reference at a different scope level. The following sequence of statements would have returned an error for that reason: BEGIN DECLARE myCursor CURSOR FOR SELECT 123; OPEN myCursor; CALL sa_copy_cursor_to_temp_table( 'myCursor','myTempTable' ); END; go select * from myTempTable These problems have been fixed. In order to get the full fix, the database must be either created with the fixed server, or upgraded using the "ALTER DATABASE UPGRADE" statement using the fixed server software. As well, the sa_copy_cursor_to_temp_table procedure now uses "CREATE LOCAL TEMPORARY TABLE" to create the table. ===============(Release Build - Engineering Case #645635)=============== HTTP requests made to SQL Anywhere services that utilize the built-in HTTP Session mechanism (created with sa_set_http_option) may, on rare occasions, have caused the server to crash. This has been fixed. ===============(Release Build - Engineering Case #645496)=============== For geometries in Round Earth spatial reference systems with lat, lon, z, or m axis order or, with units of measurement other than degrees, an incorrect result could have been returned by the following methods: ST_XMin, ST_XMax, ST_YMin, ST_YMax, ST_LonWest, ST_LonEast, ST_LatSouth, ST_LatNorth This has been fixed. ===============(Release Build - Engineering Case #644526)=============== If a long index entry (the equivalent of a 250 character or longer ASCII string) was deleted from an index, there was the possibility of index corruption and the server crashing. This has been fixed. ===============(Release Build - Engineering Case #644508)=============== A SQL Anywhere HTTP procedure may have failed when configured with a PROXY clause to connect through an Apache forwarding proxy version 2.0.X. This has been fixed. Changes have also been made to improve WebClientLogging (-zoc) messages when connecting through a proxy. ===============(Release Build - Engineering Case #645142)=============== On Windows systems, the server's process heap could have become corrupt. The only circumstance under which this was likely to occur was if a dialog was displayed (to locate a dbspace, for example) when starting a database specified on the command line. This has been fixed. ===============(Release Build - Engineering Case #645138)=============== In very rare cases, a primary mirroring server could have crashed on shutdown if the database was being updated. This has been fixed. ===============(Release Build - Engineering Case #645001)=============== If parallel access plans were considered by the SQL Anywhere Optimizer, then it was possible for queries to fail assertions 105804,105805, or 105816, "Cannot build parallel ...". This has been fixed. See: "SQL Anywhere Server - SQL Usage » Query optimization and execution » Query execution algorithms » Parallelism during query execution » Parallelism in queries" or: http://dcx.sybase.com/index.html#1200en/dbusage/queryopt-s-4716396.html*d5e30658 ===============(Release Build - Engineering Case #645161)=============== The graphical and long plans may have contained incorrect total estimated runtime information. This has been fixed. Note, this problem did not affect the quality of the plan found by the Optimizer, only the final estimated runtimes shown in the graphical and long plans were incorrect. ===============(Release Build - Engineering Case #644976)=============== If an application made at least five connections, and then all were disconnected, the messages "Disconnecting shared memory client, process id not found" and "Disconnected ... client's AppInfo is ..." could have incorrectly been logged to the server's message window. This was most likely to have occurred with an application using the SQL Anywhere JDBC driver. As a workaround, disabling connection pooling would prevent the messages from being displayed. This has been fixed so that these messages are not displayed for pooled connections. ===============(Release Build - Engineering Case #644491)=============== A bypass query that contained an invalid cursor range could have caused the server to crash in certain conditions. This has been fixed. Note: please see the section "Query processing phases" for a definition of bypass queries. ===============(Release Build - Engineering Case #643936)=============== Unexpected column names could have been reported for complex expressions in the SELECT list of a statement. The problem mostly affected queries over views, for which the name of the base table column, rather than the name of the view column, could have been reported. For example, consider the following table and view: CREATE TABLE admin_group.employee( pk INTEGER PRIMARY KEY, fname CHAR(100) NOT NULL, lname CHAR(100) NOT NULL, cname CHAR(100) ); CREATE VIEW admin_group.v AS SELECT e.fname AS first_name, e.lname AS last_name, e.cname AS company_name FROM admin_group.employee e; In the query: SELECT FROM admin_group.v; the following expressions would have been described with the base table column names: CAST( first_name AS VARCHAR(100)) (first_name) This has been fixed so that both of the expressions above will now be described as 'first_name'. Additionally, expressions such as ISNULL( , ) could have been described differently depending on the nullability of the first column. For example, ISNULL( first_name, company_name ) would have been described as 'fname', whereas ISNULL( company_name, first_name ) would have been described as 'isnull( employee.fname as first_name,employee.cname as company_name)'. For consistency, both of the above expressions will now be described by unparsing the expression. ===============(Release Build - Engineering Case #642833)=============== When under heavy load, the server may have crashed when receiving multiple requests on an HTTP connection. This has been fixed. ===============(Release Build - Engineering Case #644703)=============== When using ST_AsSVG, ST_AsSVGAttr, ST_AsText or ST_AsXML to output SVG, if the Attribute SVG format option was specified, an invalid SVG document could have been generated. In particular, if an SVG shape attribute was generated, and the same SVG shape attribute was explicitly specified by the Attribute SVG format option, the resulting SVG document contained a duplicate attribute. For example, if ls was a linestring geometry: select ls.ST_AsSVG( 'Attribute=fill="blue"' ) would have resulted in an invalid SVG document with a duplicate attribute. This has been fixed by only outputting the generated attribute or the attribute from the Attribute SVG format option, but not both, when there is a duplicate attribute. ===============(Release Build - Engineering Case #644682)=============== Using a reserved word as a label in a Transact-SQL procedure would have made the procedure unusable. This has been fixed. ===============(Release Build - Engineering Case #642600)=============== When attempting to start the server on a TeamPad series model of a Fujitsu CE device, the server would always have failed, report the error "Not enough memory". This problem has been fixed ===============(Release Build - Engineering Case #643681)=============== If a temporary function was incorrectly defined to return a result set, calling the function would have given the error: Function '' has invalid parameter 'expression' ('OUT') The correct error now reported is: Result set not permitted in '' ===============(Release Build - Engineering Case #643456)=============== If ALTER TABLE was used to reduce the length of a string column to less than the value of the INLINE or PREFIX values for that column, and then the database was unloaded, the reload script would have contained CREATE TABLE statements that would be rejected by the server. This has been fixed so that the ALTER TABLE statements will now fail. ===============(Release Build - Engineering Case #643805)=============== In rare cases, if procedure profiling was used on a database with events defined, the server could have hung. This has been fixed. ===============(Release Build - Engineering Case #643802)=============== A web procedure that references another computer by name may have failed to connect if both machines supported IPv6, but the web server on the remote computer was not listening on any IPv6 addresses. This has been fixed. ===============(Release Build - Engineering Case #643787)=============== REFRESH TEXT INDEX on MANUAL or AUTO text index could have caused database recovery to fail. For the problem to have occurred, the statement had to have been executed under SNAPSHOT isolation, which must also have been enabled on the database as part of the changes being recovered. This has now been fixed. ===============(Release Build - Engineering Case #643590)=============== When using the include_file parameter of the external system procedures xp_sendmail and xp_sendmail, they may have failed depending on the length of the file. This has been fixed. ===============(Release Build - Engineering Case #644122)=============== A number a LOAD TABLE fixes have been made. 1. Arbitrary expressions were allowed in the FROM/USING clause of LOAD TABLE. If a variable was used, its value was logged to the transaction log; however, if the expression was anything other than a literal string or a variable (eg. 'c:\\tmp\\'+filename_var), the original expression would have been logged including the names of variables whose values would be unknown at recovery. The problem was fixed by only allowing a string or a variable for the file name (as documented). 2. If a LOAD TABLE statement was logged that used a variable in the FROM/USING clause and the statement was affected by database options such that the option values had to be logged with the statement, the variable name rather than its value would have been logged. This problem has been fixed. 3. When using LOAD TABLE ... WITH CONTENT LOGGING, the data logged was in the character set in which the server parsed the input file (either CHAR or NCHAR charset), rather than the original input file's character set. If the LOAD TABLE statement had an ENCODING clause, the data would have been re-translated during recovery as if it were in the specified ENCODING and potentially mangling the data. Fixed by logging an exact copy of the original input data. 4. If a LOAD TABLE statement did not contain an ENCODING clause (in which case the server assumes CHAR charset), the statement written to the log would not have one either. If the log were translated and executed against a database with a different collation, the file could be translated incorrectly since the default encoding would be different. This problem has been fixed by always logging an ENCODING clause. 5. If a LOAD TABLE statement contained an ENCODING clause that specified a 'UTF16' encoding of unspecified endian, the logged statement would also have contained an ENCODING clause with an unspecified endian. If recovery were performed on a server with the opposite endian, or if the log was translated then executed on a server with the opposite endian, the statement would not interpret the input file correctly. This problem has been fixed by never logging ambiguous names for encodings. 6. LOAD TABLE ... FORMAT XML ... WITH CONTENT LOGGING did not actually log any data and was not recoverable. This problem has been fixed. 7. LOAD TABLE ... FORMAT XML ... USING COLUMN (which is the statement that is logged for a LOAD TABLE ... FORMAT XML ... WITH CONTENT LOGGING) would have crashed the server. This problem has been fixed. 8. LOAD TABLE USING CLIENT FILE ... WITH FILE NAME LOGGING was permitted by the server and the server would then have logged a statement that referenced a client file. Access to the client file requires an active connection from the client and therefore this statement was not recoverable. This problem has been fixed by requiring WITH CONTENT LOGGING when loading from a client file. If the logging type is not specified when loading from a client file, content logging is assumed. 9. When recovering a LOAD TABLE ... WITH CONTENT LOGGING or executing LOAD TABLE ... USING COLUMN, the server would have leaked a small amount of memory for each row of data fetched from the table containing the pieces of the original file image. This problem has been fixed. 10. When executing LOAD TABLE ... USING COLUMN ... ENCODING..., the server did not check for a conflict between the specified encoding and the encoding of the column's datatype. This problem has been fixed by reporting an error if the encodings conflict. 11. LOAD TABLE and UNLOAD TABLE did not allow the ESCAPE CHARACTER to be more than 1 byte. It can now be an arbitrary string, but it is recommended that it should be no longer than one (potentially multibyte) character. 12. When using UNLOAD TABLE with a QUOTE or ESCAPE CHARACTER which was not encoded identically in both CHAR and NCHAR character sets, the quotes may not be doubled up or escape sequences may not be issued where necessary depending on the datatype of the column being unloaded. This problem has been fixed. 13. When using UNLOAD TABLE with a QUOTE or ESCAPE CHARACTER which were not encoded identically in both CHAR and NCHAR character sets and the destination charset, the quotes or escape characters could have been translated incorrectly when converting to the destination character set. This problem has been fixed. 14. ALTER DBSPACE RENAME allowed a variable to be used for the new file name but the variable name rather than its value was logged, which meant that the statement was unrecoverable. This problem has been fixed by logging the variable's value instead. 15. The SQL generated by the Log Translation utility (dbtran) for LOAD TABLE ... WITH CONTENT LOGGING (ie inserts into a temporary table) did not work correctly due to the temporary table's name being fully qualified with the user's name. This problem has been fixed. ===============(Release Build - Engineering Case #643596)=============== When executing a query that involved window functions, proxy tables and dotted references, if the query was invalid due to a missing GROUP BY reference, then there was a chance the server would have failed to return the error. In some cases, the server would even have crashed. This problem has now been fixed. Note that this fix is a follow-up Engineering case 641477. ===============(Release Build - Engineering Case #634181)=============== The amount of data in CHAR, NCHAR or BINARY variables could have exceeded the declared length of the variable when data was appended using the string concatenation operator (||). This has been fixed. ===============(Release Build - Engineering Case #643463)=============== If an application attempted to fetch a long binary value from a proxy table, and the underlying Remote Data Access server was JDBC based, then there was a chance the value would have been returned truncated. It should be noted that JDBC based Remote Data Access server classes have been deprecated and all attempts should be made to switch to an ODBC based Remote Data Access server class if at all possible. Nevertheless, the original truncation problem with the JDBC based Remote Data Access server classes has been fixed. ===============(Release Build - Engineering Case #643342)=============== If an external environment call encountered a thread deadlock error, then there was a very small chance the application or event connection would have hung. This problem has now been fixed. ===============(Release Build - Engineering Case #643281)=============== In very rare and timing dependent cases, the server could have crashed after disconnecting a TCP/IP connection. This has been fixed. ===============(Release Build - Engineering Case #637057)=============== If the network connection between a primary server and a mirror server was temporarily broken, the primary server could have stopped sending updates to the mirror server. This has been fixed. ===============(Release Build - Engineering Case #643355)=============== Setting the value of an OUT parameter in an external stored procedures would have persisted, even without calling the set_value() function. This has been fixed. ===============(Release Build - Engineering Case #643317)=============== Canceling a call to xp_sendmail(), xp_startmail(), xp_stopmail(), xp_startsmtp(), or xp_stopsmtp(), may have caused a server crash. The external stored procedures that manage SMTP mail state did not protect against the case were two threads can try to access the same SMTP state. This has been fixed. ===============(Release Build - Engineering Case #643314)=============== Canceling an external stored procedure may have caused the server to crash. This has been fixed. ===============(Release Build - Engineering Case #643221)=============== When loading a shapefile containing complex geometries, status messages may not have been printed every 5 minutes (as per the documentation), but could be delayed for arbitrary periods of time. During these periods the CPU usage of the engine would appear very high. This has been fixed. ===============(Release Build - Engineering Case #643196)=============== Progress messages are sent every 5% of the total estimated duration, but if no message has been sent (i.e. the percentage complete has not changed by 5%) for five minutes, another message should be sent anyway. These repeated messages were not being sent - this has been fixed. ===============(Release Build - Engineering Case #642524)=============== The server could have become unresponsive when processing index scans in which a residual predicate continually rejected candidate rows for the duration of the scan. This has been fixed. ===============(Release Build - Engineering Case #642575)=============== Diagnostic tracing could have hung, or dropped connections, or possibly crashed the server, if a connection was canceled or a connection to the tracing database was dropped. Mirroring or read-only scale-out could also have hung or dropped connections if a connection was canceled. This has been fixed. ===============(Release Build - Engineering Case #641360)=============== The server may have returned an incorrect result set for a query that contained a GROUP BY clause with distinct arguments, and the GROUP BY was executed using the low memory strategy. This has been fixed. ===============(Release Build - Engineering Case #642460)=============== Starting a copy node server while updates were being applied at the primary server, could have resulted in a variety of failures, including assertion failures 100902 or 100903, or checksum failures. This has been fixed. ===============(Release Build - Engineering Case #642329)=============== An attempt to use an exception name in a procedure when the exception had not been declared did not report an error. This has been fixed. ===============(Release Build - Engineering Case #643296)=============== The use of sequence generators would have caused the server to crash when it was run in in-memory mode. This has been fixed. ===============(Release Build - Engineering Case #642237)=============== Certain shapes of polygons when being loaded in a round-earth SRID, would have incorrectly given an invalid polygon error. An example of this is: "select new ST_Polygon( 'Polygon((90 0, 90 -10, 100 -10, 100 0, 97 0, 97 10, 93 10, 93 0, 90 0))', 4326 )" This has been fixed. One workaround is to start the polygon on a different point around its ring. ===============(Release Build - Engineering Case #641806)=============== The date_format, timestamp_format and uuid_has_hyphens options stored in a text configuration were not respected during an immediate text index update. Immediate text index updates incorrectly used the current connection option values. This has been fixed. If an existing immediate text indexes is suspected of being effected by this problem then the text index needs to be refreshed after applying this fix. ===============(Release Build - Engineering Case #641434)=============== If a large number of connections that had made external environment calls all shut down at the same time, then there was a chance the server would have hung one of the clients trying to shut down. In some cases, all the requests to shut down the connections would have succeeded, but the server would have subsequently hung when asked to terminate. Both of these problems have now been fixed. ===============(Release Build - Engineering Case #640540)=============== The property QueryOpened was not being increased if a reusable cursor was opened. This has been fixed. ===============(Release Build - Engineering Case #640525)=============== The readability of the query returned by the REWRITE function has been improved. ===============(Release Build - Engineering Case #641793)=============== In very rare cases, the server could have hang if an external environment call was made at the same time that the server performed some maintenance on the database. This has now been corrected. ===============(Release Build - Engineering Case #635356)=============== The server could have crashed under certain specific circumstances when executing the DROP STATISTICS statement. This problem has been resolved. ===============(Release Build - Engineering Case #637897)=============== On SUSE 10 systems, the server could have failed to start a database if the database file was mounted on an NFS share. The error given would be something like: "Error: Database cannot be started -- /mnt/share/demo.db is not a database" This has now been fixed. ===============(Release Build - Engineering Case #636801)=============== Unloading a version 9 database with a table with named primary key constraint could have failed if the primary key was referenced by an index hint in a view. This has been fixed. Also, unloading a version 10 or later database containing a table with a primary key index that had been renamed would have failed to preserve the new name for the index. This has been fixed. ===============(Release Build - Engineering Case #641276)=============== If a SYNCHRONIZE command was canceled before the server could load the dbmlsynccli12 library, it was possible for the server to have crashed. This has now been fixed. ===============(Release Build - Engineering Case #641095)=============== The changes for Engineering case 635618, could have caused an INSERT statement, using the CONVERT() function to convert a string to a time, to fail assertion 111704 - 'Attempting to store invalid time value in table {table name}, column {column name}. This problem did not occur if CAST was used in place of CONVERT, and has now been fixed. ===============(Release Build - Engineering Case #640901)=============== Revoking table column permissions may have failed with the SQL error 'Permission denied: you do not have permission to revoke permissions on "Column1"' if there were column permissions granted from multiple grantors. This has been fixed. ===============(Release Build - Engineering Case #640543)=============== The result set returned for a query with GROUP BY and ORDER BY clauses was not correctly ordered if both clauses contained the same integer constant. This has been fixed. ===============(Release Build - Engineering Case #641123)=============== If a mirror or read-only copy node server was shut down while updates were being made on the primary server, the mirror or copy node could have failed to restart. Starting a mirror or copy node while updates were being made on the primary server could also have prevented that server from starting. These problems have been fixed. ===============(Release Build - Engineering Case #640923)=============== Simple queries using the aggregate GROUPING(1), but with no GROUP BY clause, would have returned the meaningless error "Invalid expression near GROUPING(1)". This has been fixed. The server now returns the error "Argument to GROUPING aggregate must be a grouping column in the GROUP BY clause". ===============(Release Build - Engineering Case #640423)=============== Queries containing predicates that composed ST_SRID(int) or ST_Transform(int) with a spatial predicate, could have caused a crash. This only happened for queries that bypassed the optimizer (single table queries). For example, the following query could have caused a crash: SELECT * FROM tablename WHERE geometry_column.ST_Transform( 0 ).ST_Intersects( new ST_Point( 0, 0, 0 ) ) = 1 This has been fixed. ===============(Release Build - Engineering Case #640621)=============== Depending on timing, stopping a server with the Stop Server utility (dbstop) and immediately restarting it with the Start Server in Background utility (dbspawn) could have return the error: DBSPAWN ERROR: -85 Communication error The communication error could also have occurred if the server was started without dbspawn. This has been fixed. ===============(Release Build - Engineering Case #640434)=============== A failed attempting to connect to a server which required the server to be autostarted could have leave the server running. This could have occurred if the server started had the server stop permission set to a value other than None, and server failed to start the database for certain reasons. For example, if asatest.db is an Adaptive Server Anywhere 9 database, the following would start a server that was left running: dbping -d -c "uid=dba;pwd=sql;dbf=asademo.db;start=dbsrv11 -x none" This has now been fixed. ===============(Release Build - Engineering Case #640410)=============== Attempting to drop a user declared within a web service may have caused the server to crash if the service was recently accessed with an HTTP request. This has been fixed. The following illustrates the issue: create user web identified by web; create procedure web.sp_test() begin select 1; end; create service test type 'HTML' user web authorization off secure off url off as call sp_test(); A "DROP user web" command crashes the server if one or more database connections for the user "web" happen to be pooled. ===============(Release Build - Engineering Case #640232)=============== Dropping a temporary procedure could have caused recovery to fail if the procedure name was qualified with an owner. This has been fixed. ===============(Release Build - Engineering Case #639535)=============== Queries that did a sequential table scan could have failed to return all the rows in the table. This would usually only have happened when doing a DELETE over a non-transactional temporary table. This could also have happened to regular base tables with concurrent deleters as well, but the chances of this would have been very low in practice. A workaround is to issue deletes over a non-transactional temporary table multiple times. ===============(Release Build - Engineering Case #640027)=============== Recovery of ALTER DBSPACE or DROP DBSPACE could have failed if the original statement was executed when there were inactive pooled connections. This has been fixed. ===============(Release Build - Engineering Case #639814)=============== In rare circumstances, performing spatial operations could have caused the server to crash, corrupt server memory, and possibly corrupt database file contents. The problem was more likely to occur when spatial operations were active at a time when both cache pressure was high and operations such as checkpoints or cache shrinking occurred. This problem has been fixed. ===============(Release Build - Engineering Case #639836)=============== A SQL Anywhere "root" web service did not resolve a URL when the database name was provided without a terminating slash, i.e. http://localhost/dbname. The server would have returned a 404 "Not Found" HTTP status. The following URL forms were also rejected with a 404 "Not Found": http://localhost/dbname?arg http://localhost/dbname/?arg The problem existed for both secure and insecure services, and has now been fixed. ===============(Release Build - Engineering Case #639657)=============== The server may have picked an unoptimal best plan for queries requiring a reversed index scan if they bypassed the SA Optimizer (i.e., the bypass was used for optimizing the query). This has been fixed. For example: create index idx on T(X); select max(T.X) from T; ===============(Release Build - Engineering Case #638368)=============== Spurious "109200 Can't parallelize bloom filter" could have been observed which were incorrect. This has been fixed. ===============(Release Build - Engineering Case #639706)=============== The startup error messages "Failed to become a daemon" and "'%1' is not a valid engine name" were not localized on UNIX systems. This has been corrected. ===============(Release Build - Engineering Case #639656)=============== In some cases the Start Server in Background utility (dbspawn) could have returned the generic error, -80 (Cannot start server), instead of returning the real error. In other cases, the server could have crashed on shutdown. This has been fixed. ===============(Release Build - Engineering Case #639021)=============== The server may have become unresponsive when an error occurred that should have been ignored. This has been fixed. The following console message was sometimes, but not always observed on Windows 7: "TCP Listener shutting down (64)". This change also includes the following enhancements: - When a listener terminates, it now always writes a console message identifying the protocol and the network address, ie. HTTPS, {::}:443 - An IgnoreCodes protocol option has been added to HTTP and HTTPS protocols ===============(Release Build - Engineering Case #639704)=============== When performing arithmetic on DOUBLE values, if one of the inputs was NULL, an arithmetic overflow error could have been spuriously reported instead of computing the NULL value properly. The problem only affected 32-bit platforms, and has now been fixed. ===============(Release Build - Engineering Case #639159)=============== In some cases, calling the system procedure sa_get_request_times() may have caused the server to crash. This has now been fixed. ===============(Release Build - Engineering Case #638494)=============== Attempting to start an external environment when the server machine was incorrectly configured would have caused the application to wait up to 15 seconds before receiving an error from the server. An incorrectly configured server usually results in the external environment process terminating immediately upon startup; hence the server will now report an appropriate error as soon as it detects that the external environment process terminated while starting up. ===============(Release Build - Engineering Case #638207)=============== A LOAD TABLE statement would have failed assertion 111706 "Attempting to store invalid string value in table "{table name}", column "{column name}" if the table had a column with user datatype uniqueidentifier. The problem only happened if a user datatype was used. This has been fixed. To fix such tables in existing databases the table needs to get recreated or a database upgrade needs to be run. ===============(Release Build - Engineering Case #637881)=============== When executing a remote query that required partial or no passthru processing, and the query made heavy usage of aliases, then the server could have incorrectly returned error "-890 statement size or complexity exceeds server limits". This problem has now been fixed and the -890 error will now only be returned if the statement size or complexity really does exceed server limits. ===============(Release Build - Engineering Case #639028)=============== Conversion of some time strings to a timestamp would have failed. A time specified as hours followed by the AM/PM designator could not have been converted to a timestamp. For example: select cast( '11am' as time ); The work-around is to include minutes: select cast( '11:00am' as time ); A time that included microseconds, but did not include seconds could not have been converted to a timestamp. For example: select cast('00:00:.930' as time) The work-around is to include seconds: select cast('00:00:00.930' as time) These problems have been fixed. ===============(Release Build - Engineering Case #638982)=============== Creating an external procedure with a CREATE PROCEDURE statement that contained both a RESULT and LANGUAGE clause, but that did not contain a DYNAMIC RESULT SETS clause, would have incorrectly defaulted the number of dynamic result sets to 0 instead of 1. This problem has now been fixed and the dynamic result sets (if not specified) will now default to 0 if no result clause exists, and will otherwise default to 1 if a RESULT clause does exist. Note that as before, the DYNAMIC RESULT SETS value is only meaningful if a LANGUAGE clause is specified. ===============(Release Build - Engineering Case #633232)=============== The server could have crashed under certain circumstances where malformed data existed in the database, and an attempt was made to generate statistics over this data either implicitly or explicitly. Customer applications that do not insert this malformed data are not likely to be impacted. The server now treats malformed data as NULL for the purpose of statistics collection. ===============(Release Build - Engineering Case #638903)=============== A race condition in the server could have caused it to crash on shutdown. This problem only affected Solaris (Intel and SPARC), HP, AIX and Mac OS X. This has now been fixed. ===============(Release Build - Engineering Case #638849)=============== Statements which CREATE, DROP or ALTER synchronization profiles were not being recorded in the transaction log. If a database server needed to recover the effects of one of these statements, recovery could have failed. This has been fixed. ===============(Release Build - Engineering Case #636535)=============== When building a text index using an external prefilter or term breaker, the server could have recorded the length of the document before prefiltering as the final length. This could have caused the scores reported by the CONTAINS queries to differ (in most cases be lower) than expected. The problem did not affect the text indexes built using no external libraries. For example: If the following two values (documents) 'A very nice day...' 'Peace and quiet at home' were indexed using a tag-removing prefilter, the lengths of the actual text were not equal, but the lengths recorded by the index would have included the lengths of the tags, making the document lengths equal. This has now been fixed. ===============(Release Build - Engineering Case #640240)=============== Execution of an ATTACH TRACING statement with a LIMIT clause, either by size or by time, would generally have failed to limit the size of the trace captured. This has been fixed. ===============(Release Build - Engineering Case #638764)=============== In rare cases, a server participating in a mirroring system could have hung temporarily, and then resumed processing requests, when dynamic tuning of the server's multi-programming level was enabled . This has been fixed. ===============(Release Build - Engineering Case #638648)=============== Round Earth polygons with long edges crossing equator could have been interpreted incorrectly, causing queries over such geometries to return incorrect results. This has been fixed. Database with this problem will need to have the affected geometries re-inserted after applying this fix. This change also fixes the interpretation of parameters to the ST_Polygon( ST_Point, ST_Point ) constructor. Previously, if the parameter points were close to the International Date Line, an invalid polygon (with edges longer than 180 degrees) could have been constructed. This has been fixed. For example, consider: ST_Polygon( new ST_Point( 170, 10, 4326 ), new ST_Point( -170, 20, 4326 ) ). Now, this will be interpreted as equivalent to: new ST_Polygon( 'Polygon((170 10, -170 10, -170 20, 170 20, 170 10))', 4326 ) which is a polygon crossing the date line. In general, the constructor will choose the interpretation that generates the polygon that fits into a single hemisphere. ===============(Release Build - Engineering Case #637336)=============== Dropping a text index used within a view could have caused the assertion failure message: "Unable to delete row from SYSTABLE". This could have happen when the view definition contained a CONTAINS predicated that could have be satisfied by the text index. This has been fixed. A workaround is to drop the view, then drop the text index. ===============(Release Build - Engineering Case #637340)=============== If a Unix server was started with a server name longer than 32 bytes, shared memory connections to it may have been dropped. This has been fixed. ===============(Release Build - Engineering Case #638484)=============== Larger tables with a clustered index that had a significant number of rows inserted at the end of the clustering index, could have exhibited poor local clustering. This could have caused the optimizer to pick sub-optimal plans. This has been fixed. ===============(Release Build - Engineering Case #638481)=============== The server could have returned an incorrect name for a temporary connection, or in rare cases the server could have crashed. The crash was more likely when using diagnostics on a mirrored server. The incorrect connection name could have been returned by a call to connection_property( 'Name' ), listed in diagnostic tracing's sa_diagnostic_connection table, or shown in an error such as "User '' has the row in '
' locked". This has been fixed. ===============(Release Build - Engineering Case #638477)=============== In extremely rare circumstances, servers answering queries with keyset cursors may have become unstable, leading to an eventual crash. This has been fixed. ===============(Release Build - Engineering Case #631004)=============== The range for a correlation coefficient is between -1 and +1, however the corr() system function returned only positive values. This has now been corrected. ===============(Release Build - Engineering Case #627397)=============== In very rare cases the server may have crashed when releasing a query plan of a DML statement from the plan cache, and the statement had triggers and publications and used string or numeric values. This has been fixed. ===============(Release Build - Engineering Case #638260)=============== If a database with multiple dbspaces failed to start (for any of a variety of reasons such as an invalid log file), the server could have erroneously reported: "Assertion failed: 201117 Attempt to close a file marked as dirty". This has now been corrected. ===============(Release Build - Engineering Case #637745)=============== If an application executed a remote statement, and the remote statement required the server to execute the statement in either partial or no passthrough mode, then there was a chance the server would have crashed when the statement was overly complex, or if the server cache was exhausted. This problem has now been fixed by reporting an error in this situation. ===============(Release Build - Engineering Case #638001)=============== Attempting to start an external environment on a server machine that was overloaded or incorrectly configured, could have resulted in the error "External environment could not be started, 'main thread' not found". Quite often this problem was due to the external environment failing to establish a connection with the server within a specific timeout, either due to the server (or server machine) being overloaded, or due to incorrect configuration. The error message has now been changed to give a more meaningful reason for the failed START EXTERNAL ENVIRONMENT request. ===============(Release Build - Engineering Case #637988)=============== If an incorrect password was supplied in the saldap.ini file, the server could have hung when attempting to register with LDAP. Also, SA client libraries could have hung when using LDAP to find servers. This has been fixed. ===============(Release Build - Engineering Case #637290)=============== On a machine with IPv6 enabled but not configured, the function property('TcpipAddresses') would have returned "(::):2638" as one of the addresses. This is the IPv6 INADDR_ANY address, and it is not useful to clients for making connections. If HTTP or HTTPS was in use, the functions property('HttpAddresess') and property('HttpsAddresses') would have had the same problem. This has been fixed so that now this address will no longer be listed. ===============(Release Build - Engineering Case #636018)=============== Queries involving indexes containing long values could have returned incorrect results. Index corruption was possible, but not likely. This problem has now been fixed. ===============(Release Build - Engineering Case #634728)=============== If a simple statement had one of the following forms and a table hint was used in the FROM clause, it was possible for subsequent statements from the same connection with the same form, but with different hints, to use the hints from the earlier statement. 1) SELECT {table columns} FROM {table} WHERE {primary key col1 = val1, primary key col2 = val2, ... } 2) UPDATE {table} SET ... WHERE {primary key col1 = val1, primary key col2 = val2, ... } 3) DELETE FROM {table} SET ... WHERE {primary key col1 = val1, primary key col2 = val2, ... } This has been fixed. As a work-around, the statements can be change to include "OPTIONS( FORCE OPTIMIZATION )", or the server can be started with the following command line switch: "-hW AllowSimpleUserCache". ===============(Release Build - Engineering Case #637874)=============== When computing the VARIANCE, VAR_SAMP, VAR_POP, STDDEV, STDDEV_SAMP, or STDDEV_POP functions, the server could have incorrectly returned a negative value or NULL. This could have happened if the data was in a non-exact numeric column (that is, of type DOUBLE or FLOAT) and there was extremely little actual variance across the values. It most likely could only have happened when all the values were exactly the same. This has now been fixed. A workaround is to adjust the value over which the variance function is computed so that a tiny amount of variance is introduced. For example, instead of: SELECT VARIANCE(mycolumn) FROM mytable use: SELECT VARIANCE(mycolumn + 0.00000001*myprimarykey) FROM mytable ===============(Release Build - Engineering Case #637769)=============== As part of the fix for Engineering case 632873, a problem was introduced where, under rare circumstances, an IMMEDIATE text index could have become corrupt. The corruption may manifest itself by preventing some documents from being found by matching queries. This has been fixed, but it is recommended that IMMEDIATE text indexes that are under heavy contention be recreated following applying this fix. ===============(Release Build - Engineering Case #637621)=============== If an application executed an INSERT statement that contained multiple VALUES lists, and the insert statement involved a remote table, then the server would have failed the INSERT with a "remote server not capable" error. The server will now push the multiple VALUES lists to the remote server, provided the remote server is another SA server and the INSERT statement can be processed in full passthru mode. It should be noted that if the remote SA server is an older version which does not support inserts with multiple values lists, then the remote SA will return a syntax error. ===============(Release Build - Engineering Case #637620)=============== In rare circumstances, the server could have crashed while handling multiple TLS connections. This has been fixed. ===============(Release Build - Engineering Case #637125)=============== If an application executed a remote query that required the server to make a remote connection to another SA database, then there was a very rare chance that the server would have incorrectly failed the remote connection with the error: "unable to connect, server definition is circular". This problem has now been fixed. ===============(Release Build - Engineering Case #634883)=============== Connections which had communication compression enabled could have been dropped, resulting in the "Connection was terminated" error. This was more likely to occur if the connection had both communication compression and simple encryption enabled. If the server -z log and the client LOGFILE log was used, the message "Failed to decompress a compressed packet" would have appearred in one or both of the logs when this problem occurred. This has been fixed. ===============(Release Build - Engineering Case #637200)=============== If a user with DBA authority granted usage permissions on a sequence not owned by it to another user, that user with DBA authority could not have been dropped unless the permissions were also revoked; a foreign key violation error would have been reported. By contrast, permissions on other database objects granted by a user who is about to be dropped are revoked automatically. This has been fixed so that the necessary sequence permissions are also revoked automatically. A workaround is to manually revoke any sequence permissions granted by the user about to be dropped, then re-grant them from a user that will not be dropped. The original grantor can then be dropped. ===============(Release Build - Engineering Case #636780)=============== If a NO MINVALUE clause was explicitly specified in a CREATE SEQUENCE or ALTER SEQUENCE statement, the minvalue for the sequence would have been set at zero, instead of the documented default, 1. If a NO MAXVALUE clause was explicitly specified, the maxvalue would have been set to zero, instead of the default, 2^63-1. In both cases, the problem can be worked around by simply removing the NO MINVALUE or NO MAXVALUE clause if the default values are desired. This has now been corrected. ===============(Release Build - Engineering Case #636770)=============== If the database option Chained was set to OFF, upgrading the database would have failed with the error: "COMMIT/ROLLBACK not allowed within atomic operation". This has been fixed by temporarily setting the option to ON within the upgrade script when needed. ===============(Release Build - Engineering Case #636660)=============== SQL Anywhere web server required that the last boundary of a multi-part/formdata HTTP request be terminated with a carriage-return line-feed. This restriction has now been relaxed, the server will now accept the last boundary as valid even if it is not terminated with a CR/LF. ===============(Release Build - Engineering Case #636655)=============== The server may have crashed when defining foreign keys that auto-created columns in the referencing table. This has been fixed. ===============(Release Build - Engineering Case #636572)=============== If an application executed a remote query, and the query involved an IF or CASE expression in the select list, then the query would always have been processed in partial or no passthru mode, even if there was only one remote server involved. This restriction has now been relaxed such that remote queries containing IF or CASE expressions in the select list will now be executed in full passthru whenever possible, but only if the remote server is another SA server. ===============(Release Build - Engineering Case #634324)=============== The Timeout parameter of the system procedure xp_startsmtp() was being ignored. This has been corrected. ===============(Release Build - Engineering Case #622184)=============== All CALL statements had the same hash signature when captured by diagnostic tracing, or the Application Profiling wizard. Now, the name of the procedure is incorporated into the signature. This means that the Summary view of captured statements will contain one entry for every procedure, rather than a single entry for all procedures, which makes it easier to identify procedures that need to be looked at for performance reasons. ===============(Release Build - Engineering Case #637037)=============== When a stored procedure was invoked through the Microsoft SQL Server Linked Server mechanism using an "EXEC" statement and specifying parameters, the call would have failed with a syntax error. The following is an example of a SQL Server query that is forwarded to a SQL Anywhere server: SELECT * FROM openquery(SALINK, 'exec test_proc 1') This problem has been fixed. When parameters are present in the SQL query, the statement is passed unchanged to the server. When no parameters are present, the OLE DB provider rewrites the "exec" statement using CALL and appends parameter marker place holders (in order to support ADO's ADODB.CommandTypeEnum.adCmdStoredProc). ===============(Release Build - Engineering Case #636520)=============== Indexes may have become corrupt when performing delete operations. The corruption was more likely to occur on multi-column indexes when the data in the index consisted of disjoint sets of highly clustered data, and may manifest itself by causing assertions such as 106200, 106201, 106216, 106217, or as errors from dbvalid. This has now been fixed, Rebuilding the affected indexes using a server with this fix, by executing the "ALTER INDEX REBUILD" statement, should be done when experiencing indexing related problems. ===============(Release Build - Engineering Case #635803)=============== Diagnostic tracing databases, or databases created by the automatic Application Profiling Wizard, would have failed to start if the original database had auditing enabled. This has been fixed. A workaround is to temporarily disable auditing on the main database, create the tracing database, and then re-enable it. ===============(Release Build - Engineering Case #636442)=============== If a server in a read-only scale-out system redirected a connection to another server due to the NodeType connection parameter, the internal count for the number of client connections could have been incorrect. This could have caused the server to: - incorrectly prompt that there were active connections when shutting down the server - incorrectly determine if an unconditional dbstop or STOP SERVER was required - incorrectly enforce the -gm connection limit This has been fixed. ===============(Release Build - Engineering Case #636307)=============== A simple UPDATE statement that affected a large number of rows could have consumed memory proportional to the number of rows if the statement used one of the following features: - results from a user-defined function with numeric Expression Caching (any data type) - a LIKE predicate - a CAST of a string to an approximate number (REAL, DOUBLE, or FLOAT) - the SORTKEY or COMPARE builtin function - the REMAINDER or MOD builtin functions with arguments of type NUMERIC or DECIMAL - the MEDIAN aggregate function - a spatial data type If the memory usage exceeded what was allowed for one connection, the statement would have failed with a dynamic memory exhausted error. This has been fixed. ===============(Release Build - Engineering Case #635618)=============== When converting a string to a time using the CONVERT function and an explicit format-style, SQL Anywhere 10.0 and above could have rejected conversions permitted by earlier versions. For example, the following statement is accepted by version 9.0, but rejected by version 10.0 and above: select convert( time, '11:45am', 14 ) tm_conv The behavour of converting from strings to TIME changed from version 9.0 of SQL Anywhere to version 10.0 and later, with version 10.0 and later applying the same rules that conversions from string to timestamp used. The string '11:45am' does not precisely match the format style 14 (hh:nn:ss:sss) because it contains an "am" indicator that is not present in the style. Parsing of formatted time strings has been enhanced so that the time portion of a string is accepted provided that it matches the format [hh:nn:ss.ssssssAA]. The time string must specify the hour digits, but all other time parts are optional. The AM/PM indicator is always accepted whether or not time parts are omitted. Note that this now permits up to six digits to represent microseconds after the seconds. This change affects the conversion of string to TIME and also to TIMESTAMP, so there is a consistent parsing. The following is rejected after this change, even though it was accepted in 9.0: select convert( time, '1991-02-03 11:45', 101 ) The string does not match the style format 101 (mm/dd/yyyy). Further, in some cases it was possible to generate invalid timestamps with string conversions. This has also been fixed. ===============(Release Build - Engineering Case #636316)=============== If an application connected to a database that had either been initialized or upgraded with version 12 software, and subsequently made several external environment calls, then in very rare cases, the application might have received an empty result from the external environment and the error: Permission denied: you do not have permission to execute the procedure "sajvm_JavaWorker" would have been reported in the server console. This problem has now been fixed. ===============(Release Build - Engineering Case #634775)=============== Execution of a CREATE TEXT INDEX ON (...) statement on a proxy table could have failed silently without giving an error. The creation of text indexes on proxy tables is not allowed, and the statement now gives the appropriate error. ===============(Release Build - Engineering Case #636289)=============== Under rare circumstances, the server could have hung when synchronizing (or rarely, fetching) large blobs or spatial data. This has been fixed. A partial workaround is to decrease the frequency of checkpoints; the hang is most likely to occur during a checkpoint. Of course, decreasing the checkpoint frequency will increase recovery time. ===============(Release Build - Engineering Case #633795)=============== Under rare circumstances, a query with a CONTAINS clause or predicate could have returned incorrect results when executed on a connection with snapshot isolation. For the problem to have occurred, the query would have had to have used an IMMEDIATE text index with a high volume of updates. This has been fixed. ===============(Release Build - Engineering Case #635961)=============== Attempting to connect using Integrated Login to a mirror server, or copy node, would have failed with the error "Integrated login failed". This has been fixed. ===============(Release Build - Engineering Case #635815)=============== If Java or other external environment objects were installed in a database, and the database failed to shut down cleanly before the next checkpoint, then it was likely that the Java or external environment objects would have needed to be re-installed. This problem has now been fixed. ===============(Release Build - Engineering Case #635809)=============== The server's memory usage could have been more than expected. Some memory allocations that could have been from the server's cache, came from the heap instead. This has been fixed. ===============(Release Build - Engineering Case #635120)=============== In exceptionally rare conditions, the server may have crashed while reading a row of a table that had a very large number of columns. This has now been fixed. ===============(Release Build - Engineering Case #635655)=============== If -xs was used to start the HTTP or HTTPS server on a Windows machine with IPv6 enabled, and the port number to be used was already in use by an IPv4-only application, the server would have reported a bind error ("Could not bind to address 0.0.0.0:80") but would have started anyway. This has been fixed - the server will refuse to start in this situation. ===============(Release Build - Engineering Case #633773)=============== The method used for an internal database server timer on Linux to support request timing (-zt option,) and row access times in the graphical plan with statistics, was unreliable. This has been fixed. ===============(Release Build - Engineering Case #635322)=============== The cleaner may not have completely cleaned pages in some situations. This has now been fixed. ===============(Release Build - Engineering Case #634327)=============== The server may have hung while running the Validation utility (dbvalid), or the equivalent VALIDATE DATABASE statement. This was only possible if multiple connections were open to the database, at least one of which is doing DDL (such as an ALTER TABLE statement), and a checkpoint or connection attempt was made during the validate. This has now been fixed. Note, it is recommended that the database server not be servicing other connections while database validation is taking place. ===============(Release Build - Engineering Case #632873)=============== Concurrent updates to an IMMEDIATE REFRESH text index may have corrupted the index. This has been fixed. ===============(Release Build - Engineering Case #635167)=============== Database connections acquired from the HTTP connection pool may have incorrectly referenced Global Temporary tables. Typically, a procedure that inserted data would have failed with a (SQLCODE -207) "Wrong number of values for INSERT" on subsequent HTTP requests. This has been fixed. A work-around is to disable HTTP connection pooling with the following database option: set option Public.http_connection_pool_basesize=0. ===============(Release Build - Engineering Case #633465)=============== Under rare circumstances, Application Profiling or diagnostic tracing could have caused the server to crash when the application being profiled used UPDATE statements with complex FROM clauses. This has been fixed. A workaround is to avoid capturing the PLANS_WITH_STATISTICS level. ===============(Release Build - Engineering Case #635066)=============== When Snapshot isolation was enabled, deleted rows might not have been physically removed in some cases. This has been corrected. ===============(Release Build - Engineering Case #633753)=============== If an application deleted a row from a table with a unique index, then subsequently called an external environment procedure, and the external environment procedure then re-added the row using the server-side connection, the application would have received an assertion failure (200112) message on rollback. This problem has now been fixed. ===============(Release Build - Engineering Case #632353)=============== If the server acting as the primary server in a mirroring system was shut down at the same time as it lost quorum due to a dropped mirror connection, the database on the primary could have been improperly checkpointed, resulting in a failure to recover on the next startup. Also, if a mirror server was starting at the same time the primary server was stopping or restarting, the mirror server could have received log operations that were not written on the primary. This would have resulted in an "incompatible files" message the next time the mirror connected to the primary, and would have forced the database and log to be manually recopied. Both of these problems have now been fixed. ===============(Release Build - Engineering Case #634330)=============== Kerberos server principals needed to be of the form: server_name@REALM (for example myserver@SYBASE.COM). There was no way to specify a Kerberos server principal of the industry standard form: server_name/hostname@REALM (for example myserver/mymachine.sybase.com@SYBASE.COM). Now the Kerberos server principal can be specified with the server -kp option. The server principal specified by -kp must have been extracted to the Kerberos keytab file on the machine running the database server. Note that only one of -kp or -kr can be specified. -kp dbengX/dbsrvX server option: Specifies the Kerberos server principal and enable Kerberos authenticated connections to the database server. Syntax: -kp server-principal Applies to: all OSes except Windows Mobile Remarks: This option specifies the Kerberos server principal used by the database server. Normally, the principal used by the database server for Kerberos authentication is server-name@default-realm, where default-realm is the default realm configured for the Kerberos client. Use this option if you want to use a different server principal, such as the more standard format server-name/hostname@myrealm. If OpenClient or jConnect Kerberos authenticated connections are made to the server, the server principal must be specified by the application (see SERVICE_PRINCIPAL_NAME for jConnect). The -kr option cannot be specified if the -kp option is specified. Specifying this option enables Kerberos authentication to the database server. See also: Example: The following command starts a database server that accepts Kerberos logins and uses the principal myserver/mymachine.sybase.com@SYBASE.COM for authentication. dbeng12 -kp myserver/mymachine.domain.com@MYREALM -n myserver C:\kerberos.db ===============(Release Build - Engineering Case #634289)=============== Attempting to upgrade a database would on rare occasions have failed with a 'database in use' error, even though there was no other connection active on the database. This problem has now been fixed. ===============(Release Build - Engineering Case #633747)=============== Unsetting the public option Oem_string would have caused the server to crash. This has been fixed. ===============(Release Build - Engineering Case #632875)=============== The server would have crashed if a client application attempted to connect while the server was shutting down after failing to start. This has been fixed. ===============(Release Build - Engineering Case #634191)=============== If an application made an external C environment call with a NULL argument, and the external C environment routine subsequently called get_value() to retrieve the NULL argument, then the environment would have incorrectly returned a status of 0 indicating failure to the external C environment routine, rather than returning a non-zero status. This problem has now been fixed. ===============(Release Build - Engineering Case #634033)=============== When loading shapes into a round-earth spatial reference system, certain valid shapes may have incorrectly generated the error "Invalid polygon: multiple exterior rings" (Error Code -1451) This would have occurred for polygons with holes (i.e., polygons defined by two or more rings), and was most likely to occur when the hole appeared near the edge of the exterior ring. There was a small possibility that the reported error could instead have been "Invalid polygon nesting" (Error Code -1450), "Invalid polygon: no exterior ring" (Error Code -1449), or that any of these errors could occur for a valid polygon (with or without holes) whose exterior ring crossed the equator. This has been fixed. ===============(Release Build - Engineering Case #631890)=============== If an outer join had a materializing operator on the null-supplying side (for example a work table or a sort), then the performance could have been slower than it could have been because expressions from the tables under the null-supplying side were materialized when they were not needed above the join. Also, the server could have crashed while executing a plan with an outer join if the null-supplying side contained an IN-list with either NUMERIC or string values. These problems have now been fixed. ===============(Release Build - Engineering Case #633633)=============== When attempting to start the server on a machine with 256 or more processors, the server would have failed to start with assertion failure 109511: "Memory allocation size too large". This has been fixed. A workaround is to reduce the number of processors used by the server with the -gt or -gtc command line options. ===============(Release Build - Engineering Case #633524)=============== When running application profiling, or manually diagnostic tracing with host variables, the server may have hang. This has been fixed. A workaround is to avoid enabling the host-variable tracing level. ===============(Release Build - Engineering Case #633488)=============== On Unix systems, a process's address space can be limited by using "ulimit -v" or by various methods of setting system-wide defaults that are dependent on the version of Unix. The 64-bit SQL Anywhere server was not taking that limit into account when computing a maximum cache size and insufficient address space would have been left available for the server's other address space needs. This problem has been fixed. Note, this issue is similar to Engineering case 586837, but only affects version 12.0. ===============(Release Build - Engineering Case #633275)=============== If a database mirroring server was shut down via the console (or via a HUP signal on Unix), it could have hung. This has been fixed. As a workaround, use the Stop Server utility (dbstop) to stop the server. ===============(Release Build - Engineering Case #633117)=============== The following issues have been fixed for queries that bypass the optimizer: 1. the number of cached pages for an index was not saved for the graphical plans 2. complex expressions used in the WHERE clause may have produced different errors than the optimizer 3. predicate selectivities were not normalized, this was a different behaviour than the optimizer ===============(Release Build - Engineering Case #632342)=============== Under rare circumstances, the server may have hung while diagnostic tracing was enabled. This has been fixed. ===============(Release Build - Engineering Case #629056)=============== Attempting to connect with the connection parameter DatabaseName (DBN), but not DatabaseFile (DBF), to a database that was not running on a network server could have incorrectly resulted in the error "Request to start/stop database denied". This error could have also occurred on the personal server if the -gd option was used. This has been fixed so that this now results in the "Specified database not found" error. ===============(Release Build - Engineering Case #623779)=============== Servers running databases with large schemas may experience periods of unresponsiveness at idle checkpoint time. The performance of checkpoints has been improved to reduce the length of this interval. ===============(Release Build - Engineering Case #633373)=============== If a procedure used in the FROM clause of a statement was inlined, crashes or incorrect errors may have been reported if the following conditions hold: 1. the procedure contains a single statement having common table expressions (CTEs) defined using WITH [RECURSIVE] clause. 2. the procedure parameters are used inside the CTEs in any expression (e.g., WHERE predicate, select list item, etc.) 3. the procedure parameters are outerreferences in the FROM clause This has been fixed. The workaround is to add an extra statement inside the procedure to make it not a candidate for inlining (e.g., " if 1 = 0 then return end if;") CREATE PROCEDURE CRASH ( @databaseid INTEGER, @tableid INTEGER, @rowid BIGINT ) WITH RECURSIVE SIMPLE ( databaseid, tableid, rowid, mtableid, mrowid, stableid, srowid ) AS ( SELECT databaseid, tableid, rowid, stableid, srowid, stableid, srowid FROM ATABLE WHERE databaseid = @databaseid AND stableid = @tableid AND srowid = @rowid UNION ALL ... SELECT databaseid, changeno, rowchangeno FROM T rc WHERE EXISTS (SELECT * FROM CRASH( rc.databaseid, rc.tableid, rc.rowid ) ) ===============(Release Build - Engineering Case #633032)=============== Replicating a "Point EMPTY" geometry object via Mobilink could have reported errors. In particular "Spatial library error: 25" could have been reported. This problem has been fixed. ===============(Release Build - Engineering Case #633015)=============== If an application called a Java external environment procedure that returned result sets, then those result sets would not have been cleaned up for a long time after the application was done with them. The result sets now get cleaned up in a more timely fashion. ===============(Release Build - Engineering Case #624801)=============== An HTTP protocol option specifying a port with no value would have started a listener on the next available port. Specifying a port with no value, or providing a value of zero, is no longer accepted. All protocol options that take a numeric value will no longer accept an empty value as a zero default. ===============(Release Build - Engineering Case #632732)=============== On Unix systems, the Performance Statistics utility (dbstats) could not have monitored a database server that was running under a different user id. This has been fixed. ===============(Release Build - Engineering Case #632413)=============== On Vista and later versions of Windows, the Windows Performance Monitor utility (perfmon) could not have monitored a database server which was running as a Windows service. This problem has been fixed. ===============(Release Build - Engineering Case #632488)=============== If the option Optimization_goal had the setting 'First-row', then validating a table would have been extremely slow, whether validating with the Validation utility, or with a VALIDATE statement. This has been fixed A work-around is to set the optimization goal to 'All-rows' before validation. ===============(Release Build - Engineering Case #632417)=============== If a Java or CLR external environment had been started, and an application then attempted to execute an "alter database upgrade" command, or if the Upgrade utility (dbupgrad) was run, then the upgrade would have failed due to the fact that the database was still in use by the external environment(s). This problem has now been fixed and the external environments will now be shut down provided they are idle at the time the database upgrade is attempted. ===============(Release Build - Engineering Case #632050)=============== If a Java external environment had been started for a particular database, and a connection on that database accidentally attempted to drop the SYS.DUMMY table, then the connection would have hung instead of giving the expected "permission denied" error. This problem has now been fixed. Note that this problem does not exist for external environment other than Java. ===============(Release Build - Engineering Case #632048)=============== If a view or derived table was used on the null-supplying side of an outer join it was possible for the expression to return a non-NULL value for a row of the view that should have been null-supplied. This would have occurred if one of the view columns contained one of the following expressions: - user-defined function - argn - http_header - http_response_header - http_variable - isdate - isnumeric - next_connection - next_database - next_http_header - next_http_response_header - next_http_variable - next_soap_header - patindex - soap_header - stuff For example, the following queries would have incorrectly returned a non-NULL value for the column "b" of the derived table "D": select * from rowgenerator left join ( select dummy_col , argn( 1, 137, dummy_col ) b from sys.dummy ) D on 1=0 where row_num=1 select * from rowgenerator left join ( select dummy_col , isnumeric( dummy_col ) b from sys.dummy ) D on 1=0 where row_num=1 This has been fixed. ===============(Release Build - Engineering Case #631904)=============== If a server or database was started with a space in the name, then attempting to start external environments would have failed. This problem is specific to servers running on Windows based systems, and has now been fixed.. ===============(Release Build - Engineering Case #631897)=============== In extremely rare timing dependent cases, if a communication error occurred on a connection with the dedicated_task option set in a mirroring configuration, the server could have crashed, asserted or hung. The fix for Engineering case 628436 missed this situation, which has now been fixed. ===============(Release Build - Engineering Case #631800)=============== Queries involving spatial predicates ST_Intersects or ST_IntersectsRect would have missed certain optimization oppotunities when operating over small geometries, or geometries with minimal surface area. This has been fixed. For example, performance of the following query was likely to improve as a result of this change: select geometry from table_containing_ST_Curves where geometry.ST_IntersectsRect( new ST_Point( 0, 0 ), new ST_Point( 10, 10 ) ) = 1; ===============(Release Build - Engineering Case #631640)=============== In very rare cases, the server could have crashed if a database shutdown request was received at the same time that an active connection on the same database executed an external environment call. This problem has now been fixed. ===============(Release Build - Engineering Case #631797)=============== If a column CHECK constraint was defined using references to other columns, it was not being handled as a table CHECK constraint. This has been fixed. ===============(Release Build - Engineering Case #631475)=============== Calls to some system procedures may have caused an server crash if null arguments were used. This has been fixed. ===============(Release Build - Engineering Case #627631)=============== In rare cases, a database server used for mirroring could have crashed when the connection to its partner was dropped. This has been fixed. ===============(Release Build - Engineering Case #631113)=============== Attempting to execute a CREATE OR REPLACE PROCEDURE statement could have caused a server crash. This has been fixed. ===============(Release Build - Engineering Case #630376)=============== If a database being mirrored had been enabled for auditing and the mirror servers were restarted, no auditing operations were recorded in the transaction log. This has been fixed. ===============(Release Build - Engineering Case #630226)=============== If an ALTER TABLE statement had a DROP or ALTER column clause, and the column did not exist, then an incorrect column name could have been reported in the error message. This only happened if there was another ADD, ALTER or DROP column clause in the statement. This has been fixed. ===============(Release Build - Engineering Case #630890)=============== In very rare situations, the server may have crashed when executing a statement that contained a large number of UNION, EXCEPT or INTERSECT clauses. This has been fixed. These statements will now return the sql error "Statement size or complexity exceeds server limits". ===============(Release Build - Engineering Case #630519)=============== A query that referenced a view or derived table that contained a select list item that was not a table column could have caused a crash when executing using proxy tables. This has been fixed. ===============(Release Build - Engineering Case #630359)=============== The ASE label for the "GBK" character set has been changed from "CP936" to "cp936", as character set names passed to ASE APIs such as cs_locale() are case sensitive. The ASE version of character set labels is generally not used directly by SQL Anywhere, but is provided to users who need to use ASE libraries. Typically, a client would obtain the ASE label via a call such as db_extended_property( 'charset', 'ase' ). ===============(Release Build - Engineering Case #630210)=============== If a GRANT or REVOKE statement was executed for a view which was currently invalid (e.g. because it referenced a table that has been dropped), an error indicating that the view was invalid might have been given. Now, the error is suppressed, but the view is still marked as invalid. ===============(Release Build - Engineering Case #630527)=============== The ApproximateCPUTime property would have grown in value for blocked connections if the property was queried. This problem was most noticeable for connections that were blocked for long periods of time and for whom this property was frequently queried. This has now been fixed. ===============(Release Build - Engineering Case #629417)=============== If an application attempted to execute a Java external environment procedure, and the target method was part of a class that had a private constructor, then calling the Java external environment procedure would have failed with an IllegalAccessException. This problem has now been fixed. ===============(Release Build - Engineering Case #640194)=============== For queries containing predicates of the following forms: A = B A <> B A [NOT] IN ( ... ) A = ANY ( ... ) A <> ANY ( ... ) A = ALL ( ... ) A <> ALL ( ... ) where A was a geometry column with a spatial index, extra rows may have been returned if the optimizer chose a plan that accessed the index with a scan predicate. This has been fixed. ===============(Release Build - Engineering Case #639016)=============== Attempting to execute queries that used the FOR XML clause, may have caused the server to crash when failures were encountered while fetching data. This has been fixed. ===============(Release Build - Engineering Case #636654)=============== The Validation utility, or a VALIDATE INDEX statement, may have failed spuriously when run on indexes with 33 to 64 columns, if any columns beyond the 32nd were sorted in ascending order. This has been fixed. ===============(Release Build - Engineering Case #632438)=============== When running the Unload utility to create a new database with the same settings (dbunload -ar), it may have immediately failed with the error "Too many connections to database being replaced". This would have been rare, and retrying the unload would likely have resulted in success. This has been fixed. SQL Anywhere - Sybase Central Plug-in ===============(Release Build - Engineering Case #654434)=============== When sorting the plug-in names in the Plug-in dialog, an exception would have been thrown if a plug-in was first reloaded. This has been fixed. ===============(Release Build - Engineering Case #652248)=============== Clicking 'Apply' on the Auditing tab filter pane, could have thrown an exception causing Sybase Central to crash. This has been fixed. ===============(Release Build - Engineering Case #652211)=============== In dialogs, components are often labelled with text that has a mnemonic, shown with an underlined letter. It is permissible for two components to have the same mnemonic. In that case, pressing ALT and the mnemonic should move the focus to the next component which has the given mnemonic. This moving of the focus was broken if the component which currently had the focus was an editable combobox. This problem was surfacing in the Connect dialog used by the admin tools when starting a database on another computer. The "i" mnemonic is shared by the "Database file" field and the "Find" button. When the "Database file" field had focus, pressing ALT+I did not move focus to the "Find" button. This has been fixed so that now it does. ===============(Release Build - Engineering Case #652131)=============== Sybase Central could have failed to find the results of a search when editing an object in the right pane, if "Cancel" was clicked when asked to save changes before showing the search result. This has been fixed. ===============(Release Build - Engineering Case #652034)=============== When analyzing an Application Profiling or Diagnostic trace, the Application Profiling wizard may have recommended changing the -gn setting, even though this no longer applies to version 12 servers. This has been fixed. ===============(Release Build - Engineering Case #651491)=============== Typing Ctrl-Z in an unmodified editor would have marked it as modified. This has been fixed. ===============(Release Build - Engineering Case #650006)=============== On the "Create Backend Server Farm" dialog, the Apply button was not enabled when the selection in the "Client security" or "Backend security" comboboxes was changed. This has been fixed. ===============(Release Build - Engineering Case #649298)=============== If the "backend security" option for a backend server farm was set to HTTP or HTTPS in the relay server plugin, the setting was not written to the relay server configuration file and so was lost when the file was saved. This has now been corrected. ===============(Release Build - Engineering Case #649138)=============== Editing a LONG VARCHAR value on the Data tab in Sybase Central, or in the Results panel of the Interactive SQL utility, would have caused a crash if the value was entered directly, as opposed to loading the value from a file. This has been fixed. ===============(Release Build - Engineering Case #648987)=============== Entering a string longer than 2048 characters in any of several fields in dialogs of the Relay Server plugin would have caused Sybase Central to crash when the 'OK' or 'Apply' buttons on the dialog were clicked. The fields that caused this issue were: - ID and Description on the "Create Backend Server Farm" dialog - ID, Security Token and Description on the "Create Backend Server" dialog - Description on the "Create Relay Server" dialog These fields now limit input to 2048 characters. ===============(Release Build - Engineering Case #648191)=============== In the Text Configuration Object wizard, the minimum term length could have been set to a value that exceeded the maximum term length. This has been fixed. ===============(Release Build - Engineering Case #647162)=============== Selecting an Event object in the Details pane, then right-clicking the same event in the tree to enable or disable it, would have thrown an exception. This has been fixed. ===============(Release Build - Engineering Case #645497)=============== No messages would have been when right-clicking a synchronization profile, selecting "Synchronize...", and then clicking OK. This has been fixed. ===============(Release Build - Engineering Case #645005)=============== When using the Unload or Extract Database wizards, if unload/extract into a new database was chosen, and Strong encryption was specified with an encryption key that didn't match the confirm encryption key, then the wizards would have continued to report a key mismatch error even after the encryption type was changed to Simple (where the encryption key is not used). This has been fixed. ===============(Release Build - Engineering Case #643728)=============== Attempting to open the text completer while editing a stored procedure in Sybase Central would have resulted in the completer appearing and then immediately disappearing. This has been fixed. ===============(Release Build - Engineering Case #643698)=============== On Mac OS systems, the Create Database wizard would have remained open after successfully creating a database. With the Cancel button disabled, it was necessary to click the Close box to close the wizard. Now, the wizard is automatically closed when database creation is successful. ===============(Release Build - Engineering Case #638161)=============== When double-clicking a search result for an item in the Fragmentation tab, Sybase Central would have selected the item in the Fragmentation tab, but then would have reported "The result could not be shown because it no longer exists". This has been fixed. ===============(Release Build - Engineering Case #643457)=============== Clicking the Back or Next button may not have updated the toolbar buttons properly. This has been fixed. ===============(Release Build - Engineering Case #642889)=============== The changes for Engineering case 615994 introduced a problem where refreshing the Domains folder, after having selected a non-proxy table's Columns tab, would have caused a "Resource governor" error. This has been fixed. ===============(Release Build - Engineering Case #638160)=============== Typing a Ctrl-V while viewing a spatial reference system's Definition tab, a system trigger's SQL tab, a Java class's Description tab, or an external environment object's Contents tab, would have caused Sybase Central to either crash or hang when another object was selected in the tree. This has been fixed. ===============(Release Build - Engineering Case #641998)=============== When in Debug mode, the SQL editor for a view, trigger, procedure, function or event, contained a menu item and toolbar button for the Query Editor, even though the contents of the editor could not be modified. Similarly, the SQL editor for a trigger, procedure or function, contained menu items for translating the SQL to Watcom-SQL or Transact-SQL dialects. Now, these menu items and toolbar buttons are no longer displayed. ===============(Release Build - Engineering Case #640832)=============== After following the scale out tutorial described in the documentation, the overview panel in Sybase Central would have shown warnings for the mirror and arbiter. This has been fixed. The mirror and arbiter are now excluded from the overview panel details when only scale out is used. ===============(Release Build - Engineering Case #637505)=============== Opening the property sheet for an article that referenced a subset of a table's columns and clicking the Cancel button to close it, would have caused the subset of columns to not have been displayed the next time the property sheet was opened. Pressing F5, or selecting View -> Refresh in the main Sybase Central window, was required to get the property sheet to correctly display the set of columns in the article. This has been fixed. ===============(Release Build - Engineering Case #636664)=============== When connected to a 10.x or 11.x database running on a 12.x server, selecting the Procedures & Functions folder in the tree would have caused Sybase Central to crash if objects owned by the user dbo were not being filtered out. This has been fixed. ===============(Release Build - Engineering Case #637026)=============== Characters from a charset other than the one the computer usually operates in could have been displayed as boxes in the text above the tabs in the right pane. This has been fixed. ===============(Release Build - Engineering Case #636312)=============== Selecting 'Undo' or 'Redo' (or typing Ctrl-Z or Ctrl-Y) while viewing a spatial reference system's Definition tab, a system trigger's SQL tab, a Java class's Description tab, or an external environment object's Contents tab, would either have caused Sybase Central to crash or hang, when selecting another object in the tree. This has been fixed. ===============(Release Build - Engineering Case #636305)=============== When the transaction log contained many entries, sorting of the audit table could have been very slow. This has been fixed by no longer allowing the audit table to be sortable. ===============(Release Build - Engineering Case #634055)=============== When editing a stored procedure or view in a separate window, the "Undo" toolbar button was not enabled following a paste. This has been fixed. ===============(Release Build - Engineering Case #634032)=============== The 'Find/Replace' toolbar button did not work in an editor window if the toolbar had been undocked. This has been fixed by preventing the toolbar from being undocked. A workaround is to use the menu item or F3 key to open the 'Find/Replace' window. ===============(Release Build - Engineering Case #634029)=============== Pressing Shift+F10 while a syntax-highlighting editor had focus should have opened its context menu, but did not happen consistently. This has now been fixed." ===============(Release Build - Engineering Case #633799)=============== The "Find/Replace" window could have opened without any components if it was opened from a window used to view a stored procedure or view. The window typically contained only a grey or white rectangle. The problem happened only when opening a file in the editor window, or when clicking "File/New". This has now been fixed. ===============(Release Build - Engineering Case #633784)=============== The "Tools" button on the "Connect" window, and any toolbar buttons in Sybase Central which have drop-down arrows, were drawn without the usual button border and background gradient on Linux and Solaris computers. This has now been fixed so that they have the correct background and border. ===============(Release Build - Engineering Case #636304)=============== Opening the Domain, Web Service or Spatial Reference System property dialogs could have caused the Sybase Central to crash. This has been fixed. ===============(Release Build - Engineering Case #635652)=============== When working with the Recommendations panel within Profiling, its suggestions may sometimes have contained a very long line, which it would have shown in the text area without any line wrapping. This meant that scrolling from left to right was required to view its contains. This has been fixed. ===============(Release Build - Engineering Case #635629)=============== If the Platform field on the Overview page had a long name, the horizontal splitbar could not be moved to view it. This has been fixed. ===============(Release Build - Engineering Case #634791)=============== Sybase Central could have displayed a server twice in the tree. This could eventually have caused a crash when disconnecting from a database running on the server. This has been fixed. ===============(Release Build - Engineering Case #634675)=============== Sybase Central could have crashed when attempting to view the data of a table after dropping the table's primary key by some means other than Sybase Central (for example, via the Interactive SQL utility), and then refreshing the Sybase Central viewer via F5 or View -> Refresh. This has been fixed. ===============(Release Build - Engineering Case #634437)=============== Selecting a database's Locks tab would have caused Sybase Central to crash if there were any ReadPK or WriteNoPK locks. This has been fixed. ===============(Release Build - Engineering Case #633031)=============== Sybase Central could have silently crashed on startup if an OEM.INI file was installed which contained an entry before a section header. This has been fixed; the entry is now ignored. Note, this problem also affected the Interactive SQL and Console utilities, as well as the MobiLink Monitor. ===============(Release Build - Engineering Case #633011)=============== The Login Mapping wizard's last page did not always display the current login_mode option setting correctly. This has been fixed. ===============(Release Build - Engineering Case #632902)=============== Attempting to add or update a row in a table by using a file to supply a column value, could have crashed Sybase Central (or silently failed with the Interactive SQL utility), if the file contents were larger than the database column could hold. This has been fixed. ===============(Release Build - Engineering Case #632880)=============== On Mac OS X systems, the Add, Edit, Delete, Update and Cancel Row toolbar buttons were too small (16x16 rather than 32x32). This has been fixed. ===============(Release Build - Engineering Case #632627)=============== Database documentation that was generated from the SQL Anywhere plug-in for Sybase Central would not have shown scroll bars when viewed with the Safari browser. This has been fixed. ===============(Release Build - Engineering Case #632436)=============== The Tip of the Day which referred to the Connect Assistant has been removed. The Connect Assistant was removed in version 12.0.0. ===============(Release Build - Engineering Case #632174)=============== The Foreign Key wizard could have caused Sybase Central to crash when creating a second foreign key on a table, if the creation of the first foreign key on the table had automatically added a new column to the foreign table. This has been fixed. ===============(Release Build - Engineering Case #631122)=============== After right-clicking a procedure or function and selecting "Execute from Interactive SQL", the resulting dialog where the parameters are specified had a row height for the table that was too small. This caused text to be clipped in the "Value" column. This has been fixed. ===============(Release Build - Engineering Case #629053)=============== When sorting a column in the Data Details panel, an error could have occurred stating "Error reading row. Accessing a closed connection object." This has been fixed. SQL Anywhere - Utilities ===============(Release Build - Engineering Case #652037)=============== The Unload utility (dbunload) could have crashed when attempting to unload a database into an existing database. A crash would have occurred when a data-only unload (-d) was being done, and a user or table in the source database did not exist in the destination database. If the unload was done through the Sybase Central Unload wizard, the wizard would have crashed. This has been fixed. ===============(Release Build - Engineering Case #652075)=============== The changes made for Engineering case 644855, to correct a crashing problem when the Windows desktop appearance was changed, caused fonts to not render properly in the result set table. Some characters could have been displayed as boxes in the column headers for result sets. This has been fixed. ===============(Release Build - Engineering Case #650177)=============== Both the Interactive SQL utility and Sybase Central use the same syntax highlighting editor to display SQL. On Mac OSX systems only, hitting the tab key in the editor would have caused all the text in the editor to be selected and indented 1 tab stop. This has been fixed. Now, when the tab key is pressed, if any text in the editor is selected then that text is indented 1 tab, otherwise a tab character is inserted at the current insertion point. ===============(Release Build - Engineering Case #650345)=============== The "Connect" window allows for starting and connecting to a database on a different machine. When that action was selected, a dialog is presented with a number of fields to fill in (Host, Port, Database File Name, etc.) A checkbox to turn off Autostart was missing. It has been added. This affected all programs that use the "Connect" window to connect to a SQL Anywhere database -- the Interactive SQL utility, Sybase Central, and the Console utility. A workaround is to add "astop=no" to the "(other)" field on the "Advanced Options" tab. ===============(Release Build - Engineering Case #649492)=============== The Ping utility (dbping) can be used to specify an ODBC driver or driver manager library (-l option). If the Unix driver manager included with SQL Anywhere (libdbodmX.so) was used as the argument for the dbping -l option, dbping would have returned the error 'Failed to load ODBC driver'. This has been fixed so that dbping can be used with libdbodmX.so. ===============(Release Build - Engineering Case #649468)=============== When a SQL error occurred that was not in the last SQL statement entered, an error dialog was displayed that had a 'Continue' and a 'Stop' button. Hitting the escape key had no effect. Thisn has been corrected so that hitting the escape key on this dialog now selects the 'Stop' action. For example, open the Interactve SQL utility (dbisql), connect to database and enter the following: select * from foo; select 'hello' Since there is no table foo, the first statement generates an error dialog with a 'Stop' and 'Continue' button. Hitting escape here is now the same as pressing the 'Stop' button. ===============(Release Build - Engineering Case #649123)=============== If editing table data using the "Results Panel", (or the "Data" tab in Sybase Central), failed because of a database error, the result would have been a crash (version 11.0.1 and earlier), or an incomplete error message (12.0.0 and later). This has been fixed so that the software does not crash, and the complete error message is displayed. ===============(Release Build - Engineering Case #648045)=============== When the Interactive SQL utility (dbisql) was run on AIX systems, interrupting a long-running statement by pressing CTRL-C would have resulted in dbisql crashing. This has been fixed. ===============(Release Build - Engineering Case #648204)=============== The changes made for Engineering case 644855 could have resulted in the Interactive SQL utility (and Sybase Central) crashing when displaying a result set if run on Windows Vista or Windows 7. This has been fixed. ===============(Release Build - Engineering Case #647341)=============== The OUTPUT...FORMAT FIXED statement wrote DECIMAL, DOUBLE, NUMERIC, SMALLINT, and TINYINT values left-aligned. They are now correctly written right-aligned, like the other numeric data types. Note, There is no guarantee that FIXED format files created by DBISQL use the same column widths as DBISQLC. ===============(Release Build - Engineering Case #647472)=============== If SQL Anywhere was installed with an install key which contains only a subset of the whole install, such as the ALK Personal Server w/ Sync key which includes the Personal server but not the Network server, and then the Deployment wizard for Windows was run, it was not possible to select the personal server for deployment. The only database that was listed was UltraLite. The visible components have now been corrected, to show the Personal Server. ===============(Release Build - Engineering Case #646675)=============== In DBISQL, and Sybase Central, SQL is displayed in a syntax highlighting editor that is restricted to using fixed-width fonts. The editor's display can be thought of as being divided into a grid of fixed-width rows and columns. The column width is based on the character width of the display font, which is called the "em width". Some languages, such as Japanese, Chinese, and Korean, contain characters that are wider than the em width. When the widths of these characters were not integral multiples of the em width, subsequent characters on the line were drawn without respecting the editor's grid of fixed column widths. This led to occasional problems where selected text was not drawn with the correct colors, and more importantly, prevented the text completer from making appropriate suggestions. This has been fixed. ===============(Release Build - Engineering Case #645986)=============== If the database server reported a "definite" rowcount for a query but then returned fewer than that many rows, dbisqlc could have displayed a subset of the rows, or possibly no rows at all. This has now been fixed. When using the "Connect with an ODBC Data Source" option in the "Action" dropdown list of the "Login" tab of the connection dialog with the 64-bit versions of the dbisqlc utility and dbmlsync, no DSNs would have been displayed; and the 32-bit versions would only have shown DSNs that used an ODBC driver with the same major version of SQLAnywhere as dbisqlc and dbmlsync. This has been fixed, so that 32-bit and 64-bit versions now display all SQLAnywhere DSNs defined for SQLAnywhere version 6.0 and up. Dbisqlc did not correctly handle certain connection string components which did not have a shortform (such as the new "Server" parameter). This problem has been fixed. ===============(Release Build - Engineering Case #645630)=============== When editing DATE, TIME, or TIMESTAMP values in a result set, the usual date/time editor was not being make available, forcing the value to be edited as a string. This has been fixed. ===============(Release Build - Engineering Case #644855)=============== If the Interactive SQL utility (dbisql) was open, and the results of a query were displayed, changing the Windows desktop theme from "Windows XP" to "Windows Classic", or otherwise changing the Window style from "XP" to "Classic", would have caused dbisql to crash. This has been fixed. This issue could have manifest itself any time the Windows look-and-feel was changed from something other than Windows Classic to Windows Classic. It would also have affected Sybase Central if a table was selected in the "Folders" panel. This issue only occurred on Windows computers. Operation on other operating systems was not affected. ===============(Release Build - Engineering Case #644477)=============== Text completion in SQL that was loaded from a Favorite may not have worked correctly if the SQL spanned multiple lines. This has been fixed. ===============(Release Build - Engineering Case #643598)=============== The "Edit in Window" menu item was inadvertently shown when editing binary columns, and has now been removed. Editing the hex value in the table cell is still supported, as is loading a value from a file, but editing the hex value in a separate window was never supported. Also, the "Edit in Window" menu item was visible if a binary column value was clicked in the Results panel, and then the "..." button was clicked. This has been fixed as well. ===============(Release Build - Engineering Case #637445)=============== The splash screens for the SQL Anywhere Console utility (dbconsole), the MobiLink Monitor, and the SQL Anywhere Monitor contained program names that were always in English. These mane have now been localized. ===============(Release Build - Engineering Case #642172)=============== Even with the changes for Engineering case 629453, on Ubuntu systems, clicking on a result set cell and choosing 'Edit in Window' would have opened the edit dialog and left focus in the cell. This has been fixed. ===============(Release Build - Engineering Case #642010)=============== If a Initialization utility command line used exceptionally long filenames and encryption key, and the encryption key contained at least one single quote character, the resulting database may have been unusable. The server would always have reported an incorrect encryption key. This has been fixed. ===============(Release Build - Engineering Case #637447)=============== The ALT left cursor and ALT right cursor keys on Solaris systems control the desktop and cannot be used to view executed SQL statements. The get around this limitation, the keys used now for viewing previous and next SQL statements on Solaris systems are the keys CTRL-up cursor and CTRL-down cursor respectively. ===============(Release Build - Engineering Case #641131)=============== When connected to a database using an ODBC data source which used the ASA 9.0 ODBC driver, the Interactive SQL utility could have crashed if an INPUT statement was executed which processed TIME, DATE, or TIMESTAMP data. This has been fixed. ===============(Release Build - Engineering Case #641308)=============== The 64-bit versions of the Log Translation utility (dbtran), SQL Remote (dbremote) or the MobiLink client (dbmlsync), could have crashed when processing a transaction log containing an ALTER SYNCHRONIZATION SUBSCRIPTION statement. This has been fixed. ===============(Release Build - Engineering Case #641274)=============== When running the Deployment wizard, specifying an invalid directory when prompted for the current SQL Anywhere install location, or specifying a non-existent directory for the target directory, would have caused the Deployment wizard to crash. This has been corrected. Aa valid location must now be specified for your current SQL Anywhere install, and moving past the location pane in the wizard is prevented until a valid location is given. If a non-existent directory is given for the target directory, it will be created. ===============(Release Build - Engineering Case #640597)=============== Starting with Version 12.0.0, on Windows computers, numbers are now formatted with the thousands separator that is shown in the Windows Control Panel. They were always being shown though on Windows Vista and Windows 7, even if they had been turned off on the Control Panel. This has now been corrected. This problem had already been fixed for Windows XP and earlier (see Engineering case 631033). This fix also affects the "Data" tab for tables and views in Sybase Central. ===============(Release Build - Engineering Case #640470)=============== On systems running the Chinese version of Windows XP, some private use characters were displayed incorrectly in the following places: 1. The result set table's long value window 2. The query tree (left hand pane) of the Plan Viewer This has been corrected. ===============(Release Build - Engineering Case #639140)=============== When the Options window was opened from the Query Editor, all of the options for the Text Completer would have been inadvertently turned off. This has been fixed. ===============(Release Build - Engineering Case #638897)=============== The result set display format (Scrolling Table versus Text) was ignored when disconnecting from one type of database (e.g. SQL Anywhere), and then connecting to another (e.g. UltraLite). This has been fixed. ===============(Release Build - Engineering Case #639018)=============== The Query Editor could have crashed when opened if the initial SELECT statement contained "*" and at least one explicit column name in the column list. This has been fixed. ===============(Release Build - Engineering Case #639002)=============== Changes made to the WHERE and HAVING tabs in the Query Editor were ignored after the Options button was clicked. This has been fixed. ===============(Release Build - Engineering Case #638986)=============== The Query Editor could have crashed if the last time it was opened a join had been added to the query, but the join type was left unspecified (blank). This has been fixed. ===============(Release Build - Engineering Case #638899)=============== The Options window had a set of radio buttons ("Show only the first result set" and "Show all result sets") which determined which result sets were displayed for statements that return more than one result set. UltraLite statements can return at most a one result set, so this option has ignore, and has now been removed. ===============(Release Build - Engineering Case #638862)=============== The Interactive SQL utility would have crashed if a file was imported and then subsequently text was pasted into the editor. This has been fixed. ===============(Release Build - Engineering Case #638854)=============== The Server Licencing utility (dblic) has a limit on the length of the user name and company name that it stores in the license file. When it truncated the name, it could have done so in the middle of a multi-byte character resulting in a mangled name. This has been fixed. ===============(Release Build - Engineering Case #638365)=============== Execution of a DESCRIBE INDEX statement could have failed with a "table not found" error when connected to a case-sensitive database and the table (or owner) name differed from the database object name only by case. For example, when connected to a case-sensitive database, the following DESCRIBE TABLE statement would have failed: CREATE TABLE Test ( c INT PRIMARY KEY ); DESCRIBE INDEX FOR TABLE test; This has been fixed. ===============(Release Build - Engineering Case #638021)=============== When the legacy option "Pressing the Esc key clears SQL Statements..." was on, and the Text Completer was open, pressing Esc would have both closed the completer and cleaed the SQL Statements field. Now, it just closes the completer. ===============(Release Build - Engineering Case #637991)=============== The Interactive SQL utility could have crashed when completing a DELETE statement, if a table alias was given. This has been fixed. ===============(Release Build - Engineering Case #637877)=============== When completing column names for tables that have aliases, the alias is now displayed in the completion list, and the alias is now used in the completed text. For example, if the completer is opened after "Comp" in the following statement: select Comp from customers C1, customers C2 the completer will include "Company (C1 - customers)" and "Company (C2 - customers)". If the second item is selected, the completed text will read: select C2.CompanyName from customers C1, customers C2 Previously, "Comp" would be replaced by "CompanyName", which was ambiguous. ===============(Release Build - Engineering Case #637203)=============== The column alignment used by the OUTPUT statement for the FIXED file format was often inappropriate for the data type. In general, numbers should be right-aligned, while everything else is left-aligned. This has been fixed. ===============(Release Build - Engineering Case #637313)=============== When copying a number from a result set to the clipboard, the thousands separator was included in the copied number. This has been corrected so that the separator is removed. ===============(Release Build - Engineering Case #637174)=============== If a file was inserted using the "Edit/Insert File" menu item, the file would have been locked by dbisql until dbisql was closed. If the Fast Launcher option was turned on, the file was locked until the Fast Launcher also shut down (which by default happens after 30 minutes of inactivity). Now, the file is unlocked as soon as its text has been added to the "SQL Statements" field. ===============(Release Build - Engineering Case #637165)=============== The following defects related to the menu bar, which occurred only on Mac OS X systems, have now been fixed: - The "Check for Software Updates" menu item was missing - The text for submenus were indented more than was required - There were a number of spurious separators at the end of certain menus. ===============(Release Build - Engineering Case #637047)=============== The minimum width for the Plan Viewer window could have been less than 1024 pixels, and thus not completely visible on smaller monitors. This has been fixed. ===============(Release Build - Engineering Case #636558)=============== All of the items in the "File" menu (and others) would have been disabled after clicking a source control-related menu item, if that source control action failed. This would have occurred when using the "custom" source control option. This has been fixed. ===============(Release Build - Engineering Case #636555)=============== Editing NCHAR, NVARCHAR, or LONGNVARCHAR values would have resulted in an error message of the form "The row could not be inserted. Column ... not found". This has been fixed. Note, this problem would also have affected the "Data" tabs in Sybase Central. ===============(Release Build - Engineering Case #636544)=============== There is a tool in the "Connect" window which creates an ODBC DSN from the contents of the window. If a DSN had been selected in the window, its contents were not included in the newly created DSN which usually made the new DSN useless. Now, the new DSN contains the parameters of the selected DSN. ===============(Release Build - Engineering Case #636565)=============== The TCP/IP protocol option table on the "Network" tab of the "Connect" dialog could have become disabled under some circumstances. The table was being disabled only if a parameter was entered on the "Network" or "Advanced Options" tabs, the tabs were hidden by clicking the "Advanced" button, then clicking "Connect" or "Tools/Test Connection" and declining to use the hidden connection parameters. This has been fixed, now the table is never disabled. ===============(Release Build - Engineering Case #636549)=============== The file in which custom source control settings were saved was incorrectly named ".sybSourceControl999". It is now called ".sybSourceControl610", and has been moved into the same directory as the other configuration files for the Interactive SQL utility. If a custom source control system has already been configured, it will have to be reconfigured after this change. ===============(Release Build - Engineering Case #636422)=============== The Interactive SQL utilirt can show results as a scrolling table, or as plain text. Changing this option using the "Show Results as" items in the "Data" menu, could have resulted in the option changing unexpectedly when disconnecting and reconnecting. The problem was that the option was not being saved consistently when it was changed. This has been fixed. ===============(Release Build - Engineering Case #636310)=============== In the "Connect" window, "Tools/Save as ODBC Data Source" can be clicked to save the contents of the window as a DSN. That window was not closing when the Esc key was pressed. This has been fixed so that now it does. ===============(Release Build - Engineering Case #634489)=============== The Interactive SQL utility (dbisql) would have required the exact case for identifiers to be used when connecting to a SQL Anywhere case-sensitive database. This was incorrect for SQL Anywhere, as case-sensitivity affects string comparisons not identifiers, and has now been corrected. This general problem affected a number of other aspects of dbisql behavior, and have also been corected: 1. The "Lookup Table Name" window, the "Lookup Procedure Name" window, and the text completer made case-sensitive searches for matching object names if connected to a case-sensitive SQL Anwyhere database. 2. The INPUT USING statement would have failed if the table name in the FROM clause did not match the exact case of an existing table in the case-sensitive database from which data was being imported. 3. In the Query Editor, the list of available columns did not show any columns unless the table name matched the case of the database table name (affects: "Columns", "GROUP BY", and "ORDER BY" tabs; "Expression Editor" window). Also, the "Table pattern" field on the "Tables" tab was applied in a case-sensitive way. ===============(Release Build - Engineering Case #633775)=============== Exporting source control commands from the "Custom Source Control Options" window could have caused the Interactive SQL utility to crash on Mac OS X systems. This has been fixed. ===============(Release Build - Engineering Case #633610)=============== The "Find/Replace" dialog could have failed to find text when the "Look in selection" box was checked. This was most likely to happen if the selection started far from the start of the text, and ended close to the end of the text. This has been fixed. ===============(Release Build - Engineering Case #635991)=============== Attempting to unload and reload a 12.0.0 database which was configured for mirroring or read-only scale-out, could have resulted in a syntax error during reload. The syntax error would have occurred on a SET MIRROR OPTION or ALTER MIRROR SERVER statement. This has been fixed. As a work around, the reload.sql file can be edited to double the embedded quotes and escape other characters requiring escaping in these statements. ===============(Release Build - Engineering Case #635468)=============== On Mac OS X systems only, the names of favorites in the Favorites sidebar would have disappeared when the mouse was moved over them. This has been fixed. ===============(Release Build - Engineering Case #635443)=============== When not connected to a database in the SQL Anywhere Console utility (dbconsole), the "File/Options" menu is disabled. The "Options" context menus for the "Connections", "Properties", and "Messages" panels were not disabled. This has been corrected so that now they are disabled. ===============(Release Build - Engineering Case #633152)=============== The window used to display a single cell value in a result set could have been too narrow to view the components it contains. The text which gives the length of the value could be abbreviated with an ellipsis, or hidden altogether on a system using a Japanese character set. The same thing could have happened regardless of the character set if certain large sized fonts are used as the computer's default font. This has now been fixed. ===============(Release Build - Engineering Case #633019)=============== It was not possible to edit BIT values in the "Results" panel. This has been fixed. ===============(Release Build - Engineering Case #634934)=============== If a computer was configured to display numbers with a thousands separator, and a NUMERIC, REAL, FLOAT, or DECIMAL value that contained a thousands separator was edited, the editor would have started empty and the bell would ring. Now the thousands separator is stripped out, and the resulting string is used as the initial editor value. ===============(Release Build - Engineering Case #634906)=============== Setting the "Show results from each statement" option would have resulted in incorrect behavior: Attempts to sort, select all, or copy column data would have resulted in an attempt to fetch more rows if required. That attempt should not have been made. When "Show results for each statement" is On, only the rows already fetched can be sorted. This has been corrected. ===============(Release Build - Engineering Case #634894)=============== When modifying a character column value after selecting "Edit in Window" from the "...' menu, if there was a database error with the value, the value could have been corrected with a new value, but the old value was resent by mistake. This has been fixed. ===============(Release Build - Engineering Case #633486)=============== Dragging and dropping within the Favorites sidebar did not work consistently and have been fixed. Specifically, the following actions did work correctly: 1. Dropping at the end of the list did nothing. Now the dragged item is moved to the end of the list. 2. Dropping an item to a location farther down the list would move it one higher than the indicated drop location. Now items are dropped where indicated. ===============(Release Build - Engineering Case #634503)=============== When completing the name of a column in a SELECT statement following the FROM clause, the completed text could have included the owner name for the table which contained the column, but not the table name. This was not valid SQL. Now, the owner name is not part of the inserted text. ===============(Release Build - Engineering Case #634302)=============== The Interactive SQL utility could have crashed when sorting a result set which returned tens of thousands of rows. This would have occurred in the following situation: 1. Click the column header to sort by that column 2. click "Yes" (or press Enter) when asked to fetch the remaining rows 3. Immediately press the F5 key. The crash will occur once the entire result set had been read. This has now been fixed. ===============(Release Build - Engineering Case #634293)=============== The Interactive SQL utility could have crashed when sorting a large result set which returned tens of thousands of rows. This would have occurred in the following situation: 1. Click the column header to sort by that column 2. Click "Yes" when asked to fetch the remaining rows 3. Cancel fetching the rows 4. Click a different column header to sort by some other column This has now been fixed. ===============(Release Build - Engineering Case #634196)=============== When editing data in a scrollable table, the first keystroke pressed in a cell whose value was "(NULL)" or "(DEFAULT)" was being inadvertently ignored. This has been fixed. ===============(Release Build - Engineering Case #628564)=============== The Interactive SQL utility would have returned a function sequence error when connected to an UltraLite database and a query was executed if the “Commit after every statement” option was checked (under Tools/Options/UltraLite/Commands). This has now been fixed. A workaround is to uncheck the “Commit after every statement” option. ===============(Release Build - Engineering Case #633744)=============== On Mac OS X systems, the name of a saved history file was given the extension "..sq", rather than ".sql", when an explicit file extension was not entered. This has been fixed. ===============(Release Build - Engineering Case #633636)=============== The messages pane height was not being set to the number of lines specify in the Options dialog. This has been fixed. At the same time, the components related to the Messages pane height are now disabled in the Options dialog until the "Show separate Message pane" box is checked, since the height is used only when this box is checked. ===============(Release Build - Engineering Case #633379)=============== The Interactive SQL utility would have crashed if the "Approximate" box in the Spatial Viewer window was checked before a query had been entered. This has been fixed by disabling the box when appropriate. ===============(Release Build - Engineering Case #633371)=============== The Interactive SQL utility (dbisql) would not have started when using the -nogui command line option on a Linux computer which did not have a graphical environment. This has been fixed. ===============(Release Build - Engineering Case #633268)=============== The changes for Engineering case 632526 may have caused the "SQL" field in the Plan Viewer window to become unusably short after the "Get Plan" button was clicked. This has been fixed. ===============(Release Build - Engineering Case #633132)=============== If the Interactive SQL utility, Sybase Central, or the Console utility had been redeployed (i.e. installed by any means other than the standard SQL Anywhere product installer), the ability to check for software updates was still presented to the user, but there was no way for it to make the check. Attempting to check for updates would have opened a status window which would say that it was analyzing the installed software, but would never have completed. Checking for software updates is supported only from the Interactive SQL utility, Sybase Central, or the Console utility which has been installed by the SQL Anywhere installer. Now, if redeployed software is run, the following changes to the user interface will be made: 1. (All) The Help menu items related to checking for updates are removed 2. (Interactive SQL utility) In the "Options" window, the "Update Checker" tab is removed for SQL Anywhere and UltraLite. ===============(Release Build - Engineering Case #633000)=============== When editing a DECIMAL value, the editor could have truncated some of the least significant digits from the initial value. Now, those digits are preserved. ===============(Release Build - Engineering Case #632743)=============== The text fields on the second page of the Index Consultant were too narrow to display even their default values. This problem was most apparent on Mac OS X systems, although it could also have occurred on any platform if the font used by the application was sufficiently large, or if the look-and-feel for that platform had a wide border for text fields. This has been fixed. ===============(Release Build - Engineering Case #632739)=============== On Mac OS x systems, the "..." button in the result set table was several times wider than it should have been. This has been corrected. ===============(Release Build - Engineering Case #632545)=============== Pressing a non-character key (e.g LeftArrow, Alt, Space, etc.) could have inserted a hollow box character to the SQL Statements field. This has been fixed. This problem was more readily seen on Linux systems than on Windows. ===============(Release Build - Engineering Case #632538)=============== If an error window (or any other modal window) was open, it was impossible to close any Interactive SQL window, even if the error window was not owned by the Interactive SQL window that was attempting to be closed. This has been fixed. ===============(Release Build - Engineering Case #632526)=============== The Plan Viewer window could have opened with a width that was wider than the monitor if the "SQL Statements" field contained a SQL statement which was itself longer than could be displayed on the monitor. This has been fixed. ===============(Release Build - Engineering Case #632435)=============== When copying cells from a result set, a newline character was inadvertently added to the copied value, even if cells from a single row were copied. This newline has been removed in those cases. ===============(Release Build - Engineering Case #632177)=============== The text completer would not have suggested any names following a string of the form "owner.partialTableName" if "owner" was the same as "partialTableName". This would have occurred when trying to complete the name of a system table, e.g.: SELECT * FROM sys.sys This problem would have affected text completion in SELECT, DELETE, and UPDATE statements and has now been fixed. ===============(Release Build - Engineering Case #631798)=============== The Procedure Browser window could have crashed if there were no procedures listed, and the mouse was moved over the empty list. This has been fixed. ===============(Release Build - Engineering Case #631781)=============== The text completer could have failed to suggest column names at the end of a dotted expression if the SQL statement spanned more than one line. For example, if the completer was opened at the end of the following statement: SELECT * FROM customers C WHERE C. it should have suggested the columns in the "Customers" table, but it did not. This has been fix so that now it does. ===============(Release Build - Engineering Case #631647)=============== On Linux systems, opening a window to view a long column value could have caused increased CPU usage, or could have caused dbisql to crash. This problem was intermittent, and depended on how busy the system was when the window was opened. This has been fixed. ===============(Release Build - Engineering Case #631482)=============== On Linux systems, the main DBConsole window would still have been active when the initial "Connect" window was displayed. This would have allowed two "Connect" windows to be open at the same time; the subsequent behavior was not well-defined. This has been fixed so that the main window is now not active when the "Connect" window is open. ===============(Release Build - Engineering Case #631033)=============== Starting in version 12.0.0, on Windows computers numbers are now formatted with the thousands separator that is shown in the Windows Control Panel. With this fix, thousands separators are not shown at all if they have been turned off on the Control Panel. Previously, they were always shown. Note, this fix also affects the "Data" tab for tables and views in Sybase Central. ===============(Release Build - Engineering Case #631269)=============== The Interactive SQL utility could have reported an internal error if the SRID was changed on the "Spatial Preview" tab in the column value window. The problem was most likely to happen if the SRID was changed faster than the database server was able to render the spatial value. This has been fixed. ===============(Release Build - Engineering Case #631148)=============== When Sybase Central is shut down, it closes any Interactive SQL windows which were opened from within Sybase Central. Part of that closing process may prompt the user to save unsaved changes, or may remind them that closing Interactive SQL will also close any Plan Viewer or Spatial Viewer windows. On Linux systems, if the Interactive SQL window was obscured by Sybase Central when Sybase Central was closed, the prompts could have been hidden by the Sybase Central window. Unless the Interactive SQL window was activated, or the Sybase Central window was moved, the prompts would have been hidden and Sybase Central would not have closed. Now, the Interactive SQL windows are activated and any prompts should appear on top of the Interactive SQL window(s). ===============(Release Build - Engineering Case #631141)=============== Clicking the "Data>Show Results as Scrollable Table" or "Data>Show Results as Text" menu items did not make the setting permanent, which could have lead to the wrong format being used when disconnecting and then reconnecting without stopping Interactive SQL. This has been fixed, now these menu items exactly correspond to the "Scrollable table" / "Text" options in the "Options" window, which was the original intent. ===============(Release Build - Engineering Case #631028)=============== Creating the first user DSN by clicking the "Save as ODBC Data Source" Tools button could have silently failed. This has been fixed. ===============(Release Build - Engineering Case #631022)=============== When creating an ODBC DSN from the Connect dialog, the prompt that warned that the DSN already existed had a Cancel button. It should not have and has been removed. Also, clicking the close button (the "X" in the toolbar) aborted the entire process of creating the DSN; now, clicking the close button is the same as clicking the "No" button, which leaves the "Saves as ODBC Data Source" window open. ===============(Release Build - Engineering Case #591837)=============== The Index Consultant in the Interactive SQL utility would have failed to process queries containing line-terminated comments (ie -- or //). This has been fixed. As a work around, removing the comments allowed the analysis to proceed. ===============(Release Build - Engineering Case #630897)=============== If a SQL favorite contained a TAB character, it could have prevented some, or all, of the other favorites from being loading, and they would have been lost. This has been fixed. ===============(Release Build - Engineering Case #630884)=============== On Mac OS X systems, the Interactive SQL utility was, in some cases, using reserved keystrokes for certain menu items and buttons. The following menu accelerators have been changed for Mac OS X only: Menu Item New Accelerator ---------- --------------- SQL/History Ctrl+Command+H SQL/Previous SQL Ctrl+Command+LeftArrow SQL/Next SQL Ctrl+Command+RightArrow The following accelerators for buttons on the Spatial Viewer have been changed for OS X only: Button New Accelerator ---------- --------------- History Ctrl+Command+H Previous SQL Ctrl+Command+LeftArrow Next SQL Ctrl+Command+RightArrow Save Image Command+S Hide SQL Shift+Command+H Zoom In Command+Plus Zoom Out Command+Minus Reset View Command+R Draw Outlined Polygons Command+P The tooltips for the above buttons now display the correct key name as well. Previouly, the tooltip displayed the Windows/Linux/Solaris accelerator key name instead of the Mac one. ===============(Release Build - Engineering Case #630522)=============== The Interactive SQL utility (dbisql) could have crashed if more than one dbisql window was opened by clicking the "Window/New Window" menu item, the first window was close, then the "Preferences" item in the "Interactive SQL" menu was clicked. This bug also had the symptom of always showing the preferences for the first window, never for any of the subsequently opened windows. This has been fixed. ===============(Release Build - Engineering Case #630392)=============== The SQL Anywhere Console utility (dbconsole) would have displayed a message with the text "java.lang.NullPointerException" and an "OK" button if the "Options" window was opened before a connection had been opened. This has been fixed. ===============(Release Build - Engineering Case #630219)=============== On non-Windows computers, a proportional font was used when displaying results as text in the Interactive SQL utility. This prevented the columns from lining up correctly. Now, a monospaced font is used. On Windows computers, a monospaced font has always been used. ===============(Release Build - Engineering Case #630040)=============== Messages in the Run Script window could have been truncated. The problem did not occur on all systems; it depended on the selected system font. The problem would have occurred on Windows for example, if "MS UI Gothic" was selected for the desktop icon font. This has been fixed. ===============(Release Build - Engineering Case #629768)=============== The file browser that opened after clicking the "Save" button in the Index Consultant did not prevent interaction with the wizard while it was open. This has been corrected so that it does. ===============(Release Build - Engineering Case #629458)=============== Clicking the Close button in the title bar of the Query Editor was considered equivalent to clicking the OK button. This was incorrect; it should have been equivalent to clicking the Cancel button. This has been fixed. ===============(Release Build - Engineering Case #629453)=============== when editing table data in the Results pane, clicking the "Edit in Window" menu item could have left the focus on the table rather than moving it to the resulting editing window. This has been fixed. This problem affected Linux systems only. ===============(Release Build - Engineering Case #552627)=============== If the language DLL was missing, the utilities createcert, viewcert, createkey, and mlfiletransfer would all have continued to execute, but would not have output any string resources. These utilities will now fail in this case with an appropriate error message. Also, the usage text for createcert and viewcert will now display the options in alphabetical order. Sybase Central Java Viewer - Java Viewer ===============(Release Build - Engineering Case #646088)=============== An attempt to connect to the utility database could have caused the error: "The set of connections could not be read from the database. Column number 10 is invalid." This has been fixed. UltraLite - Runtime Libraries ===============(Release Build - Engineering Case #650010)=============== Some large integers were being improperly scanned. This has been corrected. ===============(Release Build - Engineering Case #648499)=============== Incorrect results were possible when an aggregate function was used in an ORDER BY clause, and when the GROUP BY expressions were contained in the ORDER BY expressions. This has been corrected. ===============(Release Build - Engineering Case #648218)=============== An aggregate computation on the left side of join may have produced incorrect results when more than one group was generated as a result of a GROUP BY. This has been fixed. ===============(Release Build - Engineering Case #646356)=============== The error SQLE_MEMORY_ERROR could have been reported on Windows Mobile devices when a removable media card was ejected, or when the device returned from standby. The operation should have been silently retried for a few seconds and then SQLE_DEVICE_IO_FAILED reporting if the operation still failed. This has now been corrected. ===============(Release Build - Engineering Case #642173)=============== Erroneous results were returned when host indicator variables were used multiple times. This has been corrected. For example, the statement SELECT 1 + :x + :x:y + :x would generate incorrect results when a value was substituted for :x. A work-around would be to remove the :y from the statement, since host indicator variables are parsed but not processed in UltraLite. ===============(Release Build - Engineering Case #636651)=============== The use of START AT or FIRST in a subquery may have resulted in incorrect results. This was corrected. ===============(Release Build - Engineering Case #638003)=============== A C/C++/Objective-C UltraLite application using a static runtime library would have always linked in the synchronization code, even if the application didn't use, or didn't enable, synchronization. On Mac OS X and iPhone, database applications not using synchronization would have still needed to link to the core, security, and network frameworks. This has been corrected so that only applications which enable synchronization will now include synchronization code. On Mac OS X and iPhone, the core, security, and network frameworks are now only required when using synchronization. As a consequence of this change, synchronization must be enabled to use the ML_GET_SERVER_NOTIFICATION() SQL function. ===============(Release Build - Engineering Case #635800)=============== The error, SQLE_TOO_MANY_CURSORS, would have been reported when there were more than 32 prepared statements for a cursor, each of which had a parameter set. The limit should have been 64 prepared statements. This was corrected. UltraLite - Sample Application ===============(Release Build - Engineering Case #633041)=============== When running the UltraLite sample application on a Windows desktop, if no employee ID had been entered, a dialog is presented where one can be specified. Clicking on “Cancel” would have resulted in nothing happening. Now, the dialog box will be canceled when “Cancel” is clicked. UltraLite - UL Java Provider for Sybase Central ===============(Release Build - Engineering Case #643953)=============== In the Extract Database wizard for UltraLite, when checking or unchecking publications using the space bar instead of the mouse, the Next button would not have been enabled or disabled appropriately. This has been fixed. ===============(Release Build - Engineering Case #634612)=============== When F5 was pressed, or View -> Refresh Folder was selected, while creating a new table in the Table Editor and No selected when prompted to save the table, then the prompt to save dialog would have been shown again. This has been fixed. ===============(Release Build - Engineering Case #634440)=============== In the Table Editor, a primary key column could have been marked for deletion by selecting the column and pressing the Delete key, even though the Delete menu item and Delete toolbar button were disabled. In such cases, attempting to save the table could have caused Sybase Central to crash. This has been fixed so that now pressing the Delete key does nothing when one or more of the selected columns is in the primary key. ===============(Release Build - Engineering Case #634180)=============== Selecting multiple columns in the Data tab for a table in an UltraLite database was not possible. This has been fixed. UltraLite - UltraLite Engine ===============(Release Build - Engineering Case #646518)=============== In rare cases, UltraLite for Mac OS X could have gone into an endless loop while writing to the stream during a synchronization. This has been fixed. ===============(Release Build - Engineering Case #640081)=============== When specifying a non-default date, time, or timestamp_format option, the date/time values could have been truncated in the XML file produced by the UltraLite Unload Database utility (ulunload). This has been fixed. ===============(Release Build - Engineering Case #636082)=============== UltraLite should generate an error if a column in a primary key was dropped, but this situation was not being properly diagnosed. This has now been corrected. ===============(Release Build - Engineering Case #634313)=============== If Ultralite for Mac OS X or IPhone attempted to synchronize through a proxy host while using HTTPS or TLS, the connection would not have been established, and the sync would have failed. This has been fixed ===============(Release Build - Engineering Case #633364)=============== The Moblink server could have randomly, although rarely, reported the error: "Stream Error: Mismatched end-to-end encryption keys" when establishing an end to end encryption link with Ultralite on the iphone. This has been fixed. UltraLite - UltraLite for M-Business Anywhere ===============(Release Build - Engineering Case #638271)=============== The methods ResultSet.getTimestamp() and ResultSet.setTimestamp() quietly manipulated the database timestamp value as UTC. As a result, the javascript methods Date.toString() and ResultSet.toString() would have reported different values offset by the timezone difference. These methods now manage timetamps in localtime relative to ULPOD. Databases with timestamp values stored prior to this fix might contain values that were UTC based. UltraLite - UltraLite.NET ===============(Release Build - Engineering Case #646862)=============== Attempting to read a large Unicode string from an UltraLite database while using the engine could have caused a buffer overrun. This has been fixed. ===============(Release Build - Engineering Case #642245)=============== Calling Synchronize with a ULSyncProgressListener would have resulted in a thread left hanging after the sync had completed, which could have resulted in the application executable remaining locked after the application had shut down, requiring a device reset. This has been fixed. ===============(Release Build - Engineering Case #634532)=============== Connections to a database using a large cache on Windows Mobile devices, could have failed with the error SQLE_DYNAMIC_MEMORY_EXHAUSTED. This has been fixed. UltraLite - Utilities ===============(Release Build - Engineering Case #643571)=============== The UltraLite Information utility (ulinfo) is supposed to display a list of the valid user IDs in an UltraLite database. In some cases, this list was not being displayed. This is now fixed. ===============(Release Build - Engineering Case #641111)=============== The changes for Engineering case 632640 have been removed, as there were other problems with LOAD TABLE on Mac OS X and Linux systems. Thus for UltraLite, the LOAD TABLE statement is only available via the desktop tools (Interactive SQL utility) on Windows. Also, while UltraLite accepts the 'ENCODING' load option, it does not perform character set translation: the encoding of the data file must match the database. The preferred method for unloading and reloading UltraLite databases is XML files via the ulunload and ulload tools. Additionally, the ulinit tool is able to load schema and data directly from a SAS database. ===============(Release Build - Engineering Case #640582)=============== UltraLite does not support user-defined database properties. So when executing the statement SELECT db_property(‘bad-property’), a SQLE_UNKNOWN_PROPERTY error was generated when attempting to move to the first row of that result set. Applications written in C/C++, Javascript, ObjectiveC and .Net would have generated that error, however the Interactive SQL utility would not have displayed that error, but would have returned no rows and displayed no heading to the result set (appearing to be hung). This is now fixed. ===============(Release Build - Engineering Case #637901)=============== The Interactive SQL utility (dbisql) could have failed to connect to an UltraLite database specified on the command line (with -c) under the following conditions: - the UltraLite engine (uleng12) was started from one directory and dbisql was launched from another - the -c option to dbisqlL specified a relative path The result would have been that dbisql would have displayed the connection dialog, when it should have immediately connected to the database. This has been fixed. ===============(Release Build - Engineering Case #635085)=============== Attempting to create or interact with a database on an attached Windows CE device using the desktop tools (i.e. Sybase Central or command line utilities), using a WCE:\... database filename, would have fail. The WCE:\... paths have now been special cased when qualifying filenames. ===============(Release Build - Engineering Case #632984)=============== Use of the -f (or --filedir) command line option on the UltraLite Unload Database utility (ulunload) would have mangled the specified directory. This would have prevented the utility from functioning properly, and generated an error similar to the following: Error: Cannot open data file ‘’ for table T This has now been fixed. A workaround is to store BLOB/CLOB data in the current directory. ===============(Release Build - Engineering Case #632340)=============== Executing a LOAD TABLE statement on Mac OSX systems would have failed with the error -134 (feature not implemented). This has been fixed. UltraLiteJ - Runtime ===============(Release Build - Engineering Case #655969)=============== Accessing values of LONG BINARY STORE AS FILE on BlackBerry devices would have failed if the filename started with "file://", but was not all lowercase. This has been fixed. The string "file://" is now case insensitive as it should be. Note that the root value is case sensitive (i.e. "FiLe:///SDCard/me.blob" is ok but "FiLe:///sdcard/me.blob" is not). ===============(Release Build - Engineering Case #653070)=============== A COMMIT could have failed after a failed synchronization involving clobs or blobs. The failure could have left the blobs and/or clobs present in the transaction log in a bad state. This has been corrected. A work-around is to disconnect and then to reconnect to the database. ===============(Release Build - Engineering Case #652920)=============== A NullPointException was possible when executing an UPDATE statement when nothing was updated. This was corrected. ===============(Release Build - Engineering Case #651104)=============== A table with a BLOB or CLOB column followed by signed or nullable columns, could have caused corruption This was corrected. ===============(Release Build - Engineering Case #649655)=============== The result set returned by a query could have had an incorrect ordering when different indexes could have been used to implement WHERE conjuncts and ORDER BY clause This was corrected. An example would be SELECT * FROM table WHERE c1 = 10 ORDER BY c2 where c1 and c2 each were the first column in different indexes. ===============(Release Build - Engineering Case #649528)=============== Execution of DROP TABLE and DROP INDEX statements would not have failed when the affected table was being referenced by another prepared statement. This has been corrected. ===============(Release Build - Engineering Case #640579)=============== Attempts to unload an UltraLiteJ database using the ULjUnload utility would have resulted in a Null Pointer exception if the database had publication IDs that were not numbered continuously from 1. This can occur if publications are created then dropped. For example: CREATE PUBLICATION pub1 ... CREATE PUBLICATION pub2 ... DROP PUBLICATION pub1 This has been fixed. ===============(Release Build - Engineering Case #643660)=============== The DATEPART and HOUR functions would have returned the Hours partion of timestamps based on a 12 hour clock instead of a 24 hour clock. As a result, any afternoon timestamps would have returned the wrong Hours value. This has been fixed. ===============(Release Build - Engineering Case #641291)=============== Large downloads on BlackBerry devices, and simulators, would have started to fail with communication errors because the garbage collector would have done full GCs and locked out the liveness thread. This has been fixed by ensuring that all downloaded rows are row limited (requires enabling of row limiting and lazy loading). ===============(Release Build - Engineering Case #636438)=============== The exception "ianywhere.ultralitej.implementation.JrException: UltraLiteJ Error[-280]: Publication 'ul_no_pub' not found" may have been reported for Connection.resetLastDownloadTime(Connection.SYNC_ALL_DB_PUB_NAME). A workaround would be to call Connection.getLastDownloadTime(Connection.SYNC_ALL_DB_PUB_NAME).getTime() prior to the call to resetLastDownloadTime(). This has been fixed. ===============(Release Build - Engineering Case #638596)=============== The use of START AT or FIRST in a subquery may have resulted in incorrect results. This was corrected. ===============(Release Build - Engineering Case #638147)=============== 1. SyncParms.setAuthenticationParms( ",a,,b," ) was interpreted as only having two authentication parameters ("a" and "b") when it should be interpreted as 5 parameters ( "", "a", "", "b" and "" ). This has been fixed. Blank parameters are now correctly processed. 2. The documentation states that only the first 128 characters of each parameter are sent to the MobiLink server, but no limit was actually enforced. This resulted in corrupt data being sent to the MobiLink server if a value was excessively large. This has been fixed. Extremely large strings (greater than 21K characters) are now truncated prior to sending to the MobiLink server, and the MobiLink server will however report an error now if the authentication parameters' lengths exceed the server's limit of 128 bytes. ===============(Release Build - Engineering Case #636315)=============== A database could have been corrupted when run with Lazy Loading and a prepared query, which required a temporary table, was reused. This has been corrected ===============(Release Build - Engineering Case #633257)=============== When synchronizing a table with NOT NULL LONG BINARY or NOT NULL LONG VARCHAR columns, downloading an update to such a column could have resulted in an UljException -300 "Run time SQL error -- fatal". This has been fixed. ===============(Release Build - Engineering Case #633003)=============== Attempting to execute an UPDATE statement on a table with multiple indexes and lazy loading, could have failed in various ways by throwing Java exceptions. This was corrected ===============(Release Build - Engineering Case #631404)=============== The NOT NULL FOREIGN KEY clause was misdiagnosed as invalid in ALTER TABLE statement. This was been corrected. UltraLiteJ - Utilities ===============(Release Build - Engineering Case #651373)=============== Using the UltraLiteJ Database Transfer Utility to transfer a database from the simulator or a device to the desktop through HTTP, would have failed. Also, the device application would not have properly canceled a transfer. This has been fixed. Note, both desktop and device side applications must be updated simultaneously. ===============(Release Build - Engineering Case #649620)=============== When attempting to transfer a database from a BlackBerry device via USB, the on-device utility would have reported an error transferring the database, but the log would have shown the last chunk was sent. This issue did not reproduce on simulators. In most cases, an examination of the database that was received on the desktop would have shown that the database was completely transferred. This has been fixed. ===============(Release Build - Engineering Case #634340)=============== Synchronizations that worked fine on a BlackBerry Bold 9700 with OS 5.0.0.351, failed when the device was upgraded to 5.0.0.743. The application did not use BES or BIS communication, but tried Direct TCP, WAP 2.0 and WAP 1.x. When using BES or BIS communication, there was no issues with synchronization. This problem has been report to Research In Motion since it was discovered that calls to InputStream.read() had an additional 10 seconds overhead with OS 5.0.0.743 when using WAP 2.0 (and simillar delay with DirectTCP and WAP 1.x). UltraLiteJ has now been patch edto reduce the impact of this issue. For the most reliable synchronization, a device should be paired with a BES (BlackBerry Enterprise Server) or the application should use BIS communication (application provider can join RIM partner program for free and then apply to use the BIS protocol). ===============(Release Build - Engineering Case #632530)=============== The UltraLiteJ Database Unload utility (ULjUnload) would have output control characters (other than \t \r \n) or non-ASCII characters (>= \u007f) into its XML output without escaping them. This would have made the resulting XML file unreadable by many tools, including the UltraLite Load XML to Database utility (ulload). This has been fixed.