SQL Anywhere Bug Fix Readme for Version 12.0.0, build 2601



Choose a range of build numbers for which to display descriptions.
For example if you want to see what was fixed since the last EBF you applied then change 2483 to the build number of that last EBF.
Click Update Readme to make those changes take effect.
to Update Readme

Contents



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



12.0.0 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.


SQL Anywhere - Server

================(Build #2596 - 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.0 New Features

This section contains a description of new features added since the release
of version 12.0.0.


MobiLink - Relay Server

================(Build #2566 - 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 - Streams

================(Build #2545 - 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

SQL Anywhere - ADO.Net Managed Provider

================(Build #2564 - 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. ================(Build #2546 - 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

================(Build #2545 - 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

================(Build #2578 - 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 - Other

================(Build #2590 - 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

================(Build #2574 - 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. ================(Build #2571 - 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

================(Build #2582 - Engineering Case #641265)================ The left pane header now contains an icon to help clarify which toolbar button represents the left pane view.

UltraLite - Runtime Libraries

================(Build #2600 - Engineering Case #645529)================ When run on Windows desktop, UltraLite now supports long paths when creating, opening, or deleting databases.



12.0.0 Bug fixes

(see also Critical Bug Fixes) (see also New Features)
This section contains a description of bug fixes made since the release
of version 12.0.0.

MobiLink - Java Plugin for Sybase Central

================(Build #2599 - 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. ================(Build #2597 - 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. ================(Build #2593 - Engineering Case #643576)================ Sybase Central could have crashed when deleting a deployed Remote Task while the "Results" panel was selected. This has been fixed. ================(Build #2586 - 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. ================(Build #2586 - 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. ================(Build #2582 - 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. ================(Build #2556 - 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". ================(Build #2555 - 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. ================(Build #2554 - 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. ================(Build #2553 - 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. ================(Build #2553 - 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. ================(Build #2553 - 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. ================(Build #2551 - 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. ================(Build #2551 - 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. ================(Build #2550 - 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. ================(Build #2549 - 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. ================(Build #2548 - 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. ================(Build #2548 - 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. ================(Build #2546 - 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. ================(Build #2546 - 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 ================(Build #2546 - 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. ================(Build #2546 - 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. ================(Build #2545 - 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. ================(Build #2545 - 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. ================(Build #2544 - 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. ================(Build #2544 - 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. ================(Build #2544 - 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. ================(Build #2544 - 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. ================(Build #2543 - 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. ================(Build #2543 - 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. ================(Build #2543 - 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. ================(Build #2543 - 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. ================(Build #2543 - 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. ================(Build #2543 - 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. ================(Build #2542 - 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. ================(Build #2542 - 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. ================(Build #2541 - 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. ================(Build #2541 - 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. ================(Build #2540 - 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

================(Build #2575 - 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. ================(Build #2573 - 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. ================(Build #2564 - 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. ================(Build #2555 - 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. ================(Build #2550 - 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 - QAnywhere client

================(Build #2600 - 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. ================(Build #2578 - 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. ================(Build #2562 - 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

================(Build #2546 - 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

================(Build #2601 - 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. ================(Build #2595 - 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=<session_index> system error ({error code}) With this change, the error is now less likely to occur. ================(Build #2595 - 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. ================(Build #2594 - 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. ================(Build #2590 - 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. ================(Build #2586 - 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. ================(Build #2584 - 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. ================(Build #2570 - 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. ================(Build #2569 - 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. ================(Build #2566 - Engineering Case #642399)================ 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 Linux systems) was incorrectly setting the content-type header as text/plain instead of application/vnd.syncml.dm+wbxml. This has now been fixed. ================(Build #2566 - Engineering Case #642398)================ When running on Linux systems, 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. ================(Build #2566 - Engineering Case #642131)================ On Linux systems, 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. ================(Build #2552 - 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. ================(Build #2549 - Engineering Case #633685)================ Under rare situation, the Relay Server Outbound Enabler (RSOE) may have crashed during channel renewal. This has been fixed. ================(Build #2543 - 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

================(Build #2549 - 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. ================(Build #2545 - 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. ================(Build #2545 - 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. ================(Build #2545 - 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

================(Build #2574 - 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. ================(Build #2570 - 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. ================(Build #2565 - 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. ================(Build #2562 - 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. ================(Build #2553 - 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

================(Build #2571 - 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

================(Build #2598 - 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. ================(Build #2580 - 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. ================(Build #2580 - 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. ================(Build #2577 - 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. ================(Build #2566 - 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. ================(Build #2565 - 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. ================(Build #2565 - 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. ================(Build #2564 - 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". ================(Build #2557 - 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. ================(Build #2552 - Engineering Case #635300)================ The text displayed by an evaluation version of the MobiLink server was truncated. This has been fixed. ================(Build #2546 - 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". ================(Build #2545 - 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. ================(Build #2544 - 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. ================(Build #2544 - 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. ================(Build #2539 - 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. ================(Build #2484 - 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.

MobiLink - Utilities

================(Build #2595 - 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. ================(Build #2593 - 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. ================(Build #2570 - 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. ================(Build #2554 - 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_<table name> class. The result of trying to synchronize this deleted row would have been a failed synchronization. This has been fixed. ================(Build #2553 - 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. <Main> [-10133] java.lang.Exception: Notifier(Simple).request_cursor: Failed to prepare request cursor <Main> [-10133] at ianywhere.ml.notifier.Notifier.connectDB(Notifier.java:390) <Main> [-10133] at ianywhere.ml.notifier.Scheduler.connectDB(Scheduler.java:360) <Main> [-10133] at ianywhere.ml.notifier.Scheduler.run(Scheduler.java:428) <Main> [-10133] at java.lang.Thread.run(Thread.java:619) <Main> [-10133] Caused by: java.sql.SQLException: [Sybase][ODBC Driver][SQL Anywhere]Column 'bogus_content' not found <Main> [-10133] at ianywhere.ml.jdbcodbc.IConnection.nativePrepareStatement(Native Method) <Main> [-10133] at ianywhere.ml.jdbcodbc.IConnection.prepareStatement(IConnection.java:554) <Main> [-10133] at ianywhere.ml.notifier.Notifier.connectDB(Notifier.java:388) <Main> [-10133] ... 3 more <Main> <SISI><Scheduler(0:1)>: Shutdown <Main> <SISI><Scheduler(0:1)>: Disconnected from database ================(Build #2549 - 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. ================(Build #2546 - 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. ================(Build #2545 - 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. ================(Build #2545 - 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. ================(Build #2545 - 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. ================(Build #2545 - 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

================(Build #2583 - 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. ================(Build #2562 - 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. ================(Build #2546 - 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. ================(Build #2545 - 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

================(Build #2566 - 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

================(Build #2594 - 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. ================(Build #2591 - 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). ================(Build #2591 - 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. ================(Build #2590 - 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. ================(Build #2580 - 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. ================(Build #2580 - 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'. ================(Build #2580 - 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. ================(Build #2580 - 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. ================(Build #2578 - 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. ================(Build #2570 - 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. ================(Build #2569 - 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. ================(Build #2567 - 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. ================(Build #2553 - 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. ================(Build #2551 - 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. ================(Build #2545 - 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

================(Build #2597 - 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. ================(Build #2583 - 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. ================(Build #2572 - 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. ================(Build #2558 - 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. ================(Build #2553 - 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

================(Build #2571 - 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. ================(Build #2571 - 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. ================(Build #2543 - 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. ================(Build #2543 - 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

================(Build #2574 - 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. ================(Build #2567 - 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. ================(Build #2567 - 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. ================(Build #2566 - 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. ================(Build #2564 - 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. ================(Build #2557 - Engineering Case #635960)================ Attempting to using Integrated Login, or Kerberos, with the NodeType connection parameter could have failed. This has been fixed. ================(Build #2550 - 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

================(Build #2588 - 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. ================(Build #2588 - 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. ================(Build #2582 - 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. ================(Build #2578 - 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. ================(Build #2572 - 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 ================(Build #2551 - 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. ================(Build #2546 - Engineering Case #633125)================ Improvements to the DBSCHEMA_PROVIDER_TYPES rowset have been made to make it more consistent with Microsoft SQL Server. ================(Build #2546 - 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. ================(Build #2543 - 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

================(Build #2590 - 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. ================(Build #2590 - 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. ================(Build #2582 - 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. ================(Build #2582 - 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. ================(Build #2580 - 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. ================(Build #2580 - 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. ================(Build #2578 - 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. ================(Build #2572 - 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. ================(Build #2545 - 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. ================(Build #2543 - 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. ================(Build #2533 - 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

================(Build #2570 - 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

================(Build #2601 - 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. ================(Build #2600 - 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. ================(Build #2600 - 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. ================(Build #2600 - 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. ================(Build #2600 - 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. ================(Build #2599 - 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. ================(Build #2599 - 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. ================(Build #2599 - 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. ================(Build #2599 - 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 ================(Build #2599 - Engineering Case #642833)================ When under heavy load, the server may have crashed when receiving multiple requests on an HTTP connection. This has been fixed. ================(Build #2598 - 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. ================(Build #2598 - 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 <expr> 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( <col1>, <col2> ) 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. ================(Build #2597 - 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. ================(Build #2597 - 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. ================(Build #2597 - 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. ================(Build #2596 - 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 ================(Build #2594 - 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. ================(Build #2594 - 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. ================(Build #2594 - 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. ================(Build #2594 - 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. ================(Build #2594 - Engineering Case #643681)================ If a temporary function was incorrectly defined to return a result set, calling the function would have given the error: Function '<function-name>' has invalid parameter 'expression' ('OUT') The correct error now reported is: Result set not permitted in '<function-name>' ================(Build #2594 - 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. ================(Build #2594 - 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. ================(Build #2594 - 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. ================(Build #2593 - 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. ================(Build #2593 - 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. ================(Build #2592 - 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. ================(Build #2592 - Engineering Case #643286)================ A mirror server could have crashed if multiple errors occurred on startup. A mirror server uses -xp, and the crash could have occurred if the database failed to start and the TCP/IP protocol failed to start. This has been fixed. ================(Build #2591 - 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. ================(Build #2591 - 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. ================(Build #2591 - 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. ================(Build #2591 - Engineering Case #643314)================ Canceling an external stored procedure may have caused the server to crash. This has been fixed. ================(Build #2591 - 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. ================(Build #2591 - 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. ================(Build #2591 - 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. ================(Build #2591 - 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. ================(Build #2587 - 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. ================(Build #2587 - 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. ================(Build #2586 - 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. ================(Build #2586 - 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. ================(Build #2585 - 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. ================(Build #2585 - 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. ================(Build #2585 - 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. ================(Build #2585 - Engineering Case #640540)================ The property QueryOpened was not being increased if a reusable cursor was opened. This has been fixed. ================(Build #2585 - Engineering Case #640525)================ The readability of the query returned by the REWRITE function has been improved. ================(Build #2585 - Engineering Case #635356)================ The server could have crashed under certain specific circumstances when executing the DROP STATISTICS statement. This problem has been resolved. ================(Build #2584 - 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. ================(Build #2584 - 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. ================(Build #2583 - 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. ================(Build #2582 - 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. ================(Build #2582 - 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. ================(Build #2582 - 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". ================(Build #2582 - 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. ================(Build #2582 - 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. ================(Build #2582 - 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. ================(Build #2580 - 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. ================(Build #2579 - 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. ================(Build #2579 - 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. ================(Build #2579 - 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. ================(Build #2578 - 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. ================(Build #2578 - 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. ================(Build #2578 - 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. ================(Build #2577 - 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. ================(Build #2577 - 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. ================(Build #2577 - 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. ================(Build #2577 - 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; ================(Build #2577 - Engineering Case #638368)================ Spurious "109200 Can't parallelize bloom filter" could have been observed which were incorrect. This has been fixed. ================(Build #2576 - 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. ================(Build #2576 - 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. ================(Build #2576 - 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. ================(Build #2576 - 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 ================(Build #2574 - 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. ================(Build #2574 - 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. ================(Build #2574 - 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. ================(Build #2574 - 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. ================(Build #2574 - 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. ================(Build #2573 - 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. ================(Build #2573 - 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. ================(Build #2573 - 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. ================(Build #2573 - 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) '<html><body>A <b>very</b> nice day...</body></html>' '<html><body>Peace and quiet at home</body></html>' 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. ================(Build #2573 - 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. ================(Build #2572 - 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. ================(Build #2572 - 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. ================(Build #2572 - 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. ================(Build #2571 - 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. ================(Build #2571 - 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 '<user name>' has the row in '<table name>' locked". This has been fixed. ================(Build #2571 - 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. ================(Build #2571 - 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. ================(Build #2571 - 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. ================(Build #2571 - 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. ================(Build #2570 - 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. ================(Build #2569 - 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. ================(Build #2568 - 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. ================(Build #2568 - 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. ================(Build #2568 - 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 ================(Build #2568 - 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. ================(Build #2568 - 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. ================(Build #2568 - 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". ================(Build #2567 - 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. ================(Build #2567 - 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. ================(Build #2567 - Engineering Case #637620)================ In rare circumstances, the server could have crashed while handling multiple TLS connections. This has been fixed. ================(Build #2567 - 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. ================(Build #2567 - 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. ================(Build #2565 - 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. ================(Build #2563 - 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. ================(Build #2563 - 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. ================(Build #2562 - 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). ================(Build #2562 - 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. ================(Build #2562 - Engineering Case #636655)================ The server may have crashed when defining foreign keys that auto-created columns in the referencing table. This has been fixed. ================(Build #2562 - 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. ================(Build #2562 - 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. ================(Build #2562 - Engineering Case #634324)================ The Timeout parameter of the system procedure xp_startsmtp() was being ignored. This has been corrected. ================(Build #2562 - 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. ================(Build #2561 - 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. ================(Build #2561 - 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. ================(Build #2561 - 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. ================(Build #2561 - 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. ================(Build #2561 - Engineering Case #634775)================ Execution of a CREATE TEXT INDEX <name> ON <table_name>(...) 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. ================(Build #2558 - 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. ================(Build #2558 - Engineering Case #634900)================ The server may have become deadlocked while acquiring shared latches. This has now been corrected. ================(Build #2557 - 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. ================(Build #2557 - 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. ================(Build #2557 - 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. ================(Build #2556 - 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. ================(Build #2556 - 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. ================(Build #2556 - 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. ================(Build #2555 - 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. ================(Build #2554 - Engineering Case #635322)================ The cleaner may not have completely cleaned pages in some situations. This has now been fixed. ================(Build #2554 - 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. ================(Build #2554 - 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. ================(Build #2554 - 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. ================(Build #2554 - Engineering Case #632873)================ Concurrent updates to an IMMEDIATE REFRESH text index may have corrupted the index. This has been fixed. ================(Build #2553 - Engineering Case #635066)================ When Snapshot isolation was enabled, deleted rows might not have been physically removed in some cases. This has been corrected. ================(Build #2553 - 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. ================(Build #2553 - 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. ================(Build #2552 - 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. ================(Build #2551 - 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: <same list as -kr option documents, with the addition of the -kr option> 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 ================(Build #2550 - 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. ================(Build #2550 - 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. ================(Build #2550 - Engineering Case #633747)================ Unsetting the public option Oem_string would have caused the server to crash. This has been fixed. ================(Build #2550 - 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. ================(Build #2549 - 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. ================(Build #2549 - 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. ================(Build #2549 - 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. ================(Build #2549 - 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. ================(Build #2548 - 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. ================(Build #2547 - 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 ================(Build #2547 - Engineering Case #632342)================ Under rare circumstances, the server may have hung while diagnostic tracing was enabled. This has been fixed. ================(Build #2547 - 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. ================(Build #2546 - 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 ) ) ================(Build #2546 - 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. ================(Build #2546 - 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. ================(Build #2546 - 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. ================(Build #2546 - 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. ================(Build #2545 - 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. ================(Build #2545 - 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. ================(Build #2545 - 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. ================(Build #2545 - 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. ================(Build #2545 - 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. ================(Build #2544 - 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. ================(Build #2544 - 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. ================(Build #2544 - 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.. ================(Build #2544 - 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. ================(Build #2544 - 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; ================(Build #2544 - 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. ================(Build #2543 - 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. ================(Build #2543 - Engineering Case #631475)================ Calls to some system procedures may have caused an server crash if null arguments were used. This has been fixed. ================(Build #2543 - Engineering Case #631113)================ Attempting to execute a CREATE OR REPLACE PROCEDURE statement could have caused a server crash. This has been fixed. ================(Build #2543 - 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". ================(Build #2543 - 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. ================(Build #2543 - 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. ================(Build #2543 - 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. ================(Build #2543 - 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. ================(Build #2542 - 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. ================(Build #2542 - 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' ). ================(Build #2542 - 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. ================(Build #2540 - 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. ================(Build #2501 - 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. ================(Build #2484 - 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.

SQL Anywhere - Sybase Central Plug-in

================(Build #2600 - Engineering Case #645497)================ No messages would have been when right-clicking a synchronization profile, selecting "Synchronize...", and then clicking OK. This has been fixed. ================(Build #2598 - 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. ================(Build #2593 - 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. ================(Build #2593 - 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. ================(Build #2593 - 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. ================(Build #2592 - Engineering Case #643457)================ Clicking the Back or Next button may not have updated the toolbar buttons properly. This has been fixed. ================(Build #2590 - 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. ================(Build #2587 - 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. ================(Build #2586 - 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. ================(Build #2580 - 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. ================(Build #2567 - 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. ================(Build #2565 - 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. ================(Build #2564 - 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. ================(Build #2559 - 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. ================(Build #2559 - 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. ================(Build #2559 - 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. ================(Build #2559 - 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. ================(Build #2559 - 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. ================(Build #2559 - 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." ================(Build #2559 - 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. ================(Build #2559 - 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. ================(Build #2556 - 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. ================(Build #2556 - 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. ================(Build #2552 - 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. ================(Build #2552 - 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. ================(Build #2550 - 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. ================(Build #2546 - 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. ================(Build #2546 - 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. ================(Build #2546 - 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. ================(Build #2545 - 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. ================(Build #2545 - 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. ================(Build #2544 - 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. ================(Build #2543 - 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. ================(Build #2539 - 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

================(Build #2600 - 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. ================(Build #2597 - 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. ================(Build #2596 - 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. ================(Build #2593 - 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. ================(Build #2585 - 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. ================(Build #2585 - 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. ================(Build #2584 - 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. ================(Build #2583 - 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. ================(Build #2582 - 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. ================(Build #2582 - 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. ================(Build #2580 - 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. ================(Build #2574 - 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. ================(Build #2574 - 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. ================(Build #2573 - 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. ================(Build #2573 - 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. ================(Build #2573 - 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. ================(Build #2573 - 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. ================(Build #2568 - 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. ================(Build #2568 - 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. ================(Build #2568 - 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. ================(Build #2567 - 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. ================(Build #2567 - 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. ================(Build #2565 - 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. ================(Build #2565 - 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. ================(Build #2564 - 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. ================(Build #2564 - 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. ================(Build #2562 - 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. ================(Build #2562 - 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. ================(Build #2562 - 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. ================(Build #2562 - 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. ================(Build #2561 - 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. ================(Build #2560 - 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. ================(Build #2559 - 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. ================(Build #2559 - 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. ================(Build #2557 - 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. ================(Build #2555 - 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. ================(Build #2555 - 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. ================(Build #2555 - 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. ================(Build #2553 - 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. ================(Build #2553 - 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. ================(Build #2553 - 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. ================(Build #2553 - 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. ================(Build #2553 - Engineering Case #633019)================ It was not possible to edit BIT values in the "Results" panel. This has been fixed. ================(Build #2551 - 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. ================(Build #2550 - 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. ================(Build #2550 - 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. ================(Build #2550 - 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. ================(Build #2549 - 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. ================(Build #2549 - 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. ================(Build #2549 - 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. ================(Build #2547 - 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. ================(Build #2547 - 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. ================(Build #2546 - 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. ================(Build #2546 - 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. ================(Build #2545 - 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. ================(Build #2545 - 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. ================(Build #2545 - 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. ================(Build #2545 - 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. ================(Build #2545 - 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. ================(Build #2545 - 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. ================(Build #2544 - 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. ================(Build #2544 - 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. ================(Build #2544 - 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. ================(Build #2544 - 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. ================(Build #2543 - 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. ================(Build #2543 - 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. ================(Build #2543 - 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). ================(Build #2543 - 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. ================(Build #2543 - 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. ================(Build #2543 - 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. ================(Build #2543 - 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. ================(Build #2542 - 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. ================(Build #2542 - 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. ================(Build #2542 - 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. ================(Build #2542 - 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. ================(Build #2542 - 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. ================(Build #2541 - 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. ================(Build #2540 - 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. ================(Build #2540 - 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. ================(Build #2540 - 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. ================(Build #2533 - 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.

UltraLite - Runtime Libraries

================(Build #2585 - 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. ================(Build #2571 - Engineering Case #636651)================ The use of START AT or FIRST in a subquery may have resulted in incorrect results. This was corrected. ================(Build #2568 - 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.

UltraLite - Sample Application

================(Build #2546 - 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

================(Build #2594 - 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. ================(Build #2551 - 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. ================(Build #2551 - 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.

UltraLite - UltraLite Engine

================(Build #2577 - 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. ================(Build #2557 - 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. ================(Build #2550 - 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 ================(Build #2547 - 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

================(Build #2577 - 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

================(Build #2585 - 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. ================(Build #2553 - 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

================(Build #2593 - 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. ================(Build #2581 - 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. ================(Build #2580 - 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. ================(Build #2568 - 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. ================(Build #2553 - 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. ================(Build #2546 - 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 ‘<mangled characters>’ for table T This has now been fixed. A workaround is to store BLOB/CLOB data in the current directory. ================(Build #2545 - 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

================(Build #2595 - 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. ================(Build #2594 - Engineering Case #640578)================ The UltraLiteJ utilities, Database Information utility (ULjInfo), Database Load utility (ULjLoad) , Database Unload utility (ULjUnload) , and Database Transfer utility (ULjDbT), would have failed when attempting to run on 64-bit Windows They were failing because they referenced a JRE that was not installed. This has now been corrected. ================(Build #2593 - 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. ================(Build #2582 - 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). ================(Build #2576 - 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. ================(Build #2571 - Engineering Case #638596)================ The use of START AT or FIRST in a subquery may have resulted in incorrect results. This was corrected. ================(Build #2570 - 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. ================(Build #2561 - 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 ================(Build #2557 - 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. ================(Build #2549 - 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. ================(Build #2549 - 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 ================(Build #2543 - Engineering Case #631404)================ The NOT NULL FOREIGN KEY clause was misdiagnosed as invalid in ALTER TABLE statement. This was been corrected.

UltraLiteJ - Utilities

================(Build #2574 - 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). ================(Build #2545 - 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.