SAP SQL Anywhere的所有已知BUG列表(4)

随着Sybase被完全整合到SAP下,Sybase原来的支持网站被SAP Support Portal取代。
只有购买了SAP服务的用户才能使用账号登录SAP Support Portal进行介质下载、补丁升级、报Incident等。
考虑到Sybase数据库的初学者或者没有购买原厂服务的Sybase客户情况,现提供SAP ASE/IQ/RS/SDK/SQL Anywhere/PB等产品的BUG信息。
在SAP Support Portal网站或者google上搜索Targeted CR List for ASE,可以看到针对不同版本的CR(CR表示Change Request)简单描述信息列表。
需要注意的是:Targeted CR List for ASE列出的CR虽然绝大多数是BUG,但有一些是更改需求。
以下提供SAP ASE/IQ/RS/SDK/SQL Anywhere/PB等产品的BUG信息!
不仅仅包括BUG的详细描述信息,还包括首次报告BUG的平台、数据库版本以及BUG修复历史过程;有些BUG还提供了Workaround来临时解决该BUG带来问题。

SQL Anywhere的所有已知BUG列表(1)
SQL Anywhere的所有已知BUG列表(2)
SQL Anywhere的所有已知BUG列表(3)
SQL Anywhere的所有已知BUG列表(4)
SQL Anywhere的所有已知BUG列表(5)
SQL Anywhere的所有已知BUG列表(6)
SQL Anywhere的所有已知BUG列表(7)
SQL Anywhere的所有已知BUG列表(8)
 

CR
Number
Description
463608 When generating sortkeys for the following collations, the generated sortkeys were default UCA keys, rather than the keys appropriate to the language or region:

47 scandict

48 scannocp

58 rusdict

59 rusnocs

63 cyrdict

64 cyrnocs

65 elldict

69 hundict

71 hunnocs

70 hunnoac

72 turdict

74 turnocs

73 turnoac

1 thaidict

This has been corrected so that appropriate keys are now generated. It is highly recommended that any columns which store SORTKEY values using these collations be recomputed, as comparisons and sort order will be affected.

463613 Opening online help in Sybase Central may not have worked the first time it was asked for, although subsequent requests would have succeeded. The problem was timing and operating system dependent. It has been fixed.
463614 When attempting to add a row to a table that had constraints that were not checked until the transaction was committed, and the new row violated those constraints, it was not possible to cancel the insertion. The same problem affected table row modifications. This has been fixed.
463662 In general, the optimizer enumerates all valid plans which compute the correct result set for a given query. For each such plan, the optimizer estimates an execution cost measured in microseconds. The plan with the smallest estimated cost is then chosen as the execution plan for a query (aka the 'best plan' for a query). If the database option Optimization_goal is set to FIRST-ROW, the estimated cost for a plan enumerated by the optimizer is the estimated time to compute the first row of the result set of the query. If the optimization goal is set to ALL-ROWS, the estimated cost for a plan enumerated by the optimizer is the estimated time to compute all the rows in the result set of the query. The optimizer was not enumerating plans with complete index scans on the right hand side of a MERGE JOIN. This has now been fixed.
463668 A memory leak would have occurred in the MobiLink client when synchronizing BIT strings. This has been fixed.
463669 If the database option Percent_as_comment was set to 'OFF', statements such as:

select 11 % 2

would have incorrectly reported an error, instead of the correct result of 1 being returned. This has been fixed.

463733 The server may have hung on shutdown if it was running an HTTPS server. This has been fixed.
463734 A complex query (e.g. a join of many tables) may have taken a long time to be optimized, and would have appeared to be hung. This has been fixed.
463740 Interactive SQL could have reported an internal error (ClassCastException) when importing UNIQUEIDENTIFIER data into UltraLite databases. This would only have happened when running the Import wizard if there was already a result set showing. This has now been fixed.
463741 When clients using an HTTP non-persistent connection synchronized, the synchronizations could have ended with the errors: (SQLCode -10279) "Connection was dropped due to lack of network activity.", or: (SQLCode -10256) "This synchronization was canceled due to a new synchronization...". The synchronization of rows was not interrupted by these errors. The MobiLink server did not consider a synchronization closed until it sent the last few bytes. MobiLink clients did not always read these last few bytes, which lead to the errors. This has been fixed, the MobiLink server now accounts for this.
463747 Pipelined HTTP requests may have caused the server to crash under certain circumstances. This has been fixed.
463748 On Unix systems, attempting to connection without including a UserID in the connection string would have failed with the error "User ID '???' does not exist". This has been fixed to give the error "Invalid user ID or password".
463763 When using BCP IN to populate a table which had a nullable date or time column, the BCP utility would have given a 'NULLs not allowed' error if the data file inserted a NULL into the date or time column. The server was was incorrectly describing all date and time columns to the BCP utility as non-nullable, even if they were nullable. This problem has now been fixed.
463776 A backup of the database could have been made that would have failed to start with the database assertion, 201502, "Inconsistent page modification counter value". This would not have occurred when the BACKUP DATABASE statement used the clause "WITH CHECKPOINT LOG NO COPY" or the Backup utility used the "-k nocopy" command line option, or if the database file did not grow from insert activity during the backup. This problem was more likely to occur if a backup was made while the database was growing in size, as the database would have to have had a large number of pages allocated for the checkpoint log, and have been both modifying (updating) existing database pages, as well as growing the database file during the course of the backup. If all of these conditions existed, then there was a small window of opportunity where the backup operation could have incorrectly read database pages. This has been fixed.
463781 The Java utilities (and potentially any Java application) on Mac OS X could not connect to ODBC data sources that were created with the ODBC Administrator utility (found in /Applications/Utilities/) that ships with Mac OS X 10.4. Specifically, applications fail with SQLCode -620 and SQLState IM003: "Could not connect to the database. Unable to load driver". The ODBC Administrator utility produces odbc.ini files that have white space around the equals sign, which confused the parser. The parser has now been fixed.
463882 If an application, connected via the iAnywhere JDBC Driver, fetched a timestamp value using the ResultSet.getTimestamp() method, then the fractional portion of the returned timestamp would have been incorrectly truncated to millisecond precision. This problem has now been fixed and the fractional portion of the timestamp is now the expected nanosecond precision.
463887 Deployment Wizard installs containing ADO.Net components would have failed without a good error message when trying to register the .Net components on a system with no .Net framework installed. This has been fixed so that the install now checks for the framework if it is required, and issues a warning.
463910 The MobiLink server could have incorrectly displayed the message "Ping complete" when a MobiLink Monitor session disconnected. This is now fixed.
463912 A query with an ordered GroupBy operator immediately above an Exchange operator in the plan could have returned incorrect results. This has been fixed.
463915 Sybase Central did not distinguish between CHAR or VARCHAR columns with byte-length or character-length semantics, nor did it allow for the creation of CHAR or VARCHAR columns with character-length semantics. Both of these problems have been fixed. Now, CHAR and VARCHAR columns with character-length semantics are displayed as "char(nn char)" and "varchar(nn char)" respectively.

In addition, when editing a column in the table editor or Column property sheet, or creating a domain or function in the corresponding wizards, it was possible to specify a size value that would exceed the database maximum (32767/maximum_character_length for CHAR and VARCHAR; 8191 for NCHAR and NVARCHAR). This problem has also been fixed.

464155 Attempting to use the Create Procedure wizard to create a Transact-SQL procedure, would have caused Sybase Central to crash. This has been fixed.
464158 A new statement, ALTER DATABASE SCHEMA FROM FILE, now allows for alteration an UltraLite database schema. This statement replaces the 9.0.2 schema upgrade feature that was implemented with the UpgradeSchemaFromFile() / ApplyFile() methods from this previous release.

Because Ultralite error callback is active during the upgrade process, the application is notified of errors during the conversion process. For example, SQLE_CONVERSION_ERROR reports all values that could not be converted in its parameters. Errors do not mean the process failed. The final SQL code after the statement returns is a 130 warning in this case. These warnings describe operations of the conversion process and do not stop the upgrade process.

Note: There is no mechanism to support the renaming of tables, columns or publications. Also, renaming a table is processed as a DROP TABLE and CREATE TABLE operation.

Caution: Resetting the device during the upgrade process leaves the database unusable.

To upgrade the schema with this new statement:

1. Define a new schema by creating a SQL script of DDL statements. The character set of the SQL script file must match the character set of the database you want to upgrade.

The UltraLite utilities ulinit or ulunload can be used to extract the DDL statements required for this script. Use these utilities to ensure that the DDL statements required are syntactically correct.

- For ulunload, use the 杗 and 杝 [file] options.

- For ulinit, use the 杔 [file] option.

See the UltraLite Database Management and Reference documentation for details.

2. Review the script and ensure that:

- That non-DDL statements have not been included. Including non-DDL statements does not have the expected effect.

- Words in the SQL statement are separated by spaces.

- Only one SQL statement can appear in each line.

- Comments are prepended with '--' and only occur at the start of a line.

3. Backup the existing database.

4. Run the new statement using the following syntax:

ALTER DATABASE SCHEMA FROM FILE �<filename>�

For example:

ALTER DATABASE SCHEMA FROM FILE 'MySchema.sql'

5. The existing database is upgraded with the new schema using the following process:

- Both the new and existing database schemas are compared to see what differs.

- The schema of the existing database is then altered accordingly.

- Rows that do not fit the new schema are dropped. When this occurs, a SQLE_ROW_DROPPED_DURING_SCHEMA_UPGRADE (130) warning is raised.

For example, if a uniqueness constraint was added to a table, and there are multiple rows with the same values, all but one row will be dropped.

Alternately, if an attempt to change a column domain causes a conversion error, then that row will be dropped. That is, say a VARCHAR column is converted to an INT column, if the value for a row is 揂BCD�, then that row is dropped.

Lastly, if the new schema has new foreign keys where the foreign row doesn't have a matching primary row, these rows are also dropped.

If dropping rows is not the desired behavior of the schema upgrade, detect the warning and restore from backup.

464201 The runtime server does not support execution of procedures; however, it still attempted to execute a login procedure if one was defined using the PUBLIC.login_procedure option. That attempt would always have failed and caused a message to be displayed in the server console window for each connection:

Login procedure 'sp_login_environment' caused SQLSTATE '0AW04'

Triggers and procedures not supported in runtime server

This has been corrected so that the runtime server will no longer attempt to invoke the login procedure.

A workaround would be to execute:

set PUBLIC.login_procedure=''

464299 Installing the Runtime version of SQL Anywhere, using the "Add" option during SQL Anywhere Install Maintenance, would have uninstalled some previously installed components. This has been fixed.
464303 When determining where to begin scanning the transaction log, dbmlsync will now ignore subscriptions if they do not contain any of the tables that are currently being synchronized. Previously when building an upload, dbmlsync scanned the log from the lowest progress value of any subscription involving the MobiLink user who is synchronizing.

To take advantage of this optimization, you should now define your publications as disjoint (not sharing any tables) whenever possible. This will result in a major performance improvement when one subscription is being synchronized more frequently than another.

For example, suppose publications P1 and P2 share no tables. P2 is synchronized daily and P1 is synchronized hourly. Each time P1 is synchronized, its progress is advanced by 1000. The following table shows the segment of log scanned for each synchronization based on the old and new behavior:

log scanned log scanned

Action P1's progress P2's progress (old behavior) (new behavior)

sync P1 1000 1000 1000-2000 1000-2000

sync P1 1000 2000 1000-3000 2000-3000

sync P1 1000 3000 1000-4000 3000-4000

sync P1 1000 4000 1000-5000 4000-5000

You should be able to define your publications as disjoint except where two publications contain the same table but with different WHERE clauses. Defining disjoint publications should never limit functionality because the dbmlsync -n option can accept a comma separated list of publications which causes the union of the publications to be synchronized.

For example, suppose table T1 is to be synchronized throughout the day, and tables T1 and T2 are to be synchronized at the end of the day. Previously, you might have defined your publications as follows:

- P1 contains T1

- P2 contain T1 and T2.

- Synchronize during the day with the dbmlsync option -n P1

- Synchronize at the end of the day with the dbmlsync option -n P2

In order to take advantage of the new optimization, two publications should be defined: P1 contains T1, and P2 contains T2. During the day dbmlsync will synchronize using the -n P1 option. At the end of the day dblmsync will synchronize using -n P1,P2. This does the same thing, but is much more efficient with the new log scanning behavior.

464307 The QAnywhere Agent may have displayed the errors on startup:

... Failed to start QAnywhere Agent (register with DBLsn)

... Error registering with DBLSN code: -1

This was due to the MobiLink Listener crashing, and has been fixed.

464321 It was possible for the server to terminate the connection when an attempt was made by the application to cancel a request. This has been fixed so that the request is correctly cancelled and the connection is not terminated.
464341 Cancelling a statement containing a long-running function call would have appeared to succeed (i.e. the "Execute" menu item and toolbar button were enabled), but the statement might have been left running if the function was executed as a result of fetching rows from the statement's result set. This has been fixed.
464348 The following predefined variables, ias_Originator and ias_StatusTime, were missing from the list of predefined variables listed in the Rule dialog used when composing deletion or transmission rules. This has been fixed.
464442 The iAnywhere JDBC Driver could have leaked memory, and exhausted memory heaps, if an application causes many SQLWarnings to be generated. This problem has now been fixed.
464446 Connecting to a version 10 server with a version 9 or older client, could have caused the server to ignore the Language connection parameter, or in rare cases, caused the server to crash. The language used by the connection would then have been the server's default language. This has been fixed.
464473 When executing the statement ALTER TABLE ADD FOREIGN KEY there was not check that the new foreign key rows all had matching primary rows. A check has been added so that the statement will now fail if a primary row is missing.
464474 On Mac OS X systems only, items in the menu bar for Sybase Central were enabled even when a modal dialog was open. If one of these menu items was clicked while the dialog was open, the program could have crashed. This has been fixed.

Note, this problem affected the Interactive SQL utility, DBConsole, and the MobiLink Monitor as well, which have also been fixed.

464477 After the execution of an ALTER TABLE [ADD | DROP | MODIFY ] COLUMN statement, the server would have failed to reload trigger and stored procedure definitions. This reload should have caused a recompile of the trigger or procedure definitions, which would have altered the semantics of their statements if they depended upon the ALTERed column. As an example, if a query in a trigger definition used the syntax "SELECT *" and referenced the modified table, an incorrect number (or type) of columns would have been returned in the query's result. This oversight has been corrected.
464488 The MobiLink server now buffers pending writes more efficiently during HTTP synchronizations. This change allows the server to use significantly less memory, which may make for less swapping to disk.
464640 The IAnywhere Oracle ODBC driver could have crashed if the following ODBC API functions were called in this order:

SQLAllocHandle( ..., SQL_HANDLE_STMT, ...) (returns SQL_SUCCESS)

SQLExecDirect( ..., "select ...", ... ) (returns SQL_SUCCESS)

SQLExecDirect( ..., "insert...", ...) (returns SQL_ERROR)

SQLFreeStmt( ..., SQL_UNBIND) with the same statement handle.

The number of columns of the result set was not reset to zero when the same statement handle was reused. This problem has now been fixed.

464669 In a database mirroring environment, an operational server may have crashed when first establishing a connection to another partner or the arbiter. This has been fixed.
464681 Servers running on Unix systems, and experiencing a high volume of HTTP connections, may have hung. This has been fixed.
464828 Calling the system procedure xp_sendmail with a non-ASCII character (i.e., character greater than 0x7f) in the Subject, would have caused a server crash. This has been fixed.
464834 The "Start Agent" menu item associated with a .QAA file was missing a keyboard mnemonic. This has been correct so that it now has one.
464837 A synchronization would have failed if it used publications, and the runtime did not know if the MobiLink server had received the upload of the previous synchronization. This has been fixed.
464838 It was possible for the Interactive SQL utility to crash (NullPointerException) if the window was closed while editing table data. This has been fixed.
464849 When a column for an INSERT statement was bound in a Java application as follows:

stmt.setTimestamp( pnum, new java.sql.Timestamp(System.currentTimeMillis()) );

executing the INSERT statement would have failed with a SQLE_CONVERSION_ERROR. The microseconds were not scaled into nanoseconds, and vice versa. This has been fixed.

464881 If an application initialized, finalized, and then re-initialized a client library, making a connection could possibly have caused the application to crash. How the client library is initializing and finalizing varies from API to API. For DBLib, this is done with db_init and db_fini. For ODBC with a Driver Manager, this is done when connecting when there are no existing connections from the application, and when disconnecting, when the connection being disconnected was the only connection from the application. This has now been fixed so that the application will not crash when making a connection.
464885 When the MobiLink server was configured to support synchronization requests from version 9 clients using the -xo option, the following error could have occurred at shutdown: "[-10117] Stream Error: Unable to open a 'tcpip' network connection. An error occurred during shutdown.". This has been fixed so that the error no longer occurs.
464889 If the -sl option (set Java options) was used more than once on the MobiLink server command line, an error such as "unrecognized argument" could have occurred. This has now been corrected.

For example "mlsrv10 -sl java ( opt1 ) -sl java (opt2 ) ..." now correctly parses as "mlsrv10 -sl java( opt1 opt2 ) ..."

465003 If multiple connections using Remote Data Access attempted to read from the same set of tables in a Microsoft SQL Server database, then the connections would have been serialized. This was due to the fact that Remote Data Access always used pessimistic locking when connecting to Microsoft SQL Server. This has now been fixed so that connections to Microsoft SQL Server are no longer serialized.
465040 When the server was converting the WHERE, ON or HAVING clauses to Conjunctive Normal Form, and discovered at least one simplified or implied condition, then it was possible that the resulting query was not equivalent to the original query and therefore did not return the same result set.

For example, the following should return 1 row, but did not return any rows:

create table T1 ( d int, e int, f char(5) ,g char(5) );

insert into T1 values ( 5, 2, '4E', 'N' );

select * from T1

where ( d is not null or d is NULL )

and ( e = 2 or e is NULL )

and ( g <> 'Y' or g is null )

and e = 2

This has been fixed.

465042 The way destination aliases are handled by the QAnywhere server changed in version 10.0.1 in a way that the plug-in didn't handle correctly. The list history entries for multi-addressed messages were including all of the messages sent to the alias members. This has now been fixed so that only those history entries whose addresses match the destination address shown in the Messages panel are shown.
465151 The UltraLite runtime would have accepted the empty string as a valid script version. This has been fixed. The empty string is now rejected, just like if it had been set to NULL.
465161 While rare, the server could have crashed on shutdown. This would only have been seen if more than one external function had been called, and the calls were either cancelled before the functions completed, or the database tasks servicing the request had received a thread deadlock error before the functions completed. This has been fixed.
465168 Pipelined HTTP requests may have prematurely exceeded the MaxRequestSize protocol option limit, resulting in a 413 - 'Request Entity Too Large' HTTP status. This has been fixed. Now, by default, the MaxRequestSize limit is 102,400 bytes per request.
465178 As of version 10.0.0, Remote Data Access no longer worked with an ODBC driver that did not support UNICODE. This has now been resolved, and Remote Data Access is now possible with non-UNICODE ODBC drivers. It should be noted though that data coming from non-UNICODE ODBC drivers will not undergo any character set translation.
465368 If the Timeout synchronization parameter was set to a value that was too low, and a TLS or HTTPS synchronization was being done over a slow channel, the runtime may have attempted to send a liveness packet before the TLS handshake had been completed, causing the synchronization to fail in a number of different ways. The MobiLink server may have reported a handshake or protocol error, or the client could have crashed. This has been fixed
465371 If a procedure, trigger, batch or event contained a string which was continued across multiple lines, and there was a syntax error in the procedure at some point after the string, the wrong line number would have been reported in the error message. This has been fixed.
465383 A web services procedure attempting to make a secure connection to a remote web service may have failed with the error "Unable to connect to the remote host specified by '<URL>'". This has been fixed.
465385 Copying cells from results tables always copied the data as comma-delimited form, with character data quoted with quotation marks, without respecting the Interactive SQL options: isql_field_separator, isql_quote, and isql_escape_character. This has been corrected.

Note, this fix now makes it easier to paste data from dbisql into Excel: Set the default field delimiter to a tab ("\t" -- a backslash followed by the lower-case letter T), then copy the data from the table in the usual way.

465388 Inserting a row that contained a zero-length binary value for a long binary column would have caused the UltraLite engine to crash. This has been fixed.
465405 The Edit/Select All menu item would only have operated on the contents of the "SQL Statements" field. The intended behavior is that this operation select the contents of the active pane. This has been fixed so that if a result table has focus, the Edit/Select All menu item selects all of the rows it contains.
465530 If the filename of a transaction log, including its full path, was exactly 70 bytes, and the Backup utility was used to do a backup, the server would have failed to truncate the log when the -x option (delete and restart the transaction log) was specified. This has been fixed.

A workaround would be to use the BACKUP DATABASE statement with the TRANSACTION LOG TRUNCATE clause to truncate the log.

465693 If the ExecuteQuery method detected an error, a non-null ResultSet could still have been returned. This was corrected.
465695 After connecting using embedded SQL, some user options may not have been respected until the first SET OPTION was performed. Public options may have been used instead of any user options (i.e. options set with "SET OPTION user.option = value" may not have been respected.)

After executing a SETUSER WITH PERMISSIONS userid statement, some of the current options for userid may not be respected. Similarly, the next SETUSER command which should have set the options back, may have caused the original options to not be respected.

Both of these problems have now been fixed.

465708 After it has started all necessary processes, the QAnywhere Agent now prints a line like this to the console window and log file:

I. 2007-04-11 11:21:54. There are 23 processes running

This is useful in diagnosing problems on Windows CE devices with Windows Mobile 5, and previous OSes, because there is a fixed limit of 32 processes that can be running at once. After that, the OS will start shutting down applications in a not completely deterministic way.

465712 When running the consolidated database on a server that uses snapshot isolation (Oracle 10g for example), it was possible that MobiLink would have redelivered messages to QAnywhere clients that were previously received and acknowledged. This problem would have occurred when there was a long-running transaction on the consolidated database, which caused the last_download_timestamp to stay fixed at the time that the transaction began. It has now been fixed.
465733 Attempting to create a a tracing database would have caused Sybase Central to crash. This has been fixed.
465814 Performing a LOAD TABLE into a temporary table that already contained rows could have crashed, if the table had no primary key. This has been fixed.
465848 On MacOS systems, trying to connect to a server running on the same machine as the client over the IPv6 loopback address would have failed. This has been fixed.
465947 MobiLink clients that use TLS or HTTPS would have crashed if they were not able to load the appropriate TLS stream dlls (mlcrsa10.dll, mlcecc10.dll, mlcrsafips10.dll and sbgse2.dll). This has been fixed. They will now report the error "Failed to load library x" (STREAM_ERROR_LOAD_LIBRARY_FAILURE).
465964 If a web service had a SQL statement associated with it, the web service property sheet was used to change the web service's type to 'DISH', then the SQL statement would have been deleted without warning. Now a warning message appears when 'DISH' is selected in the "Service type:" drop down list, with an opportunity to select Cancel without deleting the SQL statement.
466044 If the server was started with the -qw ("do not display database server screen") or -qi ("do not display database server tray icon or screen") command line options, certain messages, such as checkpoint messages, would not have been written to the output log or to the internal message list (which can be queried with the property functions). Services on Windows Vista, as well as services on XP which did not allow interaction with the desktop, may have behaved as if -qi was specified. This has been fixed so that all messages now always go to the server output log and internal message list.

On Windows, the -qw switch now completely suppresses the creation of the server window. As before, a systray icon is created but that icon is now created immediately upon startup. Previously, a minimized server window was created momentarily before the systray icon was created. In 9.0.2, the menu for the systray icon allowed the user to open the server window via the "Restore" menu item but "Restore" has now been disabled (which is consistent with 10.x & the fact that -qw is supposed to prevent the creation of a server window).

On UNIX, the -qw switch suppresses all messages from going to the console after the 'press q to quit' message has been displayed.

466058 A new option has been added to the CE Deployement Installer, which allows for excluding the default QAnywhere database in the .CAB file.
466070 Connection attempts to the utility_db would have failed, throwing an exception that setting options was not allowed in the utility_db. As the SET OPTION statement is not valid in the utility_db, the AsaConection method now checks if the database is the utility_db before issuing a SET TEMPORARY OPTION statement.
466074 Certain x.509 server certificates would have been erroneously rejected by the client during the TLS handshake, causing the connection to fail. Certificates generated by 10.0 gencert were particularly likely to be rejected. This problem has been resolved by upgrading to newer versions of the Certicom TLS libraries.
466091 The Unload utility (dbunload) may have crashed when attempting to rebuild a database prior to version 10, if a version 10 server that disallowed connections to the utility_db was already running. Thia has been fixed.

Note, in general it is good practice to insure that no version 10 server is running when rebuilding databases prior to version 10.

466169 The method QAManagerBase.GetQueueDepth() could have returned a queue depth of 0 when there were untransmitted outgoing messages in the message store. This was due to a race condition between the GetQueueDepth method and the message transmission process in the QAnywhere Agent. This has been fixed by changing the behaviour of GetQueueDepth so that uncommitted outgoing messages are included in the queue depth count.
466188 When unloading a database created using a version prior to 10, using the version 10.x Unload utility , the unload may have failed with the error "SQL error: Not enough memory to start". This would only have occurred if one of the dbunload command line options -ac, -ar or -an was used, either the unload engine or the reload engine (or both) had to be autostarted and was the 32 bit server, and the machine had sufficient RAM such that when dbunload requested a cache size of 40% of available memory, this was greater than the maximum allowable non-AWE cache size on the given platform. This would have meant a memory size of about 8 GB on Unix and 32-bit Windows platforms, and 10 GB on 64-bit Windows. This has been fixed.

A workaround is to specify the undocumented dbunload options -so and -sn, to set the options for the unload and reload servers respectively, as follows:

dbunload -so " -ch 40p" -sn " -c 40p" ...

Note the space before the -c switches, these are required. Mnemonic: -so sets the additional switches for the "Old" server, -sn sets the additional switches for the "New" server.

466202 The maximum number of active SQLCA variables (i.e. SQLCAs that have been initialized and used to call into the runtime, but not finalized) supported by the UltaLite engine has been increased from 31 to 63.

For .NET applications, the SQLCA limit also represents the database connection limit, since a new sqlca is used for each connection. Also, an internal SQLCA is used by each .NET application, so the effective connection limit for .NET apps is 63 minus the number of running .NET clients.

Note that the runtime's connection limit is 64.

466203 If a trigger encountered an error due to a statement referencing a table that was exclusively locked by another connection, a subsequent execution of the trigger could report "Invalid statement". This has been fixed.
466209 The QAnywhere Agent (qaagent) now has an option to control where the listener tracking store is created. The option is -z <path> and corresponds to the dblsn -z option documented in Engineering case 460718.
466265 When unloading a database, either with the Unload utility or the UNLOAD statement, DDL statements to create a non-primary key index on a global temporary table would not have been written to the reload.sql file. This has been fixed and proper DDL to re-create the index is now written to the reload file.
466293 A server with active HTTP connections could have hung indefinitely during shutdown. At the point of the hang, the server had completed stopping all databases. This has been fixed so that the server shutdown will not hang, although in rare cases it could still take up to about 20 seconds after the databases have been stopped to complete the shutdown process.
466319 An IF expression, with one branch of type XML and one of type VARCHAR, would have returned type VARCHAR and therefore special characters would be quoted in a SQLX function. This has been corrected so that the IF expression now returns type XML in this case. In the following example, the e1 element is quoted before the fix, but not after:

select xmlelement( name e, IF 1=1 THEN cast( '<e1/>' as xml ) ELSE '' ENDIF )

A workaround to avoid the quoting without the fix is to make all branches of the IF the same type:

select xmlelement( name e, IF 1=1 THEN cast( '<e1/>' as xml ) ELSE cast( '' as xml ) ENDIF )

466442 The changes for Engineering case 449577 introduced a problem with the Developer and Evaluation Editions. When run on Unix systems, the server could not be autostarted, and therefore utilities that auto-start servers, such as dbinit or dbunload, would have failed. On Linux systems, the server would have started to the point where the GUI splash screen / license prompt was brought up. This has been fixed.
466446 Two command line options have been added to the MobiLink listener (dnlsn) for controlling ip tracking behavior.

1. The -gi option controls the ip tracker polling interval. The default is 10 seconds.

example: dblsn.exe -gi 30

2. The -ga option is for asynchronous ip tracking. The -gi option is ignored when -ga is used.

example: dblsn.exe -ga

466456 If an application had an open cursor, and another transaction deleted a row that affected that cursor, it was possible for the cursor to have been positioned on the wrong row. This has been fixed.
466474 When synchronization tables on an ASE database server were created with the 'datarows' locking scheme, the MobiLink server could have silently skipped rows that were inserted by other connections without a commit. The ASE server doesn't block any other connections that are trying to query the rows from a table that were created with 'datarows' locking scheme, even when there are uncommitted inserts for this table. The MobiLink server now work around this behaviour properly to ensure that no rows are skipped.

By default, the MobiLink server now queries the minimum transaction starting time from master..systransactions and then sends this timestamp to the client as the last download timestamp. In the next synchronization for this client, the MobiLink server will use this timestamp as the last download time for download. In order to get the starting time, the user ID the MobiLink server uses to connect to an ASE server must have select permission and the master..systransactions table. If the user does not have proper permissions, the MobiLink server will present a

warning message and get the download time from the ASE function getdate(), reverting to the old behaviour where rows could be missed in the download. With this change, it's now possible that the MobiLink server may send duplicate data to clients, if there are any open transactions that modified any tables in the synchronization database or any databases on the ASE

database server when MobiLink server is doing a download. Although the clients are able to handle duplicate data, this behavior may reduce MobiLink server performance.

The MobiLink server now includes two new command line switches so you can the behaviour of the MobiLink server with respect to tables with the 'datarows' locking scheme. The -dr switch can be used to tell MobiLink that none of the synchronizing tables use the 'datarows' locking scheme. The -dt switch can be used to force MobiLink to detect transactions only within the current database when determining the last download time that will be sent to the remote database. The -dt switch should be used if all the synchronizing tables are located in a single database, as this could reduce duplicate data sent by the MobiLink server to the clients.

466491 The server could have failed with various assertion failure errors when rebuilding a database with an invalid foreign key definition. For example, if the foreign key trigger action had the column being set to NULL, based on some event and the column definition did not allow NULLs, then this could have occurred. A database could have gotten into this state if at the time the foreign key was created the definition was valid but the column definition changed at a later date. The proper error is now returned indicating the reason the key is now invalid.
466513 Executing an SQL statement with input parameters could have caused a memory leak. This problem has been fixed.
466559 If a LOAD TABLE statement attempted to load a NUMERIC value that was too large for the target column, an invalid value would have been loaded. Now a conversion error is reported.
466560 Using 2.0 ADO .Net provider could have caused the exception TypeLoadException. The 2.0 provider was built as an x86 specific assembly, but the assembly binding policy file was not updated. This has now been fix by adding processorArchitecture="x86" to the assembly binding policy file.
466566 If a cursor was opened on a statement containing a comparison predicate of the form "T.x = val", where val was NULL, and, further, the statement was opened with the Rowcounts option ON, or scrolling forward and backward was performed, then the server could have given the wrong answer (rows that did not match the predicate), or in some cases a crash was possible. In order for the problem to appear, the value had to have specific characteristics (for example, variable within a stored procedure, or an unquantified function). This problem has been fixed.
466683 The runtime could have crashed at the end of an HTTPS synchronization. This has been fixed.
466685 When synchronization tables on an ASE database server were created with the 'datarows' locking scheme, the MobiLink server could have silently skipped rows that were inserted by other connections without a commit. The ASE server doesn't block any other connections that are trying to query the rows from a table that were created with 'datarows' locking scheme, even when there are uncommitted inserts for this table. The MobiLink server now works around this behaviour properly to ensure that no rows are skipped.

By default, the MobiLink server now queries the minimum transaction starting time from master..systransactions and then sends this timestamp to the client as the last download timestamp. In the next synchronization for this client, the MobiLink server will use this timestamp as the last download time for download. In order to get the starting time, the user ID the MobiLink server uses to connect to an ASE server must have select permission and the master..systransactions table. If the user does not have proper permissions, the MobiLink server will present a warning message and get the download time from the ASE function getdate(), reverting to the old behaviour where rows could be missed in the download. With this change, it's now possible that the MobiLink server may send duplicate data to clients, if there are any open transactions that modified any tables in the synchronization database or any databases on the ASE database server when MobiLink server is doing a download. Although the clients are able to handle duplicate data, this behavior may reduce MobiLink server performance.

The MobiLink server now includes a new command line switch so you can the behaviour of the MobiLink server with respect to tables with the 'datarows' locking scheme. The -dr switch can be used to tell MobiLink that none of the synchronizing tables use the 'datarows' locking scheme. The -dt switch on the MobiLink server has also been enhanced to include Adaptive Server Enterprise in addition to Microsoft SQL Server. The -dt switch can be used to force MobiLink to detect transactions only within the current database when determining the last download time that will be sent to the remote database. The -dt switch should be used if all the synchronizing tables are located in a single database, as this could reduce duplicate data sent by the MobiLink server to the clients.

466696 When a MobiLink server was started with the Java VM loaded, an error related to network issues could have caused the server to crash when shutting down. This has been fixed.
466700 When using the IBM DB2 ODBC driver with the iAnywhere JDBC driver to try to fetch rows from a result set, the iAnywhere JDBC driver would have have crashed if the result set had a CLOB column. This has now been fixed.
466735 If an application connected to the server using jConnect 6.x, and attempted to query a nullable long nvarchar column, then is was very likely the server would have hung. The TDS datatype map was incorrectly resolving nullable long nvarchar columns to itself, rather than resolving to nullable long binary as per the TDS specification. This has now been fixed.
466790 If a query contained at least two predicates "T.col = (subselect1)" and "R.col = (subselect2)" and both predicates could be used as fence posts for index scans on the tables T and R respectively, then the optimizer would have under estimated the cardinality of the joins which may have resulted, for complex queries, in unoptimal plans. This has been fixed.
466812 HTTP synchronizations through third party web servers, or proxies that use cookies, could have failed with stream error STREAM_ERROR_HTTP_HEADER_PARSE_ERROR. Also, if the server used the "Set-Cookie2" header, the client would never have sent the cookie back up to the server. These problems have now been fixed.
466829 If the server was in the process of starting up or shutting down when the machine was put into the hibernate state, the server may then have crashed when the machine came out of hibernation. This has been fixed.
466873 If an application made a remote procedure call to a stored procedure in a Microsoft SQL Server database, and one of the arguments to the stored procedure was a string argument of type Input with the value of '' (empty string), then the RPC would have failed with an 'invalid precision value' error. This problem has now been fixed.
466887 Using encrypted streams could have resulted in failed synchronizations, particularly on Mac systems. This has been fixed.
466968 Repeated concatenation of a string to another concatenation expression, could have caused the server to use excessive amounts of cache memory, eventually resulting in a stack overflow or a crash. For this to have occurred, a concatenation expression must have repeatedly been performed as the right hand argument of a concatenation expression.

For example:

declare @var long varchar;

declare @counter integer;

set @counter = 1;

set @var = space(30);

calcloop:

WHILE @counter < 100000 LOOP

set @var = 'string' || @var;

set @counter = @counter + 1;

END LOOP calcloop;

The error did not occur if only the left hand argument of a concatenation expression was a concatenation expression, i.e., set @var = @var || 'string';

This has been fixed.

466989 When running on HP-UX Itanium, the server did not search the LD_LIBRARY_PATH when trying to locate shared libraries, instead the SHLIB_PATH is searched. Now both locations are searched.

Note that in most cases the script sa_config.sh or sa_config.csh, that is included in the install, is used to set the environment for SQL Anywhere. When sa_config is used, both SHLIB_PATH and LD_LIBRARY_PATH are set, and hence SQL Anywhere will be able to find any libraries it requires. If sa_config is not used, users should work around this issue by

setting both SHLIB_PATH and LD_LIBRARY_PATH.

466996 It was possible for a dbmlsync synchronization to fail with the following error messages:

... Communication error occurred while sending data to the MobiLink server

... Internal error (???!s).

... Communication error occurred while sending data to the MobiLink server

... Unspecified communication error

This problem was most likely to have occurred when a slow network was being used. With a slow network, dbmlsync could have become blocked on a network write. which prevented the sending of a liveness message. To correct this problem, dbmlsync will no longer attempt to send liveness messages when it is blocked on a write.

A possible workaround for this problem would be to use the timeout communication parameter to increase the liveness timeout.

467100 When very rare, a client application using a shared memory connection could have hung forever while executing a statement. This has been fixed.
467122 The execution time of the CREATE TABLE statement did not scale very well as the number of columns being created increased. The statement could have taken a significant amount of time to create tables with thousands of columns. The performance of the server has been improved so that the CREATE TABLE statement behaves more gracefully as bigger tables are created.

Note, this also addresses the problem where deleting a column from a table via the ALTER TABLE statement would have caused a syntax error for values that already existed in other columns.

467128 The following system stored procedures no longer require DBA authority by default:

sa_dependent_views

sa_get_dtt

sa_check_commit

sa_materialized_view_info

467145 The keybaord accelerator for the "SQL/Stop" menu item was displayed as "Ctrl+Clear", even though there is no "Clear" key on most keyboards. This text has been changed to read "Ctrl+Break".
467246 When there were a large number of messages in the message store that were ready for transmission (eg. 200 12KB messages), and the QAnywhere Agent was started on a Windows Mobile 5 device, the synchronization process would have consumed 100% CPU for a significant period of time (eg. 1 minute). Further, if the upload failed after it had started, for whatever reason, each subsequent synchronization would have consumed CPU for a longer period each time. This performance problem has now been significantly alleviated so that synchronizations with QAnywhere will not get progressively longer after upload failures.
467259 The server could have crashed when a large number of connections were concurrently executing INSERT or UPDATE statements on tables with CHECK constraints. This was more likely to occur on multi-processor machines. This has been fixed.
467268 Synchronizations that took longer than ten minutes could have been timed-out by the MobiLink server, if the synchronization parameter 'timeout' was set to zero. MobiLink clients send keep-alive bytes to the MobiLink server at an interval of half the timeout value to keep the connection active, UltraLite was not sending these bytes if the timeout value was set to zero. This has been fixed.
467269 For some input values, the UNISTR() function could have entered an endless loop. This has been fixed.
467274 When a QAnywhere application (using SQL Anywhere as the message store) queued messages in time zone A, and then the time zone of the device was changed to time zone B with time earlier than time zone A, the queued messages would not have been transmitted until the time in time zone B reached the time that the messages were queued in time zone A. This has been fixed so that the messages queued in time zone A are now sent immediately when the device is online in time zone B.

Note that the issue of time zone independence with QAnywhere has not been completely addressed. All time values used in transmission rules refer to local time. Also, the special variable ias_StatusTime, used in transmission rules, refers to local time.

467276 The SQL Anywhere OLE DB provider may have failed an assertion if called by ADO with an incorrect set of parameters to Rowset::ReleaseRows. This problem only exists in the 64-bit version of MSADO15.DLL for Windows Vista. It does not exist in the 32-bit version of Vista, nor does it exist in the 64-bit version of Windows 2003. It occurred when ADO calls the SQL Anywhere OLE DB provider to release rows in a rowset that it has not previously fetched rows from. The symptoms include a request to release a rowset with a single row and a pointer to a row handle that is invalid.

A work around has been added to the SQL Anywhere OLE DB provider such that a request to release a rowset when no rowset exists will be ignored. The following VBScript sample will fail on 64-bit Windows Vista without the provider workaround:

query = "SELECT * FROM Employees"

Set recordset = connection.Execute(query)

For Each field in recordset.Fields

WScript.Echo field.Name

propCount = 0

For Each prop in field.Properties 'crashes on 64-bit Vista

...

Next

Next

467437 Referencing a column as "IDENTIFIER" .. "IDENTIFIER" (note: two dots) could have caused the server to hang. In cases where the server did not hang, the first identifier would have been ignored. A similar problem existed for columns referenced as "IDENTIFIER" . "IDENTIFIER" .. "IDENTIFIER".

For example, the following script would have caused a server hang:

CREATE TABLE T1 (

x char(4) NOT NULL,

y char(13) NOT NULL,

z char(5) NOT NULL,

);

CREATE TABLE T2 (

w char(5) NOT NULL,

);

SELECT a.x as x, a.y as y,

count(b.w)

FROM T1 a,

T2 b

WHERE a.z = b.w

Group by a.y, a..x ; -- Note extra '.'

Now, the server will generate an error if a query contains a column expression of the form

"IDENTIFIER" .. "IDENTIFIER"

or

"IDENTIFIER" . "IDENTIFIER" .. "IDENTIFIER".

467441 The built-in MobiLink authentication classes that authenticate to external LDAP, POP3 and IMAP servers were unable to read a property if the ScriptVersion of the property was defined as 'ml_global'. It is now possible to define both the authenticate_user connection script and MobiLink properties needed for authentication using the special 'ml_global' connection script.

Note that the ml_global property can be over-ridden with a script version specific property, similar to the way connection scripts work.

467446 If auditing of database activity was enabled, certain failed connection attempts could have caused the server to crash. This has been fixed.
467468 The server could have crashed, or became deadlocked, when using snapshot isolation. This could only have happened if the snapshot transaction made use of a long index value. This has now been fixed.
467495 It was possible for an UPDATE or DELETE statement executed at isolation level 0, to have been blocked on a row lock for a row that was not actually affected by the statement. For this to have occurred, the row of the table must have matched all of the local simple predicates for the table, but be rejected by a later subquery or join predicat, or a predicate involving a user defined function. This behaviour has been changed. Now, UPDATE and DELETE statements at isolation level 0 will only take INTENT or EXCLUSIVE locks on the rows that are actually modified by the statement. Further, this change adjusts the locking behaviour at isolation level 1 so that it is less likely for an INTENT or EXCLUSIVE lock to be taken on a row not affected by an UPDATE or DELETE statement, but this is not guaranteed at isolation level 1. With isolation levels 0 and 1, update anomalies may occur and not all anomalies are prevented by the locking mechanism. Application developers should use caution when using isolation level 0 or 1 with UPDATE and DELETE statements to ensure that the semantics are acceptable to them.
467502 A warning message output by the UltraLite Database Initialization utility may have been misleading. When column subsets in a table T that were referenced in a publication PUB, were used to build an UltraLite database, the following warning was displayed:

ignoring column subset for publication 'PUB', table 'T' -- all columns will be added

Actually, the column subset was being used to build the UltraLite table, it's just that columns not in the subset were being properly excluded from the UltraLite table schema. The message was intended to warn the user in regard to synchronization publications, as UltraLite always synchronizes all of the rows of a table that is specified in a sync publication. Part of the confusion is due to overloading the concept of a publication as a set of tables plus columns to be included in the schema, with the concept of a publication as a set of tables to be synchronized. In order to make this clearer, the warning has been changed to:

ignoring column subset for synchronization publication 'PUB', table 'T' -- UltraLite synchronizes entire rows"

467507 When using SQL Server Business Intelligence Development Studio, the Data Flow Task "Preview" and column list functions would have failed when using the SQL Anywhere OLEDB Provider to connect to a SQL Anywhere server. This problem has been fixed.
467522 When making a remote procedure call to a stored procedure in a Microsoft SQL Server database, if one of the arguments to the stored procedure was a string argument of type Input with a value of NULL, then the RPC would have failed with an "Invalid precision value' error. This problem has now been fixed.
467528 Applications running on AIX systems, and providing the CPORT option in the connection string, would have failed to connect if IPv6 was enabled. This has now been fixed.
467580 If a function was declared non-deterministic and it was used in a SELECT INTO (variable) statement, then the function could have been executed extra times. For this to have occurred, the function reference must not have contained any column references. This problem could also have occurred for SELECT statements, if a column were fetched using GET DATA requests. This problem has been fixed.
467586 After a failed integrated login, calls to the system function EVENT_PARAMETER( 'User' ) in the ConnectFailed event, could have returned garbage characters. This has been fixed so that calls to EVENT_PARAMETER( 'User' ) will now return the empty string if the user is not known.
467587 The server may have crashed if it was not able to get the network interfaces from the operating system. This has been fixed.
467590 If concatenation was performed in procedural code (either using the concatenation operator or string() function), and one of the arguments had an error, then the server could have crashed. This has been fixed.
467594 Calling SADataReader may have caused extra characters to have been returned for string values. A miscalculation of the strings length has been fixed.
467621 The Server Licensing utility, dblic, is used to modify the server's licensing information. In version 10.0.1, with the introduction of license files, dblic operates on the license file instead of the server executable. As an extension, it is possible to still specify the name of the server executable as the argument to dblic. When doing this though, the contents of the license file was being written out over top of the server executable, rendering it unusable. This has been fixed so that it is now possible to specify either the name of the license file or the server executable and dblic will modify only the license file.
467652 If a procedure had a query that referenced a table that was then modified by an ALTER TABLE statement, later execution of the procedure could have caused the server to crash. This has been fixed.

See also Engineer case 443016

467712 A .NET application would have crashed when trying to send a text message, if the QAManager is closed. Problems with detecting that message repository objects were open have been corrected. Now, the message: "The QAManager is not open." (error code 1021) will be returned.
467733 When editing a stored procedure which had more than about 1000 lines, CPU usage could have gone to 100%, even without doing anything. This same problem affected the Interactive SQL utility dbisql as well, when editing large SQL files. The problem was caused by the amount of tokenizing being done for syntax highlighting. This has been fixed.
467737 When SQL Anywhere was installed in a directory path containing non-ASCII characters, on a system for which the ANSI code page was different from the OEM code page (such as a typical English Windows installation), the server and client libraries may not have been able to access Unilib data files. The problem could show up as an "invalid parameter" error from SORTKEY/COMPARE, or failure to create certain character set converters. The path was erroneously being converted from the OEM codepage to UTF16, rather than from the ANSI codepage to UTF16. This has now been corrected.
467747 A second situation similar to Engineering case 467468 was found where the server could have crashed, or became deadlocked, when using snapshot isolation. As with the previous issue, this could only have happened if the snapshot transaction made use of a long index value. This has now been fixed as well.
467783 When executing a statement, the "Execution time" message displayed in the "Messages" pane could have been displayed before all of the asynchronous messages caused by a statement had been displayed. This has been corrected to that the execution time message follows the asynchronous messages. Asynchronous messages are those generated explicitly by the MESSAGE statement, or implicitly by CREATE DATABASE.
467789 Interrupting a SQL statement would not have also aborted any subsequent statements which were pending execution. For example, if a number of statements were entered in the "SQL Statements" field each separated by the command delimiterand then executed, attempting to abort them by clicking the "interrupt" toolbar button, would only have aborted the statement currently executing when the button was aborted; the remaining statements would have continued to be executed. This has been fixed so that the remaining statements are not executed.
467800 Attempting to create a proxy table to a table that has a computed index on a remote Oracle server, would have failed with the error "column not found". As part of creating a proxy table to an existing remote table, the server will also attempt to create indexes on the proxy table to match the indexes on the remote table. In this case, the name returned for the computed column was not an actual column name, but an expression name. The server now verifies that the column name truly is the name of a column in the proxy table when automatically creating indexes on proxy tables.
467861 OLEDB driver retuns error when executing stored procedure with parameters
467873 The dblib functions db_change_char_charset() and db_change_nchar_charset() may not have set the error correctly if they failed, and an error was already set from the last request. This has been fixed so that the error is now set correctly.
467970 In the presence of a thread deadlock error, an HTTP or SOAP stored procedure or function could have caused the server to appear to hang indefinitely. This problem would only have occurred if the HTTP or SOAP procedure or function being initiated happened to be the last unblocked database request task (i.e., on a server with a -gn value of x, x-1 request tasks would need to be blocked already). This has been fixed.
468023 When performing a 10.0.1 upgrade of a 10.0.0 install on Windows, when the FIPS option was selected the dbfips10.dll is not updated. This has been fixed. EBFs with this change will now update the dbfips10.dll.
468031 Under some conditions, the qastop utility would have failed to shutdown the QAnywhere Agent. When this occurred, qaagent would hang and the process would have to be terminated. This has been fixed.
468033 Inout parameters were not returned by SADataAdapter.Update when using SADataAdapter and stored procedures to update data. This problem has now been fixed.
468129 When an error occurs during synchronization, the MobiLink server should display the full details of the error, including the MobiLInk user name, remote ID, script version, row values (if available), etc. However, if no -vr command line option was specified, the row values were not displayed in the error context by the MobiLink server. This has been corrected.
468148 In some cases, executing queries that contained more than one procedure in the FROM clause could have caused the server to crash. This has been fixed.
468319 It was possible, although very unlikely and timing dependent, that the server could have hung, or even less likely crashed, when a connection was disconnected. This has been fixed.
468343 If an application attempted to connecting using the TCP parameter DoBroadcast=None and specified an alternate server name, rather than the real server name, in the ENG parameter, the connection would have failed. This has been fixed.

Note that the fix requires both an updated server and updated client library.

468347 MobiLink clients would never have timed-out a connection if the timeout synchronization parameter was set to zero. This has been fixed so that connections will now timeout after the maximum timeout period of 10 minutes if the server has not responded in this period.
468358 If the server returned the error "Dynamic memory exhausted", it will be followed by diagnostic information about the cache usage that is printed to a file. During this diagnostic printing the server may have crashed. This has been fixed.
468456 For certain MobiLink server errors, such as authentication failure, a second error may have appeared later in the log: "Download failed with client error xxx" when download acks had been turned on. This could have been confusing, since it suggested the error originated on the client, when the true error was reported further up in the server log. This has been corrected; the second error message will no longer appear.
468462 If BCP IN was used to populate a table owned by a user other than the connected user, it would have failed with either a 'table not found' error, or the server could have crashed. In some cases, if the connected user also owned a table with the same name as the table being populated, then the server would have attempted to add rows to the wrong table. This problem has now been fixed.
468558 The MobiLink plug-in may have failed to create an index on the timestamp column used for timestamp-based synchronization if the consolidated database was an Oracle consolidated database. The script the plug-in uses (in ml-template.zip) has been fixed and the column is now properly indexed.
468582 The SQL Anywhere 10.0.1 Maintenance Release was not updating the ADO.NET Data Provider file: iAnywhere.Data.SQLAnywhere.dll. This has been fixed so that susequent EBFs will update this file.
468602 The MobiLink file transfer utility mlfiletransfer did not display national characters properly on the command line. This has been fixed.
468630 The iAnywhere JDBC Driver currently supports the ResultSet.getBlob() method even though this method is optional in the JDBC specification. However, the ResultSet.getBlob().getBinaryStream() method (which is also optional in the specification) was not supported. Some applications insist that Blob.getBinaryStream() be supported if getBlob() is supported. As a result, the iAnywhere JDBC Driver now supports ResultSet.getBlob().getBinaryStream().
468631 All of the GUI applications shipped with SQL Anywhere for Mac OS X, such as the Interactive SQL utility and DBLauncher, would have stopped working after applying

updates to Mac OS X, specifically Security Update 2007-004. The applications would either have crashed, or displayed a message similar to the following:

The library dbput9_r could not be loaded. This may be because the provider is being re-loaded (in which case you need to restart the viewer) or because the library could not be found in the Adaptive Server Anywhere installation. Service management will not be available.

or:

Link (dyld) error: Library not loaded: libdbserv9_r.dylib Referenced from: /Applications/SQLAnywhere9/System/bin/dbsrv9 Reason: image not found

This has been corrected.

468726 The server could have returned incorrect results, or in some cases crashed, when executing statements with predicates of the form "expression compare (subquery)". This has been fixed.

Note that BETWEEN predicates involving subqueries also qualify as they are interpreted as two compare predicates (see example below).

Example:

select s_suppkey,

s_name,

s_address,

s_phone,

total_revenue

from supplier, revenue1

where s_suppkey = supplier_no

and ( select max(total_revenue)

from revenue1

) between (total_revenue-0.01) and (total_revenue+0.01)

order by s_suppkey

468735 If a QAnywhere message in the server database with an expiration date, was synchronized down to a client device before it had expired, the message would not have transitioned to an expired state, and hence would not have been deleted by the default server delete rule. This has been fixed.

Note that a QAnywhere message in the server database with an expiration date, that is not delivered to the client device before it expires, will also transition to an expired state and be deleted by the default server delete rule. This was the case before this change.

468745 If the option to view the Readme.txt file, or the iAnywhere Online Resources page, was selected during an install, the corresponding application would not have run. However, the install script would have waited for the user to dismiss the (invisible) application(s), and the install would have appeared to be hung. This has been fixed.
468783 Clicking the Name column heading in the table editor, would not have sorted the column names correctly. Specifically, all column names starting with upper-case letters were sorted before all column names starting with lower-case letters. This has been fixed. A similar fix has been made for the Data Type, Value and Comment columns.
468862 Previouly, the MobiLink server only supported "blocking download ack" mode. Now, the MobiLink server also supports "nonblocking download ack" mode. This mode may be controlled with the "-nba+" (use nonblocking download ack) or "-nba-" (use blocking download ack) command line options, with "-nba-" being the default. Nonblocking download acknowledgement mode provides a significant performance advantage over blocking download acknowledgement mode, but may not be compatible with some existing scripts.

The following is the documentaion update:

MobiLink now supports two modes of download acknowledgement: blocking and non-blocking. Prior to this change, MobiLink only supported blocking download acknowledgement. When you turn on download acknowledgement, the default continues to be blocking.

Note: Download acknowledgement is not on by default. To turn it on, use the dbmlsync "SendDownloadACK" extended option or the UltraLite "Send Download Acknowledgment" synchronization parameter. Download acknowledgement is not required to ensure that data is successfully downloaded. Download acknowledgement simply allows you to get acknowledgement of a successful download immediately (in the download); otherwise the acknowledgement occurs in the next upload.

To set non-blocking download acknowledgement, use the new mlsrv10 option -nba+.

Non-blocking download acknowledement is recommended because it provides a significant performance advantage over blocking download acknowledgement. However, non-blocking download acknowledgement cannot be used in the following cases:

- Clients prior to 10.0.0 do not support non-blocking acknowledgement.

- You cannot use non-blocking acknowledgement with the Notifier scripts that are generated by MobiLink Model mode.

QAnywhere messaging uses non-blocking download acknowledgement. You cannot change this setting for QAnywhere: You will get an error if you specify both -m and -nba- on the mlsrv10 command line.

To provide extra optional functionality to the new non-blocking download acknowledgement, two new MobiLink events have been added: nonblocking_download_ack and publication_nonblocking_download_ack.

nonblocking_download_ack connection event

-----------------------------------------

Function: When using non-blocking download acknowledgement, this event lets you update your database based on the successful application of the download.

Parameter name Description Order

-------------- ----------- -----

s.remote-id VARCHAR(128) N/A

s.username VARCHAR(128) 1

s.last_download TIMESTAMP 2

This event is only called when using non-blocking download acknowledgement. When in non-blocking mode, the download transaction is committed and the synchronization ends when the download is sent. This event is called when the synchronization client acknowledges a successful download. This event is called on a new connection, after the end_synchronization script of the original synchronization. The actions of this event are committed along with an update to the download time in the MobiLink system tables.

Due to the special nature of this script, any connection-level variables set during the synchronization are not available when this event is executed.

For example, the following script adds a record to the table download_pubs_acked. The record contains the remote ID, first authentication parameter, and the download timestamp.

INSERT INTO download_pubs_acked( rem_id, auth_parm, last_download )

VALUES( {ml s.remote_id}, {ml a.1}, {ml s.last_publication_download} )

publication_nonblocking_download_ack connection event

-----------------------------------------------------

Function: When using non-blocking download acknowledgement, this event lets you update your database based on the successful application of the download of this publication.

Parameter name Description Order

-------------- ----------- -----

s.remote-id VARCHAR(128) N/A

s,username VARCHAR(128) 1

s.last_publication_download TIMESTAMP 2

s.publication_name VARCHAR(128) 3

s.subscription_id VARCHAR(128) 4

This event is only called when using non-blocking download acknowledgement. When in non-blocking mode, the download transaction is committed and the synchronization ends when the download is sent. When the synchronization client acknowledges a successful download, this event is called once per publication in the download. This event is called on a new connection and after the end_synchronization script of the original synchronization. The actions of this event are committed along with an update to the download time in the MobiLink system tables.

Due to the special nature of this script, any connection-level variables set during the synchronization are not available when this event is executed.

For example, the following script adds a record to a table called download_pubs_acked. The record contains the publication name, the first authentication parameter, and a download timestamp:

INSERT INTO download_pubs_acked( pub_name, auth_parm, last_download )

VALUES( {ml s.publication_name}, {ml a.1}, {ml s.last_publication_download} )

468864 Servers running on Unix systems, and attempting to use an alternate server name, may have failed to start, giving the error "Alternate server name is not unique", even though no other server on the machine or network was using that server name. This has been fixed.
468867 When run on Windows CE devices, 1MB per of address space was reserved by the server for each thread, although only a portion was actually allocated, or "committed". This has been changed for Windows CE PocketPC 2003 and newer devices, as the server now implements the -gss command line option for these devices. The -gss option sets the stack size per internal execution thread. The default and minimum stack size is 64K and the maximum is 512K.
468878 After executing a statement, the toolbar buttons could have remained disabled, even though they should have been enabled. This problem was timing dependent, so it tended to appear on some machines from time to time, but not on others at all. This has now been fixed.

Note that the menu items and accelerator keys corresponding to the toolbar buttons were enabled correctly and were functional.

468882 In certain situations, for example, when the database server was shutting down, DBLauncher may not have displayed all of the messages it received from the database server, making it look like the database server had hung. This has been fixed.
468897 If an embedded SQL application allocated a SQLCA, some of the contents of the allocated SQLCA could have been left uninitialized after calling db_init. It was also possible, although likely rare, that a call to sqlerror_message using an allocated SQLCA could have caused the application to crash. Using the sqlca pointer included in DBLib did not have this problem. This has been fixed so that the allocated SQLCA is now properly initialized as part of db_init, and calls to sqlerror_message will not cause a crash.

A workaround is to zero out the allocated SQLCA memory after allocating it and before calling db_init. The allocated SQLCA (say app_sqlca) can be zeroed out using:

memset( app_sqlca, 0, sizeof( SQLCA ) )

468905 When running at snapshot isolation, a positioned update or delete to a row previously updated by another connection may have blocked in some cases, even though it was possible to have immediately given an update conflict error. This is fixed.

Note, in general blocking is still allowed when snapshot transactions do updates or deletes (unless the "blocking" option is off). This change only gives the conflict error earlier in some restricted cases.

469002 When run on Windows CE, the reserved stack sizes for all threads in the QAnywhere agent, the Listener and the MobiLink client have been changed to be as follows:

qaagent.exe: 64 KB

dblsn.exe: 64 KB

dbmlsync.exe: 128 KB

Previously, 1MB per thread of address space was reserved, while only a portion was actually allocated, or "committed".

469020 The internal data structure for a cursor cannot exceed 64K. When a cursor would be larger than 64K, a diagnostic was not always generated. This was corrected.
469145 If the QAnywhere Agent is started on Windows CE with a spacey path in the startline connection parameter, for example:

qaagent -c "...;startline=\Program Files\Sybase\ASA9\dbsrv9 -o dbsrv.txt -c 20m -gd all -gp 4096 -n qanywhere -gk all -qw -gn 10"

then it would have failed to start the database server with the error "InternalError: Unable to start database server". A problem with passing double quotes in the connection string has been fixed.

469146 If the return type of a method in a WSDL document contained the method name, the WSDL compiler would have generated an incorrent C# method signature for the asynchronous method call.

For example:

public WSResult AsyncCategoryBrowseResponseResponse CategoryBrowse(CategoryBrowseRequest request) // incorrect

should be:

public WSResult AsyncCategoryBrowse(CategoryBrowseRequest request) // correct

A problem with the generation of asynchronous C# method signatures has been corrected.

469151 The MobiLink server now closes non-persistent HTTP connections without waiting for the client to close the connection, as there is no need to hang on to the connection after the HTTP response is sent. This change modestly improves server resource usage when using non-persistent HTTP.
469259 The server may have crashed during the execution of an IN predicate of the form "{column} IN ( const, ...)". This would have occurred if the IN predicate was part of a control statement's condition, or part of the WHEN clause of a trigger definition; or at least one IN list entry needed an implicit type conversion in order to perform the compare. This has been fixed.
469411 Calls to the ODBC function SQLNativeSql() could have caused a crash in the ODBC driver. If the character set of the database was UTF8, a crash could have occurred or incorrect results could have been returned. This problem has been fixed.
469436 The server would have incorrectly marked all updates applied by SQL Remote as having caused a conflict when being applied to the consolidated database. This would have caused the resolve update trigger to fire when there was in fact no conflict, and would also have caused the update that was just applied to the consolidated to be echoed back to the remote database. This would have caused the row at the remote database to be temporarily set back to an older value. This problem has now been fixed so that the server will properly detect conflicts at the consolidated database.
469523 If a view was updated with an UPDATE statement that contained a VERIFY clause, the server may have crashed or incorrectly used the VERIFY clause. This would only have happened if the view and the base table had a different column ordering in the select list. This has been fixed.
469570 If the default command file for the Listener utility (dblsn,txt) was used implicitly, then having the -q option in the command file would have had no effect on the gui, instead of minimizing it. The desired behavior was achieved if the same command file was used explicitly (i.e. dblsn.exe @dblsn.txt). This problem has been fixed.
469674 The number of rows being sent by MobiLink to an UltraLite client could have been more than the number of rows the UltraLite client actually inserted. Rows could have been lost by UltraLite during synchronization when the primary key for a table was not the first index in the table. This situation could have occurred when changing the primary key via the UltraLite Schema Painter application. This problem has now been fixed. Newly created schemas (or altered schemas) will ensure the primary key is the first index for every table. For existing databases, UltraLite will check after loading the schema, that the primary key is the first index in every table and it will make it so if necessary.

A workaround to this issue would be to unload and reload the schema and/or the database.

469685 The server could have incorrectly accepted an outer reference as a parameter to the ROWID() function, without throwing an error. For example, the following query would not have returned an error:

SELECT * FROM table1, some_procedure( ROWID( table1 ) )

The behaviour of such a function call was undefined; a query containing an illegal outer reference may have returned unintuitive or inconsistent results. This has been corrected so that the server now correctly returns an error when the ROWID() function is called with an illegal outer reference as an argument.

469699 An attempt by a version 9.0.2 DLL to self-register itself on Windows Vista would have resulted in the regsvr32 process going into an infinite loop waiting for the self-registration to complete. This could have happened during any of the EBF installs from 9.0.2 build 3476 on. The problem would also have manifest itself after any of these EBFs have been installed by manually executing a regsvr32 command on a DLL. Since any 9.0.2 DLL that requires registration has already performed the registration step as part of the initial 9.0.2 install, the re-registration failure during an EBF install should not cause any problem, and the regsvr32 process can be safely terminated. In a similar fashion, any attempt to unregister a DLL (regsvr32 /u) once the EBF was applied would also have failed. This problem has now been fixed.
469705 If an existing database that contained materialized views and indexes on these views, was unloaded using the Unload utility or the DBTools function DBUnload, then the definitions of these indexes was not unloaded. This problem has now been resolved.
469731 Attempting to start a real database with the DatabaseName "utility_db", would have resulted in one of two different error messages (permission denied or naming conflict), depending on the situation. This has been corrected, the name "utility_db" is now reserved for the utility database. Other databases attempting to use this name

will see the error SQLE_DB_ALIAS_RESERVED_UTILDB (-985) "The database name 'utility_db' is reserved for the utility database."

469827 The server may have erroneously reported the error "Right Truncation of string data" when data was converted to CHAR or VARCHAR as part of a query (eg a CAST operation). This would have occurred if the database was created with a multi-byte collation, and a column contained NCHAR data of sufficient length (depending on the collation in use, but always at least 8192 bytes). This has now been fixed.
469851 If a rule was created whose condition expression contained a newline character, once saved to a ".qar" file, the file could not have been read properly. Embedded newlines were not being escaped with the line continuation character when they were written. This has ben fixed so that the condition is now saved correctly.
469896 Selecting a different value in the "Encoding" combobox did not correctly update the preview of table data in the Import Wizard. This has been corrected.
469973 On Windows Vista systems, the server would have left a minimized command-shell window visible in the Windows taskbar when starting Java in the database.

Self-registering DLLs, such as the ODBC driver or the dbctrs perfmon plugin DLL, could also have shown a minimized command-shell window, but it was very short-lived.

Both these problems have now been corrected

469974 An application would have failed to autostart the engine when using a quoted StartLine value that contained spaces in the path. For example, the following startline would have failed with SQLE_UNABLE_TO_CONNECT_OR_START:

StartLine="\Program Files\uleng10.exe"

This problem has been fixed.

This problem can be worked-around by making the opening quote the second character:

StartLine=\"Program Files\uleng10.exe"

or by enclosing the entire quoted value in single quotes:

StartLine='"\Program Files\uleng10.exe"'

469976 The server may have returned incorrect results when evaluating a query that contained a procedure call in the FROM clause if the body of the procedure contained only a single statement, and an unqualified column reference was passed to the procedure as an argument. In order for this incorrect behaviour to have occurred the column reference passed to the procedure had to have the same name as a column in a table referenced by the statement in the body of the procedure. This problem has now been fixed.
469977 If a server was started on Windows Vista and the default port number 2638 was in use, the server may give the error "Unable to initialize communications links" and fail to start. This would only have happened if a port number was not specified using the -x server option. The correct behaviour is to choose a different port and start on that port. This has been fixed.
470050 It was possible when rebuilding a database (version 10 or earlier) to version 10 using dbunload -an, -ar or -ac, that the new database would have been missing some objects. This would only have occurred if the database being unloaded contained GLOBAL TEMPORARY TABLES that had foreign keys, or comments using COMMENT ON, on them. The resulting database could have been missing indexes and/or comments on indexes for any tables, including base tables, that were to be created after those for the GLOBAL TEMPORARY TABLE. This has now been fixed. The fix requires a new dbtools library, as well as the updated script files, unload.sql and unloadold.sql.
470052 On Japanese Windows systems, when browsing for a file in SQL Anywhere Explorer, UltraLite udb and pdb files would not have been displayed when the file type was "All UltraLite Database Files (.udb, .pdb)", even though they did exist. This has been fixed.
470056 Attempting to include a column with an approximate data type (real, float or double) in an index would have caused a warning dialog to be displayed discouraging this practice. The dialog was provided with an OK button only. This has been corrected so that now both OK and Cancel buttons are provided, with Cancel cancelling the operation.
470058 If a database contained a user-defined message that included an embedded quote, attempting to rebuild the database would have failed when the resulting CREATE MESSAGE statement was executed. This has been fixed.
470173 After using Sybase Central to create a proxy table to a table in Paradox, fetching from that table would have failed with a "could not find the object" error message. The method Sybase Cenral used to qualify the table name with the database name was not supported by Paradox. This problem has been fixed by implementing a work around in the server to modify the qualified table name so that it is supported by Paradox.
470176 There was no implementation for the ODBC function SQLSynchronizeW() in the Runtime, even though it is defined in ulodbc.h. This has been corrected by implementing SQLSynchronizeW().
470195 If an event was fired using the TRIGGER EVENT statement with a list of event parameter values, the server could have crashed when the event handler attempted to access the parameters via the event_parameter() function. This has been fixed.
470198 The utility SetupVSPackage.exe was not respecting the language setting as defined by DBLANG. This has been fixed.
470202 Named parameters found in scripts would have been parsed and incorrectly substituted for, when found in comments and quoted strings. This could have caused parameters to be passed in the wrong order, or an error message to be generated, when the number of parameters did not match what was expected. This has been fixed.

Note, the following forms of comments are recognized:

-- (two hyphens)

// (two forward slashes)

/* */

The first two forms cause the script text to be ignored until the end of a line.

The last form causes all text between the "/*" and "*/ to be ignored. This form of comment cannot be nested.

Any other type of vendor specific comment will not be recognized and should not be used to comment out references to a named parameter.

470274 If a query used certain internal system procedures on the NULL-supplying side of an outer join, the wrong results could have been returned. The following procedures had this characteristic, and have been corrected:

- sa_rowgenerator

- sa_report_blocking

- sa_lockinfo

- sa_report_deadlocks

- sa_performance_diagnostics

- sa_performance_statistics

470282 An erroneous conversion error could have been raised when executing a query if it referenced a derived table which was empty on the right side of a left outer join, and the derived table contained a GROUP BY clause and had a NUMERIC item in its SELECT list. This has been fixed.
470292 Under heavy load the server could have crashed without any assertions in the system log or the console log. This has been fixed.
470296 The ODBC driver could have allocated a large amount of memory when using a shared memory connection. This would have been very rare, and only occurred with large responses. This h has been fixed.

Note, this problem could also have occurred with embedded SQL applications, and is now fixed as well.

470313 A query may have failed with the message 'Assertion failed: 106104 "Field unexpected during compilation"' when a simple select that should bypass the optimizer was executed. The problem would only have occurred if the select used a unique index and an additional search condition contained a column reference on the right hand side.

For example:

create table T1 ( pk int primary key, a int, b int );

select * from T1 where pk=1 and a=b;

This has been fixed.

470315 The default name of a primary key constraint is "primary". If a table was created with a constraint name that was not the default, Sybase Central would have crashed silently when navigating to the Data tab.

For example, navigating to the Data tab for the following table definition would have caused Sybase Central to crash:

CREATE TABLE t1

(

c INTEGER NOT NULL,

CONSTRAINT "cn" PRIMARY KEY("c" ASC)

This problem has now been fixed.

470335 To determine if a downloaded file has changed, the MobiLink File Transfer utility calculates a hash of its copy of the file and sends it up to the server. The server calculates a hash of its own copy and compares it with the hash of the remote file, and if they don't match, it transmits its entire copy of the file down to the remote. However, if the only change to the file is that extra bytes had been appended to the end, the file was transmitted incorrectly and the resulting file on the remote contained only the new portion -- the original portion of the file was lost. This has been fixed.
470414 If a Remote Data Access server was created where the underlying ODBC driver was not a Unicode driver, then using Remote Procedure Calls (RPC) with that remote server would not have worked correctly. This problem has now been fixed.
470546 A query with a procedure call in the FROM clause, that had a column or variable parameter that matched the name of one of the procedure's own result columns, would have failed with the error -890 "statement size or complexity exceeds server limits". This is fixed.
470559 The server could have crashed when starting up a database, if the start event of the database contained an HTTP/SOAP call. This has been fixed.
470562 When synchronizing with stream parameters pointing to a MobiLink server on a different machine, carrying out several synchronization operations in a row could have produced errors such as SQLE_COMMUNICATIONS_ERROR or SQLE_SYNC_INFO_INVALID. This would not have occurred if the stream parameters string was empty and the defaults were used. This has been fixed.
470582 The error 'Function or Column name reference "Unknown" must also appear in GROUP BY', may have been erroneously raised when an IF expression involved an aggregate function.

For example:

IF count(n) > 50 THEN 'good' ELSE 'bad' ENDIF

This has been corrected.

470594 The MobiLink Listener would likely have failed to send confirmation of notification delivery or confirmation of actions, if persistent connections were explicitly turned off (ie dblsn.exe -pc- ). This problem has been fixed.
470660 Items in the "Edit" menu were not enabled and did not perform consistently:

1. The "Edit/Copy" menu item is now enabled if a results table has focus and at least one row is selected.

2. If the Results panel is selected, the "Edit/Paste" menu item is no longer enabled.

3. If a results table was focused, the "Edit/Delete" menu item could have been clicked, but nothing would have happened. Now, the menu item will cause the row to be deleted, the same as if the DELETE key had been pressed.

4. The "Cut", "Undo", "Redo", "Find/Replace", "Find Next", and "Go To" menu items are now enabled only if the "SQL Statement" field has focus. Previously, they were enabled even if the "Results" panel was selected.

470680 When running the Windows Performance Monitor in a Terminal Services session other than session 0, it was not possible to monitor database services running in session 0. On XP, system services and the primary desktop are all in session 0. On Vista, only the system services run in session zero. The behaviour has been changed so that when the Windows Performance Monitor (perfmon) is started (actually, when "add counters" is selected for the first time), perfmon will monitor a database server in the local session if one exists and is providing statistics. If there is no server running in the current session, perfmon will monitor a database server in session 0 if one exists and is providing statistics. If there is no database server providing statistics in the local session or in session 0, perfmon will display statistics for a database server if one is subsequently started in the local session ONLY. To monitor a database server that runs in session 0 (eg, a system service) from a session other than session 0, the database server must be started before perfmon is started.
470685 When attempting to fetch an unsigned integer from a table on a remote server, the value returned would always have been 0 if the local server was running on a 64-bit little endian machine. This problem has been fixed.
470812 If the QAnywhere Agent was started with a custom policy (ie. transmission rules) where each rule was a scheduled rule, QAnywhere would still have behaved as though the policy was automatic. The messages put in a queue would have been transmitted immediately, and push notifications would have resulted in an immediate message transmission, instead of message transmissions happening on the defined schedule. This has been fixed so that the transmission rules are now all scheduled rules, message transmissions happen only at the scheduled times.
470839 When running the Windows CE install in Maintenance mode, the Start Copy Dialog did not contain the list of components to be installed. This has been fixed.
470854 When printing an error report to the console with "dbsupport -pc", binary data is represented in the form of a hex dump. For non-printable characters, the hexadecimal representation was incorrect. This has been fixed.
470999 It was not possible to build the PHP driver for SQL Anywhere 10 on Unix systems. The config.m4 script that is used as part of the PHP build procedure has now been updated to use version 10 software.
471006 EXECUTE permission was not granted to the group SA_DEBUG for the system procedures sa_proc_debug_version and java_debug_version. If a user that was granted membership in SA_DEBUG was not also a DBA, attempting to use the procedure debugger would have failed and possibly caused Sybase Central to crash. This has been corrected for newly initialized databases. For existing databases, the permissions can be granted by executing the following:

grant execute on dbo.sa_proc_debug_version to sa_debug

go

grant execute on dbo.java_debug_version to sa_debug

go

471007 When the MobiLink client (dbmlsync)was run with table locking enabled, this is the default and is the case unless the extended option locktables is set to off, the expected behaviour is for synchronizations to fail unless dbmlsync can obtain locks on the tables being synchronized. A problem that would have allowed synchronizations to continue when dbmlsync failed to obtain the locks, has now been fixed.
471044 When accessing column values in the upload using Java direct row handling, the ResultSet.getObject() method could have returned null instead of an object representing the column value. Methods such as ResultSet.getString(), ResultSet.getInteger() etc. would have worked correctly. This is now fixed.
471045 The memory usage of the MobiLink server with QAnywhere messaging enabled would have increased by a small amount at each client synchronization. The amount of increase was reduced by about 90% by changes made for Engineering case 471798. This increase has now been reduced by a further 5%. While not completely resolved, the memory increase has been significantly reduced, and it continues to be addressed.
471110 If an event handler attempted to create a temporary table via SELECT ... INTO #temptab, or it attempted to create a view and the SELECT list included a string column with CHAR length semantics, the server would have crashed. This has been fixed.
471148 When the server was run on Linux x86 or x86-64 systems, in an X-Window environment where GTK libraries were available, and the command line options -ui or -ux were specified when the GUI console was invoked or when running the Developer Edition regardless of command line options, it may have crashed on shutdown. The integrity of the data in the database was not compromised. This has been fixed.
471149 When run on Windows 2000, the MobiLink Server was unable to determine the IP address of the remote client, and thus was unable to ignore a request when the stream option 'ignore' was specified. This has been fixed.
471155 The Unload utility could have crashed if the userid specified in the -ac connection parameter was 'dba', but used a non-default password (i.e. not 'sql'), and the userid of the source connection (i.e., -c parameter) was 'dba' as well. This has been fixed.

Note, it is recommended that when using -ac that the destination database have default dba credentials. The password can then be changed after dbunload completes.

471293 An HTTP request made to a DISH service may have caused a server crash if the DISH service exposed a SOAP service with the following characteristics:

- the SOAP service was created with DATATYPE ON or IN, specifying that parameter types are to be mapped from SQL to XMLSchema data types (rather than exclusively to xsi:string),

- one or more parameters within the stored procedure called by the SOAP service were (SQL) XML data types.

This has been fixed. VARCHAR, LONG VARCHAR, and XML are mapped to XMLSchema type STRING (xsi:string). Most client toolkits including the SQL Anywhere SOAP client will automatically HTML_ENCODE data types that map to xsi:string.

471326 The execution time reported in the request-level log for a statement could have been much to high. This would only have happened in the second or subsequent request-level logs that were split using the -on or on command line options. This has been fixed.
471339 UltraLite clients will now send their version and build number up to the MobiLink server during synchronization. A line similar to the following will appear in the server log:

Request from "UL 10.0.0.2862" for: ...

471413 If a BACKUP statement was executed that used one of the TRANSACTION LOG backup options, and the database did not use a transaction log file, then the server would have crashed. This has been fixed. The server now returns the error "Syntax error near 'backup option'".
471415 If the public option MAX_TEMP_SPACE was inadvertently dropped (ie set public.MAX_TEMP_SPACE=), the server would have crashed the next time it checked the free temp space. This has been fixed.
471431 If an "UPDATE OF column-list" trigger was defined, the trigger could have been fired in some cases where no column in the associated list had in fact been modified.

BEFORE UPDATE triggers should fire if a column in the column-list appears in the SET clause of the associated UPDATE statement, while AFTER UPDATE triggers should fire if the value of a column in the column-list has been modified by the UPDATE statement.

A positioned update would have caused all BEFORE UPDATE and AFTER UPDATE triggers to fire regardless of whether a column in their column-list appeared in the SET clause or was modified by the update. Further, if a searched update included all columns in the SET clause, but did not modify the value of any column, AFTER UPDATE triggers would have been fired inappropriately.

This has been fixed.

471575 If an application used the iAnywhere JDBC Driver to connect to a DB2 server, and attempted to use PreparedStatement.setBoolean(), the JDBC driver would have thrown an exception. Calling PreparedStatement.setBoolean() resulted in the driver binding a parameter of type SQL_BIT, even though DB2 does not support SQL_BIT. This has been fixed so that a parameter of type SQL_TINYINT is now used for DB2.
471582 The MobiLink clients will now include its version and build number with each synchronization, and the MobiLink server will display this information in its log. As a result, the MobiLink log will now contain lines like the following:

Request from "Dbmlsync Version 11.0.0.1036 Debug Internal Beta" for: remote ID: e08b39d1-e3fa-4157-969b-8d8679324c00, user name: template_U1, version: template_test

instead of lines like this:

Request from "MLSync" for: remote ID: 45ef79ab-195e-4f76-805b-95eef2773e8f, user name: template_U1, version: template_test

471584 Erroneous results could have been obtained for a query containing a left out join, where FOR READ ONLY was not specified, and where a temporary table was required (for example, to order the results of the join). This has now been corrected.
471644 In some situations, if a statement contained a subselect in the SELECT list of a query block that was aliased, and the alias was referred to in the WHERE clause of the query, then the statement would have failed with the following error:

*** ERROR *** Assertion failed: 106104 (...) Field unexpected during compilation (SQLCODE: -300; SQLSTATE: 40000)

This has been fixed.

471688 Viewing a result set generated by SELECT or CALL statements would have caused the server to place schema locks on the table(s) associated with the result. Theses locks could have subsequently prevented modifying those tables in other applications, such as Sybase Central. This has been changed so that the Interactive SQL utility now releases database locks once the result set has been completely read (and cached), as long as there are no uncomitted changes in the current transaction.
471692 Multi-byte characters in push notifications may have been lost. This problem has been fixed.

Note, multi-byte characters are supported in UDP notifications, but SMS notifications are restricted to 7-bit ascii.

471696 The 32-bit and 64-bit versions of the SQL Anywhere library that provides support for the Windows Performance Monitor could not coexist. If the 64-bit library was registered last, only the 64-bit version of the Performance Monitor would have been able to monitor SQL Anywhere servers (both 32-bit and 64-bit servers). If the 32-bit version was registered last, only the 32-bit version of the Performance Monitor would have been able to monitor SQL Anywhere servers (both 32-bit and 64-bit servers). The area of the registry that contains performance monitoring information and, in particular the path to the support library, is shared by both 32-bit and 64-bit applications, unlike other areas of the registry which have been split into 32-bit and 64-bit versions. The problem has been fixed by having the 32-bit and 64-bit support libraries register using different service names.
471710 When submitting an error report with dbsupport, minidumps larger than 1Mb in size would silently have been omitted from the submission. Only the crash log would have been included. Also, when printing an error report with dbsupport, minidumps larger than 1Mb in size would not have been printed. These issues would typically only have occurred on Unix systems, since Windows minidumps are much smaller. This has been fixed.
471765 If a table had a column of type uniqueidentifier, varbit, long varbit, xml, nchar, nvarchar or long nvarchar, the column would not have been in the result set of the system procedure sp_columns. This has been fixed. To get this fix into an existing database, the database needs to be rebuild.
471798 The MobiLink server could have leaked 2K bytes of memory per synchronization if compressed streams were being used (ie. the "compression" client option was not "none"). The leak depended directly on how the first uploaded bytes of the synchronization flow on the network between the client and server, so the leak was somewhat random from client's point of view. The synchronization was not affected by the leak. This has now been fixed.
471802 The dbsupport utility can be used to submit, via the Internet, diagnostic information and crash reports, or to submit feature statistics. When dbsupport prompted the user to submit a particular crash report, and the user declined, it still attempted to submit feature statistics, which is not desired. When dbsupport was configured with "dbsupport -cc no", the intended behavior is to not prompt for permission to submit reports, and to not submit reports. Although the crash reports were not being submitted, dbsupport still attempted to submit feature statistics, which is also not desired. These issues have been fixed.
471825 When unloading UltraLite database to SQL, the UltraLite Unload utility would have missed any tables where IsNeverSynchronized() would have returned true. This has been corrected
471931 The MobiLink server could have crashed when calling a stored procedure which generated error messages that were longer than 256 characters. This has been fixed.
471948 If an HTTPS connection attempt failed because of licensing (i.e. too many connections), the client would have received a plain-text error message, instead of handshake data. HTTPS clients would have interpreted this as a protocol error. This has been fixed.
471958 If the primary key of a table being synchronized, was not defined as the initial column or columns of the table, it was possible for the MobiLink Server to crash while processing the download_delete_cursor for that table. It was more likely for the MobiLink Server to crash if the options -b or -vr were specified on the MobiLink server command line. The problem has now been fixed.
471967 The MobiLink server may have crashed when executing a user script which contained named parameters, and a parameter failed to bind. Unfortunately, this bind failure was also not being recorded to the log. The bind failure recording and crash have been fixed.
471981 Attempting to create proxy tables to an Oracle server in an SA database with a mult-byte character set, would likely have failed with a "table not found" error if the table owner and name were not specified in uppercase in the create existing table location string. This problem has now been fixed.
472034 Validating a table with full check, would have caused the server to crash if the column order of a foreign key did not match the column order of the referenced primary key. This has been fixed.
472071 If a query contained a recursive union that appeared on the right side of a nested loops join and the recursive union selected a hash execution strategy, then the statement could have failed with the following error:

Run time SQL error -- *** ERROR *** Assertion failed: 106105 (...)

Unexpected expression type dfe_PlaceHolder while compiling [-300] ['40000']

For example, the following statement could cause this error.

with recursive Ancestor( child) as

( (select row_num from rowgenerator R1 where R1.row_num = 1 )

union all

(select R2.row_num+100

from Ancestor, rowgenerator R2

where Ancestor.child = R2.row_num

)

)

SELECT *

FROM sys.dummy D1, Ancestor

for read only

In the case of this error, the server would continue to process other statements (a non-fatal assertion failure). This has been fixed.

472073 Delete statements that do not bypass optimization, and load CHECK constraints, would have failed if there was a syntax error in CHECK constraint definition. This has been fixed.
472078 The server could have crashed if a MESSAGE statement contained certain types of substr or byte_substr expressions. These expressions must have used a negative start value that specified a starting point before the beginning of the string for a crash to have occurred. For example: "message byte_substr( 'a', -5, 1 )". This has been fixed.
472081 If a connection string contained LINKS=TCPIP(host=<hostname>;...), where <hostname> was an invalid host name, the client library may not have given an error as expected. This would only have occurred with threaded clients on Linux. This has been fixed.
472222 If the UltraLite language DLLs were removed from the installation, the UltraLite ODBC driver may have caused Sybase Central and dbisql to crash. The ODBC driver now explicitly checks for missing resources and reports an error if no resources are found.
472228 The Mobilink Redirector now support "IIS6 in IIS5 isolation mode". IIS5 allows processing of multiple persistent HTTP request responses within a single entry into the web server extension. However IIS6 in IIS5 isolation mode disallows that possibly due to the stricter HTTP system driver. To work around this, the redirector will exit the extension after a single request-response cycle, while persisting the backend connection for later use. This change should increase concurrency, especially when the backend servers are the bottleneck.

To turn on IIS5 isolation mode on a IIS6 server using the IIS Manager, right click on IIS Manager->Web Sites and select Properties. Bring up the Service page and select the "IIS 5.0 isolation mode".

472237 The MobiLink server is now supported on Windows x64. The supported consolidated databases are SQL Anywhere and Oracle (see Engineering case 472238 for details). An x64 JRE install is required, which is available at:

http://downloads.sybase.com/swd/detail.do?baseprod=144&client=ianywhere&relid=10260

To install this JRE:

Download and run SA_1001_JRE_UPD.exe. The install will locate an existing SQL Anywhere 10 installation, and install a Java Runtime Environment for x64.

To install the x64 MobiLink server:

1) Install the EBF normally on a x64 computer, and then go to Add/Remove Programs (Programs and Features in Vista), select SQL Anywhere 10 and click on the Change button.

Check that Modify is selected and click on the Next button.

2) The Select Features dialog will appear and it will show the MobiLink for x64 features under "MobiLink". 32 bit MobiLink features will be displayed under "MobiLink (32 bit)".

Check the checkboxes for MobiLink to install MobiLink for x64 and click on the Next button.

3) Click the Next button on the next dialog to implement the modifications.

4) Click the Finish button on the last dialog to complete the installation.

472238 The "iAnywhere Solutions 10 - Oracle" ODBC driver is now supported on Windows x64 systems.
472239 Branded, third-party ODBC drivers are no longer shipped with MobiLink. Version 10.0.0 and up already do not ship with branded, third-party ODBC drivers. The drivers that are no longer shipping are:

iAnywhere Solutions 9 - DB2 Wire Protocol

iAnywhere Solutions 9 - Oracle Wire Protocol

iAnywhere Solutions 9 - Sybase ASE

These drivers are now deprecated, although they will continue to be tested to make sure MobiLink and other components still work with them. If a problem is encountered with one of these drivers that cannot be worked around, a fix cannot be made, the options are to directly use a recommended third-party ODBC driver (see http://www.sybase.com/detail?id=1011880), or to move to version 10.0.1 or higher. The aforementioned link will be updated, recommending:

- An IBM ODBC driver for DB2

- Our own (iAnywhere Solutions 9 - Oracle) ODBC driver for Oracle (now shipping with 9.0.2 as of this change)

- A DataDirect ODBC driver for ASE

472245 A call to SQLCancel() by an ODBC application may have failed, if the attempt was to cancel a multi-row insert. The results may have varied, but it the application could have appeared to be hung. The ODBC driver attempts to execute multi-row inserts as a single operation. If the operation failed, it attempted to insert rows one at a time. In the case where the multi-row insert failed due to the operation being cancelled, the driver was left in a bad state. Now, the driver does not bother trying again if the original statement failed because it was cancelled.
472262 The "Start In" property of the Sybase Central shortcut (Start menu item) was incorrectly set. This could have resulted in Sybase Central failing to start. This has been fixed.
472364 UltraLite allows a publication to be created with a predicate for each of its tables. This allows users to filter rows in a table being synchronized. If the predicate contained a subquery, it was possible that the predicate evaluated to the wrong result, either allowing all rows to be uploaded, or none to be uploaded. This has been fixed.

Also, note that there are two errors in the documentation. Under UltraLite � Database Management and Reference/Working with UltraLite Databases/Working with UltraLite publications/Publishing a subset of rows from an UltraLite table, the following are incorrect:

"Palm OS: You cannot use a CREATE PUBLICATION statement with a WHERE clause on this platform."

In fact, a WHERE clause can be used on Palm OS.

The paragraph "What you cannot use in a WHERE clause"

In fact, you can use columns from tables not in the article (or even not in the publication). You can also use subqueries.

472369 When running the Linux x86 (32-bit) server, the value of the NativeProcessorArchitecture property would always have been "X86," even if the engine was running on a system with an x86-64 CPU. This has been fixed.
472386 If a database containing global autoincrement columns was rebuilt, and the setting of the global_database_id option was 0, the next available value for these columns stored in SYS.SYSTABCOL.max_identity was not set. This has been fixed. As a workaround, execute the following after rebuilding the database:

set option public.global_database_id=1;

set option public.global_database_id=0;

472390 If a statement other than a SELECT statement converted a value of type NUMERIC or DECIMAL to a string, then the conversion could have been incorrect. There could have been insufficient trailing 0 characters for the declared scale of the value. This has been fixed.

For example, the following batch would have returned 12.34 and 12.34000, now the two values should both be 12.34000:

begin

declare @num numeric(10,5);

declare @str char(20);

set @num = 12.34;

set @str = @num;

select @str, cast( @num as char(20) );

end

Further, the data type of division in the NUMERIC/DECIMAL domain could have been incorrect for a non-SELECT statement. This has been fixed as well.

472400 In some cases, if a query contained an unflattened derived table on the null-supplying side of an outer join and the derived table contained a constant, then the statement could have failed with an assertion failure message:

Run time SQL error -- *** ERROR *** Assertion failed: 106105 (...)

Unexpected expression type dfe_PlaceHolder while compiling (SQLCODE: -300; SQLSTATE: 40000)

For example, the following query demonstrates this problem:

SELECT *

FROM SYS.dummy D1

LEFT JOIN

( select c1

from ( select distinct D2.dummy_col, 31337 c1

from dbo.rowgenerator R1 , sys.dummy D2

) DT1

) DT2

ON (D1.dummy_col=DT2.c1-31337)

This has now been fixed.

472478 The iAnywhere JDBC driver has now been enhanced to support the DB2 Mainframe ODBC driver. The iAnywhere JDBC driver now checks the DBMS name of the DB2 driver, if it is the DB2 Mainframe driver it will set the appropriate default result set type and other attributes.
472479 If a cursor contained a LONG VARCHAR or LONG NVARCHAR column, and it was retrieved using a GET DATA request, then the request could fail with the error: -638 "Right truncation of string data" In some cases, this situation could have caused the server to crash. This has now been fixed.
472482 If a cursor was opened with a query that referenced proxy tables, and attempted to refetch a row, then the server would have failed assertion 101701. This problem has now been fixed and the server now correctly gives an error indicating that cursors involving remote tables are not scrollable.
472484 If an application made a request that executed a JAVA call, and then attempted to shut down the database while the JAVA call was still active, then the server would either have hung or crashed. This problem has now been fixed.
472486 On Linux IA64 systems, the server may cause "floating-point assist" faults. These warnings are as result of operations on denormal (quantities too small to be represented in normalized form) floats and doubles in the server, and can be considered harmless, especially if the number of warnings is low. The Itanium CPU is incapable of operating on denormal numbers in hardware and enters software emulation mode when such an operation is requested. The Linux kernel detects this and displays a performance warning, as the software emulation entails a performance penalty. The correctness of server operations is not compromised. All the same, the server has been modified to minimize internal use of denormal numbers. However, the warnings will still appear if the server is explicitly requested to operate on denormals (for instance, with the statement "SELECT 2.25e-309").
472489 The .NET 2.0 framework introduced a new namespace 'System.Transactions', which contains classes for writing transactional applications. Client applications can create and participate in distrubuted transactions with one or multiple participants. These applications can implicitly create transactions using TransactionScope class. The connection object can detect the existence of an ambient transaction created by the TransactionScope and automatically enlist. The applications can also create a CommittableTransaction, and call the EnlistTransaction method to enlist.

Distributed transaction has significant performance overhead. It is recommand to use database transactions for non-distributed transactions.

472503 Deploying a synchronization model created with an exisiting UltraLite database could have caused an error. This problem has been fixed.
472505 While performing a backup, the server could have crashed in a high availability environment if one or more of the transaction logs was deleted. It was possible to truncate a transaction log when the database file was mirrored, but this is no longer the case. An error is now returned when attempting to truncate a transaction log while it's involved in mirroring.
472507 If a statement contained a hash join with a complex ON condition containing non-equality predicates that should not be executed in parallel, then it was possible for the join to be incorrectly costed by the optimizer as if it were executed in parallel. This could have lead to sub-optimal execution strategies, a server crash or a wrong answer. This has now been fixed.

For example, the following statement could exhibit this problem:

select *

from sysdomain D1 left join sysdomain D2 on D1.type_id = D2.type_id and 0 = ( select D1.type_id - D2.type_id from sys.dummy )

472508 If a query contained an outer join that had a derived table on the null-supplying side, and the derived table contained a complex expression and the join condition contained a non-equality predicate that referenced this complex expression that was further used after the join, then the statement could have failed with a non-fatal assertion failure error:

Assertion failed: 102501 (...) Work table: NULL value inserted into not-NULL column

For example, the following statement could cause this problem:

with D(c1,c2) as (

select row_num-1, 0

from dbo.rowgenerator R1

where R1.row_num <= 101

union all

select 123456789, 0

from sys.dummy where 1=0

)

select D1.c1, D1.c2 * 23 x, D2.c1

from D D1 left join D D2 on D1.c1 = D2.c1 and D2.c1 = 3 and x - D2.c2 = 0

This has been fixed.

472510 A server started with several databases could have crashed on shutdown if more than one alternate server name was used. This has been fixed.
472613 If a highly uncompressible string (i.e. one such that compression increases the size of the data or reduces the size by less than about 14 bytes) was inserted into a compressed column, fetching that value from the column would have resulted in decompression errors. This was the result of an assumption that the stored length of the column was less than or equal to the actual length of the string. This has been fixed.
472617 The Interactive SQL window could have stopped repainting when executing a long-running query. This has been fixed.
472619 The Unload utility would have reported a syntax error if the tsql_variables option was set to 'on'. This option controls how variable references starting with @ are handled. The unload script now temporarily sets the option to the default value (off).
472620 Mini core files generated on Linux as a results of a crash are too big. The server was including executable segments in the core files. This has been fixed by discarding executable segments, and any data segments that exceed 2MB in size.
472623 If a query was executed that used a merge join, and the null-supplying input of the merge join was a derived table that contained an unquantified expression in its select list and the join condition contained a non-equality predicate referencing this unquantified expression, the statement would have fail with the following message:

Assertion failed: 106105 (...) - Unexpected expression type dfe_FieldOrigRid while compiling

For example, the following query could have generated this problem:

SELECT T1.col1

FROM

( select NULL col1, row_num col2,

(select dummy_col from sys.dummy ) col3

from dbo.rowgenerator

) T1

FULL JOIN

( select dummy_col c1, dummy_col+1 c2

from sys.dummy D1

) T2

ON (T1.col2=T2.c1) AND (T1.col3=T2.c2)

This has been fixed.

472632 Messages with a NULL originator in the server message store, would have caused message processing to halt. This has been fixed as follows: the QAnywhere Agent has been changed so that messages with a NULL originator will not be uploaded until the store ID is set on the client. The QAnywhere connector has been changed so that if a message with NULL originator somehow gets into the server message store, the message will be marked as unreceivable and skipped, not halting further message processing.
472645 If a transaction log file on the primary server in a database mirroring environment was grown using ALTER DBSPACE TRANSLOG ADD, the statement would have been sent to the mirror server, but would have been ignored. This has been fixed. The log on the mirror will now be correctly grown when the mirror server receives this statement from the primary server.
472648 The MobiLink server could have entered into an infinity loop and generated a very large output file, or have even crashed, if the execution of an upload_fetch, download_cursor, or download_delete_cursor script caused an error, or if the number of columns in the result set generated by any of these cursors did not match the number of columns defined

in the corresponding remote table, and the handle_error or handle_odbc_error script returned 1000 when these errors occurred. This problem has been fixed. The MobiLink server will now abort the synchronization if any of these unrecoverable errors

occur during synchronization. The errors in the user-defined scripts must be fixed.

472768 The Unload utility was generating the reload.sql script using newline (linefeed) characters to separate lines on Windows, rather than the generally accepted carriage return/linefeed characters. This has been fixed. On other platforms, the script will continue to use newline characters as line separators.
472772 Mini-core dumps generated by the server on Linux systems may not have loaded properly in the debugger, or would not have shown any stack traces. In order to limit the size of the mini-core files on Linux, the size of a single data segment in the dump was limited, to 2MB. On some Linux systems this was not sufficient so it has been increased to 5MB.
472773 If an event has a query that references a proxy table, and the remote data access class was either SAJDBC or ASEJDBC, then the server would have crashed once the event completed. This problem has now been fixed.

NOTE that there is no problem if the remote data access class is ODBC based.

472777 When the Certificate Creation utility (createcert) prompted for an encryption type, RSA vs ECC, it accepted lowercase 'r' or 'e', but not uppercase 'R' or 'E'. This has been corrected.
472778 Secure-streams startup errors, for example when a bogus certificate identity password was used, would not have prevented the server from starting. The error would only have been detected on the first synchronization. This may have resulted in a server crash, depending on the error. This has been fixed.
472829 If an application executes a Java stored procedure, and then the server crashed (for an unrelated reasons) while the Java method was still executing, there was a chance the JVM will not have shut down cleanly. This problem has now been fixed.
472920 A mobile webservices client application could have failed with a NullReferenceException when processing a SOAP response that contained elements described as <any> in the WSDL description. This has been fixed.

Note: this problem occurs when processing <row> elements contained within <SimpleDataset> elements in result sets returned by SQL Anywhere SOAP services.

472922 In certain circumstances, a complex statement (large number of query elements) could have caused the server to crash. This has been fixed.
472928 AS of 10.0.1 build 3341, it was possible to use the Data Source utility (dbdsn) to create DSNs for the iAnywhere Oracle driver DSNs". Although it was possible to install the iAnywhere Oracle driver and not have dbdsn installed. If for example, MobiLink was installed without SQL Anywhere, the iAnywhere Oracle driver would have been install without dbdsn. This has been fixed.
472948 There were two problems related to foreign keys to unique constraints (in this description, 搖nique constraint� is assumed to be a unique constraint other than the primary key). For each problem, assume there is one table (P) with a unique constraint and another table (F) with a foreign key referencing that unique constraint.

The first problem was that updating a row in P that was referenced by F would not have generated the necessary foreign key violation error. This would have lead to rows in F with no corresponding row in P. Note that this wasn抰 a problem when referencing primary keys because primary keys should not be updated in UltraLite.

The second problem occurred when the foreign key from F to P was declared as CHECK ON COMMIT. When a row was deleted from P, temporarily violating RI, but a new row was added before the transaction was committed that kept RI in tact, an error would still have been raised. Since the foreign key was declared as CHECK ON COMMIT, the error should not have occurred.

Both of these problems have been fixed.

472972 Calling the system procedure sa_describe_query() could have caused the server to crash. This has now been fixed.
473062 The server would have crashed if an invalid reference was made to a function: name..function() (note the two dots). This has been fixed.
473187 The "Server name <name> already in use" message could have contained incorrect characters instead of the name. In rare cases, this could have caused the server to crash on startup if the server name was in use. This has now been fixed.
473203 When using the iAnywhere Solutions 10 - Oracle ODBC driver to fetch data by calling SQLGetData(), the data could have been truncated, if the column was not a BLOB column, and the buffer size passed into SQLGetData was less than the actual data length. This problem is now fixed.
473206 On UNIX platforms, linking applications directly against the iAnywhere ODBC driver without using a driver manager is supported. When an application was linked in this way, the FileDSN connection parameter would have been ignored by the ODBC driver. This has been fixed.

As a workaround, a driver manager such, as unixODBC, can be installed, or the ODBCINI environment variable can be set to point to the DSN file in question. The second work around would require the FileDSN parameter to be changed to DSN.

473431 For certain types of queries, it was possible for the statement to fail with the non-fatal assertion failure 106105-"Unexpected expression type dfe_PlaceHolder while compiling". If this happened, the statement was failed but the server would continue processing further requests.

For example, the following statement could have exhibited this behaviour:

SELECT row_num

FROM rowgenerator R2

WHERE

( SELECT sum( 1 )

FROM sys.dummy D1

WHERE D1.dummy_col = R2.row_num

) >= 0

This has been fixed.

473449 Database file space allocated for long varchar or long binary columns was not properly reclaimed on deletion of the row in some cases. As a result, the database file could have grown unexpectedly. This has been fixed. Applying this fix will prevent further unnecessary growth but not reclaim the lost space within the database file. To reclaim space, the database file must be recreated.
473461 Simple DELETE and UPDATE statements that bypass the optimizer could have caused the server to crash when they were executed a second time after rstarting the database. This would have occurred if the trigger used a row limit (TOP n , FIRST,...), or the Transact SQL option rowcount was set to a non-zero value. This has been fixed.
473528 A long running Listener utility dblsn.exe may have crashed when persistent connections were used. This has been fixed.
473550 A query with predicates in the WHERE clause of the form "column < constant OR column > constant", would have returned rows with column = constant. This only occurred if "column < constant" predicate appeared before the OR and "column > constant" predicate was after it. The predicate optimizer did not recognize that the two conditions were disjoint and replaced them with "column is not null". This has been corrected.
473559 The server could have failed to recover a database, with assertion failures 200502, 201417 or 201418 likely in this situation. This was most likely to have occurred when the server was running on a Windows CE device, and the device was reset while the server was active. Databases using checksums or encryption may be more prone to seeing this problem. While this problem has been fixed, it's still possible to get these assertions where there is something wrong with the database.
473562 It was possible, although rare, for a call to the system procedure sa_locks() to have caused the server to crash. This crash was most likely to have occurred when many users were connecting, and/or disconnecting, while sa_locks() was being called. This issue has been fixed.
473621 Attempting to autostart a server with no license file installed, would have failed with the error "Unable to start specified database: failure code 1." The license file has the same name as the server executable, with a .lic extension. This has been fixed so that the more descriptive error "Unable to start database server: missing license file" is now given in this case.
473622 Re-executing the exact same "FORWARD TO" statement multiple times on the same connection could have failed with various errors. FORWARD TO statements were incorrectly being cached, but they must be prepared each time they are executed. This has been fixed by no longer caching FORWARD TO statements.

A workaround is to disable client statement caching for the connection by setting the max_client_statements_cached temporary option to 0.

473623 If two or more database mirroring servers running on Windows were started at the same time, they could have failed to communicate properly. In this situation, the last message displayed in the server console would have been "determining mirror role ...". The servers would not have accepted connections, and could not have been shut down. This has been fixed.
473699 Queries containing derived tables, or views which were eliminated during semantic rewriting, may have incorrectly returned syntax errors such as "Column '...' not found" (SQLE_COLUMN_NOT_FOUND, -143, 52003). For this problem to have occurred, the derived tables or views must have had at least a subselect or a subquery. This has now been fixed.

Example:

The derived table T4 contains a subselect "( select dummy_col from sys.dummy T2 where 1 = T3.row_num ) as c1". T4 is redundant in this query and it is eliminated by the outer join elimination process. The query Q1 is equivalent to " SELECT DISTINCT T1.dummy_col FROM sys.dummy T1 "

Q1:

SELECT DISTINCT T1.dummy_col

FROM

sys.dummy T1

left outer join

( select row_num c0,

( select dummy_col from sys.dummy T2 where 1 = T3.row_num ) as c1

from dbo.rowgenerator T3

) T4

on 1=1

473724 When both the graphical and non-graphical Dbmlsync Integration Components (ActiveX components) were unregistered, they left the following key in the registry:

HKEY_CLASSES_ROOT\TypeLib\{A385EA65-7B23-4DC3-A444-2E759FF30B14}

This key is now removed when both components have been unregistered.

473827 The server could have failed during database recovery with assertion failures 202101 - "Invalid Bitmap Links on Page ..." or 202100 "Invalid bitmap page at page ... -- transaction rolled back" under some circumstances where it was not warranted. This has been fixed.
473831 A watch for the variable SQLCODE did not evaluate correctly. This has been fixed.
473833 If an ODBC application bound a procedure's INOUT parameter as input-only, a communication error may have occurred. Calling SQLBindParameter( ..., SQL_PARAM_INPUT, SQL_C_WCHAR,... ) would bind an input-only parameter. This has been fixed.
473834 If a statement contained a user-defined function that had an argument that was a subquery, and the statement contained a union view with a predicate comparing a column of the union view to the user-defined function, then the statement could have failed with an inappropriate error. For example, the following sequence would generate this inappropriate error.

create view V_shubshub( x ) as

select dummy_col from sys.dummy D3

union all

select dummy_col from sys.dummy D4

go

create temporary function F_tt(in a1 smallint)

returns decimal(16,5)

begin

return 0.0

end

go

SELECT *

FROM

(

select F_tt( ( select dummy_col from sys.dummy D1 ) ) x

from sys.dummy D2

) AS T1

WHERE NOT EXISTS(

SELECT 1

FROM V_shubshub T2

WHERE T1.x=T2.x

)

In version 8.0, the following error was returned:

-266 42W27 "QOG_BUILDEXPR: could not build sub-select"

in version 9.0 and later, the following error was given:

"Run time SQL error -- *** ERROR *** Assertion failed: 102604 (...) Error building sub-select"

In versions prior to 8.0, it was possible for an incorrect answer to be returned without an error being returned.

This has been fixed.

473835 The HTTP server can now disable connections using SSLv2. The database server command line option -xs now supports the SSLv2 parameter whose values can be YES or NO. SSLv2 defaults to YES, but can be set to NO to disallow HTTPS connections using SSL version 2.0. For example,

dbeng10 web.db -xs HTTPS(SSLv2=N)

473860 If a synchronization model was deployed with HTTPS or TLS as the stream type, the generated batch file for starting the MobiLink server could have given an "Unable to convert the string <string> to a numeric value" error, because the stream parameters were incorrectly separated by commas instead of semi colons. This has been fixed.

A workaround is to edit the generated batch file to use semicolons instead of comma for the stream parameters by changing this line:

set STREAM="%STREAM_TYPE%(port=%PORT%,tls_type=%TLS_TYPE%,fips=%FIPS%,certificate=%CERTIFICATE%)"

to the following:

set STREAM="%STREAM_TYPE%(port=%PORT%;tls_type=%TLS_TYPE%;fips=%FIPS%;certificate=%CERTIFICATE%)"

473990 If a statement contained a derived table or view that specified DISTINCT and that derived table appeared on the NULL-supplying side of an outer join and further the query optimizer selected the Ordered Distinct algorithm for that derived table, then the statement could have failed with an assertion failure:

Assertion failed: 106105 (...) Unexpected expression type dfe_PlaceHolder while compiling

For example, the following statement could have this problem:

SELECT *

FROM

dbo.rowgenerator T1

LEFT JOIN

(

SELECT dummy_col c1

FROM sys.dummy T2

UNION ALL

SELECT 12345 c1

FROM ( select distinct id from sales_order_items order by id asc ) T3

) T4

ON 1=1

WHERE T1.row_num < 10

This has been fixed.

474181 If the SQL Anywhere engine/server was shutdown by means of a SIGINT, SIGHUP, SIGQUIT or SIGTERM then no reason for the shutdown would have been recorded in the server log. This has been fixed -- an appropriate message will now be output to the server log.
474282 When a DataGrid object was filled with columns that contained more than 32K bytes, an error could have been returned by the SQL Anywhere OLE DB provider. This problem has been fixed.
474289 If an application maked use of external function calls, the server may have crashed if the application disconnected while a call to an external function was being executed; or if enough connections called external functions such that the server's worker thread limit was exceeded and a deadlock condition arose. This problem has been fixed. When a deadlock condition arises, the error "All threads are blocked" will result for one or more connections executing an external function call. To avoid this error, the server option -gn can be used to increase the number of worker threads.

When a client disconnects during execution of an external function call, the server will no longer crash.

474305 If both the 64-bit and 32-bit SQL Anywhere client software were installed on the same system, and an application attempted to use the iAnywhere JDBC driver, it was possible that the driver would have failed with an UnsatisfiedLinkError exception. This problem could only have occurred if a 32-bit Java VM was being used and the 64-bit SQL Anywhere libraries appeared first in the path, or a 64-bit Java VM was being used and the 32-bit SQL Anywhere libraries appear first in the path, and the SQL Anywhere installation path has at least one space in it. In particular, if there was no space in the installation path, then the bitness of the VM, and the order of the libraries in the path, did not matter and should not have caused any UnsatisfiedLinkError exceptions. This particular problem has now been fixed.
474312 An existing dbdata10.dll in an application's folder would still have been loaded by the .NET Common Language Runtime. This problem has been fixed.
474314 Using or accessing a procedure or function that had been marked as hidden could have caused the server to hang. This would only have happened if the length of the obfuscated text was near, or larger than, a database pagesize. This has been fixed.
474324 If a stored procedure contained a cursor declaration for a call to an internal stored procedure (e.g. sa_locks, sa_rowgenerator), then calling the procedure would have resulted in the error "Invalid prepared statement type". This has been fixed.
474480 If a database contained a table with a table ID larger than 65535, calling the system procedure sa_locks() may have caused the server to crash. This crash would only have occurred if there was a lock held on a table with a table ID larger than 65535. The contents of SYS.SYSTABLE can be examined to determine if any such tables exist. This issue has been fixed.
474496 When editing a cell in the "Table Mappings" table, if a corresponding tab existed in the lower details pane, the appropriate tab would have be selected. For example, if a table mapping's Download Type changes, the Download Type tab would have been selected in the lower details pane.

Also, if a row was selected in the "Table Mappings" table that had a non-empty status column, the Status tab would have been selected.

These problems have been fixed.

474596 The 10.0.1 Maintenance Release and subsequent EBFs did not correctly update the ADO.NET Data Provider. This has been fixed so that the provider is now updated.

The following steps are a work around:

- From the Control Panel launch the Add or Remove Programs application.

- In the SQL Anywhere 10 item click the Change button.

- In the maintenance Welcome dialog select the Modify option.

- In the Select Features dialog deselect the ADO.NET Data Provider feature and proceed with installation maintenance (this will uninstall the feature).

- Repeat the above, but this time select the ADO.NET Data Provider and proceed with installation maintenance (this will reinstall the correct version of the feature).

474597 The result set of SYS.SYSINDEXES was modified to include primary and foreign key indexes in version 10 of SQL Anywhere. However, these indexes were not distinguished from other indexes. The view definition has been changed so that these indexes are identified by "Primary Key" and "Foreign Key", respectively, by the indextype field.
474599 If the database option Ansi_close_cursors_on_rollback was set to 'on', and a cursor was opened on a stored procedure containing a declared cursor, a ROLLBACK could have put the connection into a state where attempting to open additional cursors would have failed with the message: "Resource governor for 'cursors' exceeded". The ROLLBACK caused the cursors to be closed in an order that resulted in the server trying to close a cursor twice. This has now been fixed.
474606 When using the OLE DB provider, a crash could have occurred when disconnecting from a datasource. This problem has been fixed.
474617 The certificate utilities createcert.exe and viewcert.exe as well as dbcecc10.dll were missing version info. This has been fixed.
474631 In the Windows Explorer, the files mlrsa_tls10.dll, mlrsa_tls_fips10.dll and mlecc_tls10.dll would have appeared versionless when their properties were inspected. This has been corrected.
474633 If the definition of a computed column included a reference to another table column defined as NOT NULL, and an INSERT or UPDATE statement set the NOT NULL column to NULL, then the computed column could have been evaluated to an inconsistent result.

For example:

create table T( x int not null, y int null compute( if x is null then 123 else x endif ) )

go

CREATE TRIGGER "ChangeX" BEFORE INSERT, UPDATE ON T

REFERENCING NEW AS new_row

FOR EACH ROW

BEGIN

message string('Trigger: ',new_row.x,',',new_row.y);

if new_row.x is null then

SET new_row.x = 4;

end if;

END

go

insert into T(x) values( NULL )

After the above insert, T contains one row (4,NULL). The result for y is inconsistent with the definition of the computed column.

The following non-fatal assertion failures could be reported in this case:

Assertion failure 106900 Expression value unexpectedly NULL in read

or

Assertion failure 106901 Expression value unexpectedly NULL in write

This has been fixed. An attempt to put a NULL value into a column declared NOT NULL that is used in a computed column will result in an error message:

23502 -195 "Column '%1' in table '%2' cannot be NULL"

This checking is performed before triggers fire, and this represents an intentional change in behaviour.

474715 The server only supports compressed database files up to a size of 4GB. If dbshrink

or the CREATE COMPRESSED DATABASE statement tried to create a compressed db file larger

than 4GB then the resulting file would have been corrupted. This has been fixed so that the server now returns the error "Database creation failed" if the resulting file would be larger than 4GB.

474724 When attempting to process transaction logs from an older version of ASA, (such as with the Translation utility or SQL Remote), there was a chance that it would have failed prior to processing the full log, with any number of odd error messages. This problem has now been fixed.
474726 If a query contained INTERSECT ALL or EXCEPT ALL and one of the branches of the query expression was optimized by un-nesting an EXISTS predicate, then the wrong answer could have been given. The INTERSECT ALL would have been incorrectly treated as INTERSECT, and the EXCEPT ALL as EXCEPT.

For example, the following query shows this problem:

select D0.type_id

from sys.sysdomain D0

intersect all

select D1.type_id

from sys.sysdomain D1

where exists ( select * from sys.sysdomain D2 where D2.type_id = D1.type_id )

This has been fixed.

474737 Queries containing a predicate using a view column which was a complex expression (e.g., it contained a subselect) may have caused the server to fail an assertion. Although this would likely have been rare, it has been fixed.

For example:

SELECT *

FROM

( SELECT DISTINCT DT1c2

FROM ( SELECT (select dummy_col from sys.dummy D3 ) as alias1,

( select row_num from dbo.rowgenerator R4 where row_num-1 = alias1 )

FROM dbo.rowgenerator R5

) DT1( DT1c1, DT1c2 )

) DT2

WHERE EXISTS(

SELECT 1

FROM (

SELECT 1

FROM sys.dummy D0

UNION ALL

SELECT 2

FROM sys.dummy D1

) DT3( "DT3c1")

WHERE DT2.DT1c2 >= DT3.DT3c1 <<<<<------------- DT2.DT1c2 contains the subselect "( select row_num from dbo.rowgenerator R4 where row_num-1 = alias1 )"

)

474753 Queries containing a predicate referencing a subquery may, in rare circumstances, have failed with the message: "Assertion failed: 106105 (...) Unexpected expression type dfe_Quantifier while compiling". This has been fixed.
474873 Synchronizing with a version 8 client, could have caused the MobiLink server to crash. This would have usually happened after a log offset mismatch. This has been fixed.
474883 Connecting to a blank padded database, using either Open Client or jConnect, and then attempting to fetch an NChar value, would likely have caused the application to hang. This problem has now been fixed.

Note that this fetching nvarchar or long NVarChar data from a blank padded database using a TDS client was not affected.

474904 If two or more transactions concurrently attempted to lock a table t in exclusive mode with "lock table t in exclusive mode", the transactions could have deadlocked. This was much more likely to occur on multi-processor systems, and is not likely to be reported by personal servers. This has been fixed.
475008 When using a load balancer that tested the MobiLink server availability by probing the server network port, the server may have shutdown. This shutdown was due to the server believing that it could no longer accept new connections. This has been corrected.
475009 If a web server set the HTTP option CharsetConversion to 'OFF' by calling the system procedure sa_set_http_option(), (eg sa_set_http_option( 'CharsetConversion', 'OFF' ) from a stored procedure, the setting would have been ignored. This has been fixed.
475010 The server may have crashed while debugging a web service procedure from within Sybase Central, if the server was shutdown while paused on a break-point. This has been fixed. In addition, the canceled response will specify a Connection: close and default to non-chunk mode Transfer-Encoding.
475032 Two new parameter values have been added to the system procedure sa_server_option() to aid in locating references to database options in applications: OptionWatchList and OptionWatchAction. OptionWatchList specifies a comma-separated list of database options. OptionWatchAction specifies the action the server should take when an attempt is made to set an option in the list. The possible values for OptionWatchAction are 'message' (default) and 'error'. If OptionWatchAction is set to 'message' and one of the options in the watch list is set, the server will display a message in the server console window:

Option "<option-name>" is on the options watch list

If OptionWatchAction is set to 'error', an attempt to set an option in the watch list will result in an error:

Cannot set database option "<option-name>" because it is on the options watch list

The values of db_property('OptionWatchList') and db_property('OptionWatchAction') can be used to determine the current settings.

Example:

call dbo.sa_server_option('OptionWatchList','automatic_timestamp,float_as_double,tsql_hex_constant')

Note that the size of the string specified for OptionWatchList is limited to 128 bytes (the maximum for the "val" parameter to sa_server_option).

475035 Ct has two request to do about this :

a.) continue developer the DBShrink in ASA 9.x, it means, fix the limitation to handle cbd file over 4 Gb.

b.) Return to include this in ASA 10, in where it was removed.

475038 Preparing the exact same statement before and after executing a SETUSER WITH OPTION statement may have caused the second statement to not respect the option change and behave incorrectly. This has been fixed.
475039 If an application connected using jConnect 6.x, and attempted to query the name of a date or time column using ResultSetMetaData.getColumnTypeName(), then the server would have incorrectly returned null instead of the string "date" or "time" respectively. The server now has support for the new TDS DATE and TIME datatypes, but the jConnect metadata scripts had not been updated to reflect the new support. The script jcatalog.sql has been updated.
475052 Under heavy load, a mirror server could have generated a corrupt transaction log. The mirror server could have failed in several different ways, including failed assertions 100902, 100903, and 100904. This has been fixed.
475131 Under rare circumstances, applications running on Unix systems may have crashed following a disconnect. This was more likely to have occurred on a multi-processor machines. This has now been fixed.
475135 In rare circumstances, a TLS connection that should have failed due to a certificate validation failure, may have actually succeeded. This has been fixed.
475138 Erroneous results could have been obtained for queries with joins containing a derived table with GROUP BY, and a WHERE clause referencing a column from the derived table. This has been corrected.
475228 If a remote table had a wchar column and an attempt was made to create a proxy table to the remote table, but with the wchar column being mapped to a varchar column, then the server would have failed with a datatype not compatible error. While this error was correct, it nevertheless was unexpected given that mapping remote wchar columns to local varchar columns worked in prior versions. Mapping remote wchar columns to local varchar columns is now allowed for backwards compatibility, but not recommended. Wchar columns should instead be mapped to nchar columns, if at all possible.
475259 When the variable "@@rowcount" was selected, the Interactive SQL utility would always have displayed the value "1". This has been corrected so that the actual value is now displayed.
475263 The MobiLink Monitor could have failed with a NegativeArraySizeException. The failure was more likely when under very heavy load. This has now been fixed.
475278 If a table was defined with a char(255) or varchar(255) column, and then BCP IN was used to insert a string of length 251 or greater bytes into the char(255) column, then BCP would either have failed with a protocol error, or, the value NULL would have been inserted into the column. This problem has now been fixed.
475293 A client-side backup (ie using the Backup utility or calling the dbtools function DBBackup) that truncated the log, could have created a backed-up log file that was invalid. When this occurred the logfile would have appeared to be too short; i.e., the end offset of the backed-up log did not match the starting offset of the current log. This problem did not occur when the log was not truncated, or when calling the BACKUP DATABASE statement. This has been fixed.
475297 If a dbspace name contained a period, then the part of the dbspace name before the period was silently ignored by the server. Note that this did not apply if the dbspace name was quoted. This has been fixed so that the server now generates an error when the dbspace name contains a period.
475448 In rare cases, the Extraction utility dbxtract could have generated a reload script with a LOAD TABLE or INPUT statement referencing columns in an order which did not match the order of the columns in the corresponding data file. This has been fixed by adding a missing ORDER BY clause.
475452 If a remote server was defined with a USING string that contained single quotes, the Unload utility would have generated a CREATE SERVER statement that would have failed with a syntax error because the quotes were not doubled. This has been fixed.
475472 In very rare circumstance, an application could have hung in iAnywhere.Data.SQLAnywhere. This problem has been fixed.
475488 Inserting short or highly compressible data into a compressed column (either through INSERT or LOAD TABLE) may have created an excess number of free pages in the database. This has been fixed.
475613 If a database had an alternate server name, and was running on a system that was using LDAP, then the alternate server name would not have been unregistered from LDAP if the database was shut down (but the server is not). This has been fixed.
475618 The changes made for Engineering case 468319 introduced a problem where if many concurrent connections were made to the server, and then disconnected, the server may have taken several additional seconds to shutdown after the databases were shutdown. This has been fixed.
475624 When using a multi-threaded ODBC application with distributed transactions, attempting to enlist a DTC transactions could have failed in some cases. This problem has now been fixed.
475650 Multiple connections using keyset cursors, and executing DELETE WHERE CURRENT OF or UPDATE WHERE CURRENT OF statements on the same table at the same time, could have caused the server to fail assertion 201501. This has been fixed.
475752 If a database involved in synchronization or replication was rebuilt using the Unload utility, the truncation point values stored in the database could have been set to values that would have caused transaction logs to be deleted via the delete_old_logs option, when they ware still required. This has been fixed. A database rebuilt using "dbunload -ar" will now have the resulting database truncation points set to zero. These values will be set more accurately the next time dbremote, dbmlsync, or dbltm is run. If the database is rebuilt manually, the truncation points can be zeroed by running:

dblog -il -ir -is dbname.db

475760 If multiple publications were being synchronized separately, and the MobiLink client (dbmlsync) was running in hover mode, but the SendTriggers extended option for the publications were not all the same, it was possible for dbmlsync to not have synchronized trigger actions when they should have been, or to have synchronized trigger actions when they should not have been. This problem has now been fixed, but introduces a behaviour change. When multiple publications are synchronized in hover mode, if the SendTriggers option changes from one synchronization to the next, a complete rescan of the transaction log is now executed to ensure that the proper SendTriggers option is used. This could result in synchronizations taking longer than before, with the benefit that the data in the synchronization is correct.
475962 Clients connecting via the -xo option were not able to saturate the number of database workers specified by the -w option. This has been corrected so that the number of -xo clients that can concurrently connect is equal to the number of database worker threads.
476067 The CREATE INDEX statement was not respecting the setting of the Blocking option, and would always have failed if another transaction had the table locked (for shared or exclusive access). As of version 10.0, this is more likely to be an issue as the cleaner locks tables temporarily as it does its work. In particular, a reload could have failed with errors of the form "User 'another user' has the table ... locked". This has now been fixed.
476077 The 64 bit versions of mlstop.exe and mluser.exe not included in the 10.0.1 install. This has been corrected.
476080 A primary server in a synchronous mirror configuration, running on a Unix system, could have stopped servicing TCPIP connection packets if number of client connections exceed the number of worker threads (ie. -gn value). Another symptom would have been that existing connections would have been disconnected with liveness timeout errors. This has been fixed.
476095 The MobiLink server could leak memory when synchronizing and using the Listener. This includes using the Notifier alone, or with QAnywhere. This is now fixed.
476112 Erroneous results could have been returned for a query with an inner join and a WHERE clause containing a subquery. This has been corrected.

For example:

SELECT COUNT(*) FROM kb_baseclass INNER JOIN customer ON kb_baseclass=customer

WHERE customer IN (SELECT client FROM contact)

476187 When opening a data reader, prepared statements were dropped and re-created again. This has been fix so that a command can now only open one data reader at any time.
476194 If a binary bitwise operator (i.e. AND, OR, or XOR) was performed on a (signed or unsigned) bigint or a numeric, then the operator would have incorrectly cast both arguments to 32-bit integers. This could have resulted in inappropriate errors being thrown.

For example, the following script generates an overflow error:

create table types_bitwise( e_ubigint unsigned bigint );

select e_ubigint & 12345678901234567890 from types_bitwise;

This problem could also have occurred if the unary bitwise operator NOT were performed on a numeric argument. This issue has been fixed.

476195 Erroneous results could have been returned for a query with both START AT and TOP clauses. This has been corrected.
476211 Queries using a UNION or UNION ALL, that exist within a stored procedure, function, trigger, or event, could have caused server instability (most likely either a crash or a failed assertion). This has been fixed. A workaround is to set the MAX_PLANS_CACHED option to zero.
476347 If a command resulted in an exception, calling the same command again would have caused the exception "Attempted to read or write protected memory".

For example:

SACommand cmd = new SACommand("INSERT INTO t VALUES (1)", conn);

try

{

cmd.ExecuteNonQuery();

}

catch (Exception ex)

{

Console.WriteLine("Insert failed. " + ex.Message + "\n" + ex.StackTrace);

}

try

{

cmd.ExecuteNonQuery();

}

catch (Exception ex)

{

Console.WriteLine("Insert failed. " + ex.Message + "\n" + ex.StackTrace);

}

This problem has been fixed.

476372 Synchronizing more than one database at a time using encryption or compression, could have caused the UltaLite runtime to crash. This has been fixed.
476516 When using the SQL Anywhere OLE DB provider, preparing a statement that called a user-defined function would have resulted in the function's result value being truncated to 0 bytes. This problem has been corrected.

The following is an example:

CREATE FUNCTION foo( IN arg VARCHAR(3) )

RETURNS VARCHAR(10)

DETERMINISTIC

BEGIN

DECLARE retVal VARCHAR(10);

SET retVal = 'RETURNVALU';

RETURN retVal;

END

Dim cmd As New ADODB.Command

cmd.CommandText = "foo"

cmd.CommandType = ADODB.CommandTypeEnum.adCmdStoredProc

cmd.let_ActiveConnection(con)

cmd.Prepared = True

cmd.Parameters.Refresh()

cmd.Parameters(1).Value = "abc"

cmd.Execute()

MsgBox(cmd.Parameters(0).Value)

A work-around is to not prepare the command (ie. cmd.Prepared = False).

476519 The INPUT and OUTPUT statements now allow control of when the byte-order-mark (BOM) is processed. Each statement supports the new clause:

BYTE ORDER MARK { ON | OFF }

The semantics are identical to those used by the server's LOAD TABLE and UNLOAD TABLE statements. If omitted, "ON" is the assumed value. The BYTE ORDER MARK clause is relevant only when reading or writing ASCII formatted files encoded with UTF-8 or UTF-16 (and its variants). Attempts to use the BYTE ORDER MARK clause with FORMAT clauses other than ASCII, or with any other encoding, will result in an error.

476533 The debugger state was not being updated correctly when debugging a connection currently at a breakpoint and then a running connection was chosen from the connections list. This has been fixed.
476544 In rare cases, the server could have crashed executing an ALTER TABLE statement. This would have most likely occurred when removing columns from a table. This has been fixed.
476693 It was not possible touse the INPUT statement to populate a GLOBAL TEMPORARY table that did not preserve rows on commit. The INPUT statement had the unintentional side-effect of committing changes. This has been fixed, INPUT no longer does a COMMIT.
476708 The problem requires the schema of the UltraLite database to have a table with a unique constraint (other than the primary key) and another table referencing that unique constraint with a foreign key. When a delete is downloaded, all rows referencing the deleted row (via a foreign key to the table) should also be deleted to maintain referential integrity. This was working properly; however, a similar scenario existed if an update was downloaded and the foreign key referencing the row did so by referencing a unique constraint instead of the primary key. This has been fixed.
476819 When User Account Control (UAC) is enabled, applications cannot have been registered with the provider for Windows Mobile Device Center (WMDC), either from dbasinst or from the provider itself. The reason for this was that applications are registered in the registry under HKEY_LOCAL_MACHINE, which requires administrator privileges when UAC is enabled. Although dbasinst has been elevated, and can set these registry entries, the provider was not. This has been corrected so that applications are now registered under HKEY_CURRENT_USER instead. However, this means that applications will now only be registered with a specific user, instead of automatically being registered with all users of a particular machine. The first time dbasinst is invoked after the patch has been applied, it will automatically move all registry entries from HKEY_LOCAL_MACHINE to HKEY_CURRENT_USER.
476938 A query with surrounding brackets and a preceding common table expression, would given a syntax error when used in a procedure. This is fixed. The workaround is to remove the brackets.
477150 Setting SAParameter.SADbType could have caused an IndexOutOfRangeException in multi-threading code. This problem has been fixed.
477156 When a large number of clients (more than 2500) had contacted the MobiLink server, with all indicating they wished to receive push notifications, the server would have consumed a large amount of CPU evaluating transmission rules. This has been fixed.

NOTE (for 9.0.2 only): It is also important to run the MobiLink server with the command line option

-sl java ( -Dianywhere.qa.db.upgradeDeliveryColumns=true )

in order to get the most out of this performance improvement. This option causes the MobiLink server to reorganize the QAnywhere message store tables, and add further indexes to these tables, to obtain optimal performance of MobiLink with QAnywhere.

477181 The SQL Anywhere server tries to maintain column statistics so that they reflect modifications being made as a result of data change statements. The server could have incorrectly modified existing column statistics under certain circumstances when executing searched UPDATE statements. The problem was likely to only take place when the new column values were the same as existing values for a large proportion of candidate rows. This has now been corrected. A potential remedy for this incorrect behaviour is to recreate column statistics by using the CREATE STATISTICS statement. Also, the server may eventually remedy the problem itself as a result of query execution feedback.
477194 Executing a REORGANIZE TABLE statement while other connections were also performing DML on the table, could have caused the database server to fail an assertion. Such assertions would have included 100701: "Unable to modify indexes for row referenced in rollback log". The REORGANIZE TABLE statement could have looped infinitely if another connection attempted to drop the table. A failed REORGANIZE TABLE, due to a deadlock or perhaps some other error, could have caused the server to crash. These problems have now been fixed.
477195 The value of a numeric variable could have been rounded incorrectly when used in a statement other than a SELECT statement. The precise conditions under which this problem would have occurred are difficult to describe, but involve the use of the variable as part of a larger expression.

For example, the following batch illustrates the problem. It would have returned 2.0, rather than the correct 2.6:

BEGIN

DECLARE varNumeric NUMERIC;

DECLARE LOCAL TEMPORARY TABLE ltBUG (Dummy NUMERIC);

SET varNumeric = 1.3;

INSERT INTO ltBUG (Dummy) VALUES (ISNULL(varNumeric, 0) + ISNULL(varNumeric, 0));

SELECT * FROM ltBUG;

END;

This issue has been fixed.

477203 When using the Dbmlsync Integration Component (ActiveX) and the Message event was called, the msgID value was set to 0 for some messages that should have had unique identifiers. In particular this was reported for the message "Unable to find log offset ....", although other messages were likely affected as well. The msgID value for these messages would not have been filled in correctly with a unique value. This has now been corrected.
477286 Garbage characters could have appeared in the request-level log on lines containing query plans. This has been fixed.
477290 If logscan polling was disabled (using the -p command line option or the DisablePolling extended option) and a progress offset mismatch occurred, then the MobiLink client would have sent a new upload using the remote progress value. If the remote progress was greater than the consolidated progress, then this could have resulted in data loss, as operations on the remote could have been lost. If the remote progress was less than the consolidated progress, this could have resulted in server side errors applying the upload, as the same operation might have been uploaded more than once. This problem is now fixed. When a progress mismatch occurs a new upload will be sent from the consolidated progress unless the -r, -ra or -rb options are used.
477294 There was a security issue with logging on the QAnywhere client during initialization. This has been fixed.
477367 When download acknowledgement was enabled, the MobiLink client would have incorrectly failed to send a download ack for a synchronization if a previous synchronization during the same run had encountered a server side download error. As a result the server would report the following error:

Error: Unable to read from the 'tcpip' network connection. Unable to read 2 bytes.

Error: [-10034] No download confirmation from remote database

This problem has been fixed

477370 When attempting to install an EBF on MacOS using the GUI installer, the installer would have prompted for an installation key and subsequently rejected any keys given. This has now been fixed. As a workaround, the command line installer can be used to apply EBFs on MacOS.
477420 The behaviour of setting indicator variables when no rows were fetched was changed in the dblib library from that of previous versions. While the behaviour in this case was considered to be undefined, the behaviour has been reverted back to the original behaviour.
477492 Indexes on materialized views would not have been recreated by an internal rebuild, i.e., dbunload -ar or -an. A workaround is to do a two-stage rebuild; unload the database first to files, and then reload using the reload.sql script. This has been fixed.
477494 Stale materialized views were not used by the optimizer when the option materialized_view_optimization was set to STALE. This has been corrected.

For further information on the option Materialized_view_optimization, please refer to the SQL Anywhere� Server - Database Administration 爉anual.

477505 The Unload utility (dbunload) can be used to unload materialized view data when given the command line options "-d -t <mat_view_name(s)>". The changes for Engineering case 469705 introduced a problem where data for materialized views was also being unloaded to disk during a "normal" unload. This has been fixed.
477526 Applications running on HP-UX and using the iAnywhere ODBC Driver Manager, may have had connection attempts fail if the connection string contained non-ASCII characters. This would have been true for the MobiLink server, Remote Data Access connections and applications using the iAnywhere JDBC driver. This has been fixed.
477617 After running the Windows CE install on a Windows Vista system, immediately choosing to deploy to a Windows CE device would have caused the deployment install to crash with the following error:

An error (-5011: 0x80040706) has occurred while running the setup.

Please make sure you have finished any previous setup and closed other applications.

If the error still occurs, please contact your vendor: Sybase, Inc.

Spawning the CE deployment installer at the end of the CE Desktop install was unstable on Windows Vista. The deployment installer is no longer automatically deployed when installing on Windows Vista, but displays a message that deployment can be done by selecting "Deploy SQL Anywhere for Windows Mobile" from the Start menu.

477637 If the network connection to the primary server (S1) in a database mirroring system was lost, a failover to the mirror server (S2) would have occurred as expected. However, once the network connection was restored, S1 would have reported that its database files were incompatible with the current primary (S2). This has been fixed.
477714 The ALTER TRIGGER SET HIDDEN statement incorrectly removed the table owner from the

create trigger statement stored in the catalog. As a result, the reload of a hidden trigger definition would have caused the SQL error: "Table ... not found", if the DBA user couldnot access the trigger without table owner. This has been fixed.

In order to unload an existing database with this problem, the trigger definition will need to be recreated and then hidden first.

477738 On Unix systems, the certificate utilities viewcert and createcert, were only being installed with ECC components and not with RSA components. Also, libdbcecc10_r.so, the new ECC support library for viewcert and createcert, was never installed at all. This has been fixed. On platforms where the utilities are supported, the EBF installer will now install viewcert and createcert if SQL Anywhere or MobiLink RSA libaries have been previously installed. The library libdbcecc10_r.so will be installed only if SQL Anywhere or MobiLink ECC libraries have been previously installed.
477777 When attempting to insert a value into a string column of a proxy table using a variable, there was a chance the value inserted may have been NULL. This problem only happened if the string column involved the evaluation of an expression (like concatenation). For example, the following should work fine:

create variable v char(128);

set v = 'abc';

insert into proxy_t(char_col) values(v);

whereas, the following had a chance of inserting a NULL, instead of the concatenated value:

create variable v char(128);

set v = 'abc' || 'def';

insert into proxy_t(char_col) values(v);

This problem has now been fixed.

477892 If an application was using the iAnywhere JDBC driver and called ResultSet.getBlob().getBytes() on a char, varchar or binary column that had an empty value in it, then the driver would have incorrectly returned null, instead of returning a 0-length byte [] value. This problem did not occur for empty long varchar or long binary columns. This problem has now been fixed.
477918 In a database mirroring system running in async mode, if a heavy volume of update activity occurred on the primary server for an extended period of time, the mirror server could have crashed as a result of running out of memory. This has been fixed.
477995 Attempting to run an archive backup (ie. BACKUP DATABASE TO ... ) would have caused a server crash if the database being backed up had no transaction log file. This has been fixed.
478018 The certificate utilities createcert and viewcert are now available on Mac OS X. They will be added if RSA components have been previously installed.
478022 Applying Microsoft's XML security patch KB 936181 (MSXML 4.0 dll version 4.20.9848.0) to Windows Vista systems, would have caused the UltraLite Load utility to crash. This problem does not show up on Windows XP. A work around has been implemented to prevent the crash.
478055 The server allows users to create temporary stored procedures that exist for the duration of the connection that creates the procedures. When creating these temporary stored procedures the server disallows the specification of an owner, i.e., temporary procedures are always owned by the user creating them. If a temporary procedure was referenced by ia qualified owner name in a query, the server would have failed to find the temporary procedure. The server now correctly finds qualified temporary procedures. A work around is to refer to temporary procedure by name only.

Once a user had created a temporary procedure, the server would have allowed the creation of another temporary or permanent procedure by the same, resulting in duplicate procedures. The creation of duplicate temporary or permanent procedures is now not permitted. Note that the server already prevents the creation of a duplicate temporary or permanent procedure when the already existing procedure is a permanent one.

478059 The UltraLite engine would have leaked process handles at a rate of one per client process per second. The engine was regularly opening a handle to each client process to determine if they were still running, but these handles were not being closed. These handles are now closed.
478062 On a busy server, it was possible that a failed HTTP connection may have caused the server to crash. This has been fixed.
478064 An HTTP request having multiple empty variables may not have always represented the variable as null, but sometimes as the empty string ''. This has been fixed.
478072 ASA portaldatabase and mobilink services still use jconn2.jar
478076 The path to jconn3.jar should be included in the setenv.bat as CLASSPATH variable
478153 When the MobiLink server was running with QAnywhere messaging enabled and a JMS connector was configured and there is a high volume of JMS traffic between QAnywhere clients and a JMS system, the Java VM running in MobiLink would have used a continuously increasing amount of heap memory and may eventually have reached an out-of-memory condition. This has been fixed.
478160 The UNLOAD SELECT statement allows the INTO clause of the SELECT statement to be specified. However, the INTO clause is not meaningful in the context of the UNLOAD statement, and was being silently ignored. The use of the INTO clause in the UNLOAD SELECT statement will now generate a syntax error.
478161 On UNIX systems, if the primary and mirror servers were both run on the same machine and the environment variable SATMP either pointed to the same location for both, or was unset, the mirror server may have shut down with the error "The alternate server name provided is not unique". This would have occurred if the primary server was killed with the signal SIGKILL, or if it is brought down by an abnormal event, and it did not have a chance to delete temporary files. This has been fixed.
478217 Executing some simple forms of INSERT, UPDATE and DELETE statements could have caused the server to crash when used with particular host variable values. This has been fixed.
478298 When running the Unload utility on a database that was the primary site for a Sybase Replication Server, the REPLICATE ON clause was not being added to the ALTER TABLE and ALTER PROCEDURE statements in the reload.sql file. This has been fixed.
478491 The MobiLink server would have crashed on startup when run on AIX 5.3 TL06 systems. This has now been resolved by having the installer turn off the execute bit on all shared objects on AIX so that the libraries will not be preload into the OS library cache.
478498 The optimizer relies on accurate statistics to generate efficient access plans. Statistics may be obtained from column and index statistics among other sources. Absence of good statistics can cause the optimizer to pick access plans that execute slowly causing complex queries to suffer.

An improvement to the optimizer has been made so that the performance of complex queries with expensive table scans, under cetain circumstances, does not suffer even when good statistics are not available.

478500 The Swedish tailoring of the UCA collation did not conform to the 2005 standards of the Swedish Academy. In that standard, V and W were changed to be considered different characters at the primary level. To support this change a new tailoring has been implemented. To avoid incompatibilities with existing Swedish databases, the new tailoring was implemented as the "phonebook" sorttype variant of the Swedish UCA tailoring. For example:

dbinit -zn UCA(locale=swe;sorttype=phonebook)

478618 A server running a database that had handled more than roughly a billion transactions or snapshot scans in total since the database was created, could have failed assertion 201502 "inconsistent page modification value". A single query may start many snapshot scans, so the problem was much more likely if using snapshot isolation. The problem is now fixed.

After the assertion, there was a very small chance of corruption that may be present even if the server reports a successful recovery. Therefore, validation is recommended. If problems are detected, then they should be handled with normal procedures (e.g. restore to backup, or attempt to salvage using an unload and reload with a server that has the bug fix).

It is possible to check the value of the internal counter involved in the bug by starting a transaction and running the query "select start_sequence_number from sa_transactions()". It is best to upgrade to a fixed server regardless of the value, but a larger value indicates a workload that is more likely to eventually trigger the counter overflow that causes the problem.

478654 A blob column defined with the INLINE or PREFIX specification, with a size that was near the database page size, could have caused the server to crash. This problem would have only occurred if the INLINE or PREFIX specifier was within approximately 50 bytes of the database page size, and string data longer than that amount was inserted into the table. This has now been fixed.
478704 When connecting to a MobiLink server via HTTP or HTTPS, the Monitor sent more HTTP or HTTPS requests than necessary. Excessive flushing caused most requests to be shorter than they should have been. This has been fixed.
478752 Cancelling a database validation could have caused the server to crash. The validation could have been issued from dbvalid, the Sybase Central plugin, or from the VALIDATE DATABASE statement. A crash from this problem would have been relatively rare, as it could only have happened during a relatively small window of opportunity within a validation, but would have been more likely in databases with many indexes per table. This has now been fixed.
478909 After having established a keep-alive connection from a browser request, a shutdown may have caused the server to crash. This is a timing issue that has only been seen when using Firefox. This has been fixed.
478915 The server may have crashed, or failed assertion 101518, if an UPDATE statement contained multiple tables in the table-list, and columns from all the tables were set to the same expression.

For example, in the following update the columns T1.b and T2.c are set to the same expression @val

update T1, T2

set T1.b = @val, T2.c = @val

where T1.a = T2.a

This has been fixed.

478925 When using the UltraLite Unload utility to unload an UltraLite database to SQL Statements, the owner would have been included in the CREATE PUBLICATION statement. The statement would not habe been valid syntax for UltraLite. This has been fixed.
479032 When the UltraLite Synchronization utility's (ulsync) output was redirected to a file, and sync progress messages were requested with -v, those messages would not have been written on some patch levels of Windows Vista. Writes to standard output for the progress messages were being discarded when standard output of the owning executable (ulsync.exe) was not connected to a console. This has been fixed by using a callback function to report messages, rather than writing messages directly to stdout.
479053 For some CPU bound queries, execution times could have been longer with Unix servers than execution times compared to an equivalent Windows server. This has been fixed.
479061 Executing a DROP DATABASE statement could have caused a server crash or failed assertion if the database being dropped needed recovery. This has been corrected.
479086 When importing data into an existing table, the "Preview" table in the Import Wizard would have shown values in BINARY columns as "[B@" followed by up to 8 numbers and letters. The value from the file is now correctly displayed.
479090 When the MobiLink listener (dblsn) used both non-persistent connections (i.e. using -pc- switch explicitly) and confirmation, the notifier may have missed doing some fallback pushes when the listener was in the middle of confirming a previous notification. The problem has been fixed.
479098 When the HTTP server was under heavy load for a long period of time it was possible that it could have transitioned into a state where many contiguous requests were incorrectly rejected with a 503 error; 'Service Temporarily Unavailable'. This has been fixed, HTTP requests are now only rejected in this way when resources such as memory or licensing are unavailable.
479191 When SQL Remote was scanning the active transaction to determine which operations to send, it was possible for the process to have crashed when it had reached the end of the active transaction log. This has been fixed.
479203 The server could have crashed during recovery of a database that had gone down dirty while it was heavily-loaded. This has been fixed. The database file itself was not damaged and using an server with this fix will allow recovery to proceed.
479204 When request logging of plans was enabled, and a procedure that was being used in a query was dropped immediately before the cursor was closed, the server rare circumstances could have crashed. This has been fixed.
479237 The MobiLink server could have exhausted cache memory when multiple version 8.0 or 9.0 MobiLink clients were concurrently synchronizing large numbers of tables. The server could have crashed, or shut down with the message "Unable to allocate memory.". THis has now been fixed.

Increasing the amount of cache memory using the -cm server option is a work around for this problem.

479320 On databases with multi-byte character sets, or when using multi-byte values (such as NCHAR), the string trim functions, trim(), ltrim() and rtrim() may have left blanks or extraneous bytes in the portion of the string that was intended to be trimmed. For this to have occurred, multi-byte characters must have appeared within the string data. This is now fixed.
479327 If an UPDATE statement on a view has more than one table expression in the update clause after view flattening, and the table expression that would have been updated is in the update clause preceded by a non-updatable table expression, then the UPDATE did not change any rows.

Here are two examples:

1) This UPDATE statement has in its update clause first a non-updatable table expression V1 and then the updatable table T1. It does not update column "b" of table T1.

update ( select sum(T2.c) as xxx from DBA.T2 ) as V1( xxx) ,T1

set T1.b = isnull(V1.xxx,0)

where V1.xxx = T1.a and V1.xxx is not null and T1.a is not null

2) This UPDATE has two table expressions V1 and T1 in the update clause after view replacement of V11. If the order of the table expressions in the update clause is like in the example above, the UPDATE does not change any rows.

create view V11 as select T1.b, isnull( V1.xxx, 0 ) as v2_2

from ( select sum(T2.d) as xxx

from T2 ) V1 right outer join T1 on V1.xxx = T1

update V11 set b = v2_2

This problem has been fixed.

479467 Getting the query plan for a statement, using the SQL functions PLAN, EXPLANATION or GRAPHICAL_PLAN, could have caused the server to crashed if the plan for the statement had been cached. This has been fixed.
479560 On RedHat Enterprise 5 systems with kernel versions prior to 2.6.21, if a SQL Anywhere executable crashed, the crash handler would have written a crash log, but it would have failed to write out a minicore dump. This issue has been fixed.
479694 The problems described in Engineering cases 468864 and 478161 (inability to reuse an alternate server name if a server using it terminated abruptly) may still have occurred on Unix operating systems. On Linux systems these problems could still have occurred when the file systems used were other than ext2 and ext3. This has been fixed
479812 If a manifest was installed in a JAR file, and then that JAR file was installed into a database, calling class.getPackage() would always have returned null, even though the package was properly defined in the manifest file. The class loader was reading the manifest file and defining packages via the parent class loader, but was incorrectly assuming that the parent class loader would keep track of the packages and handle the getPackage() call. The SA class loader now keeps track of all defined packages and handles the getPackage() call itself.
479816 Executing a REORGANIZE TABLE could have caused the server to fail assertion 100701 - "Unable to modify indexes for a row referenced in rollback log -- transaction rolled back". This has been fixed.
479825 A number of problems with the UltraLite Database Initialization utility have been fixed.

Default values were being wrapped in parentheses (), for example DEFAULT (0), which lead to sytax errors. Default valuess that start (after skipping white space) with open parentheses "(" and end with close parentheses ")", are now recognized and are automatically stripped.

Specifying the clause DEFAULT getdate(*) also lead to a syntax error. All occurrences of "(*)" in DEFAULT strings are now replaced with "()". Previously, only DEFAULT NEWID(*) was being recognized, this change handles all such functions.

Ulinit was failing to quote table names with leading underscore characters "--".

The now(), current_timestamp(), and getdate() functions in DEFAULT strings are now replaced with the string "current timestamp". This is equivalent in operation and the only syntax that UltraLite supports.

Added quoting to all uses of table names. Specifically the CREATE INDEX and ALTER TABLE ... ADD FOREIGN KEY statements were problematic.

Ulinit was making use of NVARCHAR data types. nut UltraLite does not support this data type.

479829 Errors (like sticky I/O errors) reported while closing the connection would have had incomplete error messages (i.e. I/O failed for '-n/a-'). This has been fixed.
479953 A call to SADataReader.Read() could have caused an exception after calling SADataReader.NextResult(), if the resultset was empty. The SADataReader.Read() method was failing to check the resultset before fetching data. This problem has been fixed.
479959 The SORTKEY & COMPARE system functions did not support legacy ASA collations correctly. The following problems have been fixed.

When the collation specification argument to the SORTKEY or COMPARE functions referred to a valid SQLAnywhere legacy collation, the server would silently use the UCA instead. For example, SORTKEY( 'a', '1252LATIN1' ) would generate the same result as SORTKEY( 'a', 'UCA' ).

A small amount of memory would be leaked any time a connection was disconnected, provided that the connection had used SORTKEY or COMPARE at least once with a collation specification that was non-numeric and was not one of the built-in ASE compatibility labels.

When an invalid collation specification was passed to the COMPARE function, the error message that was generated (INVALID_PARAMETER_W_PARM, error -1090) did not correctly substitute the collation specification.

For example, COMPARE( 'str1', 'str2', 'invalidcollationlabel' ) would generate the message "Function 'compare' has invalid parameter '3' ('str2')". It now generates the message "Function 'compare' has invalid parameter '3' ('invalidcollationlabel')".

479966 The row limitation FIRST or TOP n may have been ignored, and more rows returned, if the select statement had an ORDER BY clause and all rows returned were equal with regard to the ORDER BY clause. This has been fixed.
480055 In some circumstances, backups could have taken longer to complete than expected. This problem would have been noticed only if the total size of the database files was greater than 2GB, and was more likely to be noticed when backing up a very small fraction of that database size (e.g., such as when doing a TRANSACTION LOG ONLY backup with a small transaction log). This has been fixed.
480072 If a database was using a non-UCA collation (such as UTF8BIN) for NCHAR, the server could have produced unexpected results such as different orderings, or result sets, for the same data or corrupt indexes on NCHAR columns containing long strings. In some cases the server may have crashed if the query ran a sorting strategy. This has been fixed, but existing databases must be unloaded and reloaded. A new capability bit has been added so that databases created with the fixed engine cannot be started by servers without the fix.

Applications can determine if a database has the fix by querying the new db_property( 'HasNCHARLegacyCollationFix' ). For servers released prior to this fix, this function will return NULL. For 10.x databases running on a server with this fix, this function will return 'On' if the database was created by an engine with the fix AND uses a legacy NCHAR collation. Otherwise, it returns 'Off'. For databases created after version 10, this function will return 'On'. This approach allows newly-created 10.x databases that use a UCA NCHAR collation to be started with older software.

When the server starts a database that was created by a server released prior to this fix and the database uses a non-UCA NCHAR collation and has at least one table defined to use an NCHAR column, the following warning message will be displayed in the server's message window (the text & url are yet to be finalized):

Warning: database \"%1\" is using an NCHAR collation which for which a fix has been made available. See http://ianywhere.com/developer/product_manuals/sqlanywhere/notes/en/nchar_collation_warning.html

Note that a database created by a server prior to this release could still have problems sorting NCHAR data if NCHAR uses a legacy collation but the warning is only displayed if NCHAR columns exist.

480085 If transaction log files for multiple databases were stored in a single directory, the MobiLink client dbmlsync might not have been able to synchronize any of these databases, even if there were no offline transaction log files for any of these databases. To resolve this, a new command line option has been added to dbmlsync:

-do disable offline logscan (cannot use with -x)

When this new option is used, dbmlsync will not attempt to scan any offline transaction logs. Therefore, dbmlsync with -do should be able to synchronize a database that is stored with all the other databases in a single directory, as long as this database does not have any offline transaction log files. However, if actual offline transaction log files are requested (for instance, if the minimum progress offset is located

in an offline transaction log or if an uncommitted transaction starts from an offline transaction log), dbmlsync with -do will raise an error and refuse to run the synchronization.

480103 The server may have failed assertion 101412, as well as oither assertion errors, if the query contained a GROUP BY clause with a grouping expression of type char or varchar. For this probel to have occurred, the query must also have used an Indexed Group By, or the indexed grouping for a Hash Group By, as a low memory strategy; and during the grouping the group rows had to be updated (e.g. due to the LIST function). This has been fixed.
480108 Tested and reproduced with:

ASA ADO.NET provider that comes with ASIQ 12.7 SDK

ASA ADO.NET provider that comes with ASA 9.0.1, 9.0.2 and 9.0.3 - all providers produce same behavior

Sybase IQ 12.6 ESD9 on Windows and Sun Solaris.

Microsoft Visual Studio 2005

When running stored procedure from within VB application by using ASA ADO.NET Provider, an error "-180 - AsaError:Cursor not open" will happen. In Java ISQL, same procedure works fine.

480125 A database with a corrupt checkpoint log could have grown large during database recovery instead of failing with an assertion error. In some cases the database could have grown so large that a fatal error: disk full could have been caused. This type of corruption in the checkpoint log is now detected and assertion 201864 is raised in such an instance. This type of corruption is likely to be caused by a disk problem.
480204 If an application called the methods ResultSet.getTime(), ResultSet.getDate() or ResultSet.getTimestamp() using a java.util.Calendar object, then the iAnywhere JDBC driver would have returned the wrong result. This problem has now been fixed.
480208 If a proxy table to a table on a Microsoft SQL Server remote server had a long character column, attempting to insert a string longer than 254 characters into that column would very likely have caused SQL Server to have returned a "partial update/insert" warning. This problem has now been fixed.
480211 When one connection was blocking on a WAITFOR statement, all other connections were also blocked until it finishes. This problem has been fixed.
480217 When using UltraLite database for M-Business Anywhere, MIMEList POD may be used to display data from the database in tabular format. The new feature is only intended to use with the MIMEList POD. Please note that it is not supporting the full AGDBSet attributes and methods. The following code snippets show the two ways to bind to the AGDBSet object:

Example 1: Binding UltraLite table to AGDBSet

connection = databaseManager.openConnection( openParms );

agdbSet = connection.getTableAGDBSet( "ULProduct" );

Example 2: Binding UltraLite result set to AGDBSet

statement = connection.prepareStatement( "select prod_id, prod_name, price from ULProduct order by price" );

resultSet = statement.executeQuery();

agdbSet = resultSet.getAGDBSet();

480317 The Server Licensing dblic may have crashed when it was asked to license the server executable instead of the corresponding license file. With the introduction of license files in 10.0.1, dblic now operates on the license file instead of the server executable file, but tries to automatically determine the name of the license file from the executable file name. In this case however the utility crashed while doing this. This has been fixed.
480423 A query that involved more than one Remote Procedure Call in the FROM clause could have caused the server to crash.

An example of such a query is:

SELECT col1

from remote_procedure_1()

where col2 = (select c1 from remote_procedure 2())

This problem has now been fixed.

480434 The iAS ODBC driver for Oracle could have returned numeric data with a comma "," as the decimal point on some international installations if the Oracle database used commas as the decimal point. However, the MobiLink server is able to handle numeric data that uses commas as a decimal point for download, which would have caused it to abort the synchronization. This problem has now been fixed.
480450 The server may have crashed calling an external function using the old-style API, if that function attempted to return an unsupported data type. This has been fixed so that this situation will return the error "Expression has unsupported data type".
480532 The QAnywhere server's logging mechanism was allocating a large amount of additional memory for each new client. This could have caused the Moblink server to run out of memory when working with a large number of clients. This has been fixed.
480547 If a scheduled event was created with a start time that included milliseconds, the event may have fired once, but then not have fired again. This has been fixed. As a workaround, the schedule's start time can be altered to exclude the milliseconds component.
480659 The Interactive SQL utility could have become unresponsive immediately after loading a .SQL file. This problem would have been very rare and timing-dependent, and would more likely have occurred on systems with fast processors. This has been fixed.
480738 Starting with version 10.0, the number of potential plans the optimizer can choose from has increased dramatically due to parallel access plan enumeration, and usage of materialized views. With very complex queries (joins of more than 20 tables), for which the optimizer enumerates parallel plans as well as non-parallel plans, the valid best plan may not have been found before pruning took place. This has been fixed.
480759 When making a call to a QAManager with the DBF and AutoStart connection parameters, the database server would not have been autostarted. Instead, a -101 error "not

connected" would have been logged by the QAManager, but was not reported back to the application. It should be noted that a QAManager will autostart the database server when the Open method is called. The issue was that when the database server was shut down after Open had been called, then subsequent QAManager operations would have failed because the database connection had been terminated, but the error codes returned to the application do not indicate that the connection to the database was bad, thus not allowing the application to Close and Open the QAManager to recover from the error. This has been fixed. If the ErrorCode of a QAException is greater than or equal to 2000, then the error means the same as ErrorCode - 1000, and also that a database connection failure has occurred (ie. SQL Anywhere native code -101). When a database connection error is detected, it is possible to re-Open a QAManager without recreating it and setting its properties and message listeners again. This is done by calling Close() then Open() again. Note that the properties of the QAManager cannot be changed after the first Open() and subsequent Open() calls, and must supply the same acknowledgement mode.

480776 Queries with access plans that did scans of unique indexes, may have returned incorrect results when using snapshot isolation. This has been corrected.
480878 Synchronization of a recreated database could have fail if the remote id was still the same. By default a new database will have a randomly generated UUID for a remote id. This has been fixed.
480895 When registering the performance monitor counters DLL (dbctrs9.dll or dbctrs10.dll) manually from a non-elevated process on Windows Vista (eg, regsvr32 dbctrs10.dll), the performance counters may not have actually been registered correctly, even though regsvr32 reported that the dll was successfully registered. This problem has now been fixed.

Note that the SQLAnywhere installation is performed from an elevated process and will not be affected by this bug.

480937 If an application using the iAnywhere JDBC Driver fetched an unsigned tinyint value in the range of 128 to 255, then the JDBC driver would have incorrectly thrown an overflow exception. This problem has been fixed by having the JDBC driver promote unsigned tinyint values to smallint.
481000 Borland Delphi converts an empty string parameter to a VARIANT type wide string with a NULL data pointer. When Borland Delphi was used with the SQL Anywhere OLE DB provider, this would have resulted in the application crashing. The following code fragment illustrates the situation.

ADOQuery1.SQL[0] := 'select * from Customers where GivenName = :fname';

ADOQuery1.Parameters.ParamByName('fname').Value := '';

ADOQuery1.ExecSQL;

This problem has been fixed. A null pointer passed to the provider for a parameter will now be treated as an empty string when passed to the database server.

481017 When run on Linux systems, the server may have displayed unpredictable behaviour involving scheduled events, mirroring, the request_timeout option, and possibly other functionality in the server that relied on timers at start-up. There was a greater probability of this occurring on multi-processor machines. This has been fixed.
481022 A Java mobile webservices application compiled with JDK 1.5 could have failed with an error at the server saying "'SOAP-ENV' is an undeclared namespace." This has been fixed.

Note that because the mobile webservices runtime (iawsrt.jar) is built with JDK 1.5, Java mobile webservices applications must be compiled with JDK 1.5 and up as well.

481036 If a view's select-statement contained a key join and the same table was referenced multiple times, then attempting to query the view would have failed with a permissions error for users that only had select permission on the view.

For example: A select on the following view may have failed with a permissions error for table T1:

create view V1 as select * from T1 join T2, T1 join T3

This problem has been fixed.

481099 If a server already had a database running, and that database was not the utility database, then attempting to connect to the utility database would have failed for a TDS based connection. This problem has been fixed.
481103 Two new connection options have been added to allow connections to execute requests at different priority levels.

The first option is Priority. This option sets the priority level at which requests from a connection are executed. This option can take one of the following values:

CRITICAL

HIGH

ABOVE NORMAL

NORMAL

BELOW NORMAL

LOW

BACKGROUND

By default, all connections will get a Priority value of NORMAL. Any user can set the Priority option without DBA permission.

The second option is Max_Priority. This option controls the maximum priority level a connection can have. The default value for this option is NORMAL. Connections would needs DBA authority in order to change the Max_Priority option. A connection can always lower its priority level, but cannot raise it higher than the value of Max_Priority. An attempt to do so would raise a permission denied error. The scheduling semantic of the different priority levels allow all requests to get some CPU time despite the priority level of the request. Higher priority request will get more time slices than lower priority ones.

Note, The Background_Priority option is deprecated as of this release. It will still be recognized but will be removed in future releases. Currently, if a users sets the Background_priority option to ON, it will cause requests to execute at the BACKGROUND priority level. When the option is turned back to FALSE, requests will execute at whatever value the option Priority is set to.

481114 The server could have failed to report an I/O error, such as a full disk, when using asynchronous I/O on Linux kernels 2.6.12 and higher. This has been corrected.
481125 If an application was trying to fetch data from a char/varchar column through SQLGetData, and if the buffer size passed to SQLGetData was less than the length of the data that was to be fetched, the iAS ODBC driver for Oracle could have returned the total length of the data minus the length of a NULL terminator to the client in the last call to the SQLGetData function. This may have caused the application to report data truncation errors. This problem has now been fixed.
481139 Renaming a table or view could have caused unpredictable behaviour if other parsed objects, such stored procedures, user-defined functions, or views, refered to the renamed object and parsed forms of these referencing procedures or views were already in server memory. The potential unpredictable behaviour would have included incorrect results, server faults, or server assertions. The server was failing to invalidate in-memory copies of parsed objects on a table or view rename. Now, parsed object definitions are unloaded and reloaded after the RENAME.
481235 The iAnywhere JDBC driver could have incorrectly given conversion errors when fetching numeric data. For the problem to have occurred, the numeric column had to follow a long char or varchar, or a long binary or long varbinary column in the result set. This problem was not likely to have occurred using the SQL Anywhere ODBC driver or the DataDirect ODBC drivers, but could have occurred using the iAywhere Oracle ODBC driver. The problem has now been fixed.
481236 Verification of the MobiLink System Setup would have failed for varchar column length differences on a UTF8 Oracle database when the MobiLink System Setup was installed with nls_length_semantics='CHAR'. This has now been fixed by having the MobiLink System Setup set nls_length_semantics='BYTE' in the current session. Note that existing MobiLink System Tables that were installed with char length semantics will still not pass the check and upgrading will not fix the existing varchar columns.
481254 An UPDATE statement would have updated only one row, even if more rows satisfied the WHERE conditions, if the column in the WHERE clause was indexed.

For example, consider a table with the following schema:

CREATE TABLE Tab1( pk int not null primary key, value varchar(1) not null )

CREATE INDEX val_index ON Tab1( value )

The following statement could possibly update more than one row:

UPDATE Tab1 SET value = 憍� WHERE value = 憏�

However, since there is an index on value, this update would have only updated at most one row. This has been fixed and it will now update all qualifying rows.

481289 Data retrieved into DT_NSTRING embedded SQL host variables were not blank padded for blank padded databases. This has been fixed.
481415 Attempting to use the "-install" option in the Unix install would have resulted in the failure:

Files missing or regkey invalid.

This has now been fixed.

481427 Calling the byte_length() function with a NULL for the parameter would have returned a random value instead of NULL. This has been corrected.
481432 The changes to the UltraLite runtime for Engineering case 480878, caused it to not send the upload progress in the first synchronization, which is what the MobiLink server expects. However, this change also caused the runtime to stopped sending the last download timestamp on the first synchronization as well. This resulted in the MobiLink server using a default timestamp of 0000-01-00 00:00:00.000000, which could be rejected by the consolidated database as an invalid timestamp. This has been fixed so that the runtime now sends the last download timestamp on the first synchronization, but not the upload progress.
481450 On Unix systems, if a client application left TCPip connections open when dblib, or the ODBC driver, was unloaded (for instance, at application shutdown time), the application may have crashed. There was a higher chance of seeing this on multi-processor machines. This has been fixed.
481467 Calling the byte_length() function with an integer value for the parameter, would have returned a value inconsistent with SQL Anywhere server. This has been corrected.
481493 In rare timing dependent cases a Unix application could have hung if prefetch was enabled and only part of a result set was fetched. This has been fixed.
481521 When synchronizing with HTTP or HTTPS, the MobiLink server could have caused too many HTTP request/response cycles. The extra exchanges and extra bytes on the wire would have made synchronizations take longer. This problem was timing-dependent, and its likelyhood was inversely proportional to the round-trip time between the client and server. This has been fixed.
481607 The database file size may have continued to grow, even when it was not expected to. This problem could have occurred any time, but would likely be more noticeable when constantly inserting and deleting the same set of rows (given the conditions outlined below), running without a redo log, or when checkpointing frequently. The main symptom of this problem was that the number of pages allocated to a table's extension arena continues to increase during inserts, deletes or updates when the amount of data in the table remained constant. There were two main ways this problem would have been more readily noticed. First, by running without a transaction log or when checkpointing frequently. In this case, the number of pages in the ISYSTAB extension arena grows. Second, when doing repeated updates, or paired inserts and deletes to a particular set of rows, when the number of overall rows did not increase. For the problem to occur in this case, the rows must have contained any type of CHAR or BINARY value (i.e., VARCHAR, LONG VARCHAR , etc.), and must have values longer than the column's INLINE amount. If the table was truncated or dropped, the extra pages allocated to the extension arena would have been freed up and made available for other uses. This has now been fixed.

Note, when this problem is noticed, rebuilding the affected database with the fix will eliminate the extra pages from the extension arena.

481644 Same machine connections were using communication compression if the COMPRESS connection parameter or -pc server option was specified. This has been fixed so that only remote connections will be compressed.

The sa_conn_compression_info procedure could have reported incorrect compression rates or packet compression rates if more than about two million bytes had been transferred since the server started. This has been fixed as wll. In order to get the fixed sa_conn_compression_info procedure, the ALTER DATABASE UPGRADE PROCEDURE ON statement must be executed (this will also upgrade the database to the current version, if necessary).

481645 After loading a Java class, it is initialized. The class initialization is performed by the connections's Java VM when the class is used for the first time. If two VM's attempt to initialize the same class concurrently, one needs to wait for the other to complete. If the waiting VM was cancelled, then the class was marked as erroneous, with a status of NoClassDefFoundError, and it did not get initialized. Later during this connection the VM may have returned a NoClassDefFoundError exception or, if the connection attempted to access the class, a server crash would have occurred. This has been fixed.
481649 It was possible, although very rare and timing related, for backups to have hung. The backup could hava been been initiated from either the dbbackup utility, or the BACKUP DATABASE statement. When this problem occurred, other requests would have proceeded as normal; however, since a backup prevents checkpoints, any connection that issued a checkpoint would have been blocked. This has now been fixed.
481716 When deploying a sSnchronization Model to an Adaptive Server Enterprise consolidated database, table references in the generated SQL were not prefixed by the database and owner, so deployment would have failed for tables with a different database or owner than those for the connected user. A workaround is to manually edit the SQL file for the consolidated database. This has been fixed so that table references are now prefixed by database and owner for Adaptive Server Enterprise consolidated databases.
481738 If the Interactive SQL utility dbisql used the -onerror command line option when connected to an authenticated server , the connection would not have been authenticated. This would have caused some statements to have failed with authentication errors after the grace period had expired. This has been fixed.
481824 An XML parameter can now be passed to an external function.

CREATE PROCEDURE mystring( IN instr XML )

EXTERNAL NAME 'xmlfunc@xmltools.dll';

XML parameters are passed in the same manner as LONG VARCHAR parameters. XML parameters are available when using the "new" external function call API.

481834 Applying a transaction log to a database using the server command line option -a, could have failed assertion 100902: "Unable to find table definition for table referenced in transaction log -- transaction rolled back". This would have occurred if one log (B) contained all of the operations of the preceding log (A), plus additional operations, and a sequence of modifications to a table T by one connection, which begin in log A and continued into log B, were active when the backup that created log A was performed. This has been fixed. The fix affects the contents of the transaction log at the time a backup is performed; thus, a fixed server does not permit log backups created prior to the fix to be applied.

Note that the problem does not affect backups where a log rename is performed after each backup, since in that case the logs will not contain overlapping sections. The problem can be avoided in version 10 by applying all of the logs at one time using the -ar or -ad options, which will cause the server to skip logs that are included by subsequent logs.

481845 The following fixes have been made to the Listener utility

1) IP tracking was sometimes not firing BEST_IP_CHANGE event when the Listener was run on Windows CE.

2) Engineering case 466446 introduced a problem in the Listener where options following the options -ga or -gi may have been misinterpreted.

3) Asynchronous IP tracking (-ga) was not working on Windows CE devices.

Note, the Listener command line option -ga has been deprecated and asynchronous IP tracking is now implicit. The default of -gi has been changed from 10 seconds to 60 seconds. The polling mechanism now serves only as a backup. Users should not need to use -gi except for trouble shooting.

481891 When similar requests are executed concurrently, there would have be large variations in their response times. This problem would have shown up more on single processor machines. This has been fixed
481893 Referencing a stored procedure in the FROM clause of a query could have incorrectly returned a "permission denied" error. This would have occurred when the following conditions were true:

- the procedure was owned by a user with DBA authority

- the procedure contained a single SELECT statement and no other statements

- permission to execute the procedure was granted to a non-DBA user

- the procedure's SELECT referenced a table for which the procedure owner had not been granted permissions

This has been fixed. A workaround is to add a statement such as "if 1 = 0 then return end if;" to the start of the procedure.

481894 In rare cases, calling a secure web procedure could have caused the server to crash. This has been fixed.
481898 If a Mobilink server with QAnywhere was running on a non-ASA consolidated database and tried to process a message received from a JMS server, a SQL statement could have failed resulting in the message not being properly received by QAnywhere. This has been fixed.
481904 Attempting to call a non-existent procedure using the EXECUTE IMMEDIATE statement and the 'WITH RESULT SET OFF' clause (ie. EXECUTE IMMEDIATE WITH RESULT SET OFF 'call sp_nonexist();'), would have caused the connection to hang. This has been corrected so that an error indicating that the procedure does not exist is now reported.
481905 When the MobiLink client dbmlsync was run against a database created using Turkish settings, it would fail shortly after startup with the message:

SQL statement failed: (-141) Table 'sysarticlecol' not found.

This problem has been fixed.

481922 Backslashes in SQL remote options, such as in:

SET REMOTE "FILE" OPTION "PUBLIC"."Directory" = '\\\\MACHINE\\Folder\\Subfolder';

were not being preserved when the database was unloaded. Given the above option setting, the reload.sql file would have contained:

SET REMOTE "FILE" OPTION "PUBLIC"."Directory" = '\\MACHINE\Folder\Subfolder';

which, on reload, would be incorrectly interpreted as "\MACHINE\Folder\Subfolder", causing SQL Remote to fail. This has been corrected.

481964 The procedure dbo.sa_disk_free_space contained a redundant permissions check, and has been removed. The procedure can now be called if any of the following conditions hold:

- the caller has DBA authority

- the procedure is called from another procedure owned by a user having DBA authority

- execute permission has been granted

To correct the problem in existing databases without rebuilding or upgrading, the call to dbo.sp_checkperms in dbo.sa_disk_free_space can be removed.

481965 When using the following SQLAnywhere options with the reference database:

default_timestamp_increment = 10000

truncate_timestamp_values = 'On'

the UltraLite database produced when running the UltraLite Initialization utility ulinit on this database would have caused problems when synchronizing. MobiLink would have complained about timestamp precision mismatches. Ulinit was not setting the timestamp_increment from the SA default_timestamp_increment value.

The workaround is to set the timestamp_increment setting on the ulinit command line, using

the -o keyword=value option, as follows:

ULINIT <existing options> -o timestamp_increment=1000

481970 The setting of the ASTMP_UMASK environment variable would have been ignored on HP-UX systems. Also, the umask setting was ignored in the creation of the lrm_socket on HP-UX and AIX. These problems have now been fixed.
481976 When creating a new synchronization model for an existing remote database, the column order may not have been correct for upload_fetch or upload_fetch_column_conflict events. This has now been fixed. To fix existing synchronization models (after installing this fix), each synchronizing table must be set to 'Not Synchronized', the model saved, and then set back to their previous synchronization settings.
481994 When using the MobiLink Java DirectRow api, setting or getting data of types Date, Time or Timestamp could have worked incorrectly. When using a ResultSet, the returned value could have been null, When using a PreparedStatement, the value could have been set as null. This has been fixed.
482093 If prior to a database going down dirty, a materialized view was refreshed by a connection with the option isolation_level='snapshot' set, or with SNAPSHOT isolation specified for a REFRESH statement, and the no checkpoint occurred between the REFRESH statement execution and the database going down, the database would have failed to recover. This has now been corrected.
482124 The UltraLite and MobiLink security DLLs/shared objects had entry points that were inconsistent with those used by the SQL Anywhere database server. This has been corrected. The DLLs/shared objects and the binaries that load them, must be at the noted build number or later, or else the DLL/shared object will fail to load and an error (indicating missing/invalid DLL/shared object) will be issued.
482137 The Deployment Wizard did not deploy the utility dbelevate10.exe, that is required for running on Windows Vista. This has been corrected.
482138 The Deployment Wizard would have created an install that did not register the Dbmlsync Integration Component. This has been corrected by having dbmlsynccom.dll and dbmlsynccomg.dll self register when installed.
482373 Any MobiLink utility with a GUI could have crashed when it attempted to display a large message (ie. greater than 28,000 bytes), when the application was running in minimized mode. This problem affects only Windows systems, and was more likely to have occurred if the application was running with the full verbosity enabled (-dl command line option). This has now been corrected.
482379 After applying an EBF for SQL Anywhere Windows systems with Visual Studio 2005 installed, there could have been some garbled characters left at the beginning of the machine.config file for .NET Framework 2.0. This would have caused the SQL Anywhere Explorer for Visual Studio 2005 to not work properly. This has been fixed.
482493 The INTERSECT and EXCEPT set operators were using too much stack during optimization process which may have resulted in very complex queries failing with a stack overflow. The stack usage for these operations has now been significantly reduced.
482520 An upload that contained invalid or corrupt table data could have crashed the MobiLink server. The MobiLink server will now correctly fail the synchronization when it encounters invalid data..
482591 If an application using the iAnywhere JDBC driver had multiple threads trying to create connections, or create statements/prepared statements/callable statements at the same time, then there was a chance the JDBC driver could have crashed. The crashes were actually in the Java VM, and work arounds have now been implemented.
482593 If a query contained a subquery that used a hash filter predicate, such as hash(T.x) in hashmap(R.y), then it was possible for the hash filter to inappropriately reject rows that ought to be accepted resulting in an invalid result set. This has been fixed.
482612 Executing a very complex query could have caused the server to crash due to a stack overflow. This has been fixed.
482615 An unexpected SQL error may have been received when creating views over columns with character length semantics. This could have occurred with NVARCHAR or CHAR length VARCHAR colums when using a database with a multi-byte character set.

For example:

CREATE TABLE test(col NVARCHAR(8191));

CREATE VIEW test_view AS SELECT col from test;

or, the following, when issued on a UTF-8 database:

CREATE TABLE test(col VARCHAR(8191 CHAR));

CREATE VIEW test_view AS SELECT col from test;

would have failed with SQL error CHAR_FIELD_SIZE_EXCEEDED (-1093): "The size of the character column, variable, or value data type exceeds 32767". This has been fixed.

482640 The Interactive SQL utility dbisql may not have displayed multiple result sets when connected with the iAnywhere JDBC driver (which is the default). This has been fixed.
482703 The installed version of the MobiLink system setup could not have been found by the Sybase Central MobiLink Plug-in for Microsoft SQL Server when the default_schema was different than the connected user. This has been fixed so that when checking schema with a Microsoft SQL Server consolidated database, the default_schema is now used.

Note, a work around is to make the current user the owner of the MobiLink system setup.

482717 If the database option tsql_variables was set to ON (as it would be for OpenClient connections), executing a CREATE DOMAIN statement containing identifiers beginning with @ would have created the domain incorrectly. This would have resulted in the error "not enough values for host variables" on a subsequent operation on a table containing a column defined using the domain. Also, executing a CREATE TRIGGER statement with an identifier beginning with @ prior to the body of the trigger would result in a syntax error. Both of these problems have been fixed.
482741 If a QAnywhere Server Management Request was used to cancel messages in a Server Store, messages were cancelled even after they had already been downloaded to the message recipient. This could cause consistency problems in the server store and possibly disable message transmissions on the receipient device. This has been fixed.
482742 QAnywhere documentation lists IAS_TEXT_CONTENT and IAS_BINARY_CONTENT as constants a that can be used to refer to the two different message content types in selector, transmission, and delete rules. However, the QAnywhere server was recognizing the constants IAS_TEXTCONTENT and IAS_BINARYCONTENT instead. This would have caused rules using the documented constants to not work as desired. This has been fixed so that both constant formats are now recognized.
482773 The ODBC driver could have caused a segmentation fault when used on Unix systems with some ODBC Driver Managers (for example, unixODBC) if the DSN existed but the connection failed (for example, it failed to autostart a server). This has been fixed.
482822 An INPUT statement could have failed if it referenced a table owned by the current user and there was also a table with the same name which was owned by a different user, and the owner was not given in the INPUT statement. This has now been fixed.
482832 When the visual form of the Dbmlsync Integration Component was used on Japanese Windows 2000, the font selected for the log window did not support Japanese characters and so these were not rendered correctly. This problem did not occur on Windows XP. This problem has been fixed on Japanese Windows 2000 only, as it does not occur in any other environment.
482833 The return code was not set correctly following an EXIT statement if it was executed from a .SQL file, its argument was not a literal exception, and the "Show multiple result sets" option was ON. That is,

SET TEMPORARY OPTION isql_show_multiple_result_sets='on';

EXIT 123;

worked, but

SET TEMPORARY OPTION isql_show_multiple_result_sets='on';

CREATE VARIABLE retcode INT;

SET retcode = 123;

EXIT retcode;

did not, the return code was always zero. This has been fixed.

482839 When Microsoft's Business Intelligence Development Studio attempted to insert string values into a row using the OLEDB InsertRow() method, it passed in a pointer to the data to be inserted. For string values (DBTYPE_STR), it sometimes did not pass in a length, which caused the SQL Anywhere provider to insert a string of length zero into the corresponding column. This behavior has been changed. Now, for types DBTYPE_STR and DBTYPE_WSTR, the provider will attempt to determine the string's true length when no length is passed in, with the assumption being that the string is null-terminated.
482841 Execution of a LOAD TABLE statement may have performed poorly if it was used on a table containing a column with DEFAULT AUTOINCREMENT. The server was unnecessarily doing a full reverse index scan to determine the new maximum value for the autoincrement column after the LOAD TABLE. This has been fixed.
482851 The provider now supports using named parameters. If all the parameter names are specified, the provider will map them to the parameter values when the command is executed. The order of parameters does not have to be the same as the order of host variables when using named parameters.

For example, using named parameters when calling a procedure:

SACommand cmd = new SACommand( "MyProc", conn );

cmd.CommandType = CommandType.StoredProcedure;

SAParameter p4 = new SAParameter( "p4", SADbType.Integer );

p4.Direction = ParameterDirection.Output;

cmd.Parameters.Add( p4 );

SAParameter p3 = new SAParameter( "p3", SADbType.NChar, 30 );

p3.Direction = ParameterDirection.Output;

cmd.Parameters.Add( p3 );

SAParameter p2 = new SAParameter( "p2", SADbType.Char, 20 );

p2.Direction = ParameterDirection.InputOutput;

p2.Value = "222";

cmd.Parameters.Add( p2 );

SAParameter p1 = new SAParameter( "p1", SADbType.Integer );

p1.Direction = ParameterDirection.Input;

cmd.Parameters.Add( p1 );

cmd.ExecuteNonQuery();

given following procedure definition;

CREATE PROCEDURE MyProc( in p1 int, inout p2 char(20), out p3 nchar(30), out p4 int )

BEGIN

SET p2 = p2 + 'abc';

SET p3 = '333xyz';

SET p4 = p1 * 4;

END

Using named parameters in a query:

SACommand cmd = new SACommand( "UPDATE MyTable SET name = :name WHERE id = :id", conn );

SAParameter p1 = new SAParameter( "id", SADbType.Integer );

p1.Direction = ParameterDirection.Input;

p1.Value = 1;

cmd.Parameters.Add( p1 );

SAParameter p2 = new SAParameter( "name", SADbType.Char, 40 );

p2.Direction = ParameterDirection.Input;

p2.Value = "asdasd";

cmd.Parameters.Add( p2 );

cmd.ExecuteNonQuery();

482931 If corresponding items in two select lists of a INTERSECT or EXCEPT set operator had different data types, the server would have chosen a data type for the corresponding column in the result and automatically converted the columns in each select list appropriately. If the conversion failed, and the server was low on cache memory, then it may returned the assertion 102501 instead of the correct conversion error. This has been fixed.
482952 The server may have crashed when doing extensive console logging (e.g. when -zr all was used). This was more likely to have occurred on multi-processor machines, and has now been fixed.
482958 It was possible, although rare, for the optimizer to select less than optimal access plan for complex queries. This has been fixed.
482977 If a global variable had the same name as a procedure's parameter, statements within the procedure could have executed using the wrong variable. For this to have occurred, no other variable references could occur between the last reference to the global variable and the execution of the statement referencing the local variable in the procedure. This has been fixed. One workaround is to use a different name for the global variable.
483065 The connection property 'CommLink' was not returning 'local' for local TCP/IP connections on some patched Solaris 10 systems. These systems had to have at least two active network interfaces for the problem to occur. This has now been fixed.

A work around is to use the MyIP connection option on the client, and the MyIP TCP/IP option on the server and to make sure that they match.

483072 The SQL Anywhere Deployment wizard would not have deployed the file mlnotif.jar when MobiLink server was selected. This file was missing from the list of files to deploy and has now been added.
483129 Engineering Case 454858 introduced a problem where attempting to execute concurrent LOAD TABLE statements which used the same global temporary table, would have caused one of the statements to have been blocked. This has been fixed so that the loads now run concurrently once again.
483213 The ODBC driver was describing NCHAR and NVARCHAR columns as SQL_WCHAR or SQL_WVARCHAR, with the SQL_DESC_OCTET_LENGTH specified as too small, if the column contained surrogate pairs. Depending on the application, this could have resulted in fetched NCHAR data being truncated. This has been fixed so that NCHAR columns now have a SQL_DESC_OCTET_LENGTH which allows for surrogate pairs.

Note, this problem also affected the iAnywhere JDBC driver, which is used by the Interactive SQL utility dbisql.

483223 The server could have crashed when executing the sa_transactions system procedure. This has been fixed.
483226 The ON EXISTING UPDATE clause of the INSERT statement allows existing rows to be updated based on a primary key look-up. The INSERT statement with this clause uses each input row to either insert the row or update the contents of an existing row. The server fired all applicable INSERT and UPDATE triggers except the statement level UPDATE triggers during the execution of this statement. This has been fixed so that the server will now fire statement level UPDATE triggers as well.
483227 As well as the fixes to correct multi-threaded applications in Engineering case 485568, changes have also been made to thread synchronization to prevent hangs when running on multi-processor machines.
483230 Ping synchronizations from a MobiLink client would have failed if the MobiLink Server had been connected to a consolidated database where the authenticate_parameters event existed. This has now been fixed.
483261 The methods ClearAllPools and ClearPool could have caused an exception if any of the connections in a pool were not opened. This problem has been fixed.
483314 Interactive SQL could have crashed if the menu item for a recently opened file (at the bottom of the "File" menu) was clicked while a statement was currently being executed. This has been fixed.
483316 The .NET provider could have gone into an endless loop, with very high CPU usage, on termination of the application. This has been corrected.
483335 When entering a multi-line rule condition, it would have been saved in a way that caused the line to appear to have been run together when the line was next edited. This has been fixed.
483356 The server could have become deadlocked when a connection attempted to block while updating row. This is more likely to happen when the server is under heavy load. This has now been corrected.
483427 An attempt to stop a MobiLink service using the Service utility dbsvc would have failed with a message like "dbmlstop: No such file or directory". This has been fixed.
483441 In a database mirroring system, if the mirror or arbiter connection strings contained any of the DoBroadcast, TDS, BroadcastListener, LocalOnly, ClientPort, VerifyServerName, LDAP, or DLL TCPIP parameters, that server could have crashed, or failed to connect to the partner or arbiter servers. This has now been fixed.
483452 The IAS Oracle driver requires Oracle's OCI client libraries. If these libraries are not installed properly, the IAS driver would have silently failed to load. The driver will now load,, but will fail when first used by an application. The application can query the failure and will receive an error which indicates the OCI library is missing.
483518 In some cases, requesting a graphical plan for a query could have caused the server to fail with a fatal error: 'A read failed with error code: (38), Reached the end of the file. Fatal error: Unknown device error.' This has been fixed.
483533 If the LOGFILE connection parameter was specified, when connecting to either a personal or network server without specifying a server name, the line "Connected to the default personal server" was logged. This was inaccurate, and possibly confusing. The text of this message has now been changed to "Connected to the default SharedMemory server."
483558 The value of connection_property('TransactionStartTime') would have been an empty string if the only statement executed since the last COMMIT/ROLLBACK was an INSERT ... SELECT. This has been fixed.
483559 The server could have gone into an endless loop, with very high CPU usage, instead of reporting an error when it ran out of free pages in the cache. This has been fixed.
483578 When creating a download using the MobiLink Java direct row API, some actions could haver destabilized the MobiLink server. Setting parameters with incompatible data, or setting columns multiple times with null values that were not nullable, could have caused the MobiLink server to send an invalid row to the synchronization client, or crash. This has been fixed.
483635 If a trigger was created using the Interactive SQL utility with the syntax:

CREATE TRIGGER owner.name ...

then Sybase Central would have displayed the trigger SQL with the trigger's owner replaced by the trigger's name, such as:

ALTER TRIGGER name.name ...

This has been fixed. Now the SQL is displayed correctly as:

ALTER TRIGGER name ...

That is, the owner (which is syntactically valid, but is ignored by the

engine)

is removed from the source.

483636 When modifying a procedure, if one or more comments were typed before, or anywhere within, the ALTER PROCEDURE <owner>.<name> portion of the statement, then these comments would have been lost when the statement was saved to the database. However, the editor would have given no indication that this was the case until the procedure was refreshed, for example, by pressing F5. This has been fixed so that the comments are now automatically relocated to the point immediately following the above portion of the statementL, so that they are preserved with the procedure source. In addition, the SQL editor is automatically updated and a message that the statement has been adjusted is displayed. The above also applies to functions, views, materialized views, triggers and

event handlers.

483655 If an application connected using a TDS based client, and attempted to use a procedure in the FROM clause of a SELECT statement, then the application would have failed with a TDS protocol error. This problem has now been fixed.
483815 If a procedure that referenced proxy tables was used in the FROM clause of a SELECT statement, and the first statement in the procedure is not a SELECT statement, it was very likely that the server would have crashed. The problem may also happen if such a SELECT was used as the subselect in a DML statement. This has now been fixed.
483845 Statements referencing some specific forms of the LIKE predicate could have caused a server crash when the statement was prepared. This has been fixed.
483913 If a procedure, trigger, or view was created using EXECUTE IMMEDIATE, or via Sybase Central, a trailing semi-colon included at the end of the definition may not have been stripped out of the preserved source for the object, resulting in problems when the database was unloaded and reloaded. This has been fixed. Re-creating the object without specifying a trailing semi-colon will correct the problem.
483960 In very rare circumstances, the server may have crashed if a fatal assertion was encountered during a backup. This has been fixed.
483967 An OUTPUT...FORMAT FIXED statment, that did not include explicit column widths, could have created files that the INPUT statement could not have subsequently read correctly without also including explicit column widths. This would have occurred if the destination table contained a numeric data type (INT, DECIMAL, etc) in any column other than the last one. This has now been fixed.
484003 If a proxy table to a table on a Microsoft SQL Server remote server had a a UUID column, attempting to insert a value generated by newid() into that column would have failed with a syntax error. This problem has now been fixed.
484046 Specific forms of the IN predicate could have caused the server to crash. This has been fixed.
484054 If a statement used the LOCATE() function on a long string, it could have lead to a reduction in concurrent execution of other statements. Further, it could have caused the statement to take a long time to respond to a cancel operation. Similarly, some queries that used a sequential scan with predicates that reject most of the rows in the table, might have taken a long time to respond to a cancel operation. These problems have now been fixed.
484072 Some UPDATE and DELETE statements with aggregate expressions were incorrectly failing with the error "Invalid use of an aggregate function". This has been corrected.
484074 A LIKE condition of the form: "column LIKE constant", could have produced incorrect results when the column was not of type CHAR and occurred as the first column of an index. This has been corrected.
484145 Using a host variable of type nchar, nvarchar or long nvarchar in a query that references proxy tables would likely have caused the server to report a syntax error, rather than execute the query. The server was not handling nchar based host variables correctly. It would at times assume the data was in the database charset instead of utf8 .This problem has now been fixed.
484160 Attempts to revoke connect permission from a user that still had an externlogin mapped, would have failed with a strange foreign key error, after which, logging in as the user that was being dropped would have resulted in the user permissions being messed up. The server now properly gives an error indicating the externlogins are still mapped for the user and leaves the user permissions unchanged.
484178 Reloading histograms into a database using a 64-bit server may have failed if the database has been run previously with a 32-bit server. This has been fixed.
484194 When the server was run on HP-UX 11.00, HTTP connections may not have shut down cleanly, and the server may have hung on shutdown. The cause was a bug in the operating system.

While there is no fix to ASA software, customers are advised to apply the HP-UX 11.00 patch PHNE_27886 or later (and all dependencies).

484196 On Unix systems, transfers of large blobs to the server over TCP/IP may have been slower than expected. This would have been especially noticeable on 1 Gbps networks. This has been fixed.
484256 Attempting to execute a query with an invalid dotted reference involving proxy tables, would very likely have caused a server crash.

For example:

select prod_id.sum(sales) from sales group by prod_id order by prod_id

This query was intended to be "select prod_id, sum(sales) ..." but a typo replaced a comma with a period. If the table prod_id was a remote table, then the above mistyped query would have crashed the server. This problem has now been fixed.

484262 In very rare circumstances, the server may have issued a fatal checksum assertion for database page 0 while in the process of doing a backup. This has been fixed.
484266 The QAnywhere Agent and MobiLink Listener could have crashed when started with the "@file" command line option, if "file" did not exist. This has been fixed.
484269 When run on Unix systems, the server could have exhibited poor disk I/O performance on mult-spindle disk systems. This has been fixed.
484272 The QATransactionalManager class would have failed to re-receive a message with large content (exceeding MAX_IN_MEMORY_MESSAGE_SIZE in size) after it was received once and a rollback was done. This problem applied to the C#, Java and C++ QATransactionalManager classes. This has now been fixed.
484274 Attempting to execute a query using a window function with a PARTITION BY clause, that consisted of nothing but constants or variables, could have crashed the server.

For example:

create variable v int;

select sum(x) over ( partition by v ) from t

This has beenfixed.

484281 When sending an attachment over SMTP using xp_sendmail(), there would have been an extraneous zero length file with the same name sent along with the real file attachment. This has been fixed.
484293 When using the QAnywhere Client SQL API to receive messages, they would not have been synchronized back to the originator. This caused the messages to remain in the "Pending" state indefinitally on the originating client, and on the server. This has now been fixed.
484295 If a synchronization model was used to create timestamp-based downloads with an Oracle consolidated database, and the MobiLink server used a different timezone than the consolidated database, then some data might not have been downloaded. The problem was that the trigger generated to maintain the last-modified time used CURRENT_TIMESTAMP, which uses the client's timezone. This has been fixed so that the generated triggers now use SYSTIMESTAMP (which uses the consolidated database's time zone.) A workaround is to manually change the trigger, either in a generated SQL file or deployed in an Oracle consolidated database.
484359 If a user was using the QAnywhere SQL API to receive messages asynchronously with the ml_qa_listen_queue procedure, and another user using the same message store sent a message to this queue (ie. local messaging), the message would not have been received.

This has been fixed.

484368 When attempting to unload and then reload a database created with an older build, using a more recent build, if the database had Remote Data Access servers defined, then there was a chance the reload could have failed with the error: "Server capability name 'encrypt' could not be found in the SYS.SYSCAPABILITYNAME table". This problem has now been fixed.
484452 It was possible for UltraLite to allow duplicate entries into unique key indexes, or it could have incorrectly reported a duplicate entry in a unique key. For this to have occurred, a table would need to have been left open while many hundreds of updates were happening to the same row, as well as many other inserts and deletes needed to occur to other tables concurrently. This is now fixed.
484456 When running on VMWare, the SQL Anywhere server may have crashed on start-up. There isn't a risk of database corruption. This was due to the server determining that the number of CPUs available was 0. This has been fixed.
484461 If both servers involved in a mirroring system have registered themselves with an LDAP server, the mirror server may not have successfully taken ownership of the database if the primary server failed. The transfer of ownership will succeed though, if the primary server is properly shut down; the problem only occurs if the primary server fails and does not shut down successfully. This has been fixed.
484487 On Solaris 10 systems, calling the system procedure xp_cmdshell() may have failed if the server's cache was large. This has been fixed. This problem still affects Solaris systems running version 8 and 9; as the problem arises from the implementation of the fork system call and cannot be worked around safely on Solaris versions 8 and 9. A more complete expalanation can be found at: http://developers.sun.com/solaris/articles/subprocess/subprocess.html.
484542 If a connection made DML requests against a JDBC class (ASAJDBC or ASEJDBC) remote server, and the disconnect performed an implicit rollback, then a small amount of the server's cache was not freed. This has been fixed.
484543 If a connection used a ASAJDBC or ASEJDBC remote server, and only performed CREATE TABLE AT statements against this remote server, then a small amount of the server's cache would not have been freed during the disconnect for this connection. This has been fixed.
484605 Under heavy load, and while another connection was executing DDL statements, calls to a user-defined function could have resulted in a server crash. This has been fixed.
484679 The server could have crashed, or failed an assertion, when reloading a procedure. This could only have happened if another connection was unloading the procedure almost simultaneously. This has now been fixed.
484698 The index density calculation could have been incorrect in certain cases. This has now been corrected.
484704 On Linux IA64 systems, "unaligned access" messages may have appeared in the system log while the server was running. The problem that caused these messages has been fixed. The message itself can be considered harmless in this instance, and server operation was not affected.
484798 A query using a window function with a RANGE on a date column could have returned a conversion error. This has been fixed.
484881 When syncronizing a timestamp value in an UL database running on the desktop against an ASE server via Mobilink, the syncronization fails with an Error showed in the ML log:

Error: Invalid datetime format.

484889 Attempting to unload an UltraLite database while selecting a long list of tables to unload, would have caused Sybase Central to crash. This has been fixed.
484960 When any of the components in SQL Anywhere were converting a string from one character set to another, it was possible for the translated string to have been truncated in rare situations. For the problem to have occured, a multibyte character set other than UTF-8 was typically involved. The problem has now been fixed.
484964 The command line option that represents a memory value, used by all the database tools including dbmlsync, dbremote, dbltm and the MobiLink Server, was not recognizing "g" and "G" as valid characters for a gigabyte of memory. This code is not used by the database server. This has been fixed, so that "1G" or "1g" can now be specify as a valid memory value. As a workaround, "1024M" can be used to represent a gigabyte of memory.
484966 After connecting to a database containing a unique foreign key, selecting the Indexes folder in the tree would have displayed the error "The values <xxx> cannot fit into a byte" where <xxx> = 129 or 130. This has been fixed.
484980 The number of rows returned by a partial index scan of an unique index should be at most one row, if all the columns of the index are used in an equijoin predicate. This number was not being set correctly. This has been fixed.
484981 If REORGANIZE TABLE was executed in one connection, while simultaneously dropping the primary key or clustered index on the same table in another connection, the server could have crashed. This has been fixed.
484984 If an application connected using an older version of either Open Client or jConnect, and then called the system procedure sa_conn_info, there was a chance the client would have crashed. Column names longer than 30 characters are a problem for older TDS clients. The problem has been fixed by properly aliasing the column names in the sa_conn_info select statement.
485004 A constant at the start of an aggregate selection could have caused erroneous results. An example would be:

SELECT 999, count(*) FROM TABLE

where the incorrect result was a row for each row in the table, instead of a single row. Constants were not being marked as aggregates when they occurred in aggregate selections. This has been fixed.

485054 The optimizer attempts to use an existing index for queries involving the MIN or MAX aggregate function. The cost of this optimization was incorrectly overestimated for subqueries which could have been evaluated as derived tables, so it was possible that the

subquery's best plan did not have the RowLimit operator, which may have resulted in the choice of a poor performing plan. This has been fixed.

For example, the query:

select * from R where R.X = (select max(R.X) from R )

would have had the cost of the plan "R<idx_x>:[ RL [ R<idx_x> ]]" overestimated by the optimizer. Hence, it was more likely to use "R<seq> JH [GrH [ R<seq>]]" as the best plan, which computed the subquery as a derived table. This plan may have been inefficient for queries where the table R was very large.

Q:

select * from R where R.X = (select max(R.X) from R )

485073 Attempting to createg a proxy table may have caused the server to hang. Restarting the server and running the create again would likely not reproduce the hang. This problem has now been fixed.
485160 If a connection had snapshot isolation enabled, and a non-snapshot transaction was in progress, when a second connection with a snapshot or non-snapshot transaction commited or rolled back without any outstanding snapshot transactions having been started before the transaction in the first connection, then there was a chance of assertion failure 201501 "Page for requested record not a table page or record not present on page" on subsequent snapshot queries. This has been fixed.
485191 When Snapshot isolation was enabled, pages in the temp file could have been leaked if long running snapshot transactions were used. This is has now been corrected.
485200 When connecting to ASE or Microsoft SQL Server, the Remote Data Access layer was setting the quoted_identifier option to ON at connect time and then always quoting identifiers when querying data from ASE or SQL Server. Unfortunately, due to a restriction in the ASE server, always using quoted identifiers resulted in problems if the column name was 29 or 30 characters in length. Now, when connecting to ASE or SQL Server remote servers, the quoted_identifier option on the remote is set to match the local setting.
485235 If a user-defined event executed a statement that referenced a proxy table while the database was being shutdown, the server may have failed an assertion. This has been fixed so that these statements now return an error.
485242 When using the Dbmlsync Integration Component, an exception could have occurred, or corrupt data could have been retrieved, if the UploadRow event or the DownloadRow event was enabled. For this to have occurred, the handler for the above event must have called the ColumnValue method on the IRowTransfer object more than once with the same index, and the index used must have corresponded to a column containing a string or BLOB value. This problem has now been fixed.

A work around for this problem would be to ensure that the ColumnValue method is not called more than once for a single index by storing the value retrieved by the first call in a variable and working with that value.

485252 In some situations, the server could have crashed when executing a query access plan that was built with parallel scans. This has been fixed.

A workaround for this problem is to set the option Max_query_tasks=1 to avoid all parallel access plans. That change will degrade performance for some queries, but will avoid the crash.

485254 When using the SQL Anywhere debugger to step through a procedure or function, if the current statement was an INSERT, UPDATE or DELETE, it was possible to step into the trigger that would have been fired when the statement executed, but if more than one trigger would have fired, it was not possible to step through to the next trigger if it existed. This has now been corrected.
485262 If the server crashed during application profiling and was then restarted, Sybase Central would have crashed on an attempt to connect to the restarted database. This has been fixed.
485271 For strongly encrypted databases, the statement ATTACH TRACING TO LOCAL DATABASE fails correctly with the SQL error "ATTACH TRACING TO LOCAL DATABASE cannot be used with a strongly encrypted database", but subsequent ATTACH TRACING statements incorrect returned the SQL error "A tracing connection is already active". This has been fixed.
485275 The changes for Engineering case 482379 had the potential to truncate the .NET 2.0 machine.config file. This could have happened if the 9.0.2 EBFs for builds 3575, 3576 or 3581 were applied. Without this file, problems running .NET applications, or using Visual Studio 2005 may occur. The problem has now been corrected, and the Setup will try to determine if the machine.config file has been corrupted, and display an error dialog if corruption is found. If the new Setup reports that the file may be corrupt, action must be taken to restore the file to a working state.

The file machine.config is an XML-formatted file, and is usually found in c:\Windows\Microsoft.NET\Framework\v2.0.50727\config. Data providers are listed in the <DbProviderFactories> sub-section of the <system.data> section of the file. A subset of the file is shown below:

<configuration>

(configuration for other providers)

<system.data>

<DbProviderFactories>

<add name="Odbc Data Provider" invariant="System.Data.Odbc" description=".Net Framework Data Provider for Odbc" type="System.Data.Odbc.OdbcFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>

(configuration for other providers)

<add name="SQL Anywhere Data Provider" invariant="iAnywhere.Data.AsaClient" description=".Net Framework Data Provider for SQL Anywhere" type="iAnywhere.Data.AsaClient.AsaFactory, iAnywhere.Data.AsaClient, Version=9.0.2.3585, Culture=neutral, PublicKeyToken=f222fc4333e0d400" />

</DbProviderFactories>

</system.data>

(configuration for other providers)

</configuration>

The bug was that the install truncated the file at the point where the "SQL Anywhere Data Provider" entry should have been added. This left the XML file in an inconsistent state, due to the <DbProviderFactories>, <system.data> and <configuration> sections not being closed. As well, entries that occurred after the <DbProviderFactories> section were missing entirely. Any data providers from other database vendors that were listed in the file after the SQL Anywhere provider would also have been deleted.

To fix the problem, the file needs to be restored manually. Ideally, if there is a backup of this file, it can be restored from the backup.

If that is not the case, the file will need to be manually edited to add the provider line above and close the <DbProviderFactories>, <system.data> and <configuration> sections. There is a file called machine.config.default in the same directory as the machine.config. This file contains the default settings for the machine.config, and can be used to restore the missing sections. Any installs for other products that modified the machine.config the file will also need to be rerun.

485276 When a consolidated database was running on a DB2 or DB2 mainframe server, the MobiLink server, using the native IBM DB2 ODBC driver, may not have retried uploads when deadlocks occurred. This problem has now been fixed.
485285 Some memory could have been leaked by the MobiLink server when using non-persistent HTTP or HTTPS (persistent=0 at the client). The size of the leak was proportional to the number of HTTP GET requests, so large downloads would have caused greater leaks. A small leak could have occurred as well if a communication error occurred. The impact of the leaked memory could have included failed synchronizations and/or MobiLink server crashes. This has now been fixed.
485293 If diagnostic tracing was started using the Tracing Wizard in Sybase Central, and the connection string specified contained the tracing database's file name, the tracing database would not have been started, and the ATTACH TRACING statement would have failed. This has been fixed so that if the database file name is specified, the database will be started on the current server. The location of the database should be given relative to the database server location.
485338 When running the server with the command line option -m "truncate transaction log after checkpoint", or when running the Backup utility dbbackup with its command line options that restart the log -r, -x or -xo, the current transaction log was renamed and then, depending on the option used, deleted. If the rename of the transaction log failed, assertion failure 100910 was raised. This message for this assertion has been changed to hopefully give more information about the cause. The message was changed from:

"Error deleting transaction log file"

to

"Error renaming transaction log file before deleting it. Error code: %d/%d"

The first number of the Error code means the error type (0 - POSIX error number, 1 - OS error number). On Unix and Netware, both error types mean POSIX error numbers. The second number is the actual error code. On Windows the POSIX error numbers can be found in the header errno.h.

485349 Predicates of the form "column IS NULL" are eliminated if the column is declared NOT NULL earlier now in the optimization process. This increases the oportunity for rewrite optimizations to be performed.
485377 When you create a synchronization model, if the generated event scripts have errors you are now warned right after the event scripts are generated at the end of the Create Synchronization Model wizard. If you try deploy a model that has event errors, you now get an error before the Deploy Synchronization Model wizard opens. In earlier versions you would not get an error until the end of the Deploy Synchronization Model wizard, in which case you would lose the choices you made in the wizard.
485378 In a mirroring system, if the transaction log files on the primary and mirror were incompatible, the mirror server may not have properly detected this condition and shut down. This has been fixed.
485380 In the Create Synchronization Model wizard, if 'Download Subset by User or Remote ID' used a column in the same table, it would only have been enabled for tables where the column was also synchronized, and was a string type. This has been fixed. Now the column must only exist in the consolidated table.

Note that the chosen column's type should be able to be implicitly compared with a string, or errors may occur when downloading with the generated download script.

485425 When executing a query containing proxy tables that would normally have been handled in 'full passthru' mode, but cannot be handled by the server because it is too complex, would have crashed the server. This has been fixed so that the server now properly returns the error "-890: Statement size or complexity exceeds server limits".
485478 Support has now been added to deploy native amd64/x64 ESQL and C++ applications to 64 bit Windows platforms (64 bit XP and later). The engine is supported, as well as static and dynamic versions of the in-process runtime library. Encryption is also supported, although FIPS is not.

The following new files are included in the install:

ultralite\x64

ultralite\x64\uleng10.exe

ultralite\x64\ulstop.exe

ultralite\x64\mlczlib10.dll

ultralite\x64\mlcrsa10.dll

ultralite\x64\mlcecc10.dll

ultralite\x64\lib

ultralite\x64\lib\vs8

ultralite\x64\lib\vs8\ulrt.lib

ultralite\x64\lib\vs8\ulimp.lib

ultralite\x64\lib\vs8\ulrt10.dll

ultralite\x64\lib\vs8\ulbase.lib

ultralite\x64\lib\vs8\ulrsa.lib

ultralite\x64\lib\vs8\ulecc.lib

ultralite\x64\lib\vs8\ulrtc.lib

ultralite\x64\lib\vs8\ulimpc.lib

ultralite\x64\lib\vs8\ulrtc10.dll

485483 If an application used the iAnywhere ODBC driver for Oracle to fetch result set from a packaged procedure, the driver would have reported the following error:

[Sybase][iAnywhere Solutions - Oracle][Oracle]ORA-06553: PLS-306: wrong number or types of arguments in call to {procedure name}

This problem could have caused the MobiLink server to fail the download, when a download_cursor or download_delete_cursor event was written as:

{ call package_name.procedure_name ( ?, ?, ...) } or

{ call schema_name.package_name.procedure_name( ?, ?, ... ) }

This problem has been fixed. Now this event can be written as:

{ call [schema_name.][package_name.]procedure_name( ?, ?, ... ) }

485488 The server could have crashed when requested to create a tracing database when using the Sybase Central Database Tracing wizard. This would have happened when the name of the DBA user for the tracing database was the same as a name of a DBA user in the existing database. The crash has been fixed.

The workaround, and required behaviour with the fix, is to specify a DBA user name for the tracing database that does not currently exist in the target database. The wizard has been modified to alert the user to this.

485498 The REBUILD clause of the ALTER INDEX statement can be used to recreate the physical data structures underlying the index. If the ALTER INDEX REBUILD statement was interrupted by the user, or failed for any reason, the server could have left the physical structure in an undefined state. The most likely state for the index after a failure was to contain no entries. This situation could have caused subsequent queries using the faulty index to behave erroneously. To rectify this situation, a failed ALTER INDEX REBUILD could be executed again to completion. This has been fixed so that the server will now restore the physical data structures to the same state as the one that existed prior to execution of the failed statement.
485499 The server shares physical indexes between compatible primay keys, foreign keys, unique constrains and secondary indexes. Two indexes are considered compatible if the keys for the indexes contain exactly the same columns in the same order and with the same sequencing of values (ascending or descending). When creating a new foreign key index the server could have shared the physical index with an existing index erroneously even when the order of columns did not match. Note that the foreign key constraint was still correctly enforced, but the index was created with an unintended column order which may be problematic for queries that required the specified order for the index to be useful. This has now been fixed.

A workaround is to create the other index after the foreign key index has been created, or to declare an additional index with the correct column order.

485568 Multi-threading applications could have failed with a number of symptoms. These symptoms include 'Resource governor for prepared statements limit exceeded' and 'Communication error' errors, as well as client application crashes. This problem has been fixed.
485574 The server could have crashed when attempted to get an exclusive schema lock on a table. This has been fixed.
485576 If the encrypt() or decrypt() functions were called a combined total of about 4 billion times, they would fail with the error 'Unable to load encryption dll ""'. This has been fixed.
485584 The Interactive SQL utility did not parse the "DESCRIBE objectName" statement correctly unless it was executed on its own, and not part of a sequence of statements. This has been fixed.
485588 The QAnywhere Agent could have used an excessive amount of memory during message transmission when a large number of messages were queued. This has been fixed.
485593 The server could have become deadlocked while running concurrent REORGANIZE TABLE statements on the same table. There can now only be one REORGANIZE TABLE statement executing on a table at a time. Attempts to execute a second REORGANIZE TABLE on the same table will now result in the error SQLSTATE_REORG_ALREADY_IN_PROGRESS.
485597 The changes for Engineering case 480208 introduced a problem where attempting to insert a long varchar or binary value into a proxy table on 64-bit platforms could have crashed the server. This problem has been fixed.
485629 Application Profiling did not provide trigger profiling information. This has been fixed.
485689 When attempting to insert a long binary column into a proxy table where the value being inserted was fetched from a local table, there was a chance the server could have hung with up to 100% CPU usage. This problem has been fixed.
485700 ALTER INDEX or DROP INDEX statements done while a transaction snapshot was active would always have failed with error -1062 "statement not allowed during snapshot". This has been fixed so that it does so now only if active snapshots remain after the commit that occurs at the beginning of these statements. Normally, this will only happen if there is a cursor opened "WITH HOLD" that is using a snapshot (either statement or transaction).
485702 The server may have crash while attempting to execute a trigger that had a syntax error. This has been fixed.
485725 If a plug-in was registered using a JPR file that specified a directory in a different case than another registered plug-in that shares the same classloader, a warning was issued about the JAR file being different. This has been fixed.
485799 When undoing a failed ALTER TABLE or LOAD TABLE statement, the server could have become deadlocked. This has now been corrected.
485802 The query definitions of materialized views in SQL Anywhere are restricted from using certain SQL constructs. As an example, materialized views are prohibited from making references to user defined functions. The server was erroneously rejecting the creation of materialized views that make references to a table with computed columns when the definitions of the computed columns made use of a SQL construct that was not allowed within materialized view definitions. This has been corrected so that the creation of materialized views under these circumstances will no longer result in an error.
485811 When the Interactive SQL utility dbisql was run as a console application with bad command line options, its return code was always zero. This has been corrected so that now it is 255, as documented:

SQL Anywhere� Server - Programming > Exit codes

Software component exit codes

485815 The DATEADD() function did not detect overflow situations. This has been corrected.
485816 When using the version 10.0 provider to connect to an older database, if the application did not specify that the parameter.SADbType=SADbType.varchar (or .char), it would have defaulted to NVarChar. This would have resulted in the error 'not enough values for host variables' being returned to the application. This has been corrected so that the provider now maps NChar to Char, NVarChar to VarChar, LongNVarchar to longVarchar and NText to Text, if the server version is 9.
485818 The server could have become deadlocked when deleting rows from a table following the execution on an ALTER TABLE statement for a table that had foreign keys referencing that table. This has now been corrected.
485821 In very rare circumstances, and only on Unix platforms, queries on a given table could have become very long running. The total query cost as reported by a graphical or long text plan of such slow queries, would have been reported as a negative number. This has been fixed.

A workaround is to drop and recreate statistics on the table in question.

485874 Calling the system procedure sa_send_udp() have could have caused the server to crash. This has been fixed.
485875 On some combinations of consolidated database and platform, any UUID values retrieved using the MobiLink Java direct row API could have had bytes swapped to the local machine byte ordering. This has been fixed. UUID values retrieved using the getBytes() function are now 16 byte values with the correct byte ordering. UUID values retrieved using the function getString() are strings in the correct UUID format (eg. "12345678-1234-5678-9012-123456789012").
485878 If a remote database synchronized an NCHAR column that was included in multiple publications, or if a database initialized with a multi-byte character set synchronized a CHAR column that was included in multiple publications, then dbmlsync would have incorrectly reported that a column subset mismatch existed on the column in question. This has been fixed.
485939 Backups of encrypted databases created by executing the BACKUP DATABASE statement with the "WITH CHECKPOINT LOG RECOVER" clause, may have contained pages that did not decrypt properly. This has been fixed.

Note, any backups of encrypted databases using this clause should be considered invalid and recreated with an updated server.

485979 A procedure that was used in the FROM clause of a SELECT statement, may have returned the error "Derived table '<procname>' has no name for column 2". This would have happened if the SELECT statement in the procedure referenced a table without qualifying it with the owner, and only the procedure's owner could select from the table without a qualifying owner (i.e. not the user who executed the CREATE/ALTER PROCEDURE statement). This has

been fixed.

486050 Logs created during the nonblocking_download_ack synchronization event were being logged with the logger source name of "ianywhere.unknown.category", instead of the remote id name of the client being synchronized as expected. This has been fixed.
486053 The server may have crashed if Java VMs from multiple connections attempted to call the same Java interface method for the first time. Due to the very small window where this could have occurred, it would have been exceptionally rare. This has been fixed.
486059 Using AES_FIPS encryption for an extended period of time (eg. calling the encrypt/decrypt functions hundreds of thousands of times) could have caused the server to report an "out of memory" condition and shut down. This could also have ocurred when running an AES_FIPS-encrypted database. This has been fixed.
486086 Long exception message generated by the provider could have been truncated. This problem has been fixed.
486223 Some HTTP intermediaries can convert non-chunked HTTP or HTTPS requests into chunked requests. The MobiLink server currently cannot accept chunked requests, and would have crashed when it received them. This has been fixed so it will now fail the synchronization with the error "unknown transfer encoding" if it receives chunked requests.

Note that this change only applies to the -x option, and not to the -xo option.

486224 Some HTTP intermediaries can inject a redundant User-Agent HTTP header, resulting in synchronizations failing. This is been fixed so that as long as the first User-Agent is the one the MobiLink server expects, it will allow the redundant header.
486288 The best plan for a query block with a DISTINCT clause, and one or more joins, may be to use semijoins instead of inner joins based on the expressions used in the select list. Inner joins can be executed as semijoins for tables, derived tables, or views whose expressions are not used in the select list. The server will now make a cost-based decision to use inner joins or semijoins during the optimization phase
486393 A query with an outer join could have caused the server to hang with 100% CPU usage. This has been fixed.
486422 The MobiLink server for Windows x64 now supports both RSA and ECC stream encryption. Note that the MobiLink server does not support FIPS-compliant RSA on Windows x64.
486440 The server could have crashed when attempting to recover a database with a corrupted transaction log file. This has been fixed.
486446 When running on a slow network, the MobiLink client dbmlsync could have reported 'Internal Error (1003)'. This problem has been corrected.
486462 Database corruption could have occurred when execution of a LOAD TABLE statement into a table with existing data failed and rows were subsequently inserted or updated before a database restart. This has been fixed.
486465 The installer for the SQL Anywhere Explorer SetupVSPackage.exe was failing to check if Visual Studio was installed before installing the integration package, leading to an exception. This has been corrected.
486469 The Data adapter wizard would have shown errors when generating commands. The errors were cause by exceptions when executing a command which still had an open data reader. Fixed by using new commands.
486476 Due to a memory leak, calling the the system procedure xp_sendmail() many times, could have caused the server to crash. The memory leak has been fixed, and xp_sendmail will now fail with the error "Insufficient memory" (return code 15), if memory does become exhusted.
486531 The SQL Anywhere Explorer now supports Visual Studio 2008. Registry settings for Visual Studio 2008 are now created, and the integration dll has been modified to support Visual Studio 2008. Note that assemblies built with Visual Studio 2005 can be used in Visual Studio 2008 as well.
486539 A synchronization could have failed with the error:

- Could not find subscription id for subscription of <ML user> to <publication>.

or

- SQL statement failed: (-101) Not connected to a database

if all the following were true:

1) the synchronization was scheduled and the time before the next scheduled sync was more than a 2 minutes

2) for some row in the syssync table, "log_sent" was greater than "progress". (This occurs when dbmlsync sends an upload to the MobiLink server, but does not receive an ack/nack to indicate that the upload was applied to the consolidated database or not)

3) hovering was enabled

This problem has now been fixed.

486546 The Certificate Creation utility createcert allowed users to create certificates using ECC curves that were not supported by MobiLink or SQL Anywhere servers or clients. This has been fixed. The list of supported curves has been reduced to the following seven curves: sect163k1, sect233k1, sect283k1, sect283r1, secp192r1, secp224r1 and secp256r1.
486554 The changes for Engineering case 485200 resulted in a bug where attempting fetch data from Micrsoft SQL Server or ASE could have failed with an "invalid object name" error. This problem has been fixed.
486556 When running on a slow network an UltraLite application could have failes with the error message 'Internal Error (1003)'. This problem has now been fixed. This change is similar to the fix for the MiobiLink client, Engineering case 486446.
486561 In some situations, if a keyset-driven cursor was used for a query that contained an IF or CASE expression in the select list, then the IF or CASE expression could have returned an incorrect answer. The answer would have been the expression evaluated for another row of the result set. This has been fixed.
486574 When deploying a synchronization model, statements to create triggers did not specify the owner (or schema) for the trigger, so permission problems and invalid triggers could have resulted when deploying as a different user than the table owner. This has been fixed so that the owner, or schema, is now specified in the generated SQL for creating and dropping triggers for Oracle, Microsoft SQL Server, ASE and DB2 consolidated databases. In SQL Anywhere databases, a trigger is always owned by the same owner as the table, so the problem did not occur.

A workaround is to deploy to a SQL file and manually edit the SQL.

486579 A MobiLink client, synchronizing via HTTP, that set the connection timeout to less than the default 240 seconds, could have been disconnected by the MobiLink server with a connection timeout error. This has been fixed.
486656 The execution of a LOAD TABLE statement would have caused the server to erroneously fire INSERT triggers declared on the table being loaded. This has been corrected, the server will no longer fire triggers when executing a LOAD TABLE statement.
486744 The server may have crashed or returned an unexpected error when attempting to execute an UPDATE statement on a table without the WAIT_FOR_COMMIT=ON clause, and that had a BEFORE UPDATE row level trigger, as well as an AFTER UPDATE row level trigger that used the OLD value of the columns. For this problem to have occurred the BEFORE UPDATE trigger must have changed the NEW value of a column that was not part of the updated columns in the UPDATE's SET clause, and the update operation must update some rows that violate referencial integrity. This has been fixed.
486775 Executing a remote query that must be handled in no-passthrough mode, and that involved many tables, then there was a chance the query would have caused a server crash. Such crashes would have been more likely with databases that had a smaller page size. This problem has been fixed and the server will now properly give an error when a no-passthrough mode query with too many table nodes is executed.
486777 In rare cases, opening a cursor on a procedure call or batch statement could have caused a server crash. This has been fixed.
486788 The changes for Engineering case 485499 introduced a bug which could have caused the server, under certain circumstances, to crash when creating a foreign key constraint. The problem has been fixed.
486864 A server running with the -b command line option (run in bulk operations mode) would have accepted more than one connection. This has been corrected.
486877 When generating the download stream, in very rare circumstances, it was possible for MobiLink to have incorrectly translated a string if the remote database used a multi-byte character set. It was likely that the ending byte(s) of one string would end up at the start of the next string in the same row. This problem has now been fixed.
486889 In rare cases, an error encountered while executing a trigger could have resulted in a server crash. This has been fixed.
486896 The Deployment wizard did not deploy the utility dbspawn.exe when either the Personal or Network servers were selected. This has been corrected by adding dbspawn.exe to the "server core" list of files to be deployed.
487001 The server could have hung in very rare timing dependent cases if it was using the -z or -zr command line options for diagnostic messages and request level logging. This has been fixed.
487008 The changes made for Engineering case 484553 incorrectly had the PWD value replaced with all asterisks "*" in the OutConnectionString parameter of the SQLDriverConnect() function. This has been corrected.
487014 Diagnostic tracing with

Scope: origin

Origin: external

Tracing type: statements_with_variables

Condition: none

would not have recorded any statements with an external origin. An incorrect string comparison was being used to determine whether a statement needed to be logged. This has been fixed.

487141 If an HTTP connection was refused because of licensing restrictions, in rare cases, the server could have crashed. This has been fixed.
487142 In some specific situations, an UPDATE statement could have failed to complete. It would continue to execute until cancelled. This has been fixed.
487164 The Index Consultant may have caused the server to crash when a complex query was analyzed. For example, a query with a subselect in the select list. This has been fixed.
487166 If a deadlock occurred in a database that had tracing with high levels of detail attached, and the tracing data was saved and viewed from Profiling mode in Sybase Central,

the primary keys for rows that had caused the deadlock would not have been reported in the Deadlocks tab. This has been fixed.

This behaviour is only considered invalid if tracing data is saved in the database that is being profiled. If tracing data is saved in an external tracing database, primary key values for rows in the original database cannot be reported.

487169 The Listener may have displayed an error dialog shortly after startup when handling notifications. This problem was timing sensitive, subsequent errors would have gone into the log file and to the console only. This has been fixed so that errors in handling notification will no longer cause an error dialog to be displayed. A workaround is to add the -oq switch to the dblsn command line.
487178 The server will no longer fail assertion 102300 - "File associated with given page id is invalid or not open", when executing DROP DBSPACE if the dbspace had beed deleted.
487247 The server keeps track of dependencies of views on other views and tables. In databases with an extremely large number of objects, the dependency information could have become inaccurate. In order for the problem to have manifest itself, some of the dependent or referenced objects must have had object ids that were greater than 4G (2^32). This has been fixed. For existing databases, problematic views must be recompiled with an updated version of the software. If the actual number of current objects is much smaller than 4G, then the problem can be resolved by unloading and reloading the database without the need for a server software update. The reload should result in a compacting of the used object id space.
487269 The CE 5.0 client libraries, qaagent, dbmlsync and dblsn could crash when shutting down. This has been fixed.
487335 It was possible for an HTTP request to an SA DISH service to hang the server while consecutively altering services. This has been fixed.
487339 If an older client (version 8.0 or 9.0) synchronized against the MobiLink server in a way that a second synchronization was attempted before the first finished (the client was terminated before the server was finished), the server would have allowed the second synchronization to proceed. This has been corrected so that subsequent synchronizations will fail until the first has competed. This problem does not apply to version 10.0 clients, as their new protocol detects and handles this situation in a different manner.
487364 When converting a string from one character set to another, it was possible for the translated string to have been truncated in very rare situations. For the problem to have occurred, a conversion using ICU was required, which typically meant that a multibyte charset other than UTF-8 was involved, which is similar to Engineering case 484960. This problem has been fixed.

Note, this problem does not affect the database server, but does affect other components in SQL Anywhere.

487411 A keyset cursor is used when there is a possibility that a row could otherwise be updated multiple times. For example, a keyset cursor is needed if there are triggers, or if an UPDATE modifies columns in an index used by the UPDATE's plan. In some situations, an UPDATE statement could have used a keyset cursor in cases where it was not necessary, thus leading to slower performance. This has been fixed.
487443 It was possible for the database administration utilities, or other applications which made use of the DBTools interface, to have crashed when attempting to access a file that was in use. This has been fixed.
487496 The selectivity estimates used by the optimizer could have had reduced quality in some cases. In particular, if a database was used on two platforms with different endianness, the selectivity estimates could have been wrong immediately after starting on the other platform. The selectivity estimates would have gradually improved with use on the new platform, or until a CREATE STATISTICS command was used to recreate the estimates. This has been fixed.
487505 On Windows CE, starting a second server while one is already running should display the existing server, unless the existing server is in quiet mode (started with the command line option -qi or -qw). After pressing the Hide button on a server, starting a second server did not display the existing server. This has been fixed so that the first server is now displayed when a second server is started, even if the Hide button is pressed.
487507 If a 32-bit server was used on a system that had more than 4GB of memory available, then dynamic cache sizing could have selected cache sizes that were inappropriately small. Inappropriately small cache selected in this way would have affected query performance such that they could be very slow, worse even then if that cache size had been set at startup time. This problem has been fixed.

Note, this problem can be avoided by using the -ca 0 engine switch to disable dynamic cache sizing.

487516 If a database had been initialized with the -b option (blank padding of strings for comparisons), then the log scanning would not have read the delete_old_logs database option properly. The log scanning code would always have used the default value of 'Off', regardless of the value set in the database. This problem has now been fixed.
487520 When the server was run on Windows CE devices with the -qw or -qi command line options, a menu bar containing the menu "Menu" would have been displayed, but no server window. This has been fixed so that no part of the server is now visible if the -qw or -qi options are used.
487581 Initializing a scheduled transmission rule containing an "EVERY" clause and a "START DATE" clause set to a date that had already passed, in the QAnywhere server or

in the QAnywhere Ultralight Agent, would have caused the rule to be immediately and repeatedly executed many times on startup. This has been fixed.

487673 The changes for Engineering case 471948 introduced a problem such that when the server was very close to the connection limit, either the limit set by licensing or the hard-coded limit in the Personal Server, new HTTP connections may have been rejected incorrectly. This has been fixed.
487686 If the MobiLink client dbmlsync did not receive an ack/nack from the MobiLink server after sending an upload, it has no way of knowing whether the upload was successfully applied. The best way to resolve this situation is to perform an 'extra exchange' with the server before the next synchronization to request the status of the upload. Previously, this extra exchange was performed on the first synchronization after dbmlsync started up. This has been changed so that it will now perform the exchange any time there has been an un-acknowledged upload.
487687 If the MobiLink client dbmlsync failed during the brief time between when an upload was completed and when state information in the database was updated, then the server would not have been queried at the start of the next sync to determine if the upload was successfully applied to the consolidated database. This problem would have occurred extremely rarely, and in most cases would have been harmless. The result was simply that the next synchronization took a little longer because an upload was built and uploaded, then rejected by the server, and a new correct upload was built and uploaded. However if the failure occurred on a subscription's first synchronization, it could have resulted in operations being uploaded to the server twice, which would usually have caused the synchronization to fail with server side errors. This has been fixed so that the syssync table is updated prior to the end of the upload. As a result an extra exchange may occur when the end of the upload was not sent, but the client should never fail to do an extra exchange when it is required.
487688 It was possible for the MobiLink client dbmlsync to upload operations for a subscription that did not belong to that subscription, when all of the following were true:

1) A subscription, S1, was created to some publication P1, and a second subscription, S2, was also created for P1 (either by dropping S1 and recreating it or by creating a new subscription to P1 with a different MobiLink User.)

2) During the first synchronization of S2, dbmlsync successfully sent an upload but did not receive an ack/nack from the MobiLink server.

3) The upload was not successfully applied to the consolidated database by the server.

When all these conditions were TRUE it was possible for operations that occurred before subscription S2 was created to be uploaded when subscription S2 was synchronized. This behavior has been corrected. Now, only operations that occurred after subscription S2 was created will now be uploaded when subscription S2 is synchronized.

487689 If the MobiLink client dbmlsync did not receive an ack/nack from the server after sending an upload it has no way of knowing whether the upload was successfully applied to the server. The best way to resolve this situation is to perform an 'extra exchange' with the server before the next synchronization to request the status of the upload, but dbmlsync did not perform this extra exchange after an unacknowledged upload that occurred during the first synchronization of a subscription. This would not have resulted in any data loss, but might have increased the time required for the next synchronization as it might cause two uploads to be built and sent to the MobiLink server. This has been corrected so that an extra exchange is now performed in this case to eliminate the possibility of sending two uploads.
487690 Normally, the MobiLink client dbmlsync ignores the server side state on the first synchronization of a subscription, although there was a problem where dbmlsync might have respected the server side state on a first synchronization, if an exchange was performed with the server to confirm the progress offsets of other subscriptions that had previously synchronized. As a result of this, data could have been lost and synchronizations could have failed with the error "Progress offset mismatch, resending upload from consolidated database's progress offset" being reported twice. This has been fixed.
487721 When IMAP, POP3 or LDAP authentication was enabled for a synchronization model, the generated authenticate_user event would have used the incorrect case for the class name, and the generated MobiLink server command line would not have enabled Java scripts with mlsupport.jar in the class path. Both problems have been fixed. The workaround is to manually fix the script and command line.
487783 If a database mirroring system was using a mode other than "synchronous", loss of quorum did not force the primary server to restart and wait for one of the other two servers to become available. This has been fixed.
487847 In very rare cases, execution of a DROP EVENT statement to drop a scheduled event could have crashed the server. This has been fixed.
487869 When using Text Completion, the list would not have contained any database objects if opened immediately after an owner name which was followed by a period, for example:

SELECT * FROM myUser.

Now, database objects are listed correctly. This problem only affected those owners which did not own any stored procedures.

487950 The changes for Engineering case 484160 introduced a problem such that running databases without the SYSEXTERNLOGINS system table (version 5.5.05 or earlier) could have lead to a server crash when dropping users. This has been corrected.
487972 When running the Extraction utility (dbxtract) on a large database, an equally large database would have been created, even though the amount of extracted data may have been significantly less. In cases such as this, the majority of pages in the new database would have been free pages. This has been corrected.
488094 A failing DROP TABLE statement could have caused table pages to be leaked. This could only have happened if pages had been allocated to the table's arenas between the last checkpoint and the failed DROP TABLE. Database validation would not have detected these leaked pages. This has been fixed.

A workaround for this problem is to always issue a checkpoint before attempting a DROP TABLE that has a chance of failing.

488097 The changes for Engineering case 485200, that forced the server to use the local setting of the Quoted_identifier option when connecting to an ASE remote server, was incomplete. Attemptiong to create a proxy table to an ASE remote server would have failed if the location string included the catalog name. This problem has now been fixed.
488115 If a Java class was loaded and initialized by the forName() method and an exception was thrown during the class initialization, then the caller would have seen the incorrect exception java.lang.NoClassDefFoundError for class java/lang/VMAlreadyThrown. This has been fixed.
488116 In very rare circumstances, the server may have crashed, or returned unexpected JVM exceptions like "IllegalAccessException", if multiple connection JVMs attempted to load the same class simultaneously. This has been fixed.
488129 A numeric value longer than 80 digits may have been silently truncated to 80 characters when implicitly converted to a string value. One instance where this could have occurred was from within a column DEFAULT specification, e.g.:

create table test (col1 numeric(108,38) default 1111111111222222222233333333334444444444555555555566666666667777777777.12345678901234567890123456789012345678)

The value stored in the catalog (the SYSTABCOL "default" column) would have been truncated to: 1111111111222222222233333333334444444444555555555566666666667777777777.12345678

This has been fixed.

488218 The Deployment Wizard was failing to create the following two registry entries:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\SQLANY 10.0

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\SQLANY 10.0 Admin

This has been corrected.

488265 SQL Anywhere does not permit direct manipulation of catalog tables. Any attempt to do so should result in a permission denied error. Under certain circumstances though, an attempt to perform one of these prohibited operations could have caused the server to behave erratically or crash. The server will now correctly report a permission denied error.
488271 When the MobiLink server displayed warnings about the amount of memory that was swapped to disk, the number reported for "concurrent pages" was the maximum number of concurrent pages for current instance of the server. This created the impression that the page usage always increased. This has been corrected so that this number is now the number of concurrent pages in use at the time of the warning.
488272 When the MobiLink server can not store all the data needed for all the synchronizations in the cache memory (-cm flag), it must swap some to a temporary file. This data could have been written to the file more often than needed. This has now been fixed.
488274 Applications attempting to make a TLS connection may have crashed. This has been fixed.
488275 It was possible for downloaded rows that contained long varchar or long binary columns to have been corrupted. Symptoms ranged from garbage characters read from a row to crashing the database. The problems were caused by an uninitialized variable, so the operations that can trigger the bug were varied. This has now been corrected.
488324 When deployed to a Windows Mobile 6 device with the language set to Japanese, it was not possible to shut down the server once it was started. The menu was not there to shut down, or get version info. This would have happened on both Standard and Professional devices, and in the emulators for both types of device. This has now been fixed.
488350 When using the SET OPTION statement to change value of a database option, the absence of any value signifies a request to delete the option setting altogether. On the other hand, specifying the empty string ('') is considered a request to set the option value to be the empty string. However, the empty string was being treated the same way as the absence of the option value. Note that the problem is seen only when the SET OPTION statement is executed through dbisqlc, or another Embedded SQL application that makes use of the corresponding DBLIB API call. Sending the SET OPTION statement directly to the server for execution does not exhibit the erroneous behaviour. This has been fixed so that the server will no longer treat the empty string as a request to delete the option setting.
488404 The value returned for the Connection and Database property QueryCachePages would have been incorrect. This has now been corrected.
488406 In a very rare situation, attempting to execute a CREATE DATABASE statement could have resulted in a server crash. This has been fixed.
488410 A server running with AWE enabled may have performed poorly, or failed an out of memory assertion. This has been fixed.
488514 When running on Windows Server 2008 (which has not yet been released by Microsoft), the server could have crashed while performing an integrated login when the INTEGRATED_SERVER_NAME was blank. This has been corrected
488520 On Unix systems, 64-bit ODBC applications required LONG_IS_64BITS to be defined at compilation time. Failure to do this would most likely have resulted in a crash in the application. This has been fixed
488666 In very rare, timing-related circumstances, the server could have appeared to hang while executing a backup. The backup could have been a server-side backup or a client-side backup. This has been fixed.
488676 The HTTP option 'buffer_size' was limited to 64000 (64KB). On slow networks and/or large uploads or downloads, the overhead due to HTTP could have been significant. The 'buffer_size' option is now limited to 1000000000 (1GB). When using slow networks to perform HTTP or HTTPS synchronizations, tests could be done with larger values for 'buffer_size' to see if synchronization times improve.

For versions 11.0.1 and up, this change only applies to the -xo option of the MobiLink server. The -x option already allows larger values.

488680 The server could have crashed if it was run with TCP/IP disabled, and diagnostic tracing was attempted. This has been fixed.
488685 Database recovery could have failed if the transaction log being recovered contained statements which caused checkpoints and recovery needed to be restarted. This has been fixed.
488699 Table expressions with brackets may have caused syntax errors. For example,

Select * from (table1) left join table2

This was corrected by adjusting the syntax to handle more general bracketing.

488754 If a variable of type nchar, nvarchar or long nvarchar was declared, and then used in a query involving a remote table, then it was likely that the server would have failed with the error "not enough host variables". A simple example of a query that would have given this error is:

SELECT * FROM remote_t WHERE c1 = @nvar

In this example, if the table remote_t was a proxy table, and the variable @nvar was of type nchar, nvarchar or long nvarchar, then the server would have failed to execute the query with the "not enough host variables" error. This problem has now been fixed.

488765 Starting the utility database could have caused the server to fail assertion 200500. This has been fixed.
488844 Unique indexes could have unexpectedly grown in size over time. As well, the server could have crashed while performing index maintenance. The server keeps deleted unique index entries until commit or rollback, in order to avoid having to do key range locking. In some cases the deleted entries were not being reclaimed properly. This has now been corrected.
488857 If an UPDATE statement contained a SET clause that assigned a value to a variable, then the variable could have been assigned a value that had a length or precision/scale that exceeded the declared domain of the variable. This would have caused subsequent operations with the variable to use this longer value. This problem only affected variables of type NUMERIC/DECIMAL or string types. This problem has now been fixed.

For example:

create variable @text varchar(3);

update T set @text = 'long long string', salary = salary

Previously, the update statement would pass and the value of @text was set to 'long long string'. Now, the statement fails with an error (provided the string_rtruncation option has its default value):

Right truncation of string data [-638] ['22001']

488859 The Interactive SQL utility's Index Consultant could have failed to recommend indexes on a query containing the word "GO" in an identifier (For example, SELECT * FROM CATEGORY), complaining that it could only analyze one query at a time. This has been fixed.
488862 The MobiLink client could have reported internal error 1003 during , and would have most likely occurred when the increment size was quite large, or if the server was slow to apply the upload. This has now been corrected.
488941 The OPEN operation for a cursor that used a query that referenced proxy tables may have caused the server to crash. This would only have happened if the final cursour type was KEYSET. This has been fixed.
488967 An existing stored procedure or user-defined function can now be recompiled using

ALTER PROCEDURE owner.procname RECOMPILE

or

ALTER FUNCTION owner.funcname RECOMPILE

The process of recompiling causes the procedure or function definition stored in the catalog to be re-parsed and verified that it is syntactically correct. For procedures that generate a result set but do not provide a RESULT clause, the server will also attempt to determine the result set characteristics for the procedure and store that information in the catalog. This can be useful if a table referenced by the procedure has been altered to add, remove or rename columns since the procedure was created. The preserved source for a procedure or function is not changed by recompiling. Procedures and functions whose definition are hidden via

ALTER PROCEDURE owner.procname SET HIDDEN

can be recompiled, and their definitions will remain hidden.

488993 A very specific form of database corruption could in rare instances have been undetected by the database validation tools. This has been fixed.
489072 The server may have crashed while executing an image backup if all the files of the database were no longer accessible. The most likely scenerio for this problem to occur when the database was started in read-only mode on a network share, and the network connection was lost. This has been fixed and the BACKUP statement will now fail with an error.
489098 If the Log Translation utility (dbtran) detected an error during execution, the SQL file it had generated up to that point was normally deleteed to ensure that a partial file was not used by accident. The -k command line option has now been added to prevent the SQL file from being erased if an error is detected. This may be useful when attempting to salvage transactions from a damaged log.
489100 The MobiLink server must hold all table data needed for currently active synchronizations. When the total concurrent amount of table data exceeded the server's cache memory (-cm option) by more than 4200MB the server could have failed. This has been fixed.
489152 If in error, the operating system date was set to a date in the far future, some servers and tools that collected feature logging information in sadiags.xml may have crashed. This has been fixed.
489167 If an application used version 9 or earlier client software, and connected to a version 10.0.1 server, the server could have crashed or an incorrect character set could have been used. Also, if the application used the CHARSET connection parameter, the connection would have failed. This has been fixed.
489179 Load table could have failed when loading data into a table that contained a self-referencing foreign key. As of Engineering Case 395054 the wait_for_commit option was set to 'off' for LOAD TABLE so that errors could be detected immediately. Now wait_for_commit for LOAD TABLE is set to 'on' if the table has a self-referencing foreign key, otherwise it is sett 'off' as before.
489236 If a database is auto-started by executing DBVALID, the database will now be started in read-only mode. This was done to avoid making changes to the database in case it was intended to be used as part of a backup/recovery plan. Once a backup copy of a database has been started in read-write mode, transaction logs from the original database cannot be applied to it. If DBVALID connects to a database that is already running and the database was not started in read-only mode, DBVALID will now display a warning: "WARNING: database being validated was not started read-only" If a database requires recovery, it will fail to start in read-only mode. Note that most databases created by DBBACKUP will be marked as needing recovery. If a database to be validated requires recovery, and the user wishes to force it to be started read-write, specifying a valid value for the DBS connection parameter will allow the database to be started and recovery performed.

For example:

dbvalid -c "UID=DBA;PWD=sql;DBF=mycopy.db;DBS=-n mycopy"

dbvalid -c "UID=DBA;PWD=sql;DBF=mycopy.db;DBS=-dh"

would both allow dbvalid to execute if mycopy.db required recovery. The database could also be pre-started before running DBVALID.

489238 When the Data Source utility dbdsn was used to create an ODBC data source for the iAnywhere Solutions Oracle ODBC Driver (using the -or switch) on UNIX, the driver name in the data source would have been incorrect (libdboraodbc10.so rather than libdboraodbc10_r.so). This has now been corrected.
489239 The Apache redirector did not support the Mobilink client's HTTP persistent connection. Clients that attempted to use persistaent connections would have been switched to non-persistent HTTP after the first request. This has been corrected.
489245 The Secure Stream Server Certificate page in the Deploy Synchronization Model Wizard mentions that the generated batch file will prompt for the password, but the generated batch file does not do this. This has been fixed.
489258 The HTTP synchronization parameter buffer_size was not always respected, particularly when using zlib compression, which could have caused upload performancto degrade for large uploads. This has been fixed. Also the default values for buffer_size have been increased as follows:

Palm - 4K

CE - 16K

all other platforms - 64K

and the maximum value for buffer_size has been increased from 64K to 1G.

489266 The MobiLink server could have silently failed a ping request from a 9.0.2 or earlier MobiLink client if the client's command line contained any options of upload_only and/or download_only. This problem has now been fixed.
489337 A connection attempting to execute an UNLOAD TABLE statement on more than one table concurrently could have lead to a server deadlock. This could also have happened when executing the Unload Database utility (dbunload). This has beed fixed.
489427 When deploying to an existing remote database, the generated batch file needs to provide a password, but it did not prompt for one. The work around is to edit the generated batch file. This has been fixed so that it will now prompt for a password when using an existing remote database.
489435 Attempting to execute a "MESSAGE ... TO CLIENT" statement using the Interactive SQL utility (dbisql) on Unix platforms, would very likely have caused it to hang. This problem has now been fixed.
489436 If a statement contained a large number of query expressions (UNION, INTERSECT, EXCEPT), or other complex features such as subqueries, and, further, the statement had a large number of scalar expressions, then the statement could have taken longer to process than earlier releases. This has been fixed.
489443 When using Java in the database and attempting to have the server execute a non-static Java method, a strange NullPointerException method would have been returned. A proper IllegalAccessException method, indicating that the method being executed is not static, will now be returned.
489444 If an application that used Java in the database attempted to call a static Java method in a class that had constructors, but no constructor with 0 arguments, then the call would have failed with an InstantiationException. This problem has now been fixed.
489538 When examining the properties of a foreign key that was created as CHECK ON COMMIT, the properties would always have been reported that CHECK ON COMMIT was off. This has been fixed.
489542 In very rare situations, the server could have hung while trying to drop a Remote Data Access connection. This problem has now been fixed.
489597 The MobiLink server would have reported an incorrect error if the server was running in blocking ack mode, but an event for non blocking ack (-nba+) mode has been defined. The error reported was: "There is no download data script defined for table:.. ". This has been corrected.
489598 'Assertion 100904: Failed to redo a database operation' is generated when the server fails to recover the database based on information stored in the transaction log. This assertion never included the actual reason for the recovery failure. The actual error message is now included in the assertion message. In many cases the cause of the recovery failure was failure to find a data file that was used in a LOAD TABLE statement. In cases where the data file had been deleted recovery could not continue. The fact that the file is missing is now incorporated into the assertion message.
489600 In rare circumstances, after a backed-up copy of a database was started, or after a database had undergone recovery, the Validation utility (dbvalid) could have caused the server to fail assert 101412 - "Page number on page does not match page requested". Even though the server failed the assertion, the database file was not corrupt, and the database should have continued to operate normally. This has been fixed.
489605 In case-sensitive databases, dbspace names were also case-sensitive. DDL statements referring to the dbspace names were required to specify the dbspace names exactly as they appeared in the catalog. This has been fixed.

Note, it is possible that a database could contain two dbspaces with the same name in different cases. This change would prevent these dbspaces from being differentiated. This would be a problem when migrating to versions 10 or later as well.

489694 Support has now been added for Windows Mobile 5 SmartPhone Edition and Windows Mobile 6 Standard edition. All SQL Anywhere Windows CE functionality is supported on the SmartPhone, except for the following:

- the SharedMemory communication protocol is not supported. The TCP/IP communication protocol is used even if no protocol is specified, and a server name must always be specified when making a connection, or the connection will fail.

- the preferences dialog on the database server and MobiLink client is not supported. The preferences dialog normally appears if no command line options are used.

- the ODBC and OLEDB connection prompt dialog is not supported. This dialog normally may appear depending on the DriverCompletion parameter to SQLDriverConnect, or the DBPROP_INIT_PROMPT OLEDB property.

- the Unload / Reload support is not available. This includes dbunload.exe, dbrunsql.exe and the unload support server.

489741 If an application using the iAS Oracle driver issued a "call procedure_name" statement (without open and close parentheses) through the ODBC functions SQLPrepare or SQLExecDirect, and the procedure "procedure_name" returned a result set, the driver could have crashed when the "Procedure returns results" check-box was checked on Windows, or the "ProcResults" entry was set to 'yes' on UNIX. This has now been fixed.
489744 VALIDATE TABLE did not correctly handle tables with more than 256 rows on a table page. The problem has been fixed.

VALIDATE TABLE has also been enhanced to allow validation to proceed on very large tables or, more precisely, on tables whose last page number was very large. Prior to this change, error 08W13 (-86) "Not enough memory to start" could have been reported.

Note that if the table is actually very large relative to the cache, validation may take a very long time.

489871 There were several problems possible when the -m server command line option was used to truncate database transaction log files at checkpoint. Some of these problems were, but were not limited to, assertions indicating that the log could not be deleted or restarted while a virus scanner or disk defragmenter was accessing the log file; and occasionally having zero byte transaction log file remaining after a system failure. These problems should no longer occur as the transaction log file is no longer deleted and recreated at checkpoint time when the -m option is being used. Instead the file gets truncated to one page in size and then continues to be used. A side effect of this change is that there will be a one page log file remaining after a successful shutdown of a database, instead of no log file.
489889 When executing an UPDATE on a remote table with a cursor range, the cursor range would have been ignored, and all rows would have instead been updated.

For example, executing the following:

UPDATE TOP 2 proxy_t

SET proxy_t.data = 'Hello'

ORDER BY proxy_t.pkey ASC;

would have updated all rows in the table. This problem has now been fixed.

489903 Some HTTP intermediaries add more information to the HTTP User-Agent header. This was causing failed synchronizations, and has now been fixed.

Note that any intermediary that removes the information put into the User-Agent by the MobiLink client will cause synchronizations to fail.

489917 Certain specific forms of statements could have caused the server to crash, or to report assertion failures 101504, 101514, or 101515. This has been fixed.
490036 When making continuous ODBC connections and disconnections using SQLConnect and SQLDisconnect, a memory leak would have occurred in the application. The process heap would have continued to grow as the application looped. To reproduce the memory leak, the application must have allocated and freed environment and connection handles around the SQLConnect and SQLDisconnect calls, to ensure that the SQL Anywhere ODBC driver was loaded and unloaded from memory. This problem has been fixed.
490092 In rare cases, attempting to create a procedure or event containing the BACKUP DATABASE statement would have caused a server crash. The crash was due to an unparsing error, which has now been corrected.
490180 If a query used certain types of expressions that used strings, and a parallel execution strategy was selected by the query optimizer, then the server could have crashed under certain conditions. This has been fixed.

The problematic expressions include the following:

COMPRESS CONNECTION_EXTENDED_PROPERTY CSCONVERT DATEFORMAT DB_EXTENDED_PROPERTY DB_ID DECOMPRESS DECRYPT ENCRYPT EVENT_CONDITION EVENT_PARAMETER EXTENDED_PROPERTY GET_IDENTITY HASH HEXTOINT HTTP_HEADER HTTP_VARIABLE ISDATE ISNUMERIC LIKE LOCATE NEXT_HTTP_HEADER NEXT_HTTP_VARIABLE NEXT_SOAP_HEADER PROPERTY_NAME PROPERTY_NUMBER REPLACE REVERSE SOAP_HEADER SORTKEY TO_CHAR TO_NCHAR UNICODE USER_ID VAREXISTS WRITE_CLIENT_FILE

490192 The embedded SQL OPEN statement did not allow any of the snapshot isolation levels to be specified in the ISOLATION LEVEL clause. This has been corrected. The workaround is to use the isolation_level option.
490209 An error would have been reported when some valid options were entered in the dbmlsync option dialog on CE. The options affected included -q -Q -qc -o -ot -os and -wc. This has been fixed.
490210 When viewing the properties of a table in the UltraLite plug-in for Sybase Central, it was possible to change the table抯 synchronization type of Normal, Always or Never. Doing this would have created a new table with a different suffix (either empty, _nosync or _allsync), however the original table would not have been dropped. This has been fixed.
490227 The SQL Preprocessor (sqlpp) could have generated incorrect code for SET OPTION statements. Correct code was generated for single SET OPTION statements, but incorrect code was generated if the SET OPTION was contained within a batch, procedure definition, etc. This has been fixed.
490229 An application using the iAS ODBC driver for Oracle may have crashed if a SQL statement caused an error on the Oracle database server or the OCI library, and if the error message returned from the Oracle server or the OCI library was greater than 466 bytes in length. This problem is now fixed.
490303 The server allows for objects, such as views, to be disabled. When a view is disabled, its definition is maintained in the database in an uncompiled state, and the view is not available to be referenced by queries. Once disabled, a view needs to be explicitly enabled before it becomes usable again. The server now allows users to grant permissions on disabled objects. Any granted permissions are retained in the database and become effective once the object is enabled.
490312 Attempting to unload a database using the Sybase Central Unload wizard, that was not currently connected to, into an XML or SQL file would have failed with a null pointer exception. This has been fixed.
490412 In very rare, timing-related circumstances, the server could have become extremely slow when processing Java requests in the database, or disconnects from connections with attached Java VMs. This may have happened if a large number of connections were executing Java functions or if connections with attached Java VMs received a cancel. This has now been fixed.
490471 When connected to two UltraLite databases and attempting to unload the first into the second, when the Finish was clicked on the page that asked for the destination database, the wizard would not have noticed the change in the selected destination database on that page and then tried to load into the default destination database, which in this case was the same database as the source database. This has been fixed so that the wizard now correctly records the selection, and/or correctly pops up a dialog letting the user know that the source database is the same as the destination database.
490481 When attempting to shut down a MobiLink server using mlstop, as well as pressing 'q' on UNIX or clicking on the 'Shut down' button on Windows simultaneously, then the MobiLink server could have crashed. This problem was due to a race condition, which has now been corrected.
490504 If a Hash Group By algorithm did not have enough memory to operate, and it was converted to a low-memory execution strategy, it was possible for grouped rows to be returned even though they did not match the HAVING clause specified in the statement. This has been fixed.
490564 A recordset update may have failed when one of more column values were null. The OLEDB provider failed to correctly identify the primary key columns in a table, and this resulted in an UPDATE statement containing a WHERE clause that was overly complex. This problem has now been fixed.
490590 Synchronizations using TLS, HTTP, or compression could have failed. Also, mlfiletransfer, dblsn, and all components connecting to the MobiLink server could have failed. The failure manifestation was highly data-dependent, but the most likely error was a protocol error. Synchronizations from older (ie. versions 8 & 9) clients were not affected by this problem. In the extremely unlikely event that the lost bytes go unnoticed by the other end of the network connection, or internally in MobiLink server, then there might be lost data. For example, in a row operation, a sequence of bytes in the middle of a VARCHAR column value may have been removed. This has been fixed.
490594 In a low memory situation, the Hash Broup By algorithm could have failed to compute the value of composite aggregates (eg AVG )for some groups. The value of the composite aggregate was incorrectly set to NULL. This has been fixed.
490798 In a TOP n START AT m clause, the values of n and m were previously restricted to being constants or variables. They are now allowed to be host variable references. For example:

select top ? table_name

from SYS.SYSTAB

order by table_id

490862 A QAnywhere .NET application could have crashed with a memory access vio;ation when terminating. This was due to a race condition, which has been fixed.
490909 If a cursor for a statement containing ORDER BY was opened with the option Ansi_update_constraints set to a value other than 'off', then the statement could have incorrectly been opened as READ ONLY, even if cursor flags requesting an updatable cursor were specified. This has been fixed.
490930 Under very rare circumstance, and likely with heavy concurrency, the server could have crashed. A race condition in the row locking code has been corrected.
491010 The database option database_authentication defined in saopts.sql, or authenticate.sql, could have silently failed to have been set during a create or upgrade of a database. Statement in the scripts used during a create or update of a database were ignored if either the 'go' terminator was not lowercase, or an end of file was reached with no 'go' following the statement. This has been fixed.
491015 A server with AWE enabled (ie -cw) could have crashed when running a database containing encrypted tables. This has been corrected.
491104 Any modifications to the client message store properties, after the clients first synchronization, would not have been propagated to the server message store as expected.

This had been fixed.

491108 The ALTER and DROP TABLE statements can cause checkpoints to happen under certain circumstance. If these statements were executed on tables, where the table data had not changed since the last checkpoint, the server did a checkpoint anyway. These checkpoints caused the server to do unnecessary serialized work, and could have caused inefficiencies. The problem was most likely to be observed when large amounts of schema changes were being carried out, e.g., during a database schema reload. This has been changed so that the server will no longer cause an unnecessary checkpoint to occur.
491111 Scrolling the horizontal scrollbar to the right and then refreshing the list did not update the column headers. This has been fixed.
491121 When run on Windows systems, the server's "about" box would not have opened when selecting "About SQL Anywhere..." after right clicking on the system tray icon. This has now been fixed.
491180 On Windows CE devices, in rare cases it was possible for a database stored on a flash storage memory to not recover after the device shutdown abnormally. Flash storage memory includes flash memory cards and the standard storage memory on Windows Mobile 5 and 6 devices. This has been fixed.
491267 The server could have crashed when there were many short transactions on a busy server. This was more likely to have occurred when running on Unix system and multiprocessor machines. It was not likely to have occurred when runnig on a single processor Windows machine. A race condition has been corrected.
491315 Version 10.0.0 of SQL Anywhere added support for the OPTION clause in the SELECT statement. The OPTION clause has now been extended to the INSERT, UPDATE, DELETE, SELECT, UNION, EXCEPT, and INTERSECT statements. The clause allows users to override the settings for the following connection level options at the statement level:

- isolation_level option [compatibility]

- max_query_tasks option [database]

- optimization_goal option [database]

- optimization_level option [database]

- optimization_workload option [database]

The server will now raise an "invalid option setting" error in a predictable fashion if one of the unsupported options is used in the clause. There was a possibility of the server leaking a small amount of memory that has also been corrected.

491380 If a statement, other than SELECT, INSERT, UPDATE, or DELETE, used a subselect expression that returned a NUMERIC or DECIMAL data type, then the subsequent operations using the subselect value could have inappropriately truncated the numeric result. This has been fixed.

For example, the following sequence could have incorrectly return 104.0 instead of 104.6.

create variable @vnum numeric(20,4)

set @vnum = ( select max(103.5) ) + 1

491388 Updating or deleting from a large table could have caused index corruption. For this problem to have occurred, a large number of rows (consecutive in index order) needed to be updated or deleted. This has been fixed.
491399 When the 10.0 version of dbunload was used to unload a pre-10.0 database, the "unload support engine" (dbunlspt.exe) was spawned with a cache size equal to 40% of physical memory. For most databases, this is unnecessarily large. This has been changed so that

dbunlspt.exe will now start with the same default cache size as the server, and grow no larger than 40% of physical memory.

491400 The marquee in the overview panel would have flashed excessively when connected to a MobiLink server. This has been fixed. A workaround is to drag out the marquee to a new region, or to pause the auto scrolling.
491414 The Index Consultant wizard was not working correctly with the ENTER key. The Default button was not properly set, and focus was not properly set on some pages of the wizard.

This has been fixed.

491787 If a server was running in a high availability mirroring system and a client connection was cancelled or dropped, the server could have crashed. This has been fixed.
491885 If a value-sensitive cursor was opened with the 'WITH HOLD' clause, and it referenced a table that was affected by a TRUNCATE statement, then the server could have reported assertion failures when the cursor was used after the truncate. This problem also occurred if the cursor referenced a temporary table declared with the 'ON COMMIT DELETE ROWS' clause and if the cursor was used after a commit. Assertions that could be reported in this situation include the following, although this list is not exhaustive:

201417 "Invalid count or free space offset detected on a table page"

101412 "Page number on page does not match page requested"

Note that a value-sensitive cursor can be selected either explicitly, by cursor flags (ODBC keyset-driven, ESQL/SP scroll), or implicitly if the cursor type is changed by the query optimizer (for example, if a sort is used for an updatable cursor). This problem has been fixed. In engines with the fix for this problem, the affected cursor will return an error if it is used after the TRUNCATE or COMMIT. The error returned is: CURSOR_INVALID_STATE 24000 -853 "Cursor not in a valid state"

491909 The database option Scale was being used for the default scale for a specification such as NUMERIC(10). This has been corrected so that the scale used to supply the value is now 0. Additionally, supplying a numeric scale larger than the precision was not diagnosed. This has been corrected as well
491910 In rare cases, concurrent execution of DML and DDL statements could have crashed the server. This has now been fixed.
492018 If a service that could not interact with the desktop failed to start, the error message describing the cause of the failure would not have been logged to the Event Log. This has been fixed.
492031 In order to drop a table from the database, it must first be removed from all publications. Failing to remove the table from any publications prior to attempting to drop it would have resulted in an error. However, the UltaLite database would have been left in a corrupt state after the error was returned, as the operation was not fully rolled back. This has now been fixed.
492148 If the Connection.synchronize() function failed with an exception, the message in the exception did not contain any relevant details. For example, the text for a SQLE_PRIMARY_KEY_NOT_UNIQUE( -193) error did not include the table name ("Primary key for table '-n/a-' is not unique."). This has now been corrected.
492188 In rare circumstances, the server could have crash when attempting the execute an external Java procedure. This has now been fixed.
492197 A client which sent malformed communications protocol to the MobiLink server, could have casused the server to crash. This has been fixed.
492227 The server may have crashed if an ALTER TABLE statement attempted to rename a column, and there already existed a foreign key with referential action for this table. This has been fixed.
492302 A query that involved more than one "Remote Procedure Call" in the FROM clause, could have caused the server to crash.

An example of such a query is:

SELECT col1

from remote_procedure_1()

where col2 = (select c1 from remote_procedure 2())

This problem has now been fixed.

492332 Materialized view maintenance could result in assertions and server crashes if there were other active connections (including internal connections). This has now been fixed.
492344 An erroneous conversion error could have been detected when an IF expression involved an aggregate. For example: "IF count(n) > 50 THEN 'good' ELSE 'bad' ENDIF" This has been corrected.
492346 When using Java in the database, a method that called System.out.println with a very long string would very likely have cause the client application to hang. This problem has now been fixed.
492347 In certain conditions, executing statements with the ARGN() fuction could have caused the server to crash. This has been fixed.
492348 If an application had more than one CallableStatement open on the same connection, then there was a chance that closing the CallableStatements would have caused a hang in the application. It should be noted that the problem does not exist with Statement and PreparedStatement objects. This problem has now been fixed.
492353 In rare cases, the server could have crashed on shutdown if the cache priming page collection was enabled. Page collection is enabled by default, or if -cc or -cc+ were provided on the command line. This has now been fixed. The workaround is to use -cc- to disable cache priming page collection.
492356 If the procedure debugger was used to set a breakpoint in a stored procedure and then many connections called that procedure and hit the breakpoint, the server could have hung. This has been fixed.
492387 The install would have failed on Unix systems which contained a version of coreutils 6.9 or newer (such as Ubuntu Linux 8.04). The failures would likely have occurred while checking that the target system meets the minimum requirements for SQL Anywhere, or while verifying the amount of free disk space available. The "setup" install script can be modified to work around this issue as follows:

1. Find all lines containing the "cut" command that uses the "-f" argument

2. For all such lines if a comma immediately follows the "-f", remove this comma

For example, the line:

OS_REL_1=`echo $OS_REL | cut -d. -f,1`

should become:

OS_REL_1=`echo $OS_REL | cut -d. -f1`

492433 Errors logged to the Windows error log sometimes may have had "MobiLink Client" incorrectly spelled as "MobiLin Client". This has now been corrected.
492533 In very rare, timing-related circumstances, calling a Java procedure, or making a request than references a remote JDBC clase server, may have failed with the error "No suitable driver", if a cancel had been received. When this happened, all JVM's, or the database, would have had to have been restarted to resolve the problem. This has been fixed.
492540 If the last transaction log page received by a server acting as database mirror was completely filled, and the primary server was then shut down, the mirror could have failed to start. This has been fixed.
492667 If a Windows application called the function SQLColAttribute() with SQL_DESC_OCTET_LENGTH when using the iAS ODBC driver for Oracle, it could have been returned the transfer octet length in characters, rather than in bytes. Due to this problem, the application could have incorrectly truncated data. This problem has now been fixed.

Note, this problem should not happen if the application is the MobiLink server. The MobiLink server does not call the ODBC function SQLColAttribute().

492675 Incorrect results could have been returned for for some DISTINCT ORDER BY combinations. This would have occurred when a DISTINCT clause was used and there were no unique indexes that could be used to guarantee distinctness, there was an ORDER BY clause and no indexes exist to effect that ordering and not all of the the ORDER BY constituents were found in the SELECT list.

For example:

SELECT DISTINCT last_name FROM people ORDER BY birth_date

This has now been corrected.

492780 When an ODBC datasource was modified on Windows, the permission settings on the registry key were modified. This has been corrected.
492783 If an application using the iAnywhere JDBC driver called ResultSet.getDouble() to fetch a numeric value, then there was a chance the JDBC driver would have thrown an "invalid numeric string" exception. This problem would only have happened if the application was using the Java print service and the default locale was a European one. Note that calling ResultSet.getBigDecimal() did not have the same problem, hence calling ResultSet.getBigDecimal().doubleValue() is a workaround for this problem. The original problem has now been fixed.
492788 Trying to use the named parameter ODBC_State with the report_odbc_error script would have resulted in an error, with ODBC_State being reported as an invalid system parameter. This has been fixed.
492814 A user without administrator permission was unable to start, stop or delete SQL Anywhere services on a Windows 2003 machine, even if that user had been granted permission by an administrator to control those services. This has been fixed.
492960 Server-initiated synchronization requires the SendDownloadAck extended option to be enabled, but this would not be enabled for a SQL Anywhere remote database that had been setup for SIS through deployment from a synchronization model. This has been fixed. The workaround for this is to enable SendDownloadAck on the remote advanced options page when deploying.
493049 If the very first request to a remote server was executed by an user event at the time the server was shutting down, or during a server startup that fails, then the server may have crashed. This has been fixed.
493071 The server could have crashed if a connection was attempted at the same time as a connection was in the process of disconnecting. The likelihood of this occurring would have been extremely rare due to the very small timing window. This has now been fixed.
493096 When a server has more than 200 concurrent connections, the liveness timeout should be automatically increased by the server to avoid possible dropped connections. This was not being done until the server had at least 1000 concurrent connections. This has been corrected.
493210 The Deployment wizard would have failed when deploying a synchronization model with a table with a LOB column on an Oracle consolidated database with timestamp download, or using shadow tables to record deletions. The Deployment wizard was attempting to create a trigger specifying LOB columns, however, Oracle does not support creating triggers with LOB columns specified. This has been fixed by creating the triggers on the table, rather than the columns.
493217 In certain rare situations calls to the MOD() function with NUMERIC or DECIMAL arguments, could have caused the server to crash, or to report an unexpected error. This has been fixed.
493219 When using non-persistent HTTP, the length of the end_synchronization phase in the Monitor could have been shown as taking a long time (at least equal to the connection timeout interval), even though the sync successfully completed much earlier. The strange display made it hard to interpret what was going on. This has been fixed.
493330 When running Visual FoxPro the behaviour of the ODBC driver was different between version 9.0 and version 10.0. Version 10.0 reported different error messages when closing connections. This has been fixed so the behaviour is now consistant between versions.
493337 MobiLink clients could have failed to parse Set-Cookie HTTP headers sent by web servers and would have returned the error STREAM_ERROR_HTTP_HEADER_PARSE_ERROR. This has been fixed.
493442 Very large or very small numbers could have been displayed in exponential notation. This was different from previous versions of the software where numbers were displayed in plain decimal notation. Now, very large and very small numbers are displayed in decimal notation again. Also, the numbers that are written by the OUTPUT statement are now also similarly formatted using normal decimal notation.
493478 Incorrect results could have been returned for for some queries with row limitation (using FIRST, TOP, and/or START AT clauses), when a query was not read-only and when a temporary table was required to execute the query.

For example:

SELECT TOP 14 * FROM table ORDER BY table.column

when there was no index that could be used to order the data. This has now been fixed.

493578 Attempting to add a row to a table which contained a UNIQUEIDENTIFIER column using the table in the "Results" panel could have caused Sybase Central to crash. This problem affected the Interactive SQL utility dbisql as well. It has now been fixed.

Note that the problem was restricted to UNIQUEIDENTIFIER columns which could not be null and which did not have default values.

493708 Older MobiLink clients (version 8 and 9) may have failed to synchronize with an "Out of memory" error. This error should have been reported as "unknown character set". This has been corrected. The character translation mechanism can no longer translate characters from DECKanji or Turkish8 (possibly others). There is no workaround for this issue.
493715 If a database requires recovery, executing "START DATABASE {database name} FOR READ ONLY" would fail with the error "Unable to start specified database: unable to start database {database name}". This has been fixed; the error message will now read "Unable to start specified database: not expecting any operations in transaction log".
493729 A problem introduced by changes for Engineering case 489871 made it possible for database recovery to fail with databases using the -m switch to truncate the transaction log at each checkpoint. This was not an issue if -m was not being used. This has been fixed.
493730 In rare, timing dependent cases, the server could have hung on multi-processor systems with one processor at 100% usage when iterating through connection handles (for example by using sa_conn_list or sa_conn_info). This was extremely unlikely on single processor systems, or on a server that had a low rate of connects and disconnects. This has been fixed.
493738 Performing an ALTER TABLE statement on a table with blob columns may have caused corruption in the database. The most likely symptom of this would have been a crash when selecting from a table that has been altered. This has now been fixed.
493741 An attempt to alter a column to DEFAULT NULL would have been ignored. This has now been corrected.
493744 In the following situation:

1) A procedure call in the FROM clause consists of a single SELECT statement and nothing else

2) The FROM clause inside the procedure from 1) also consists of a single SELECT and nothing else

then the procedure from 2) may be looked up in the context of the current connection rather than the owner of the procedure in 1). This is fixed.

Note that this is not a security hole since the incorrect lookup is done in the context of the current connection.

493757 The server could have crashed when inserting a row into a wide clustered index (one on many columns, or on long strings). This has now been fixed.
493762 Incorrect results could be obtained for for some queries that used indexes in which there was more than one nullable column. This was corrected.
493882 SQL Anywhere allows the user to control how the affects of the LOAD TABLE statement are logged for recovery purposes. Some new forms of recovery logging, namely CONTENT LOGGING and ROW LOGGING, are supported in version 11 of the server. These forms of logging require that the database be upgraded or created with the new server. Further, CONTENT LOGGING is the default used by SQL Anywhere when the data source for the LOAD TABLE statement is an expression or a client file. The LOAD TABLE statement would have failed with an error if the database was being run without a transaction log and the logging type in effect is not FILENAME LOGGING, the old logging type. This has been corrected so that the server now accepts all logging types as valid when the database is running without a transaction log because there is nothing to be logged in this scenario, thereby allowing LOAD TABLE to execute without error.
494020 In very rare cases, the server may have crashed on recovery, or failed to recover with other errors, most likely related to database page access. This problem was only possible if the server crashed in the midst of a checkpoint. This has now been fixed.
494029 The -uc option (Start server in console mode) was not support by the server when run on MacOS systems. This has now been corrected.
494052 When exiting an unchanged synchronization model, the MobiLink plug-in could have prompted to save it if a table mapping was selected and then the Events tab was switched to. This has been fixed.
494151 Text index operations on a database created without the default "DBA" user would have failed with an error. This has been fixed. A work-around is to create the database with the default "DBA" user. Note that it is not enough to add the user after the database is created. The work-around will only be sufficient if the following query returns "1":

select user_id from sysuser where user_name='DBA'

494155 UltraLite requires that each table have a primary index. Using SQL statements, it was possible to remove or rename this primary key, which would eventually have lead to a crash of the UltraLite application. Attempting to remove or rename a table's primary key will now result in an error.
494182 If a version 10.x database was updated using the version 11 beta, then the upgraded database would have been missing some system foreign key mappings. The problem was most evident when the customer tried to unload the upgraded database. This problem has now been fixed.
494184 The SACommandBuilder class did not implement the QuoteIdentifier method. The QuoteIdentifier method has now been added.
494259 A column could have been altered to have a different datatype, even when column was in a foreign key or constraint. This is now disallowed.
494266 The Create Trigger wizard would have generated a trigger with an invalid REFERENCING clause. The clause was created as a comment, so while the statement would have compiled, attempting to uncomment the REFERENCING clause and saving the trigger would have failed. This has been fixed.
494272 Running a generated SQL file for a new remote database, for a DB2 consolidated, with a table with Graphic columns could have given a syntax error. The DB2 consolidated Graphic types would have been mapped to long binary types in the SA remote database, however a length for the column would have been specified resulting in a syntax error. A workaround would be to manually edit the generated SQL file. This has been fixed.
494280 After installing an application from a Microsoft Windows Installer package that was created using the Deployment Wizard, if the application was created with Visual Studio 2005 C# and used System.Data.OleDb, updating the database would have generated an error for which there was no text. This has been corrected.
494283 If an INSERT statement contained a VALUES clause (Syntax 1), it should not contain WITH AUTO NAME. For example, consider the following statement:

insert into tauto with auto name values(1,2,'',4)

WITH AUTO NAME was being accepted, but ignored, for these types of INSERT statements. This has been changed so that the statement will now give a syntax error.

494295 Attempting to execute a query that used the CONTAINS clause on a table owned by another user would have failed with a "table not found" or "Permission denied" error. This has now been fixed.
494297 When the Unload utility dbunload is used with a 10.0 or later database, the version of dbunload used must match the version of the server used to access the database. If an older dbunload is used with a newer server, or vica versa, an error is now reported. This is most likely to occur if dbunload connects to an already-running server. The same restriction applies to the Extraction utility dbxtract.
494310 If a materialized view was dropped as the result of dropping a user, and this was done concurrently with other database requests, the server could crashed, or failed assertions. Database corruption was also possible. This has now been fixed.
494319 If the Unload utility was used to perform an internal unload (-ii or -ix command line option) from a Windows client while connected to a Unix server, unloaded data files would have been created with a backslash character in the file name instead of being placed in a sub-directory of the server's current working directory. Furthermore, the generated reload.sql script referenced these data files using forward slashes, making it unusable without modification. A work around is to append a forward slash to the end of the directory name passed to the dbunload utility.
494356 A QAnywhere .NET application could have hung if a QAManager API method was interrupted by an exception in one thread and another thread subsequently called a method on the QAManager that was interrupted. This has been fixed.
494364 End-to-end encryption could have failed, or hang, the synchronization, although the probability of failure was quite low. This has now been corrected.
494414 An application could have crashed if an invalid protocol option was used in the connection string (for example links=tcpip(invalid=value) ). This has been fixed.
494431 An error could have incorrectly been given when converting a string such as '+123' to one of the following types: INT, UNSIGNED INT, BIGINT, UNSIGNED BIGINT. A redundant '+' is permitted at the beginning of the string when converting to a number. Prior to the changes for Engineering case 392468 (10.0.1 build 3476), the conversion incorrectly gave an error for BIGINT and UNSIGNED BIGINT, but the correct behaviour was given for INT and UNSIGNED INT. In 10.0.1 build 3476 and later, the error was generated incorrectly for all of the above listed types. This problem has been fixed.
494448 Catalog information about a materialized view could have been inaccurate following execution of a REFRESH MATERIALIZED VIEW statement that had failed. This has been fixed.
494449 Under rare circumstances, the server could have crashed while executing a trigger defined for multiple events. This has been fixed.
494450 Global shared temporary tables were being unloaded as regular global temporary tables (ie non-shared). This has been fixed.
494462 When attempting to call a stored procedure in an ADO application, the OLE DB provider could have returned an "invalid parameter type" error. The order of the parameters in the procedure was not determined correctly by the provider. This has been corrected.
494579 When changing a column's DEFAULT value to "No default value", a syntax error would have been reported. The plugin was incorrectly executing the statement ALTER TABLE t ALTER c DROP DEFAULT. This has been fixed so that the plugin now uses the correct syntax ALTER TABLE t ALTER c DEFAULT NULL.
494583 The Index Consultant wizard leaves the Interactive SQL utilirt (dbisql) is a state such that autocommit is on. This has been fixed.
494708 It was possible for the server to fail assertions 201866 - "Checkpoint Log: Page 0x%x is invalid" or 201864 - "Checkpoint log: Invalid page number on page 0x%x", for a database containing a corrupted page in the checkpoint log. This could have occurred in cases where it was safe for the server to ignore the corruption and recover the database. This has been fixed. The assertions never occurred in databases that didn't contain corruption.
494710 Incorrect results could have been returned when there was an ORDER BY clause that caused a temporary table to be generated. For this to hace occurred there must have been a subquery expression in the select list that referred to a table that could be updated, and the query had to have been potentially updateable (FOR READ ONLY was not specified).

This was corrected. The work-around is to specify FOR READ ONLY on the query.

494963 When there were at least three joins in a query table expression and there was a reference from the ON condition to a column in a table at least three preceding, an incorrect syntax error may have occurred. This has been corrected.
494983 If the last page of the transaction log was only partially written, perhaps due to a power failure, it was possible that the database would not have been able to recover on startup. It is most probable that this would have occurred on Windows CE. The likely error would have been a failure to validate the checksum on the page. This has been fixed.
495001 If an application made concurrent connections with both YES and NO boolean parameter values, the application could have crashed or the boolean connection parameters could have been interpreted incorrectly. This has been fixed.
495092 Messages displayed by many of the utilities (ie dbunload, dbvalid, etc) may have been truncated. The message display buffer size has been increased to correct this problem.
495093 When modifying the SQL text for a materialized view, if the original materialized view had a refresh type of 'Immediate', then an error would have occurred while attempting to save the view. In addition, a temporary view (with a name ending in an IP address and timestamp) would have remained. Both of these issues have been fixed.
495145 HTTP or HTTPS synchronizations may have failed or hung, particularly on slow or low-quality networks. This has been fixed.
495146 Synchronizations with may have failed or hung, particularly on slow or low-quality networks. This has been fixed.
495147 Synchronizations using end-to-end encryption may have failed or hung. This has been fixed.
495225 When editing a synchronization model, if one or more rows in the column mapping editor were marked for deletion, attempting to revert changes to the model could have caused Sybase Central to crash. The same problem could have occurred when attempting to select another item in the tree and answering "No" to the "Do you want to save changes?" dialog. This has now been fixed.
495231 Executing a COMMENT ON INTEGRATED LOGIN statement could have caused the server to crash, or to fail an assertion, if executed concurrently with other commands. This has been corrected.
495236 There was a chance that the server would have crashed when making the connection to a remote server using one of the JDBC based Remote Data Access classes. This problem has been fixed.
495240 If an ALTER <column> statement encountered an error, subsequent statements could have erroneously failed with the error SQLE_SCHEMA_UPGRADE_NOT_ALLOWED, and/or the runtime could have experienced a crash at some later point. This has been fixed.
495369 The performance of some queries has degraded from what it was in version 9. Further optimizations have been added so that the performance has been restored.
495375 The result set returned when SAConnection.GetSchema("ProcedureParameter") was called, would have been in an unpredictable order. This has been fixed by adding an ORDER BY clause to the query statement.
495381 If ulview.exe was used to build a USM file and a column was added to the primary key of a table after adding the same column to an index, would have resulted in protocol error when

attempting to synchronize. This has now been fixed.

495396 If a client connection went away (eg. the client application crashed), it was possible for the server to have crashed. This was very rare and timing-dependent. It has now been fixed.
495406 In SQL Anywhere, the language supported for the definition of manual views is a proper subset of the SQL supported by the server. Further, the language permitted for immediate views is a proper subset of that supported for manual views. A new clause has now been added to the CREATE MATERIALIZED VIEW statement to allow users to validate the statement without actually creating the view.

Syntax:

CREATE MATERIALIZED VIEW

...

[ CHECK { IMMEDIATE | MANUAL } REFRESH ]

Syntax Rules:

When used, the CHECK clause has the following effect:

1. The server performs the normal language checks that would be carried out if CREATE STATEMENT was executed without the clause and any errors generated are reported returned as usual.

2. The server does not carry out the actual creation of the view which means that certain errors, such as the specified name already existing in the database, are not generated and the CHECK clause can be used even for an existing view. This feature can be useful when a user is considering changing the definition of an existing view but does not know if the new proposed definition will be accepted by the server.

3. If CHECK IMMEDIATE REFRESH is used then the server will also verify that the syntax used is valid for an immediate view and will raise any appropriate errors.

4. The server makes no changes to the database and nothing is recorded in the transaction log.

5. The statement performs an implicit commit at the beginning of execution and a rollback at the end to release all locks obtained during execution.

495506 SQL statements that are executed both before and after a SETUSER statement may have ncorrectly referred to the wrong user's objects.

For example, if connected as user u1 and the following executed:

select * from t;

setuser u2;

select * from t;

then the second SELECT could have incorrectly returned the results for u1.t instead of u2.t. This has been fixed. Setting the database option max_client_satements_cached to 0 will workaround this problem.

495514 The MobiLink system table ml_qa_status_history in a consolidated database would have grown without limit. This happened with all QAnywhere supported consolidated database types. This has been fixed so that when delete rules cause messages to be deleted in the consolidated database, the corresponding rows in the table ml_qa_status_history are now deleted. An existing ASA consolidated database will be automatically upgraded with the fix for this problem. For other consolidated databases, the MobiLink setup script for that database must be executed.
495574 The server could have crashed, or failed assertions, when scanning many values from an index containing many and/or wide columns. This has now been fixed.
495578 The method ULDataReader.GetBytes() would have returned null if invoked for a binary(n), or a long binary, column containing an empty string (ie. a zero length not null value). This has been fixed. GetBytes() will now returns a zero length array of bytes.
495677 The builtin function regexp_substr() could, in some cases, have lead to the following non-fatal assertion failure: 106901 "Expression value unexpectedly NULL in write". This assertion would have failed if the arguments to regexp_substr() were all expressions marked as not-NULL. This has been fixed.
495686 The server supports an extension to the MERGE statement that allows for an error be raised under certain circumstances. The server will now pay attention to the ERROR clause and generate an error as expected. In addition, the ERROR clause of the MERGE statement has been changed to to use RAISERROR instead.
495700 As of Engineering case 408481, exists() subqueries were not flattened during rewrite optimizations if the subquery contained more than two tables in the FROM clause, and it was not known if the subquery returned at most one row. Now, for a subquery to not be flattened, it must also contain other nested subqueries.
495701 The server allows an application to raise a customized error by means of the RAISERROR statement. The server also provides for a built-in global variable, SQLCODE, whose value can be examined to determine the specific error raised during the execution of the last statement on the current connection. The server will now report the correct user specified error number for SQLCODE instead of a fixed -631.
495702 For some column data types in a consolidated database, a new remote database could have been created with inappropriate types. For example, a column with the ASE UNICHAR type was previously mapped to a LONG BINARY column type in a new SQL Anywhere remote database. This has now been corrected.

A work around would be to deploy to a SQL file and edit the file using the recommended data type mappings that are documented in this section of the documentation:

MobiLink - Server Administration > MobiLink Data Mappings Between Remote and Consolidated Databases

495705 When the MobiLink Client was launched using the Dbmlsync Integration Component, it was possible to view the username and password in the dbmlsync command line in plain text. This has been corrected so that the Dbmlsync Integration Component will encrypt all the command line options and settings before passing them to dbmlsync. Dbmlsync will then decrypt the options and settings.

Note, this fix does not apply to the Dbmlsync Integration Component running on Windows CE systems.

495872 If a query contained a "GROUP BY GROUPING SETS" or CUBE clause, it was possible for the server to fail the query with an assertion failure such as: 102501 "Work table: NULL value inserted into not-NULL column". The problem would only have occurred for specific query access plans if there were no rows input to the GROUP BY. This has now been fixed.
495929 Attempting to execute a query that references a proxy table that contained nchar or nvarchar columns, may have failed assertion 106808. The server was incorrectly setting the semantics to byte length, instead of character length, when describing nchar and nvarchar columns in proxy tables. This problem has now been fixed.
495943 If the constant 0.0 (one decimal separator and all digits zero) was used in the select list of a SELECT statement, it would have been described as a numeric(0,0), and a SELECT statement with an INTO <permanent_table> clause would have failed with a syntax error. This has been fixed so that the constant 0.0 is now correctly described as numeric(1,0).
495956 Executing the statement ALTER DATABASE <dbfile> MODIFY LOG ON, where no transaction log name was specified, would have disabled transaction logging for that database, equivalent to specifying "... LOG OFF". This has been fixed. Including a transaction log filename in the statement would have behaved correctly.
495960 In very rare and timing-dependent situations, a cancelled backup could have caused the request, and ultimately the server, to hang. Typically, for this problem to have occurred, the cancel would have had to occur quite quickly after the backup began. This has been fixed.
495962 If an application issued a statement like "DELETE FROM t WHERE c = @v", and the table t was a proxy table and @v was a variable of type nchar, nvarchar or long nvarchar, then the query would have failed with a "not enough host variables" error. This problem has now been fixed.
495980 In order to optimize database access, the MobiLink scripts can be considered "read-only" when the -f option is specified. In this mode, the ml_global version of scripts would have been checked for changes before each synchronization. This has been corrected so that

the check is only done once at startup.

496061 If a BEFORE trigger changed an update back to the original value of the row, then the update would still have been logged, even though it was a no-op. This is now only done if a resolve trigger is fired, which matches the behaviour of previous versions.
496068 If a DML statement modified a table, and also referred to the table indirectly through a non-inlined procedure call, then anomalies could have occurred. This has been fixed by forcing a work table for any DML statement that references a procedure call.
496071 The server uses column statistics in order to estimate the number of rows that satisfy a given predicate. The column statistics are maintained as histograms that attempt to capture the data distribution of values in the database for a given column. The server could have incorrectly estimated the selectivity of BETWEEN predicates under certain circumstances. Note that a BETWEEN predicate might be inferred by the server if the query contains appropriate conjunctive predicates. As an example, "c1 >= 5 AND c1 <= 10" is semantically equivalent to "c1 BETWEEN 5 AND 10". This estimation problem has been resolved.
496087 In rare instances, assertion failure 201822 "Checkpoint log: attempt to allocate before recovery is complete" could have been reported during database recovery. The problem has been fixed. If this problem is encountered, recovery with a server containing this fix should complete normally.
496094 Using the REWRITE() function on a some forms of queries could have resulted in the server going into an infinite loop. This has been fixed.
496102 The MobiLink server would have sent user authentication status 4000 to a client if it was not able to run the user authentication scripts if errors had already occurred before it had a chance to invoke these scripts, or it could not successfully run the scripts due to errors when executing the scripts, or errors occurred internally in the server. Then the client would generated the error: "Invalid MobiLink username, password, or script version". This has now been fixed. The MobiLink server will send the error code, 11310 and error message "Unable to authenticate the user" to the clients. The long description for this error code is "The MobiLink server was not able to authenticate the user. Please check the MobiLink server message log for more details".
496106 When deploying a Synchronization Model to a Microsoft SQL Server database, in which the name of the table owners were different then the current user's username, an error would have occurred. This has been fixed.
496109 Creating a synchronization model, where a synchronized remote table did not have all columns synchronized, would have caused a warning that that it was not compatible with an UltraLite remote database, since UltraLite publications can not use column subsets. However, such a synchronization model could still such as: [-10050] "Expecting 8 columns in cursor, but found 7". This has been fixed. Now, synchronization models cannot be deployed to an UltraLite remote database unless all columns are synchronized in the synchronized remote tables.
496110 Incorrect results may have been obtained for queries involving GROUP BY, ORDER BY and HAVING clauses, where no indexes exist to implement the grouping and the ordering, and where the grouping was such that the ordering could not have been implied Plans of this situation would have shown two temporary tables being present. This has now been corrected.
496113 Under rare circumstances, during diagnostic tracing with the 'plans_with_statistics' tracing level set, query plan information for a DML statement could have been missing. In such cases, viewing the plan for the statement in the Profiling Mode would not be possible. This has been fixed.
496114 Graphical plans with detailed statistics that contained an index scan would not have shown values for the statistic CacheReadIndInt, and the values for CacheReadIndLeaf would have included internal and index leaf page reads. This has now been fixed.
496131 Graphical plans with detailed statistics could have contained invalid values for the statistic "Estimated pages in cache". Under rare circumstances, invalid values could also have been displayed for the "Estimated rows", "Estimated pages" and "Estimated row size" statistics. This has been corrected.
496241 If application profiling data was stored in an external tracing database, trigger names may not have been attached to the statements executed within the triggers. This has been fixed.

Note that the statement data was still saved in the tracing database - it was just not linked to the trigger, and was displayed in the Profiling mode in the Details tab with

"Procedure or Trigger Name" set to NULL.

496242 For Microsoft SQL Server's new datatypes VARCHAR(MAX), NVARCHAR(MAX), and VARBINARY(MAX), a new remote database could have been created with inappropriate types. Micrsoft's ODBC driver returns the same metadata for VARCHAR(MAX), NVARCHAR(MAX), and VARBINARY(MAX) as for TEXT, NTEXT, and IMAGE, but with a size of 0. This has been fixed so that new remote databases will now be created with correct types. A check has been added for a size of 0 on these particular data types in order to identify them correctly.

A workaround would be to use datatypes TEXT, NTEXT, and IMAGE which correspond to the new datatypes.

496281 The ml_remote_id option would have incorrectly been set to the string value 'null' when reset using the UltraLite plugin. This has been fixed.
496407 In exeptionally rare circumstances, the server may have crashed trying to collect information about database pages to be loaded (cache warming) the next time the database was started. This has been fixed.
496429 Graphical plans for Group By queries that were executed in parallel, did not report group by expressions or aggregates in the tooltip and details pane for GroupBy below Exchange.

This has been fixed.

496435 An application using the iAnywhere JDBC driver on Unix systems, could have crashed when making a connection. This problem has now been fixed.
496438 An application using the iAnywhere JDBC driver, that had many threads that were opening and closing connections or statements, may have crashed during garbage collection. This problem has now been fixed.
496439 When a database application attempted to use a feature that had been secured, using the -sf server option, the error message that resulted did not state the correct feature name. This problem has been fixed.
496450 Attempting to execute an ALTER TABLE statement to add a computed column that involved a Java call would have caused the server to either fail to start the Java VM, or to hang. This problem has now been fixed.
496453 The Connect Assistant would have failed to find servers if they were on a different subnet. This has been fixed.
496526 When inserting rows using an opened cursor, rather than using an INSERT statement, computed columns would not have been properly evaluated. This has been fixed.
496538 The Interactive SQL utility dbisql would have reported an internal error when attempting to open a SQL file which was larger than about 5 MB. This has been fixed so that it now an reports an error saying that there was not enough memory to open the file.
496545 The Certificate Creation utility createcert would have generated invalid server certificates when signing them using a CA certificate generated by gencert (the previous certificate generation utility). Although the server certificate itself looked fine, clients would not have been able to properly identify the trusted CA certificate that signed it, and so it would have been rejected as untrusted, even when the client had the correct CA certificate in its list of trusted CAs. This has been fixed.
496546 Using a CONTAINS search in a SELECT INTO could have failed with an error, or caused the server to crash. This is now fixed.
496551 Changing a Materialized View and then refreshing the folder, would have caused the plug-in to throw a NullPointer Exception. This has been fixed
496567 The MobiLink system table ml_qa_status_history in a consolidated database would have grown without limit. The problem only occurs for ASE consolidated databases. To correct this in existing ASE consolidated databases, the trigger ml_qa_repository_trigger needs to be changed by running the following script on the consolidated database after it has been initialized with the MobiLink setup script:

delete from ml_qa_status_history where msgid not in (select msgid from ml_qa_repository)

go

commit

go

drop trigger ml_qa_repository_trigger

go

create trigger ml_qa_repository_trigger on ml_qa_repository for delete

as

delete from ml_qa_repository_props from deleted d, ml_qa_repository_props p

where d.msgid = p.msgid

delete from ml_qa_delivery from deleted d, ml_qa_delivery p

where d.msgid = p.msgid

delete from ml_qa_status_history from deleted d, ml_qa_status_history p

where d.msgid = p.msgid

go

496568 The iAS ODBC driver for Oracle could have shown poor performance when concurrent access was required by multi-threaded applications, such as the MobiLink server. This problem has been corrected.
496715 Very rarely, a query that used index only retrieval, together with snapshot isolation, may have returned a wrong result. This has been corrected
496719 When rebuilding, by unloading and reloading, a version 9.0 database that had Remote Data aAcess servers defined, there was a possibility that the reload would have failed with a "capability 'aes_encrypt' not found" error. This problem has now been fixed.

The workaround is to edit the reload script and change all occurrences of 'aes_encrypt' to 'encrypt'.

496762 If a database being unloaded was created with accent sensitivity on, or "french", the CREATE DATABASE statement included in the reload.sql file created by dbunload would not have contained the ACCENT RESPECT, or ACCENT FRENCH, clause. This has been fixed.
496897 An application using the iAnywhere JDBC driver would have leaked memory when making multiple DatabaseMetaData calls. The driver was not releasing references to Java strings. This problem has been fixed.
496899 An application using the iAnywhere JDBC driver would have leaked memory when executing statements that returned multiple result sets. Executing statements that return a single result set will not be affected by this problem. The driver was failing to implicitly close pending result sets for statements that returned multiple result sets. This has now been fixed.
496906 The server, and client applications, would have leaked memory on Solaris SPARC 64-bit and Solaris x64 when negotiating a shared memory connection. This has been fixed.
496921 When deploying a synchronization model to an encrypted database, the encryption key would have been visible in the messages dialog, as well as in the scripts generated for the remote database. This has been fixed by trimming the DBKEY out of the connection string.
496937 When run on Mac OS X systems, an IndexOutOfBoundsException could have been thrown when navigating the object tree. This has been fixed.
496969 When the QAnywhere Agent was running on a device that was not connected to a network, each time a QAnywhere application queued a message the CPU usage increased slightly. This has been fixed so that now, when the device is not connected to a network, queueing a message uses about the same amount of CPU regardless of whether or not the QAnywhere Agent is running. Moreover, the required CPU usage stays constant as messages are queued.
497105 If request log filtering by database was enabled using:

call sa_server_option('RequestFilterDB', <db-id> )

query plans from statements executed on other databases on the same server would still have appeared in the request log. This has been fixed.

497114 Executing the system procedure sa_materialized_view_can_be_immediate() with the name and owner of an immediate materialized view that had a definition containing a LIKE 'x%' predicate, could have failed with an error that the view was not eligible to be an immediate materialized view. This has been fixed.
497117 Applications could have crashed after specific sequences of PREPAREs and EXECUTEs, or OPENs, if the option max_statement_count was increased from its default value. In particular, for the crash to have occurred a connection must have done at least 50 PREPAREs, then at least 500 EXECUTEs or OPENs, then have had at least 50 statements concurrently prepared or opened. This has been fixed.
497121 In some cases, actual node statistics were not reported for 'hash filter' and 'hash filter parallel' in graphical plan with detailed statistics, including node statistics.

Also, in some cases actual statistics were not reported for recursive unions. This has been fixed.

497256 When calling the ODBC function SQLGetInfo(), the driver will return an indication that conversion from SQL_VARCHAR to SQL_WVARCHAR is possible using the ODBC CONVERT function.

For example:

rc = SQLGetInfo(hdbc, SQL_CONVERT_VARCHAR, (SQLPOINTER)&bitmask, sizeof(bitmask), NULL);

This will return with the SQL_CVT_WVARCHAR bit set in bitmask which indicates that the conversion is possible. However, attempting to do the conversion will return an error. This is illustrated by the preparing the following statement for execution:

SELECT {fn CONVERT(Surname,SQL_WVARCHAR)} FROM Employees

The error is "[42000][Sybase][ODBC Driver]Syntax error or access violation".

This problem has been fixed. Support has been added for conversion to types SQL_WCHAR, SQL_WLONGVARCHAR, SQL_WVARCHAR, and SQL_GUID.

497264 In rare cases, an HTTP request with a SessionID may have caused the server to crash. This has been fixed.
497458 Undefined errors could have occurred if ULDatabaseManager::CreateDatabase() was called with a null collation. This has been fixed so that a SQLE_INVALID_PARAMETER ULException will now be thrown for a null collation.
497467 The unparsing of an alias was incorrect in some cases. The alias was represented as a '*' in an unparsed statement. This may have been observed in plans generated when using the -zx server command line option to log expensive queries. This has been fixed.
497495 The OUTPUT statement was writing DECIMAL numbers with thousands separators. This was an inadvertent change from previous versions and caused an ambiguity when writing ASCII files if the field separator was the same as the thousands separator. This has been fixed.
497501 The server was ignoring the correlation name of columns in the column list of the INSERT statement. This has been fixed so that if the correlation name exists and it doesn't match the name of the INSERT INTO table, then the error (SQLSTATE_COLUMN_NOT_FOUND 52003 -143L) is now returned.

Example:

INSERT INTO R ( T.X, R.Y) values (1,2) will now return an error because the column T.X cannot be found.

497502 If an application that was using Java in the database support spawned additional threads that were still running when the database was shut down, then the JVM would havel continued running until these additional threads shut down. This problem has now been fixed.

Note, if the application needs these threads to be notified of the shutdown, then the application must register a shutdown hook with the Java VM.

497504 If an application that was using Remote Data Access support executed a remote query that was very complex, then there was a possibility that the server would have crashed. This problem has been fixed.
497511 The diagnosis of invalid GROUP BY expressions has been enhanced.
497515 The Interactive SQL utility dbisql could have crashed on startup if it been configured to enable source control support. The crash depended on using the default Windows source control system (i.e. NOT the "custom" option), and would only have occurred if the source control system asked dbisql to display a message in response to opening the source control project. This has now been fixed.
497646 If a database connection ended and the JVM stopped, the Java class finializers were not called, which is correct Sun JDK behaviour. If Java classes had opened network or JDBC connections to other servers or applications, then these connections were not closed as well. In order to close these connections, or to release other resources, the application can call the Java method System.runFinalizersOnExit( true ), which force the JVM to run the finalizers of all not finalized classes. Althrough the call is deprecated in JDK 1.2 and above, it will still work in these versions. In version 10 and above applications can also use shutdown hooks to release resources. A fix has been now made so that the finalizers now run correctly at JVM stop, if the above method has been called. If no class instance is created, and a resource assigned to a static member should be released, the application may use an Uninit class as in the sample below:

public class SampleClass {

private static Uninit uniniter = null;

public static Connection conn = null;

static {

try {

uniniter = new Uninit();

System.runFinalizersOnExit( true );

conn = DriverManager.getConnection( "jdbc:sybase:TDS:RemoteServer:2638", props );

}

catch ( Exception e ) {

System.out.println( "Error: " + e.getMessage() );

e.printStackTrace();

}

}

....

}

497880 The server could have failed assertion 202001 while executing a query, if a temporary table was scanned that contained a string longer than the database page size. This has been fixed.
497887 If a 10.0 database, that had been initialized without jConnect support, was upgraded without explicitly requesting that jConnect support not be added, the upgrade would have failed. The upgrade attempted to insert duplicate rows into a system table. This has been fixed by having the insert use ON EXISTING SKIP.

A workaround is to perform the upgrade and request that jConnect support not be added. This can be done using the "-i" option of dbupgrad, or with: ALTER DATABASE UPGRADE JCONNECT OFF

497932 The 64-bit version of the OLE DB provider could have caused a page fault and terminated. This problem has been fixed.
497937 The following problems with the OLE DB provider have been corrected:

- conversion of multibyte strings to wide character strings (DBTYPE_WSTR) was not being done correctly for non-UTF8 character sets.

- DBTYPE_BYREF parameters were not supported.

- the provider would have crashed in the OLE DB Execute method when prepared statements did not have their parameter information set using the OLE DB SetParameterInfo method.

498031 The MobiLink File Transfer utility (mlfiletransfer) did not send liveness packets. This meant that for downloads of large files, the MobiLink server would have timeouted the client. This has been fixed.
498056 Scripts can be created that use user-defined parameters that are denoted by the {ml u.parm} syntax. Some ODBC drivers have a problem though with how the MobiLink server translates the SQL statement which would pass the parameter with IN/OUT attributes. This can now be overcome by using the new notation {ml ui.parm}. The MobiLink server will now pass this parameter with IN attributes.

A workaround previous to this new feature would be to code the script as a stored procedure call.

498183 In very rare circumstances, the iAnywhere JDBC driver may have crashed when a connection was being closed. This problem has now been fixed.
498198 In certain cases, altering a string column could have produced orphaned blobs. These orphans would have shown up as errors when a validation (dbvalid or VALIDATE statement) was run on either the database or the table. For this problem to have occurred, the table must have contained at least two string columns, with (at least) one column containing "long" strings, i.e., strings larger than approximately one database page. If a column other than the one containing long strings was altered to a size smaller than its inline amount, and then altered to a size larger than its inline amount, the long strings would have become orphaned. Note that the default inline amount for a CHAR column is 256. This has now been fixed.

For example:

CREATE TABLE test(col1 long varchar, col2 char(1000))

// ... insert long data into col1

ALTER TABLE TEST MODIFY col2 CHAR(10)

ALTER TABLE TEST MODIFY col2 CHAR(1000)

VALIDATE TABLE TEST

A workaround to the validation failure is to rebuild the database using dbunload or the Unload wizard in Sybase Central.

498204 The server could have crashed shortly after starting a database with dbspaces that had no deletes or updates performed on them. This has been fixed.
498337 Queries with complex WHERE condition containing at least one element of the form "( col1 > constant1 AND col1 < constant2 ) OR expression", with constant1 < constant2, may have incorrectly returned more rows.

For example the following query will return rows with value 0 and 8 for column "a":

SELECT a FROM T1

WHERE

( a > 0 AND a < 2 ) OR ( a > 1 AND a < 3 ) OR ( a > 2 AND a < 4 ) OR

( a > 3 AND a < 5 ) OR ( a > 4 AND a < 6 ) OR ( a > 5 AND a < 7 ) OR

( a > 6 AND a < 8 ) OR ( a > 8 AND a < 10 ) OR ( a > 9 AND a < 11 ) OR

( a > 10 AND a < 12 ) OR ( a > 11 AND a < 13 ) OR ( a > 12 AND a < 14 )

This has been fixed.

498343 When the visual version of the Dbmlsync Integration Component activex was used on Japanese Windows XP, the font selected for the log window did not support Japanese characters. As a result any Japanese text printed to the log window was garbled. An appropriate font is now used.
498393 When sending diagnostic tracing data to a remote database, if the tracing database was stopped, or the connection to it was interrupted, before diagnostic tracing was stopped, the database server could have crashed. This has been fixed.
498395 In vary rare circumstances, a Solaris client application may have crashed when attempting to connect to a server. This would have occurred if the communications initialization code failed to allocate some memory. This has been fixed. The client connect request will now receive a -86 "Client out of memory" error in these instances.
498529 A cursor using a temporary table and a procedure call could have resulted in a server crash. This has been fixed.
498533 The -onerror command line option was being ignored if the Interactive SQL utility was not connected to a database. This has been fixed.
498540 When connected to a database mirroring system, viewing the Database Mirroring section of the Overview tab in Sybase Central would have displayed an incorrect value for the primary server's state file when the full path for the state file was specified on the server's command line. This has been corrected.
498568 If a user U1 with DBA authority granted permissions on a table or view to another user U2, and then DBA authority was revoked from U1, U2's permissions should have been affected immediately. Instead, this change did not appear until the database was restarted. This has been fixed.
498583 The server would have rejected a SOAP request containing XML comments with a '400 Bad Request' status. This has been fixed. Comments are now ignored by the server.
498727 Starting the server with the command line option -x none (or -x shmem), and no -xs option, causes the server to only listen for connections requests over shared memory. However, if the -z switch was also used in this case, messages about TCP initialization were still displayed. This has been corrected so that these messages will no longer be displayed in this case.
498793 When the Interactive SQL utility was run in console mode, if there was an error fetching rows from a result set, the cause of the error (if known) was not being displayed. This has been fixed. Note that this problem existed only in console mode; when run as a windowed program, the full error information was displayed.
498860 If a database was backed up, and then an attempt to create a proxy table was made shortly after the backup finished, then there is a likely possibility that the server would have hung. This problem has now been fixed.
498876 Under very rare conditions, the server could have hang during a rowscan over a table that had character or binary data. For this problem to have occurred, the data must have been longer than the column's INLINE amount, which defaults to 256 bytes, for both BINARY and CHAR types. This has been fixed.
498902 The value returned when calling property('MaxRemoteCapability') would have been 1 higher than the number of the last remote capability. This has been fixed.
499112 In certain cases where character set conversion was applied to character data, the server could have gone into an infinite loop, consuming nearly 100% of CPU usage. For this problem to have occurred, the source string must have either contained null bytes, or characters that were ill-formed or illegal in the database character set. This has been fixed.
499233 The server may have got into an infinite loop trying to convert an invalid date, time or timestamp value to an integer. This has been fixed.
499250 When creating or altering a SERVICE that required a statement, a check was missing to ensure that the service was properly configured with either a SELECT or a CALL statement. A misconfigured service would have always returned a '400 Bad Request' HTTP status for all requests. This has been fixed.
499252 HTTP response headers were not set as expected if the SERVICE made a nested call to an inner procedure from where the sa_set_http_header() system procedure was called. Headers cannot be set by the inner procedure because the server has already sent the headers prior to the call. This has been fixed so that calling sa_set_http_header, when the HTTP headers have already been sent, will now result in a SQL error: Invalid setting for HTTP header.
499301 When using the New Remote Tables command to add a table to a remote schema in a synchronization model, if the consolidated table had columns matching the timestamp column for timestamp-based download, or logical delete column for logical deletes, then an invalid column mapping would have been created. This would have caused script generation errors. This has been fixed. A work around would be to create a new sync model.
499313 It would not have been possible to connect to a "Generic ODBC" database if the password contained any of the following characters: "[]{}(),:?=!@". This has been corrected for all but the equals sign "=", the rest are now allowed.
499440 The system function YMD(), may have returned an invalid date from the input arguments. This has been fixed.
499484 The comparison of two strings may not have worked incorrectly when using the UCA collation. For this problem to have occurred, the strings must have been longer than 1024 bytes, have been linguistically equal in the characters of the first 1024 bytes, but have been binary distinct.

For example, on a UCA database:

select if repeat('a', 1024) || 'a' = repeat('a', 1024) ||'b'

then 'equal'

else 'not equal'

endif

would return 'equal'. This has been fixed.

499504 During Application Profiling in Sybase Central, attempts to specify a profiling log in the option "Use The Profiling Information In The Following Profiling Log File As A Baseline For Comparison", of Profiling Settings tab of the Database Properties window, could have failed with an error. This has been fixed.
499522 If the Unload utility (dbunload) was started with the -ep command line option, but without -ar or -an, the prompt dialog box would have displayed the string "Please enter the encryption key for ???:". This has been fixed. The string now reads "Please enter the encryption key for the data files:".
499683 The SQL Anywhere server performs security checks when executing a query to make sure that the user has the necessary permissions for the operation. Under certain circumstances, involving complex queries and/or views, the server could have incorrectly raised a permissions error when the operation should have been allowed. Conversely, the server could have failed to reject an operation that should not have been permitted. This has been fixed so tha the server now applies permission checks correctly.
499702 Queries using the set operators UNION, EXCEPT or INTERSECT, on tables with publications, may have returned a "column/table 'x' not found" error. This has been fixed.
499874 Only users with DBA authority were allowed to run the Index Consultant from Interactive SQL. This has been corrected so that users with DBA or PROFILE authority are now permitted

to use the Index Consultant.

499897 When a remote procedure call was made, if it contained a bigint parameter then an incorrect value for the bigint parameter would have been sent to the remote server. This problem has now been fixed.
499956 If queries used an index, where the index keys were long, then in some situations, the server could have crashed. This has been fixed.
499958 Pasting more than a couple of million characters into dbisql could have caused the editor to become unresponsive, and eventually report an out of memory error. This has been fixed so that a check is now done to determine if there is enough memory to insert the text and display an error message if there is not.
499959 With ASA databases the QAnywhere server caches prepared statements to avoid re-preparing them on each statement execution. During periods of high activity however, the server could have reported "Resource governor for 'prepared statements' exceeded", followed by the failed execution of a SQL statement. This problem has now been fixed.
499969 When the event of a download_cursor, or a download_delete_cursor, in a MobiLink server synchronization logic was written as:

{call procedure_name( ?, ? )}

for consolidated databases running on an Oracle server, the iAS ODBC driver for Oracle may have given the error:

ORA-06553: PLS-306: wrong number or types of arguments in call to 'procedure_name'

if the stored procedure returned a result set and the word, "call" was not all in lower-case. This has now been fixed.

500005 During diagnostic tracing, nonvolatile statistics could have been recorded incorrectly. This has been fixed.
500007 Under rare circumstances, a server running diagnostic tracing could have crashed if the database that was being profiled contained triggers. This has been fixed.
500017 The ATTACH TRACING statement could have failed if the database character set was different from the OS character set, and the server name and/or database name of the tracing database contain multibyte characters. This has been fixed for cases when conversion between the OS character set and database character set is not lossy.

Note that using multibyte characters in server and/or database names is not recommended for profiling, especially if the tracing database is started on a different physical server than the database being profiled.

500074 A join that included tables containing long strings (roughly one database page or greater in size) may have taken a disproportionate amount of time to complete, or to respond to a cancel. This delay would have increased as the number of rows containing long string data increased. This has been fixed.
500076 The use of the DISH SERVICE as the SOAP endpoint for SQL Anywhere applications is now enforced. A SOAP SERVICE may now be configured with a METHODS 'NONE' clause to stipulate that no HTTP methods directed to the given service will be processed. Access to the given SOAP service is only processed through a DISH service that exposes the given SOAP service (i.e. by stipulating a GROUP clause).

In addition, the METHODS clause for a DISH service may now be modified to only allow the POST HTTP method (i.e. METHODS 'POST') which effectively disables access to the WSDL (which is returned by an HTTP GET request), but permits the processing of SOAP requests (which use HTTP POST).

Note that SQL Server application developers should test intended SOAP client toolkits to ensure that an HTTP GET request is not made to the DISH service prior to issuing the SOAP request. Some clients may do this to determine whether or not the definitions to the SOAP operations have changed.

- New METHODS value:

NONE

The NONE specifier, when provided, must be the only value in the METHODS clause, e.g.: METHODS 'NONE'. For ease of use, 'NONE' is applicable for any SERVICE. It is intended to be used only for SOAP services, it is not a substitute for SERVICE DISABLE, since a SOAP SERVICE with METHODS 'NONE' will still process requests proxied through a DISH service. When a SOAP service is disabled, it will not process any request through any service.

500092 Inserting a string of length L, where L was slightly less than 8*db_property('pagesize') (i.e. within about 13 bytes), into a compressed column could have caused a server crash, or assertion 202000 ("Invalid string continuation at row id ..."). This has been fixed.
500123 An embedded SQL application may have hung if all of the following conditions were true:

- the applicaiton had registered a DB_CALLBACK_CONN_DROPPED callback using db_register_a_callback()

- the application called db_fini to free the resources associated with a sqlca.

- there was a least one active connection associated the sqlca (i.e. there was a connection that had not been disconnected)

This was more likely to occur on a Unix system (including Linux and Mac OSX), than on Windows systems. This has been fixed.

A work-around is to ensure that all connections are disconnected prior to calling db_fini();

500125 When using the JDBC 3.0 version of the iAnywhere JDBC Driver and calling the method DatabaseMetaData.getColumns(), a result set with only 18 columns would have been returned, instead of 22 columns. Note that the extra 4 columns are in effect meaningless since they provide metadata for Ref types which are not supported in the iAnywhere JDBC driver. Nevertheless, the problem has now been fixed and the method now returns a result set with 22 columns. Using the JDBC 2.0 version of the iAnywhere JDBC Driver will continue to return a result set with 18 columns as expected.
500128 The server could have crashed with a division by 0 error when specific repeat() expressions appearred in a query. For this problem to have occurred, the expression in the repeat() function must have specified an NCHAR string literal of zero-length (i.e., N''). The query must also compare the strings in some fashion.

For example:

select repeat(N'',row_num) x

from rowgenerator

group by x

This has now been fixed.

500302 A SQL Anywhere SOAP SERVICE Soapfault was returned with the HTTP response header "Content-Type: text/html" when the given service had encountered a protocol or parse error. This has been fixed; a "Content-Type: text/xml" is now returned.
500319 On the Index Size tab of the Index Consultant, radio buttons for usable options were displayed greyed out as if they were disabled. Other options corresponding to radio buttons were enabled, and could have been selected. This has been corrected so that the options do not appear greyed out when they are enabled.
500354 When running with a screen resolution of 800x600, the Tracing Wizard would not have fit onto the screen. This has been fixed.
500482 Incorrect diagnostics could have been generated when there were comma-specified joins followed by operation-specified joins (LEFT OUTER JOIN, for example), and an ON condition in the operation-specified joins referenced a column from the comma-separated joins. This was now bee corrected.

A work-around is to place the comma-separated table expressions in parentheses. For a query such as:

SELECT * FROM tab1, tab2, tab2 LEFT OUTER JOIN tab4 ON tab4.x = tab1.y

the work-around is to rewrite the query as:

SELECT * FROM ( tab1, tab2, tab2 ) LEFT OUTER JOIN tab4 ON tab4.x = tab1.y

500489 Attempting to start the server may have failed with the error "License file not found" if the followng conditions were true:

- the server was running on one of the Unix platforms (Linux, Solaris, AIX, HP-UX, or Mac OSX), and the executable was located in a nonstandard location. i.e. it is not in bin32 or bin64 directory

- the associated license file was in the same directory as the server (which is where it should be)

- the PATH environment variable did not contain the directory where the executable was located

- the support libraries (libdbserv10_r.so, libdbtasks10_r.so, etc) were located in a different directory than the executable

- the user's current working directory was not the same directory as where the executable was located

- when attempting to start the server a full or relative pathname to the executable was specified

This has been fixed. The server will now start correctly.

Work arounds include:

- add the directory that contains the server executable to the PATH

- make the executable directory the current directory before starting the server

- name the directory that contains the executable bin32 or bin64

500501 If one of the encryption componentss (ie dbecc10.dll, dbrsa10.dll, dbfips10.dll) became corrupted, it was possible for the server to return an error the first time it was used, and then crash the second time. This has been fixed.
500505 After creating a new tracing database using the Tracing Wizard, the Create Database button remained enabled. This has been corrected so the the button is now disabled after the database is created successfully, and re-enabled only if database file name, user name, or password fields are changed.
500507 If a proxy table referred to a table in a DB2 database and had a BLOB column, then attempting to insert data into the BLOB column would have caused syntax errors. Note that this problem did not exist if the column was instead defined as "LONG VARCHAR FOR BIT DATA", which more closely mapped to the SA "long binary" datatype. Nevertheless, the problem with inserting into DB2 BLOB columns has now been fixed.
500517 If the AppInfo connection parameter contained non-ASCII characters, and the database charset and the OS charset were different, the non-ASCII characters would have appeared mangled when printed out to the console as part of an abnormal disconnection message, or when the connection was being established if the -z switch was used. This has been fixed.
500522 When running the server on multicore Intel x64 hardware, with 64 bit operating systems, the server could have missed opportunities for optimization and intra-query parallelism. This has been fixed. Note, using 32 bit software on these same platforms did not exhibit these problems.
500523 After executing:

create login policy test1 password_expiry_on_next_login = on;

create user u1 identified by sql login policy test1 force password change off;

attempting to connect to u1 using DBISQL caused a prompt for a new password. The "force password change off" clause on the CREATE USER statement should have prevented this prompt. This has been fixed.

500653 If a table participated in a publication, it was possible for the server to have failed assertion 100905 ("Articles on the table use do not match those on the table definition") while processing an UPDATE statement that affected the table. This has been fixed.
500656 The server may have returned an invalid numeric value when a value of type Double was cast to a numeric type that was too small. This has been fixed
500661 When the database option "Blocking" was set to "Off", an attempt to read rows using the SQL Anywhere OLEDB provider, from a table that has some or all of its rows locked, would have resulted in the error DB_S_ENDOFROWSET being returned, which means "no more rows". The error that should be returned was DB_E_TABLEINUSE ("The specified table was in use"). This problem has been fixed. Now, when ExecuteReader is called, the error "User 'DBA' has the row in 'Customers' locked" is reported.

The following .NET example can be used to illustrate the problem. Suppose another connection is inserting rows into the Customers table. Then the following example should result in an error when "blocking" is "off".

OleDbConnection conn2 = new OleDbConnection("Provider=SAOLEDB;DSN=SQL Anywhere 10 Demo");

conn2.Open();

OleDbTransaction trans2 = conn2.BeginTransaction(IsolationLevel.ReadCommitted);

OleDbCommand cmd2 = new OleDbCommand("SELECT FIRST Surname FROM Customers", conn2, trans2);

OleDbDataReader reader2 = cmd2.ExecuteReader();

while (reader2.Read())

{

String s = reader2.GetString(0);

MessageBox.Show(s);

}

500700 Applications using ODBC.Net could not have been executed with the Runtime Server. The error displayed when attempting to execute a query would have been:

Triggers and procedures not supported in runtime server

This has now been corrected.

500825 Attempting to execute queries where the number of join operations exceeded 15, could have caused the UltraLite runtime to crash. This has been fixed.
500837 In specific circumstances, the server could have crashed while processing a hash join. This has been fixed.
500900 A validation check was missing when a SOAP request was made through a DISH service endpoint. This has been fixed.
500905 The Options dialog for the SQL Anywhere Explorer did not display properly when using a large font. This has been fixed by changing the size and location of some of the controls.
523709 The server may have crashed when more than one Unload utility (dbunload) was run concurrently with internal rebuild (ie. -an, -ar, -ac). This has been fixed.
523745 The server automatically maintains columns statistics, in the form of histograms, to capture the data distribution. Under some specific circumstances, the server could have applied incorrect modifications to the automatically maintained statistics, resulting in potentially poor query access plans. Symptoms of this problem would often have been the presence of duplicate boundary values in the result set of system procedure sa_get_histogram(). This has been corrected by an update to the server's histogram maintenance algorithms.
523757 The QAnywhere Server did not always report errors after processing a badly formatted Server Management Request (SMR). The SMRs that suffered from this problem were those that contained any XML elements that did not exactly match those expected by the server (ie, misspelled elements, or elements not included in the DTD), in which case the processing of the request would fail silently. This has been fixed so that the QAnywhere server will now report an error whenever it comes across an unrecognized XML element. The QAnywhere server will now also validate the XML elements in a case insensitive way. As long as the opening tag matches the closing tag, the case is ignored.
528330 If an application closes a connection that had statements or prepared statements open, then there was a very small possibility that the application would have crashed. This has now been fixed.
528358 If a query plan had a Hash Group By that used a low memory strategy, and there was a SUM() aggregate over a NUMERIC or DECIMAL value, then the wrong answer could have been returned. This has been fixed.
528359 When a hash-based execution strategy was used for INTERSECT, EXCEPT, or a semi-join, it was possible for the wrong answer to be returned in specific situations when the operator used a low-memory execution strategy. This has been fixed.
528430 Calling the methods ExecuteReader or ExecuteScalar with parameters, would have resulted in a memory leak in the 2.0 provider. This problem has been fixed.
528627 Selectivity estimates could have been incorrectly updated if a query with predicate of the form "T.x <op> expr( T.y ) or expr( T.y ) <op> T.x" was executed. These

incorrect predicate selectivity estimates could have lead to lower quality query access plans. When "expr" was an expression referencing one (or more) columns of table with correlation name T, selectivity estimates could have be updated with the assumption that "expr(T.y)" was constant for the duration of the query. This has been fixed.

For example:

SELECT t.x, t.y, t.z

FROM tx AS t

WHERE t.x <= t.y + 1

528650 If the precision for a DECIMAL or NUMERIC column was greater than 30, then SQL Remote and RepAgent would only have replicated up to 30 digits in accuracy to a remote or secondary database, and the Log Translation utility (dbtran) might only have written 30 digits in accuracy to a SQL file. The rest of the digits would have been replaced by zero. This problem has been fixed. The accuracy of the replicated/translated data should now be as high as it was stored in the original database.
528793 A new connection and database property called "Authenticated" has now been added. The use of these two new properties is as follows:

For OEM servers, once an application has executed the "SET TEMPORARY OPTION CONNECTION_AUTHENTICATION=" statement, the application can then turn around and execute a "SELECT connection_property( 'Authenticated' )" statement. If the result is "YES", then the connection was properly authenticated and all is well. If, however, the result is "NO", then the application can execute a "SELECT db_property( 'Authenticated' )" statement. If the result of this statement is "YES", then the database has been properly authenticated and the connection authentication failed because the CONNECTION_AUTHENTICATION string is incorrect. If, on the other hand, the result of querying the Authenticated database property is "NO", then the connection authentication failed because the database has not been properly authenticated. In this case, the customer should examine the DATABASE_AUTHENTICATION string to determine what is wrong.

For non-OEM servers, the result of querying these new properties will always be "NO".

528822 When performing database recovery, or running a mirror server, it was possible that index entry cleanup routines could have been called for updates that did not modify the affected index. This could have had a significant affect on performance. It was possible that this might have lead to assertion failures as well. This inappropriate cleaning has been fixed.
528838 The server could have crashed, or failed assertion 201501 ("Page for requested record not a table page or record not present on page"), when inserting rows into a table with a clustered index that previously had rows deleted from it.
528978 The SQL Remote Message Agent (dbremote) could have displayed the error, "SQL statement failed: (-260) Variable 'n?' not found", where ? was an integer greater than or equal to 10, if a replication table contained more than 9 columns (they could have beeb CHAR, BINARY or BIT type columns) with a data length greater than 256 bytes. This problem has now been fixed.
529055 Attempts to connect to a database using connection strings containing a database name longer than 250 bytes, would have failed, even if the database name matched in the first 250 characters. This has been fixed.
529075 When trying to use the database tools library on HP-UX (PARISC 32 or 64) to read a database created with a version prior to 10.0, the application would have failed with the error "could find or load the physical store DLL". This has been fixed.
529193 The server could have generated poorly performing query access bad plans, due to bad index statistics, and queries involving parallel index scans could have returned incorrect results. These problems have now been fixed.
529198 The Index Consultant could have crashed when invoked on a version 11 database. This has been fixed.
529201 Under rare circumstances, the server could have crashed if a DML statement was executed while diagnostic tracing was being stopped by the DETACH TRACING statemented. This has been fixed.
529203 The changes made for Engineering case 495396 inadvertently caused database names to be limited to a length of 40 bytes. This has been fixed so that database names are now correctly limited to 250 bytes.
529816 The changes for Engineering case 499958 did not cover all of the possible pasting actions, and the Interactive SQL utility could still have crashed in some cases. These other cases have now been fixed as well.
529826 The user count in the overview database diagram could have been incorrect. This has been fixed.
529852 If a client disconnected at a specific time interval, possibly due to liveness timeout, during a positioned update statement, then the server could have failed assertion 101704 - "Unexpected state in positioned update error". This has now been fixed.
529855 Sybase Central would have crashed with a NullPointerException if a message's property sheet was opened and the message had properties with null values. This has been fixed.
530005 The provider's implementation of the GetParameterInfo() method did not indicate whether parameters in a command were input (DBPARAMFLAGS_ISINPUT), output (DBPARAMFLAGS_ISOUTPUT), or both.

Examples of such commands are:

INSERT INTO TestTable (ID,Name) VALUES(?,?)

?=CALL TestProcedure(?,?)

This problem has been fixed. The provider now returns the correct settings. A work around is to use the SetParameterInfo() method to set the DBPARAMFLAGS_ISINPUT or DBPARAMFLAGS_ISOUTPUT flags in the DBPARAMBINDINFO structure.

530027 Under rare circumstances, the server could have crashed while generating graphical plans with detailed statistics, or graphical plans for diagnostic tracing with at least one tracing level of type PLANS_WITH_STATISTICS. This has been fixed.
530039 When a connection is unexpectedly terminated, a message is displayed in the server console containing the AppInfo string for the client. This message was incorrectly being truncated at 255 bytes. This has been fixed.
530041 When an SACommand object's Connection property was null, and the methods ExecuteNonQuery, ExecuteReader or ExecuteScalar were called, a wrong error message would havew been given: "Unable to load DLL 'dbdata.dll' : The specified module could not be found."

For example:

SACommand cmd = new SACommand();

cmd.CommandText = "UPDATE customers SET name='1' WHERE name='1'";

cmd.ExecuteNonQuery();

This problem has been fixed.

530054 When using CSCONVERT() to convert a string to UTF16, incorrect results could have been produced. This has now been corrected.
530124 SQL Anywhere allows login policies to be assigned to users. If a non-existent policy name was specified on the CREATE USER or ALTER USER statement, the server would have given a misleading error, or no error, respectively. This has been fixed so that the server now generates a "login policy not found" error in each case.
530125 SQL Anywhere allows the COMMENT ON LOGIN POLICY statement to be used in order to store remarks on login policies in the database. Dropping a login policy would have failed to drop the corresponding comments from the catalog as well. This has been fixed so that the server now deletes remarks when a login policy is dropped.
530126 SQL Anywhere allowed the use of the system procedure sa_get_user_status() to obtain sensitive information about all users in the database, regardless of whether the user invoking the procedure had DBA authority. This has been corrected so that the server now restricts the result set to one row corresponding to the current user when invoked by a user without DBA privileges. Users with DBA authority are now provided a result set with one row for each user in the database.
530273 If there were more than 100 connections actively using Java in the database support at the same time, then the JVM would have crashed, or the server could have hung. This problem has now been fixed.
530287 Indexes containing values longer than approx 250 bytes could have become corrupt when an entry was deleted from the index. This has now been fixed.
530302 Attempting to executing a batch which did not take a host variable, but included the :var syntax, could have resulted in a communication error. The :var syntax can be used in a CREATE or ALTER SERVICE statement. This has now been fixed.
530309 the component that displayed an explanation of the selected connection parameter on the "Advanced" page of the "Connect" dialog, was unreasonably short on Japanese systems. This has been fixed.
530318 When diagnostic tracing was enabled, with PLANS or PLANS_WITH_STATISTICS as the tracing type, some plans or cursor information could have failed to have been saved. Alternatively, some plans that did not fit the timing cut-off in ABSOLUTE_COST or RELATIVE_COST_DIFFERENCE conditions, could have benn incorrectly saved. These problems have now been fixed.
530339 If an application had a connection enlisted in Microsoft's Distributed Transaction Coordinator (DTC), and it issued a commit on the distributed transaction, then there was a chance the server would have hung when a request to enlist in the DTC came in at the same time as the two phase commit. This problem has now been fixed.
530427 The table selection page of the Export wizard contained two controls with the same mnemonic ('e'). This has been fixed.
530533 The detailed results from the "Test Connection" tool in the "Connect" dialog could have contained corrupt characters when running on Windows systems. This would have occured when the language for non-Unicode programs (i.e. the "system locale") was set to something other than English (e.g. Japanese), and the machine's location was set to a country which in which English is spoken (e.g. United States). The non-English characters were corrupted. This has been fixed.
530534 The changes made for Engineering case 491400, to correct a problem with the marquee in the overview panel flashing excessively when connected to a MobiLink server, introduced drawing artifacts when the horizontal scroll bar was used to move the marquee. This has been fixed.
530539 Pressing ALT+I in the "Add to Favorites" dialog did not set the focus to the list of favorites folders. This has been corrected so that now it does.
530576 The http_encode() function was not encoding the 0x1f character. This has been fixed. This character is now encoded to "%1F".
530579 A new MobiLink server option, -vo, now shows SQL passthrough activity in the MobiLink server. Prior to this option it was impossible to know what was happening on the server when debugging SQL Passthrough.
530587 When viewing the server messages from the SQL Anywhere Console utility (dbconsole0 or from the Sybase Central, there was a possibility that messages could have been duplicated or lost. This has been fixed.
530594 Closing a ResultSet object may, in very rare cases, crash the iAnywhere JDBC driver. This problem has now been fixed.
530596 If a multi-threaded JDBC application attempted to make a connection on one thread while the Java VM was shutting down, there was a chance that the application would have crashed. Note that this problem was specific to Unix platforms only. The problem has now been fixed.
530597 The option to continue executing statements after encountering an error with an Interactive SQL statement (such as INPUT, OUTPUT, READ, PARAMETERS, DESCRIBE) was not given. Now it is. This problem did not affect normal SQL statements.
530710 Executing an INSERT or an UPDATE that fails, could, in some cases, have caused the database server to fail an assertion. A specific assertion that was likely to have been seen as a result of this failure was: 201501 - "Page for requested record not a table page or record not present on page." For this problem to have occurred, the failing INSERT or UPDATE must have been to a table that had blob columns containing data less than approximately one database page in length, but longer than the column's inline amount. This has now been corrected.

This has been fixed.

530736 The changes for Engineering case 491180 (enable write through on CE) introduced a dependency on the file note_prj.dll, which may not have been included on non-standard Windows CE devices. On these devices, the server may have failed to start with an error that it could not find the server or one of its components. The Standard Windows Mobile devices were not affected. This has been corrected and note_prj.dll is now loaded dynamically, and if it is not found, the server will not enable write through on pre CE 5 devices.
530776 When a database created by a newer version for SQL Anywhere (eg version 11) was started by an older version of SQL Anywhere (eg version 10), the server would have read some pages, other than the definition page, from the database before verifying that the capabilities of the file and server were compatible. The server now tests the capability bits of a database file against the capabilities supported by the server sooner in the database startup process. There are no known user-visible effects caused by checking the capabilities later, other than when starting an encrypted database created by newer software, the server will no longer prompt for an encryption key before reporting that the capabilities are incompatible.
530790 When running the Application Wizard, Sybase Central would have failed to connect to the tracing database if the server had been started with broadcast ignored (-sb 0). This has been corrected. Sybase Central now will include the machine name and port in the connection string when attaching to the tracing database.
530917 An application could have hung when opening a pooled connection. The hang was as a result of two problems:

1. The provider was incorrectly calculating a very long timeout period.

2. Dropped connections were not being recycled.

These problems have now been fixed.

530920 During diagnostic tracing with at least one tracing level of type optimization_logging_with_plans, an incorrect row size could have been reported for a table that had been created immediately before the statement referencing the table was executed. This has been fixed.
530923 Occasionaly, a DB_E_BADACCESSORHANDLE error would have been returned by the OLE DB IMultipleResults::GetResult method. This error could have occurred if the DBPARAMS structure that was passed to the ICommand::Execute method was disposed by the client before all the result rowsets from a stored procedure call were returned by calls to the GetResult method. On the final call to GetResult, output parameters may have become available. As a result, the DBPARAMS structure was required to be intact for each call to GetResult. This problem has been fixed. When Execute is called, if it is determined that there are no output parameters, then the DBPARAMS structure will be ignored on subsequent calls to GetResult.
530930 The bold title text that appears on the "Advanced" page of the "Connect" window was not displayed consistently. Specifically, the text (e.g. "AppInfo [APP]") would not have been displayed if the Connect Assistant was not initially visible when the "Connect" window was opened, and was then made visible before the "Advanced" page was initially selected. This has now been fixed, as well as a fix for an intermittent problem that caused the description field at the bottom of the "Advanced" page from being too short to display more than one line.
530954 The Interactive SQL utility, (as well as other adinistration tools, such as Sybase Central and the SQL Anywhere Console) may have failed to start on newer Linux systems including Linux Red Hat Enterprise 5. These Administration Tools rely on libXp.so.6 which may not have been installed by default. For example, installing the following package solves the problem on RHE5:

libXp-1.0.0-8.1.el5.i386 "X Org X11 libXp runtime library"

530994 The SQL Anywhere server allows for the creation of tables with a very large number of columns and/or indexes. The speed at which the server processes operations involving such large schemas has now been significantly improved.
531081 The changes for Engineering case 486744 introduced a problem where the server could have crashed while executing a BEFORE UPDATE row level trigger. This has been fixed.
531094 The installer may failed on some versions of Linux. Symptoms may have ncluded incorrect reporting of available disk space, and messages such as:

tail: `-1' option is obsolete; use `-n 1'

Try `tail --help' for more information.

An error occurred while attempting to extract files in /opt/sybase/ 

The way in which the head and tail utilities were being invoked by the installer was incompatible with some older versions of the Gnu head and tail utilities included on Linux. This has been fixed by replacing the use of head and tail in the setup script with appropriate sed commands.

531126 The "Connect" window was displayed on startup even if the "-c" command line option was given and the connection parameters were sufficient to connect. This has been corrected so that the "Connect" window is no longer displayed in this case.
531128 On Unix systems, when starting the MobiLink client (dbmlsync) in server mode after having recently shutdown an instance of dbmlsync in server mode, if the same port number was reused on the -sp option it was possible for dbmlsync to have failed to start and report an error similar to "unable to bind to port ...". This problem has now been fixed.
531154 The "Browse" button on the "DBConsole" pane of the "Options" window could have been enabled inappropriately , even when message logging was not turned on. This has been fixed.
531160 If a statement used a keyset operator, it was possible for the statement to evaluate expressions that should not be evaluated. In order for this failure to appear, the statement must contain some unflattened views or derived tables (such as grouped, distinct, or top-N views). Keyset operators are used to support values sensitive cursors, and they are also used for some UPDATE, DELETE or MERGE statements. This has been fixed.

For example, in the following statement, a division by zero error could be incorrectly returned for a keyset-driven (value sensitive) cursor.

select if TMS_1.x = 'zzz' and 1/QT2.y > 0 then 12 endif

from (

SELECT x, y

FROM TMS_2

GROUP BY x,y

) AS QT2

join TMS_1

ON TMS_1.x = QT2.x

531295 The server could have crashed while optimizing complex queries. This has been fixed
531314 Double-clicking a .SAPLAN file on a Windows machine did not always work properly. The new "Plan Viewer" window was not automatically activated. If the "Fast launcher" option was on, the wrong plan file could have been opened under some circumstances. Both of these problems have been fixed.
531323 If the QAnywhere Agent for Ultralite experienced a failed synchronization then there was a chance that subsequent synchronizations would then have failed with a -193 primary key not unique error. This has been fixed
531334 On Linux systems, starting a database that is stored on a non-tmpfs based ramdisk could have failed. This has been fixed.

Note, a work around is to use a tmpfs based ramdisk, or start the server with the -u (use buffered disk I/O).

531348 Table locks were not released by the SABulkCopy() method when SABulkCopyOptions.LockTable is specified. This problem has been fixed.
531523 Cancelling a statement could have taken several seconds if the statement returned more than 500K of data as text, and it was configured to display results as text. This has been fixed.
531525 MobiLink with QAnywhere messaging enabled used approximately 400 KB of heap memory for each QAnywhere client that synchronizes with it. This occurred until the prepared statement cache size (default 200 for SA consolidated databases) was reached, and then each new QAnywhere client caused a cached statement to be dropped and a new statement to be prepared. This behaviour has been changed for SA consolidated databases only. Now the MobiLink server will use a constant amount of heap memory for QAnywhere client synchronizations, and will not overflow the prepared statement cache as many clients synchronize.
531532 If a connection was dropped, or the server went down with a fatal error while connecting with ODBC, OLE DB or ADO.NET, or while calling the DBLib functions db_change_char_charset or db_change_nchar_charset, the client application could have crashed. This has been now been fixed.
531577 When editing an unsigned column value, if a value larger than the largest signed value was entered, zero would have been incorrectly saved as the column value. This has been fixed so that the value entered is now saved.
531716 The HTML files created by the "Generate Database Documentation" feature of the plug-in would have contained titles that Internet Explorer 7 could not display if Sybase Central was running on a non-English machine. This has been fixed.

Note, this problem did not affect Internet Explorer 6 or Firefox 2.0.0.

531718 If an application using the iAnywhere JDBC driver attempted to perform a batched insert (using addBatch()/executeBatch()) and the batch size was large (greater than 500), then performance of the batch insert would have degraded significantly when long string columns were involved in the batch. The driver was allocating more memory than necessary, and making several small allocations instead of a few large ones. This problem has now been corrected.
531730 After modifying the incremental download size of the QAnywhere Agent using the -idl option, it would not have been possible to reset the size to the default value of -1. Attempting to set the size to -1 would have left the incremental download size unchanged.

This has been fixed. Now, specifying any non-positive number for the -idl option will reset the incremental download size to -1.

531766 If a JMS message bound for a QAnywhere client was missing its native address, and no default address was specified for the JMS connector, the QAnywhere Server would have reported a NullPointerException. This has been fixed. The server now reports the proper error message
531768 UltraLite appeared in the list of databases to which the Interactive SQL utility could connect on Solaris and OS/X machines. UltraLite is not supported on either of these platforms, and so UltraLite databases have been removed from the user interface on these platforms.
531784 If an Open Client or jConnect application executed a query that involved the use of host variables within a batch, then the server would have crashed. This has been fixed so that the query now correctly fails with the error message "Host variables may not be used within a batch".
531962 If an application attempted to use a Statement, PreparedStatement or ResultSet object at the same time that the underlying Connection object was closed on a different thread, then there was a chance the application would have crashed.The problem has now been fixed.

Note that finalizing Connection objects can cause the same crash.

531967 The QAnywhere Server would have throw an ObjectRepositoryException if it was configured to use a delete rule with an empty condition clause. That is, if a rule was given that had nothing written to the right of the equals sign. One such rule might look like: "AUTO=" This has been fixed. Specifying an empty condition clause now specifies that all available messages should be deleted.
531993 On the MobiLink client's setup dialog, clicking either the "cmdline help" or "extended option help" buttons would have caused dbmlsync to shutdown without displaying the help dialog. This has now been fixed.
532086 If a server had many concurrent connections using Java in the database support, then there was a chance the server could either have hung, or crashed intermittently. These hangs or crashes could also have occurred at server shutdown time. These problems have now been fixed.
532102 The changes made for Engineering case 483518 caused the server to crash if a call to the graphical_plan() function was made within an event handler. This has now been corrected.
532109 A query containing a derived table, or a subquery with a OUTER JOIN whose ON condition references tables from outside the query block, may have returned incorrect results. This has been fixed.

In the following example, the ON condition of the LEFT OUTER JOIN in the EXISTS subquery references the table 't1', which is a table used in the FROM clause of the main query block. This query may return incorrect result for some instances of the database.

select * from t1

where exists(

select 1

from t4

left outer join t2 on ( t2.c1 = t4.c1 and t2.c1 = t1.c1 )

where t4.c1=1

)

532116 Synchronizations through a server that required Digest HTTP authentication would have failed if the server required a reauthentication in the middle of the synchronization. This has been fixed so that the client will now successfully reauthenticate and continue the synchronization.
532185 SQL Anywhere keeps track of dependencies of views on other views and tables. For view definition queries that involve more than two UNION, EXCEPT or INTERSECT branches and/or sub-queries, the server's computation of the dependency information could have been incorrect, leading to erroneous behaviour. This has beed fixed so that the server now computes the dependency information correctly.

Note, any existing views compiled with an older version of the server will continue to have potentially incorrect dependency information in the catalog. Existing views can be made to have the correct dependency information by being recompiled, either implicitly during a DDL operation on one of the referenced tables, or explicitly.

532238 In SQL Anywhere 10, SOAP web services used the server's HTTP HOST header to generate the namespace returned in the SOAP response. This behaviour was changed in SQL Anywhere 11 to always use the namespace sent in the SOAP request for the response. This change in behaviour has now been integrated into 10.0 in order to better support SOAP clients built with version 10.0 and connect to a server that has been upgraded to version 11.0.
532254 A server that had registered itself with LDAP tried could have crashed when trying to start a database using an alternate server name, if an error occurred in reading the saldap.ini file. This has been fixed.
532276 A large query containing a 'WITH' clause could have crashed the server. The server was failing to recognize a SYNTACTIC_LIMIT error for such queries. This has now been corrected.
532280 The server could have behaved erroneously when new procedures were created from within event handlers, or after having executed the SETUSER statement. Although rare, in the worst case a user could have been allowed to be dropped while still connected. These problems have been corrected so that the server now behaves correctly.
532314 If creating a tracing database resulted in an error, the real cause of the error would have been missing from the error dialog details. This has been fixed.
532450 It was possible for execution of an OUTPUT statement to cause the statement, which generated the previous results, to be reexecuted unnecessarily. Reexecution of the statement could have resulted in poor performance, or error messages if the statement could not be reexecuted (for example, because it was a stored procedure call with side-effects). This has now been fixed.
532452 The changes for Engineering case 530534 (which was a followup fix to Engineering case 491400) were incomplete, resulting in the Overview marquee not updating when zoomed out with the marquee at the leftmost position. This has been fixed.
532475 The system procedure dbo.sa_text_index_statistics() can be used to obtain information about existing text indexes in the database. Depending upon the current state of the tables with text indexes defined on them, the server could have failed to return the expected information for all existing text indexes in the database. This has been corrected so that the server will now return the correct answer, regardless of the current state of the server.

Note that since Sybase Central makes use of sa_text_index_statistics() in order to display information on text indexes, Sybase Central will also not work as expected.

532521 If a query like the following was excuted:

SELECT TOP var1 START AT var2 * FROM ...

and the query referenced a proxy table, and the query could have been handled in full passthru, then the query would have failed with a 'column not found' or 'bad cursor range' error. This problem has now been fixed.

532626 In certain rare situations, it was possible for the server to hang when starting a database. This has been fixed.
532636 The list of statistics displayed on a version 10 or later server's Statistics tab was incomplete; specifically, it excluded statistics introduced in version 10. This has been fixed.
532638 Incorrect results may have been obtained from queries when there was a LIKE search condition combined with an ORDER BY ... DESC clause, when both of these clauses specified a column that was the first column in an index.

For example:

SELECT * FROM MyTable WHERE col LIKE 'abc%' ORDER BY col DESC

The implementation of LIKE predicates with reversed index scans was erroneous. This has now been corrected.

532668 The SORTKEY function did not allow the first parameter to be BINARY if the second parameter (the collation id) was not an integer. Similarly, COMPARE did not allow either of the first two parameters to be BINARY if the third parameter (the collation id) was not an integer. For example, SORTKEY( cast( 'a' as binary ), 'dict' ) would have reported the error "Cannot convert weCHAR values.
532793 ODBC Driver by Sybase: The iAnywhere MobiLink application hangs during connection failover event.
532796 If a database was started with an alternate server name on an already-running server, in rare cases, subsequent TCP connection attempts to the server may have failed. This has been fixed.
532802 Closing a ResultSet object may have, in very rare cases, crashed the iAnywhere JDBC driver. This problem has now been fixed.
532807 The Server Message Store wizard could have failed to complete with the message "Could not install QAnywhere support. Request to start/stop database denied". This would have occurred if a server was already running and it was not started with the "-gd DBA" or "-gd all" command line options, and "Create an ODBC data source" was checked in the wizard. This has now been fixed.
532816 Automatic creation of a tracing database (either through the Profiling wizard or the Tracing wizard) could have failed if the database used secondary dbspaces with absolute (hard-coded) paths. This could have arisen when the machine on which the profiling/tracing database was being created didn't have a directory structure that matched the one for the production database, and was especially likely if the two machines ran different operating systems. If the two machines involved are running the same OS, the presence of the missing drives / directories is now simulated, if possible. Otherwise, the workaround is to unload the database to the same machine, start the copy, and move the dbspace files on the copy to directories that can be specified with relative paths. Then, issue ALTER DBSPACE RENAME commands to point the main dbspace at the new dbspaces. The database can now be copied to the machine that will host the tracing database.
532819 If a START DATABASE statement or an attempt to autostart a database on an already-running server, failed due to an alternate server name conflict, a second attempt to start the database with the same (conflicting) alternate server name would have succeeded when it should have failed as well. This has now been fixed.
532825 A new logging option has been added to the MobiLink server. The -vm command line option will cause the server to print to the log the duration of each sync and the duration of each sync phase whenever a sync completes. The sync phases are the same as those displayed in the MobiLink monitor. Each value is prefixed with "PHASE: " to aid searching for and printing the values.

Sample output follows:

I. 2008-06-05 14:48:36. <1> PHASE: start_time: 2008-06-05 14:48:36.048

I. 2008-06-05 14:48:36. <1> PHASE: duration: 175

I. 2008-06-05 14:48:36. <1> PHASE: sync_request: 0

I. 2008-06-05 14:48:36. <1> PHASE: receive_upload: 19

I. 2008-06-05 14:48:36. <1> PHASE: get_db_worker: 0

I. 2008-06-05 14:48:36. <1> PHASE: connect: 18

I. 2008-06-05 14:48:36. <1> PHASE: authenticate_user: 51

I. 2008-06-05 14:48:36. <1> PHASE: begin_sync: 69

I. 2008-06-05 14:48:36. <1> PHASE: apply_upload: 0

I. 2008-06-05 14:48:36. <1> PHASE: prepare_for_download: 1

I. 2008-06-05 14:48:36. <1> PHASE: fetch_download: 4

I. 2008-06-05 14:48:36. <1> PHASE: wait_for_download_ack: 0

I. 2008-06-05 14:48:36. <1> PHASE: end_sync: 0

I. 2008-06-05 14:48:36. <1> PHASE: send_download: 10

I. 2008-06-05 14:48:36. <1> PHASE: get_db_worker_for_download_ack: 0

I. 2008-06-05 14:48:36. <1> PHASE: connect_for_download_ack: 0

I. 2008-06-05 14:48:36. <1> PHASE: nonblocking_download_ack: 0

532846 Columns with data types of LONG BINARY or LONG VARCHAR were not stored correctly during a synchronization download. This has now been corrected.
532850 Executing a CREATE EXISTING TABLE statement to create a proxy table when the remote table has an unsupported index on it, could have caused the statement to fail. This problem has now been fixed.
532859 It was possible to get gaps between transaction logs when using the Backup Database command to rename a transaction log, or when using dbmlsync -x to rename and restart a transaction log. It was also possible, although more unlikely, to have a transaction log that was missing a transaction that was already committed to the database. This has been fixed.
532999 The database property 'VersionStorePages' was reporting the total number of pages in the temporary file rather than the number of pages in the version store. This has now been fixed.
533010 When using the new ULODBC class to map a proxy table to a table within a non-UTF8 MBCS UltraLite database, and then attempting to fetch string data from that proxy table, there was a chance the data would have had additional garbage characters. This problem has been fixed.
533012 The connection property 'IsDebugger' has been added to allow connections which are currently being used to run the procedure debugger to be distinguished from normal connections. The value of connection_property('IsDebugger',number) will be 'Yes' if "number" corresponds to the connection number of a debugger connection, and 'No' otherwise.
533013 When executed from within a login procedure, a BACKUP statement, an external function call, a web service request, a Java request or a remote procedure call could have caused the requesting connection to hang indefinitely. In certain cases, such as when executing a BACKUP statement, this hang could eventually cause other connections to hang as well. This has been fixed.
533028 If a database contained materialized views, and one of the base tables referenced by a materialized view contained foreign key constraints, then the Unload utility (dbunload) could have generated a reload script that would have failed to execute. The reload script would have contained ALTER TABLE ... ADD FOREIGN KEY statements after the creation of materialized views. The server now allows the reload script to execute without errors.

Note, a work-around is to manually edit the reload script to make the reload work.

533055 If a LIKE predicate contained specific forms of patterns, and it referred to a column contained in an index, then it was possible for the server to crash when opening the statement containing the LIKE predicate. This has been fixed.
533249 The download phase of a synchronization could have failed with a -194 error ("No primary key value for foreign key"). This was most likely to have occurred during large synchronzations or when the database engine is under considerable stress. This has now been fixed.
533264 Synchronization profiles were incorrectly appearing in the Extended Database Properties tab of an UltraLite database抯 property sheet. This has been corrected.
533270 The default Precision and Scale values for an UltraLite database are 30, 6 respectively. When creating a table using the plug-in for Sybase Central, these values were used as defaults for numeric columns, even when the database抯 default Precision and Scale values were different. This has been fixed.
533327 Certain illegal column domains were not being diagnosed, such as VARCHAR(-1). This has been corrected.
533459 In some cases indexes could be left in a bad state after a large number of rows are deleted. Depending on the subsequent operations the problem could either have corrected itself, or lead to index corruption. Any table which ever had a row count that was 256 or more, less than its maximum row count could potentially have encountered this bug. The most common symptom was queries that returned less rows than expected. This has now been corrected. Databases that are suspected of having index corruption should be rebuilt (eg. ulunload/ulload or start with a new db and synchronize it)
533478 A multi-threaded client application, using the ADO .Net provider, could have crashed, hung or leaked memory if it did not handle thread synchronization properly. This problem has now been fixed.
533570 If a row was deleted, the delete rolled back, and then the row was updated, a snapshot scan may have seen the updated value before the update was committed. This has now been fixed.
533600 When using a derived table in a remote query, if one or more columns from the derived table were referenced in the WHERE clause of the query, and the query was going to be processed in full passthru, then the engine would have returned with a "correlation name not found" error. This problem has now been fixed.
533604 If a multi-threaded JDBC application generated a ResultSet object on one thread, at about the same time that the underlying Statement object was closed on another thread, then the application may in very rare cases have crashed, if that ResultSet object was subsequently closed. The same problem could have occurred if the ResultSet object was generated at about the same time that the underlying Connection object was closed. This problem has now been fixed.
533612 On a slow devices, the QAnywhere client (qaagent) would sometimes have given the following error messages at start up: "Error registering with DBLSN code: -1" and "Failed to start QAnywhere Agent (register with DBLsn)". This has been fixed so that the QAnywhere client is now much more tolerant to lengthy dblsn startup times.
533724 The server would have crashed if the sa_locks() system procedure was executed when it was running in bulk operation mode (-b server command line option). This has been fixed.
533726 Spaces and tabs were not allowed to be used before the "GO" command delimiter keyword. This has been corrected so that they are now allowed.
533728 A small window of opportunity existed in the QAnywhere server where a statement could be closed and removed from the statement cache, just as another thread was preparing the statement to be closed. This resulted in some operations being performed on a closed statement, resulting in a JDBC error. This has been fixed
533729 The 64-bit version of the UltraLite .NET component could have throw an "Unknown ULDbType" exception when opening a table. This has been fixed.
533746 If a download was interrupted by a network failure, it was possible for the MobiLink client (dbmlsync) to fail to create a restartable download file. Furthermore, dbmlsync would have displayed a network error to the dbmlsync log, but then attempted to apply the partial download, which would almost certainly have failed. This has been fixed so that dbmlsync now creates a restartable download file and does not attempt to apply the partial download.
533749 The iAS ODBC driver for Oracle could have given mangled error and warning messages to the application when it was running on a operating system that used a multi-byte character set, such as a Japanese or Chinese. This problem is now fixed.
533793 If a server had multiple databases loaded, each with a different character set, the database name returned by the system function "db_property('Name', <dbid>)" could have been improperly character set converted. This could have made the name returned appear garbled. For this to have occurred, the database ID specified by "<dbid>" must have been different from the ID of the database of the connection. This has now been fixed.
533802 Execution of a SELECT statement that referenced a procedure call in the FROM clause could have resulted in a server crash. For this to have occurred, the connection must have had several cursors open, or have had several prepared statements. This has now been fixed.
533804 When the MobiLink server was under heavy load, the Mobilink monitor may have crashed, hung or disconnect from the Mobilink server. This has now been fixed.
533805 If a consolidated database was running on an Oracle 9i or later server, the MobiLink server could have sent clients a next_last_download_time (a timestamp value used to generate a download in the next synchronization) that was earlier than the last_download_time (a timestamp value used to generate the download in the current synchronization). This problem could have caused a MobiLink client to complain when it was trying to apply the downloaded file. This problem has now been fixed.
533830 If at some point during the current session the Views folder, or a materialized view in the tree, was selected then Sybase Central could have caused shared locks to be held on all manual, valid, non-initialized materialized views. These locks would have prevented the refreshing of any such materialized view via another connection, for example from an ISQL session. This has been fixed.
533936 In rare situations, Java applications using the iAnywhere JDBC driver with concurrent connections may have hung, or even crashed. Several fixes have been made to correct race conditions between concurrent connections.
533950 The sa_locks() system procedure can be used to get a report on server locks currently held by various connections. Since both base tables and materialized views hold data, locks can be held on objects of either type. The server will now report the type of "MVIEW" for locks held on materialized view instead of the type of "BASE", which will continue to be reported for locks on base tables.
533958 When the event of a download_cursor, or a download_delete_cursor, in a MobiLink server synchronization logic was written as:

{call procedure_name( ?, ? )}

for consolidated databases running on an Oracle server, the iAS ODBC driver for Oracle may have given the error:

ORA-06553: PLS-306: wrong number or types of arguments in call to 'procedure_name'

if the stored procedure returned a result set and the word, "call" was not all in lower-case. This has now been fixed.

Note, the iAS ODBC driver for Oracle in version 9.0.2 is actually the driver from version 10.0.1. Versions of the driver with this fix are 10.0.1 3686 or later.

533974 When calling a Java stored procedure from the Interactive SQL utility with a SQL argument of type DATE, TIME or TIMESTAMP and a Java argument of type java.sql.Date or java.sql.Time, the server would have returned a parse exception from the JVM. Using dbisqlc to make the same Java stored procedure call would have worked fine. This problem has now been fixed.
533979 The columns from stored procedure result sets were not being excluded when Visual Studio enumerated stored procedure parameters. This has now been corrected.
533994 The "Messages" tab could have remained selected after executing a statement which returned result sets. This has been corrected so that the first result set tab is now always selected.
534001 The Java Runtime Environments that are included in SQL Anywhere have been updated to version 1.4.2_18 for 9.0.2 and 1.5.0_16 for 10.0.1. These updates include a number of security fixes which do not directly impact SQL Anywhere software, but were done to help those customers whose corporate policies preclude the installation of older JRE updates which contain known security defects.

In the future, customers will be able to update the JRE themselves by following instructions which will be made available shortly.

534003 In graphical plans, the operator for a table accessed using an index-only scan was drawn as a table-scan operator, not as an index-scan operator. This has been fixed.
534005 If the QAnywhere client (qaagent) was started using a rules file for its policy, then shut down and restarted with a syntax error on the command line, in some situations an error such as

"SQL statement failed: (-265) Procedure 'ml_qa_sync_rule_0' not found" would have occurred in the MobiLink client (dbmlsync). This has been fixed.

534132 If many rows had been deleted from the end of an index, and the server was under heavy load for some period of time after that, there was a chance that the server could have crashed.
534135 The iAS ODBC driver for Oracle could have given mangled error and warning messages to the application when it was running on a operating system that used a multi-byte character set, such as a Japanese or Chinese. This problem is now fixed.

Note, the iAS ODBC driver for Oracle in version 9.0.2 is actually the driver from version 10.0.1. Versions of the driver with this fix are 10.0.1 3715 or later.

534147 The server could have crashed following many concurrent updates and/or inserts to a large indexed table. This has now been fixed.
534156 If the 'datasource', 'host', or 'port' command line options were used, dbisql would not have started, but would not have reported an error. This has been corrected so that these options are now accepted and processed correctly.
534168 Altering a column with an IMMEDIATE REFRESH text index would have caused the server to fail an assertion. This is fixed.
534179 Java messages could have been corrupted on operating systems with non-English character sets. Character set conversion was not being done correctly. This has been fixed
534292 When run on non-Windows platforms, the Server Message Store wizard would have crashed after leaving the second page. This has been fixed.

In related issues, the toolbar button for opening this wizard was missing, and the "Create a client message store" item should have been removed from the Task list on non-Windows machines, but was not. These have been fixed as well.

534294 The server keeps track of the dependencies of views on other tables and views. When the schema of a table is modified by using the ALTER TABLE statement, the server automatically and atomically recompiles all views whose view definitions depend upon the schema of the table being modified. All views that can be compiled without errors with the new table schema are rebuilt persistently in the catalog and remain valid after reflecting the changes in the table schema. Views that fail to compile are left in a state where the server automatically tries to recompile them in the future. If column permissions, as opposed to table permissions, had been granted on a view dependent on the table being modified, the execution of ALTER TABLE could have failed with referential integrity violations on SYS.SYSTABCOL. This has been corrected so that the server now automatically attempts to restore the old column permissions on views that are recompiled as a consequence of ALTER TABLE. Permissions on columns that no longer exist in the recompiled view(s) are lost.

See Engineering case 536015 for a related issue.

534307 If an application using the iAnywhere JDBC driver attempted to use the optional DatabaseMetaData.getUDTs() method, the driver would have throw a "not yet implemented" exception. The iAnywhere JDBC driver has now been enhanced to return a proper result set for the getUDTs() method if the driver is connected to an SA database. For all non-SA servers, the iAnywhere JDBC driver will continue to throw the "not yet implemented" exception.
534320 Sybase Central could have crashed while using the QAnywhere plugin, if the connection to a server message store was unexpectedly lost. This has been fixed.
534321 The server could have crashed when processing an HTTP request that required character set conversion. This has been fixed.
534324 Statements that appeared in stored procedures may have used a cached execution plan (see Plan caching in the documentation). In some cases, a stale value of a builtin function could have been returned for subsequent executions of the statement. This has now been corrected. The following builtin functions were affected by this issue:

connection_extended_property

connection_property

db_extended_property

db_property

estimate

estimate_source

event_condition

event_condition_name

event_parameter

experience_estimate

http_body

http_header

http_variable

index_enabled

index_estimate

next_connection

next_database

next_http_header

next_http_variable

next_soap_header

property

rewrite

soap_header

varexists

watcomsql

For web services based on sessions, connection properties such as SessionLastTime could also have been affected by this (among other builtins). This incorrect behaviour was masked in version 10.0.1 for web services using sessions.

534333 When calling the system function REGEXP_SUBSTR() with non-ASCII characters, it could have returned an incorrect result, possibly consisting of invalid characters. The input strings were being cast to NCHAR values, and then the resulting NCHAR output was treated as a CHAR, resulting in garbled output if the database character set was not UTF8. This has been fixed.
534356 Very occasionally, the Interactive SQL utility may not have started when the fast launcher option was turned on. This problem has been fixed.
534358 Use of any of the TLS options "certificate_name", "certificate_unit", or "certificate_company" would have caused connections to fail with a "TLS handshake failure" error. This has been fixed. As a workaround, the options "name", "unit", and "company" can be used.
534402 Incorrect results were possible when executing queries with a LEFT OUTER JOIN and a WHERE clause whose elements are all from the left hand side of the join. This has been corrected.
534404 The comparison of two NULL values would have erroneously resulted in TRUE, instead of UNKNOWN. This has now been corrected.
534471 The server performs an implicit commit before and after the execution of a CREATE INDEX statement. The act of performing a commit following execution releases any locks obtained by the server during the creation of the index. If the create statement failed due to an error, then the server could have failed to release the locks obtained before the point of failure. There was no other user visible impact and the held locks were released when the connection next performed a COMMIT or ROLLBACK. This has been corrected so that the server now release the held locks automatically.
534482 If a connection string contained an invalid encryption parameter, or was missing the mandatory trusted_certificates parameter, the error returned would have been: "Could not initialize the encryption DLL: '???'" This has been corrected so that a TLS handshake error will now be returned, as in previous releases.
534496 An expression that converted an integer value to a NUMERIC or a DECIMAL, could have leaked memory in the server if an overflow error was generated. If enough of these expressions were evaluated, server execution could have been impaired. This has been fixed.
534586 Information about column defaults was not being reloaded on subsequent connections after the default information was created. This resulted in column defaults not being automatically generated for NULL columns on INSERTS. Loading of the additional field has now been implemented.
534742 The MobiLink server, and Java and .NET APIs, have been modified to allow users to register to receive notfications whenever an info line is printed to the log (i.e. lines prefixed with "I.").

Java:

The following methods, added to interface ianywhere.ml.script.ServerContext are used to register or unregister listeners:

/**

* Adds the specified LogListener to receive a notification

* when info is printed.

* method {@link LogListener#messageLogged} will be called.

*

* @param ll the LogListener to be notified on warning

*/

public void addInfoListener( LogListener ll );

/**

* Remove the specified LogListener from the list of

* listeners to receive a notification

* when info is printed.

*

* @param sl the listener which will no longer be notified

*/

public void removeInfoListener( LogListener ll );

The following constant, added to class ianywhere.ml.script.LogListener, is returned by LogMessage.getType() for info messages:

public static final int INFO = 2;

Example:

The following code registers a listener of type MyLogListener to receive notifications of info messages.

// ServerContext serv_context;

serv_context.addInfoListener(

new MyLogListener( ll_out_file ));

The following code shows an example of processing those messages:

class MyLogListener implements LogListener {

FileOutputStream _out_file;

public TestLogListener( FileOutputStream out_file ) {

_out_file = out_file;

}

public void messageLogged( ServerContext sc,

LogMessage msg ) {

String type;

String user;

try {

if(msg.getType() == LogMessage.ERROR) {

type = "ERROR";

} else if(msg.getType() == LogMessage.WARNING) {

type = "WARNING";

} else if(msg.getType() == LogMessage.INFO) {

type = "INFO";

} else {

type = "UNKNOWN!!!";

}

user = msg.getUser();

if( user == null ) {

user = "NULL";

}

_out_file.write(

("Caught msg type=" + type +

" user=" + user +

" text=" +msg.getText() +

"\n").getBytes() );

_out_file.flush();

} catch( Exception e ) {

// if we print the exception from processing an info message,

// we may recurse indefinately

if( msg.getType() != LogMessage.INFO ) {

// Print some error output to the MobiLink log.

e.printStackTrace();

}

}

}

}

.NET:

Callback functions can be registered to the following event, added to interface iAnywhere.MobiLink.Script.ServerContext, to receive notifications about info messages:

/// <summary>

/// Triggered when the MobiLink server prints info

/// </summary>

event LogCallback InfoListener;

The following, added to enum iAnywhere.MobiLink.Script.LogMessage.MessageType, can be returned by the Type property of the LogMessage class

/// <summary>

/// A log info message.</summary>

INFO

Example:

The following code defines a callback that will process an info message.

internal class TestLogListener {

public TestLogListener( StreamWriter output_file,

LogMessage.MessageType expected_type )

{

_output_file = output_file;

_expected_type = expected_type;

}

public void errCallback( ServerContext sc, LogMessage lm )

{

string type;

string user;

if( lm.Type != _expected_type ) {

_output_file.WriteLine( "Message type not expected!!" );

return;

}

if( lm.Type==LogMessage.MessageType.ERROR ) {

type = "ERROR";

} else if( lm.Type==LogMessage.MessageType.WARNING ) {

type = "WARNING";

} else if( lm.Type==LogMessage.MessageType.INFO ) {

type = "INFO";

} else {

type = "INVALID TYPE!!";

}

if( lm.User == null ) {

user = "null";

} else {

user = lm.User;

}

if( (lm.Text.IndexOf( "10017" ) > 0) ||

(lm.Text.IndexOf( "10018" ) > 0) ||

(lm.Text.IndexOf( "10020" ) > 0)

|| (lm.Type == LogMessage.MessageType.INFO

&& lm.Text.IndexOf( "MobiLink server started" ) < 0 )

) {

return;

}

_output_file.WriteLine( "Caught msg type=" + type +

" user=" + user +

" text=" + lm.Text );

_output_file.Flush();

}

StreamWriter _output_file;

private LogMessage.MessageType _expected_type;

}

The following code adds the callback to the InfoListener event.

// ServerContext _sc;

TestLogListener itll = new TestLogListener(

log_listener_file,

LogMessage.MessageType.INFO );

sc.InfoListener += new LogCallback(itll.errCallback);

534774 Non-disabled materialized views were described as having a status of "Valid". Now, the correct term "Enabled" is used, and the term "Valid" is used only for non-materialized views.
534792 The OLE DB provider did not correctly support the DBCOLUMN_BASECOLUMNNAME rowset column of the IColumnsRowset::GetColumnsRowset method. This column should contain the name of the column in the data store, which might be different than the column name returned in the DBCOLUMN_NAME column if an alias or a view was used. Here is an example.

CREATE TABLE GROUPO.MyTable(

DATA2 varchar(16),

DATA1 varchar(16),

PKEY int NOT NULL default autoincrement,

CONSTRAINT PKeyConstraint PRIMARY KEY (PKEY)

) ;

CREATE VIEW DBA.MyView( PKEY, DATA_1, DATA2)

AS SELECT PKEY, DATA1, DATA2 FROM MyTable;

Consider the following queries.

SELECT PKEY, DATA_1, DATA2 as D2 FROM MyView

SELECT PKEY, DATA1 as DATA_1, DATA2 as D2 FROM MyTable

In both cases, the OLE BD provider would return the following for DBCOLUMN_BASECOLUMNNAME and DBCOLUMN_BASETABLENAME for these queries.

PKEY MyTable

DATA_1 MyTable

D2 MyTable

Of course, the DATA_1 and D2 columns are not found in MyTable.

With this fix, the provider now returns the correct column names.

PKEY MyTable

DATA1 MyTable

DATA2 MyTable

534837 Predicates with AND, OR and NOT expressions along with UNKNOWN could have produced incorrect results. This has now been corrected.
534927 Control of an HTTP session time-out duration was not passed to subsequent HTTP requests belonging to the same session if a TEMPORARY HTTP_SESSION_TIMEOUT database option had been set (in a previous HTTP request belonging to the session). The scope of the problem applied to all TEMPORARY database options set within an HTTP session context. The problem was due to user id being reset for each HTTP request. This has been corrected so that an HTTP request within a session context will no longer reset its user id if it is identical to the user id of the current service.

The problem remained however if an HTTP session was used to call a service that specified a different user id. A SA web application using HTTP sessions should only use TEMPORARY and/or USER specific options when all requests within the HTTP session context access SA services defined with the same user id. Similarly, accessing an authenticated SERVICE would require that the HTTP request belonging to a session provide the same user id from request to request. To address this, a new HTTP OPTION called SessionTimeout has been added to make HTTP session time-out criteria persistent in all cases. It can be set from within an HTTP request that has defined, or will define, a SessionID. The context of the setting is preserved throughout the HTTP session, until it expires, is deleted or changed (with a subsequent SA_SET_HTTP_OPTION call).

- New SA_SET_HTTP_OPTION option SessionTimeout

The value of this HTTP OPTION is specified in minutes. It is subject to the minimum and maximum constraints of the HTTP_SESSION_TIMEOUT database option. A newly created session is implicitly assigned the current or default PUBLIC/USER HTTP_SESSION_TIMEOUT.

The following example sets a given HTTP session time-out to 5 minutes:

call SA_SET_HTTP_OPTION('SessionTimeout', '5');

An empty value resets the option to its default value, or as set by the PUBLIC or USER scope HTTP_SESSION_TIMEOUT database option.

call SA_SET_HTTP_OPTION('SessionTimeout', ''); // resets the time-out to 30 minutes - the default value of the HTTP_SESSION_TIMEOUT database option

SET OPTION PUBLIC.HTTP_SESSION_TIMEOUT=1 // New HTTP sessions calling SA_SET_HTTP_OPTION('SessionTimeout', '') set session time-out to 1 minute

SET OPTION USERA.HTTP_SESSION_TIMEOUT=15 // New HTTP sessions calling SA_SET_HTTP_OPTION('SessionTimeout', '') set session time-out to 15 minutes for USERA

NOTE: HTTP session default criteria is derived from the current PUBLIC/USER HTTP_SESSION_TIMEOUT database option setting. Any subsequent changes to this option will not implicitly affect existing HTTP sessions. The default timeout setting for HTTP sessions that always use the same user id remains unchanged. However, an HTTP request belonging to a session that calls a service with an alternate user id will force its cache to be cleared and the option defaults of the current user to be loaded. Therefore, when the session switches users all TEMPORARY options are lost and the current PUBLIC/USER options are assigned.

- New CONNECTION_PROPERTY('SessionTimeout')

Returns the time-out value in minutes for a given database connection belonging to an HTTP session. The value is the current setting for SA_SET_HTTP_OPTION('SessionTimeout', 'X').

A value of 0 is returned if the database connection does not belong to an HTTP session. As before, the HTTP_SESSION_TIMEOUT database option may be queried to determine the PUBLIC/USER default values.

- Summary of changes

TEMPORARY and USER scope options are preserved when HTTP requests belonging to a session execute SA services defined with a specific (the same) user id.

SessionTimeout HTTP_OPTION has been added to provide an HTTP session context time-out criteria. Its use is recommended in place of setting a TEMPORARY HTTP_SESSION_TIMEOUT database option since it is guaranteed to persist for the life of the session.

534931 A query that did a scan of an index when the isolation level was set snapshort, could have returned extra rows. This has now been corrected.
534949 The iAS ODBC driver for Oracle would have truncated the time portion of timestamp values, when the application was trying to fetch the timestamp values using SQLGetData. An internal buffer was too small for a timestamp column. This has been fixed.
534963 The server tracks dependencies of views on other views and tables. If a table is referenced by other views, attempting to execute an ALTER TABLE statement on the referenced table could have caused the server to crash under certain circumstances. This has been fixed, the server now carries out the ALTER properly.

A workaround is to disable the dependent view before executing the ALTER statement, followed by a re-enabling of the view.

534966 Sybase Central did not allow creating, modifying or deleting services for the MobiLink Listener utility (dblsn), the Broadcast Repeater utility (dbns11), and the SQL Anywhere Volume Shadow Copy Service (dbvss11). Attempting to open the properties for one of these types of services would have caused Sybase Central to crash. These problems have been fixed.
534995 When deploying a synchronization model to an UltraLite remote database, the generated <model>_ulsync.bat and dblsn.txt files incorrectly used the version 10 syntax for ulsync. This has now been corrected.
535215 The server supports the ANSI MERGE statement, with some vendor extensions, which can be utilized to merge data from one source into another. Under certain circumstance, the MERGE statement could have behaved incorrectly. As an example, if the MERGE statement was instructed to update multiple rows of the target table based on the same matching conditions, then the values visible for the new row within a BEFORE UPDATE row level trigger could have been incorrect. This problem has been resolved.
535235 The Listener utility (dblsn) with persistent connection turned off, may have failed to confirm message delivery or action execution. This may also have caused the MobiLink server to report protocol errors. This has been fixed.
535244 The IIS relay server would have leaked one mutex handle per http request. This has now been fixed.

A workaround is to set the worker recycling option for IIS to ON, in order to keep the leak under control.

535363 The encrypted form of a user password that had been set by a CREATE USER, or an ALTER USER, statement could have been interpreted incorrectly if the transaction log was translated by the Translation utility (dbtran) and the resulting SQL file re-executed. This was likely to be a problem only for databases using multi-byte character sets, and has now been fixed.
535586 If an index was defined in the reference database as:

create index idx on t(a asc, b asc, c asc)

The UltraLite Initialize Database utility (ulinit) would have created the index as:

create index idx on t(c asc, b asc, a asc).

reversing the order of the columns. This has been corrected and ulinit will now create the index in the same order as the reference database.

535591 An error would have been reported if a string of connection, or synchronization, parameters used parentheses inside a sublist.

For example:

stream=http(host=myhost;url_suffix=root/(MyName)/ml;port=80)

This has now been fixed.

535592 If a CREATE EXTERNLOGIN statement was executed with an empty string for the password, the password recorded in the transaction log would have been incorrect. This has been fixed.
535627 The database properties CleanablePagesAdded and CleanablePagesCleaned could have reported that there were pages to clean when in actuallity there were none. This would have happened if a dbspace with cleanable pages was dropped. This has now been fixed.
535637 If execution of a LOAD TABLE statement failed, and the table was large, database corruption could have resulted. The server may have freed a page twice. This has been fixed.
535643 Cancelling an ALTER TABLE statement for a large table, may have left the database in a corrupt state. This has been fixed.
535662 A SQL Anywhere JSON SERVICE may have returned unencoded control characters when the server wrote content that was greater than 256 bytes. This has been fixed. Strings containing control characters, such as newline, are now always encoded (i.e. "\n" is returned rather than 0x0A).
535799 Executing queries using SELECT FIRST or SELECT TOP N, referencing proxy tables to a remote DB2 server, would have failed with a syntax error. DB2 does not support the FIRST and TOP N syntax; instead, the query must use FETCH FIRST ROW ONLY for FIRST, or FETCH FIRST N ROWS ONLY for TOP N. This problem has now been fixed.
535804 Values for SOAP input TIME and DATETIME data types were incorrectly converted to the server's locale if the value contained a negative time zone offset, with a nonzero minute field, i.e. GMT-03:30 (Newfoundland). This has been fixed.

In addition the processing of DATE values has modified with this change. The TZ offset if provided with an input DATE value is now ignored, and the TZ offset is no longer appended to an output DATE value (within the HTTP/SOAP response).

535817 Sybase Central was not able to attach to a tracing db when the server was set to ignore all broadcasts (-sb 0), and no PORT number was specified. This has been fixed.

Note, this is a follow-up to Engineering case 530790.

535849 An application using the iAnywhere JDBC driver was not able to change the connection isolation level to one of the SA Snapshot Isolation levels. This problem has now been resolved. To use one of the SA Snapshot Isolation levels, the application can now call the Connection.setTransactionIsolation method with one of the following values:

for applications using ianywhere.ml.jdbcodbc.IDriver, use:

ianywhere.ml.jdbcodbc.IConnection.SA_TRANSACTION_SNAPSHOT

ianywhere.ml.jdbcodbc.IConnection.SA_TRANSACTION_STATEMENT_SNAPSHOT

ianywhere.ml.jdbcodbc.IConnection.SA_TRANSACTION_STATEMENT_READONLY_SNAPSHOT

for applications using ianywhere.ml.jdbcodbc.jdbc3.IDriver, use:

ianywhere.ml.jdbcodbc.jdbc3.IConnection.SA_TRANSACTION_SNAPSHOT

ianywhere.ml.jdbcodbc.jdbc3.IConnection.SA_TRANSACTION_STATEMENT_SNAPSHOT

ianywhere.ml.jdbcodbc.jdbc3.IConnection.SA_TRANSACTION_STATEMENT_READONLY_SNAPSHOT

535861 Updates to the OLE DB schema support procedures were not installed into the database using the Upgrade utility (dbupgrad) or when executing an ALTER DATABASE UPGRADE statement. They were installed though when the PROCEDURE ON clause was used with ALTER DATABASE UPGRADE. To ensure that dbupgrad will perform the OLE DB update, the ALTER DATABASE UPGRADE support procedures will now update and/or install the latest OLE DB schema support procedures. Since PROCEDURE ON is no longer required for the OLE DB update, you are no longer forced to update other system procedures.
535973 Changes made to property values on the "Client Properties" page, in a server message store's property window, would not have been saved if the client was "(Default)". This has been corrected so that they are now saved correctly.

Also, if connecting using a QAnywhere connection profile was not possible, Sybase Central would have crashed rather than reporting the error. This has been corrected as well.

535983 The usage messages for the QAnywhere Stop utility (qastop) did not display correctly on some non-english systems. This has been fixed.
535988 Attempting to setting the inline or prefix amount of a blob column to 32768 on a 32K pagesize database would have failed with the error:

'Illegal column definition: Column 'xxx' inline value '-32768' is invalid"

This has now been fixed. A workaround is to use the value 32767. Doing so does not affect the amount of inline space available for the column as there is always some page overhead that is unusable for prefix data.

535990 The banner for the certificate utilities createcert, viewcert, and createkey could have been mangled on non-English systems. This has been fixed.
536001 When autostopping a database, the server could have failed assertion 201137 - "Concurrent outstanding file growth requests." This would have been very rare, and timing dependeding. It was also possible to see this assertion when shutting down the server while a DDL operation, typically a long running one, was underway. This has now been fixed.
536015 The ALTER VIEW RECOMPILE statement can be used to rebuild the view definition of an existing view. Among other things, the statement causes the schema of the view columns to be regenerated. If column permissions, as opposed to table permissions, have been granted on a view, then the recompilation could have failed with a foreign key constraint violation on SYS.SYSCOLUMN. The server now remembers all the column permissions on the view that exist before the recompile statement is executed. After the view has been recompiled, the server automatically restores the old column permissions based on column name look-ups in the new view definition. Note that if a column of the view that no longer exists after the recompilation will have the old permissions lost. A workaround is to drop the column permissions and to restore them after the view recompilation.

See also Engineering case 534294 for a related issue.

536130 The OUTPUT statement would have written VARBINARY values to TEXT files incorrectly. This has been fixed.
536143 A new MobiLink server command line option, -ppv <period>, has been added which will cause the server to print new, periodic monitoring values every <period> seconds. The suggested period is 60s. If the period is set too small, the log will grow very quickly. These values provide insight into the state of the server, and are useful for determining the health and performance of the MobiLink server. For example, one could look at the DB_CONNECTIONS and LONGEST_DB_WAIT values to look for potential problems with the -w option or in the synchronization scripts. They also provide an easy way to track system wide throughput measures such as the number of rows uploaded or downloaded per second and the number of successful syncs per second. Each row of output is prefixed with "PERIODIC:" to aid searching for and filtering out the values.

The following table contains a description of the printed values:

Value Description

TCP_CONNECTIONS Number of TCP connections currently opened

PAGES_USED Number of cache pages used

PAGES_LOCKED Number of cache pages loaded into memory

TCP_CONNECTIONS_OPENED Total number of connections ever opened

TCP_CONNECTIONS_CLOSED Total number of connection ever closed

TCP_CONNECTIONS_REJECTED Total number of connection ever rejected

TCP_BYTES_READ Total number of bytes ever read

TCP_BYTES_WRITTEN Total number of bytes ever written

ML_NUM_CONNECTED_CLIENTS Number of connected sync client

PAGES_SWAPPED_OUT Total number of pages ever swapped to disk

PAGES_SWAPPED_IN Total number of pages ever read from disk

PAGES_IN_STREAMSTACK Number of pages held by the network streams

CPU_USAGE Amount of CPU time used by MobiLink server in microseconds

NUM_COMMITS Total number of commits

NUM_ROLLBACKS Total number of rollbacks

NUM_SUCCESS_SYNCS Total number of successful syncs

NUM_FAILED_SYNCS Total number of failed syncs

NUM_ERRORS Total number of errors

NUM_WARNINGS Total number of warnings

DB_CONNECTIONS Number of database connections in use

RAW_TCP_STAGE_LEN Length of the network work queue

STREAM_STAGE_LEN Length of the high level network processing queue

HEARTBEAT_STAGE_LEN Length of the queue for periodic, non-sync work

CMD_PROCESSOR_STAGE_LEN Length of the queue for sync work

NUM_ROWS_DOWNLOADED Total number of rows sent to remotes

NUM_ROWS_UPLOADED Total number of rows received from remotes

FREE_DISK_SPACE Disk space available on the temp disk in bytes

LONGEST_DB_WAIT Longest length of time an active sync has been waiting for the database

LONGEST_SYNC Age of the oldest sync in ms

NUM_UNSUBMITTED_ERROR_RPTS Number of unsubmitted error reports

MEMORY_USED Bytes of RAM in use. Windows only.

SERVER_IS_PRIMARY 1 if the server is primary; 0 otherwise

536173 If the file containing the trusted certificates specified by the "trusted_certificates" option was not found, the error STREAM_ERROR_SECURE_ADD_TRUSTED_CERTIFICATE was reported, which was not very specific. Now STREAM_ERROR_SECURE_TRUSTED_CERTIFICATE_FILE_NOT_FOUND is reported, as was done in 10.0 and previous versions.
536335 If an application generated a result set via one DatabaseMetaData call, and then generated a second result set via another DatabaseMetaData call, then the first result set would have been automatically closed. This behaviour is not incorrect, and is consistent with many other JDBC drivers. However, some applications have had the need to keep two separate DatabaseMetaData result sets open at the same time. The iAnywhere JDBC driver has now been enhanced to allow up to three separate DatabaseMetaData result sets to remain open at the same time.
536347 Executing a LOAD TABLE statement with the clause CHECK CONSTRAINTS OFF, may have failed if the table being loaded had publications. This has been fixed.
536370 For workloads that consisted of very inexpensive queries (for example, where each statement was executed in less than a millisecond), the server performance was slower than previous versions. This has been improved. As part of this change, a larger class of statements now bypasses query optimization. The properties QueryBypassed and QueryOptimized can be used to measure how many statements bypass optimization, or use the full query optimizer. The time required when a table was first accessed could have been slower than previous versions. This was particularly true for databases with many columns, and was very noticeable on CE platforms. This has been fixed.

Further, in some cases the plan text for a simple statement could show the table name instead of the correlation name. This has also been fixed.

536374 HotSync may have logged a -305 error for a synchronization failure, and potentially other database corruption. This has been fixed.
536388 In rare situations, a busy HTTP server may have timeouted a connection as the request was queued, causing the server to crash. This has been fixed.
536541 If an application attempted to update or delete from a proxy table joined with a local table, then the server may have failed an assertion, or crashed. The server will now correctly give error -728 'Update operation attempted on non-updatable remote query'.
536543 During diagnostic tracing, CONNECT and DISCONNECT request, as well as other information, could have been missing for a connection. DISCONNECT request were missing for some user connections, and CONNECT request and all statistics were missing for internal connections. This has been fixed. As well, some internal connections will be logged with both CONNECT and DISCONNECT requests, while others will not be displayed.
536563 The insert performance sample (instest) shipped with SQL Anywhere did not correctly assign values to integer columns on 64-bit big-endian platforms. Depending on the definition of the table being used, may have caused instest to terminate prematurely. The instest sample has now been corrected. This problem can be worked around by modifying the FillItem() function in instest.sqc to use an "int", instead of a "long", in the cast performed for the DT_INT/DT_UNSINT case.
536568 Using the SQL Anywhere Support utility (dbsupport) to check for updates on HP-UX and AIX would have failed to check for 32-bit client updates. This has been fixed.
536588 If an application connected using a TDS based client (i.e. jConnect, iAnywhere JDBC) and attempted to use a procedure in the FROM clause of a SELECT statement, then the TDS client may have reported a TDS protocol error. This problem has now been fixed.
536594 If an external function that was defined to return an integer value was assigned to a variable declared as INT, a "Value out of range for destination" error would have been given. This has been fixed.
536608 Calling sa_set_option('AcceptCharset', '+'); from within a stored procedure that is called via an HTTP request should set the response to the database charset whenever possible, but when a client specified the database charset it was only selected when its q-value was among the highest. This has been fixed so that the response uses database charset if specified by the client, regardless of q-value preference.

Example:

SA server uses ISO-8859-1 charset,

client specifies Accept-Charset:UTF-8,IBM850;q=0.8,ISO-8859-1;q=0.5

Although least preferred by the client, SA will respond with ISO-8859-1 if SA_SET_HTTP_OPTION('AcceptCharset', '+'); has been called (from within a procedure servicing the HTTP request).

536620 The OLE DB provider's ICommandWithParameters::SetParameterInfo() method may have caused an access violation, depending on the order of parameter indexes in rgParamOrdinals, which is one of the input parameters to the method. The problem may have also occurred if SetParameterInfo() was called after ICommandPrepare::Prepare(). This problem has now been fixed.
536739 The server could could have raised assertion 102802 - "Unable to undo index changes resulting from a failed column alteration" if an ALTER statement failed, or was cancelled. This has now ben fixed.
536746 When an encryption library could not found, the MobiLink server would have issued a misleading message indicating corruption:

Invalid or corrupt network interface library: xxxxx

This has been corrected so that now the MobiLink server issues the message:

Failed to load library xxxxx

he documentation for the load library message indicates that a license may be required, which is appropriate in this case.

536805 Grouping queries containing a CUBE, ROLLUP or GROUPING SETS clause may have returned incorrect results. The query must also have had a HAVING clause with at least one null sensitive predicate (e.g., 'T.C IS NULL' , 'T.C IS NOT NULL' ). This has been fixed.

An example:

select dim1, dim2, sum (val1), stddev (val2)

from tt

group by cube (dim1, dim2)

having dim1 is not null or dim2 is not null

536808 The server tracks dependencies of views on other views and tables. If a view referenced another view and the view definition of the referenced view was "flattened" or "inlined" within that of the referencing view, then the server could have failed to correctly record the dependency information. The server now behaves correctly when recording dependency information in this situation. Any existing views can have their dependency information recorded correctly by being recompiled.
536921 Applications using the iAnywhere JDBC driver, could have crashed or hung if a process ran out of memory. This has been fixed so that it will now either fail gracefully, or cause an assertion with an appropriate error message, depending on the circumstances.
536966 The server may have crashed if a rank function (see SQL Functions->Function types->Rank functions in the SQL Usage guide) was used on constants. The row_number() function in the example below:

select x from ( select V1.*, row_number() over ( order by b ) AS x

from ( select *, 7 as b from T1 order by 1 ) V1

) V2

is used on column "b" of the nested table expression "V1", and column "b" is a constant there. This has been fixed.

537126 When running on multiprocessor machines, statements with joins may have caused a server crash in rare conditions. This is now fixed.
537147 If an application prepared a non-INSERT statement (i.e. a DELETE or an UPDATE statement) and used PreparedStatement.addBatch() followed by PreparedStatement.executeBatch() to execute a wide DELETE or wide UPDATE, then the results of executing the batch were unpredictable. Prepared batches were intended to be used for wide inserts only, but the iAnywhere JDBC driver did not restrict the usage to wide inserts. The driver now imposes this restriction and will throw an exception if an application attempts to use addBatch()/executeBatch() on a non-INSERT statement.
537153 On AIX systems, in some very rare circumstances, the server could have crashed while listening for network broadcasts. This has been fixed.
537164 The server assigns a unique object id for every object created in the database. The object ids are stored in the catalog table SYS.ISYSOBJECT. When objects are deleted, their ids are reused for new objects when the ids being released are at the end of the currently allocated range. Under concurrent execution of DDL operations it was possible for the server to avoid reusing some object ids even when it was possible to do so. There was no likely adverse effect of this deficiency, which has now been corrected.
537170 The Interactive SQL utility (dbisql) would have crashed when the Plan Viewer window was oipened if the SQL Anywhere plugin was not registered. This has been fixed.
537171 The search condition REGEXP and system function REGEXP_SUBSTR() were using the database's collation to determine if a literal, or character class range, in the pattern matched the string. For example, if the database was case insensitive and accent insensitive, matches were case insensitive and accent insensitive as well. Ranges were evaluated using the collation sort order. This resulted in different behavior than other tools such as Perl, Java, .NET, etc. This has been fixed so that REGEXP and REGEXP_SUBSTR() only match a literal in a pattern if it is the exact same character. Ranges in character classes (for example '[A-F]') only match characters which have character set encoding greater than or equal to the encoding of the first character in the range (A in '[A-F]') and less than or equal to the encoding of the second character in the range (F in '[A-F]').

Note, this change does not affect the SIMILAR TO search expression, which continues to use the collation to determine character equivalence and evaluate character class ranges.

537172 In some cases, an execution plan using a parallel execution strategy could have used a low-memory fallback strategy, even though there was sufficient memory for it to complete. The QueryLowMemoryStrategy property would have increased if the low memory strategy for the operator was used. This problem has been fixed.
537177 The search conditions SIMILAR TO and REGEXP, when used with the sub-character classes [[:upper:]] and [[:lower:]], were case insensitive on a case insensitive database. This has been fixed so that [[:upper:]] only matches upper case characters and [[:lower:]] only matches lower case characters, regardless of the database case sensitivity.
537333 HTTP clients going through the Relay Server may now optionally include the IAS-RS-Cookie header with the value set to 'reset' in the first request within the session. This was added in order to defeat the old standard cookie memorized by HTTP proxies, like the Blackberry MDS. If the client has full control of cookie caching, and a new http session will not reuse an old cookie, then implementation of this option is not needed in the client. This feature is suitable for Blackberry devices behind MDS, where the client application does not have real control on when to end the underlying HTTP session.
537337 Calling the ODBC function SQLGetProcedureColumns() would have failed with the error -143 "Column 'remarks' not found" when using a SQL Anywhere ODBC driver from a version prior to 10.0 and connected to version 10.0 or later server. This was due the ODBC drivers prior to version 10.0 referencing the SYSPROCPARM.remarks column in the SQLGetProcedureColumns() function, which had been dropped in version 10.0 and later database files. The SYSPROCPARM.remarks column has been re-added as a constant NULL.
537391 A connection may have held table or row locks even after a DDL statement had failed. This has been fixed.
537399 The search condition REGEXP, and the system function REGEXP_SUBSTR(), were treating _ (underscore) and % (percent) as meta characters to match any character or any characters respectively. Also, if a caret (^) was in a character class, but not the first character after the open square bracket (for example [a-e^d]), then it was treated as a subtraction character class operator. These behaviours were different than other tools such as Perl, Java, .NET, etc. This has now been fixed so that _ and % are not meta characters for REGEXP and REGEXP_SUBSTR(); and a caret which is not the first character after the open square bracket now matches a caret.

The search condition SIMILAR TO has not been changed. For SIMILAR TO, _ matches one character, % matches any number of characters and [a-e^d] matches a, b, c and e.

537555 Dropping a table could, in rare circumstances, have caused the server to fail assertion 102806 "Unable to delete row from SYSTABLE". This has been fixed.
537558 A side effect of the combined fixes for Engineering cases 533936 and 536335 was to cause Sybase Central to crash when attempting to expand the table tree view in the MobiLink plugin. This problem has now been fixed.
537560 It was possible for calls to DB_Property( 'DriveType' ) on AIX systems to erroneously return "UNKNOWN". A buffer used to enumerate the various mounted filesystems may have been too small. This has been fixed.
537575 Sybase Central would have crashed if it was connected to the utility database and then connected to another database running on the same server. This has been fixed.
537579 The QAnywhere client (qaagent) would have silently initialized a new database the first time it was run. This has been fixed so that it now is mandatory to initialize a new database as a QAnywhere message store by running qaagent with -si, as a separate step.
537595 The changes for Engineering case 534179 introduced a problem where the QAnywhere Server's logging messages could have been output as garbled text. This has now been corrected.
537609 If a synchronization contained tables for which no rows were uploaded or downloaded, the MobiLink server would have allocated more memory than was neccessary. This has been fixed so that the memory usage will be proportional to the number of columns in empty tables multiplied by the number of upload transactions. In tests with 50 concurrent syncs of 200 empty tables with 6 columns per table, the peak memory used by MobiLink server dropped by 178MB, or about 3kB per column. Systems that synchronize many empty tables, or use transactional uploads (i.e. the -tu option on dbmlsync), will see improved performance with this fix.
537610 Some queries with an illegal CONTAINS search condition could have caused the server to crash. This has now been fixed.
537616 Under rare circumstances, the server could have gone into an infinite loop after a non-recurring scheduled event was run. Any attempts to communicate with the database on which the event was scheduled would have blocked. This has been fixed.
537620 The sync_request phase time was incorrect in the MobiLink monitor. It was usually 0, but could be negative. This has been fixed.
537747 If an application used the iAnywhere JDBC driver with either a Microsoft SQL Server, or DB2, ODBC driver, and the application did not explicitly close Statement or PreparedStatement objects, then it was possilbe that the application would have hung at garbage collection time. This problem has now been fixed.
537748 When running the server in 'in memory' mode, the server would still have enforced the per-connection temporary space limit, even though no temporary files are used when running in 'in memory' mode. This has been fixed.
537774 Under rare circumstances, clients running on Unix systems, could have crashed on disconnect. This has now been fixed.
537786 As of version 11.0.0, DML operations on temporary tables are allowed to have full transactional semantics (i.e. commit and rollback) on read-only databases. However, the support for this feature was not fully enabled. This has been corrected.

Additionally, the creation of savepoints for temporary objects on read-only databases is also now supported.

537787 If a C++ application had been created using the DBSync API, it was possible that this application would not have been able to connect to the a MobiLink client started in server mode, if the machine supported IPv6. This has now been fixed.
537800 If an application executed a remote query with a malformed field or dotted reference in the select list, then it was possible that the server could have crashed. An example of such a query is:

select c1.ref(), max( c2 ), c2 from t1

where c1.ref() is a meaningless expression. This problem has now been fixed and a proper error message will be returned to the application.

537804 When the size of a long varchar or long binary column exceeded 32 KB on Windows, or 1 KB on Windows Mobile, the column may not have been read correctly by the OLE DB provider. This problem has been fixed.
537917 A download_delete_cursor script that returned NULL and non-NULL values for the primary key columns of a synchronized table would have made the MobiLink client behave erratically: the client could have deleted rows that should not have been deleted, or could have displayed the following error message:

SQL statement failed: (100) Row not found

This problem has been fixed. The MobiLink server will now complain if a download_delete_cursor returns NULL as well as non-NULL values for the primary key columns of a synchronized table, and will then abort the synchronization.

The download_delete_cursor script must return NULL values for all the primary key columns (the MobiLink client will delete all

the rows from the corresponding sync table) or non-NULL values (the client will delete specific rows specified by the primary

key values).

537923 Execution of some queries involving procedure calls could caused a server crash. This is fixed.
537962 If an error occurred when executing a Java or .NET synchronization script, and operations had been performed on the connection returned from the DBConnectionContext.getConnection method, it was possible for those operations to have been committed to the consolidated database. In order for this to have occurred, the Java or .NET synchronization script would have to have been executed before any SQL scripts were executed in the transaction by the MobiLink Server. As a workaround, a SQL synchronization script that does nothing could be defined that executes at the start of the transaction. For example, define a begin_upload connection event that calls a stored procedure, that does nothing, to prevent a problem in the handle_uploadData event resulting in operations performed in the handle_uploadData event from being accidentally committed. This problem has now been fixed.
537965 Executing a STOP JAVA command may have, in rare circumstances, caused the server to crash. This has been fixed.
538098 The space previously used by deleted rows was not being reclaimed and reused on the mirror server of a mirroring system. As a result, the mirror server's database could have grown faster than the database on the primary server. This space would have eventually be reclaimed if the mirror server became the primary server. This has been fixed.
538099 Attempting to copy a large number of values in the "Results" pane could have caused Interactive SQL (dbisql) to crash. This has been foxed so that an error message is now displayed and the copy is aborted.
538128 Attempting to upgrade the mirrored database in a mirroring system, using the Upgrade utility (dbupgrad), or by executing an ALTER DATABASE UPGRADE statement, would have resulted in transaction log entries which could not be replayed on the mirror server. An error will now be given if an upgrade is attempted on a database which is currently being mirrored.
538145 MobiLink servers with web edition licenses had an incorrect feature set. This has now been corrected.
538146 Under some update patterns, concurrent changes to text indexes created with the IMMEDIATE REFRESH clause, could have caused assertion failure 110400. This has now been fixed.
538156 Long running MobiLink Monitors could have hang or crashed with a RuntimeException "the monitor doesn't send any-order commands". This has been fixed.
538275 If a query execution plan contained a Group-by Ordered (GrByO) operator in a particular stylized access plan pattern containing an outer joing, and the group-by node had a string or NUMERIC value in the result, then it was possible for the server to crash while processing the statement. The crash would have depended on the order and values of rows processed by the plan. This has been fixed.
538292 When Sybase Central was used to create a proxy table to a remote table in an ADS database, accessing the proxy table to perform queries or updates would have failed. This problem has now been fixed. It should be noted that in order to use proxy tables to an ADS table, the ADSODBC class must be used. Using the generic ODBC class will continue to cause access problems for ADS proxy tables.
538303 If while executing an ATTACH TRACING statement, the tracing server was stopped, the server being traced could have crashed. This has been fixed.
538305 The server console's checkpoint begin and end messages were not being displayed when the server was run in 'in memory' mode with Checkpoint only (-im c). This has been fixed.
538306 If multiple connections executed DDL statements concurrently, then, under very rare circumstances, it was possible for the server to behave incorrectly. This problem has been resolved.
538317 The Windows Mobile Deployment wizard was always writing to sqlany11.cab, rather than the filename specified by the user. This has been fixed.
538324 Attempting to create a table with a varchar(36) column with a default of newid() would have failed with a syntax error. The column could have been later altered to add the newid() default, but the generated default values would have been garbage. These two bugs have now been fixed.
538346 When the QAnywhere Agent was started for the first time, and another the qaagent to fail to start with an error similar to:

InternalError: User 'DBA' has the row in 'ml_qa_global_props_client' locked

Source statement: CREATE SYNCHRONIZATION SUBSCRIPTION TO ml_qa_user_group.ml_qa_repository_pub FOR "sender-rules" OPTION sv='ml_qa_2'

This has been fixed by now having the QAnywhere Agent acquire exclusive locks on tables involved in the publication, before creating the synchronization subscription.

538347 If the MobiLink server was started unsuccessfully (i.e invalid parameter, unable to connect to database, invalid stream specified), and no logging option was specified (-o or -ot), then the server would have displayed an error dialog and waited for the shutdown button to be pressed. After waiting about a minute for the manual shutdown, the server could then have crashed. This has been fixed.

Note, this problem should only have occurred on systems where a GUI was used.

538480 In rare circumstances, the server could have crashed while disconnecting if -zl, -zp, sa_server_option( 'RememberLastStatement', 'YES' ) or sa_server_option( 'RememberLastPlan', 'YES' ) were used. This has been fixed.
538484 The server allows the use of host variables with the INSERT statement, to insert multiple rows into the database in a single request. Under certain circumstances, the server could have crashed when block inserts were executed in the server. This has been fixed so that the server now generates an error message instead in these circumstances.
538547 The search conditions SIMILAR TO and REGEXP, and the fuction REGEXP_SUBSTR() could have given incorrect results for some patterns if the string being searched was more than 250 bytes in length. The search string could be 250 bytes in length if it contained as few as 63 characters and the database character set was multi byte (including NCHAR strings). It was possible that a pattern would not have matched a string that it should have. In rare cases the server could even have crashed. This has now been fixed.
538694 An application that did not explicitly close Statement, PreparedStatement or CallableStatement objects may, in rare cases, have crashed when closing a Connection object. This problem has now been fixed.
538698 The 'tempfilename' property would have returned a value when running in In-Memory mode, even though neither supported In-Memory modes use a temporary file. This has been fixed so that the 'tempfilename' property now returns NULL when the server is running in In-Memory mode.
538700 UltraLiteJ did not work with cookie injecting proxy servers, such as the Relay Server. This has been fixed.

Note that on the BlackBerry, the MDS may cache cookies for the devices that go through it, and so UltraLiteJs cookie behaviour may be different from other remotes. In particular, cookies sent to the remote may be cached for longer than the duration of a sync. When using a proxy other than the Relay Server, ensure that the optional cookie fields, defined in RFCs 2109 and 2965 dealing with cookie caching, are properly set, or disable this feature in your MDS. The Relay Server is unaffected by this caching, but other cookie injecting proxies may be affected by it.

538737 When a mirror server was started in preferred mode, it was possible for the synchronization between the primary and the mirror to have failed. This has now been fixed.
538743 When attempting to use a MobiLink Java Start class that made use of UltraLiteJ, an error similar to "<Main> [-10150] Linkage error while loading class: 'jdbssint' Error description: 'ianywhere/ultralitej/Configuration'" would have occurred, and the server would have failed to start. The problem was due to class name conflicts, which have been corrected.
538862 If ALTER DATABASE UPGRADE was executed twice, using the same connection, the second execution would have failed. The upgrade scripts did not remove some temporary objects used by the scripts. This has been fixed.
538863 The Database Documentation Wizard could have crashed Sybase Central if it ran out of memory. A number of changes have been made to reduce the amount of memory needed to generate documentation, so that it now reports an out-of-memory error and leaves the program in a state where it can safely continue working.
538865 Applications using TLS on Mac OS X systems, may have experienced crashes. This has been fixed.
538882 If the stored procedure debugger was used to trace execution of a procedure containing a variable defined as UNIQUEIDENTIFIER, the value and datatype for the variable would not have been displayed. This has been fixed.
538883 If the ansi_close_cursors_on_rollback option was set to 'ON', and request logging of plans was enabled, the server could have crashed. This has been fixed.
538904 If an application using the iAnywhere JDBC driver called the method ResultSet.isLast() when the result set was positioned on the last row, the call would have correctly returned a value of 'True', but the result set position would have been move to be after the last row. The problem has now been fixed.

Note, this problem does not occur if the result set is not positioned on the last row.

538912 Right-clicking on a result set, then selecting the item "Copy/Copy Cell" from the menu, would only have copied the cell value if the cell had previously been left-clicked. This has been corrected so that left-clicking is no longer necessary.
538920 The Database Documentation wizard would have reported an unhelpful error message when a user, which was not a member of the SYS group, logged in . The wizard used a number of queries which referenced system tables without the appropritate creator qualifier. This has been fixed.
538931 The Create Service Wizard would have provided default paths for 32-bit executables when 64-bit executables were available on a 64-bit version of Windows. This has been corrected so that default paths for 64-bit executables are now provided if they are available; otherwise, default paths for 32-bit executables are provided.
538936 The Dbmlsync Integration Component could have crashed during a call to the Run method. As well, the OS would sometimes have detected a heap error. This has been fixed.
538953 The Relay server may have failed to relay http responses for a several minutes after seeing an rsoe uuid mismatch on down channel connect. This would have been rare, as it required the down channel to be renewed right before an up channel renewal, plus the up channel renewal must have renewed the uuid before the down channel was authenticated. The Relay Server would have eventually detected an error on writing over the failed down channel and would have been able to recover, however http responses or portions of it relayed within that period were lost. This problem has been fixed and a rsoe uuid mismatch should not occur on a down channel unless this is caused by invalid running duplicated instances of the Relay Server with the same backend server identity.
538954 Server Initiated Synchronizations, using persistent connections, didn't scale well as it required persistent resource per connected client on the backend server, as well as onintermediaries like the Redirector or Relay Server. This limitation may have caused large deployments to require a server farm, which is not supported until version 11.x. Now with this change, an alternative solution is provided based on light weight polling. This alternative is based on a new caching notifier in the MobiLink server, and a client API for polling the notification (MobiLink Lightweight Polling API). The caching notifier refreshes the current set of notifications by executing a request_cursor against the database at a setable frequency. The cache is exposed for clients to poll without involving database access, nor authentication via the same MobiLink server port.

Caching notifier

A caching notifier is a notifier with a request_cursor that return a result set with 1, 2 or 3 columns. The first column is the key of the notification, the optional second column is the subject of the notification and the optional third column is the content of the notification. A caching notifier doesn't need gateways or tracking information in order to push notifications down to clients. Clients are expected to initiate connection and poll at the cache refresh frequency. Users may define multiple caching notifiers for different business logic, and they can co-exist with other regular or caching notifiers.

MLLP API

Development resources are found under the following location

%SQLANY10%\MobiLink\ListenerSDK\windows\src\mllplib.h

%SQLANY10%\MobiLink\ListenerSDK\windows\x86\mllplib.dll

%SQLANY10%\MobiLink\ListenerSDK\windows\x86\mllplib.exp

%SQLANY10%\MobiLink\ListenerSDK\windows\x86\mllplib.lib (import library for the dll)

MLLP client will dynamically load various ML client stream library.

Example MLLP client app

Please see %SQLANYSH10%\samples\MobiLink\SIS_CarDealer_LP2

538963 The Relay server was holding on to workers when finished serving Afaria traffic. A new command line option "-af" has been added to the Relay Server Outbound Enabler (rsoe) so that the Relay Server will be notified when the backend server disconnects. The relay server will then abort waiting for the entire content length to be satisfied. Without this option, rsoe will not notifiy the Relay Server when the backend disconnects and a worker in the Relay Server has finished relaying responses from an Afaria server, but will wait for more data until a timeout (default 8 minutes) before exiting. Older Relay Servers are not compatible with this newer rsoe. Newer Relay Server remains backward compatible with an older rsoe though.
539056 For a statement of the form "EXEC <linked_server_name>..dba.myproc", Microsoft SQL Server 2005 passes a statement of the form {?=call "dba"."myproc" } to the SQL Anywhere OLE DB provider. It passes in a single integer parameter for binding with a status of DB_E_UNAVAILABLE. The SQL Anywhere OLE DB provider had always checked the status of parameters and accepted one of DBSTATUS_S_DEFAULT, DBSTATUS_S_ISNULL, or DBSTATUS_S_OK. Any other status was flagged with an error. As such, the above example would have failed with an error. Since the parameter is OUTPUT-only, the status of the parameter can be ignored, as the status for any OUTPUT parameters will be set after the statement has been executed and any OUTPUT parameters will be filled in. The OLE DB provider behaviour has been changed to ignore the incoming status of OUTPUT-only parameters. This allows the EXEC statement to execute successfully.
539077 The changes for Engineering case 533936 introduced a problem where calling the JDBC method Statement.cancel() did not work for queries that did not return a result set. This has been fixed.
539085 A number of changes have been made to improve the performance of the Interactive SQL utility over networks with high latency. All the changes are related to minimizing the number of server requests.
539091 The 64-bit server for Sun Solaris performed poorly when executing queries. This has been

fixed.

539094 If an application was using the iAnywhere JDBC driver to generate one or more result sets by making DatabaseMetaData calls, then there was a chance the DatabaseMetaData result sets would not have been garbage collected until connection close time. Note that at most 3 of these result sets would have remained open until connection close. This problem has now been fixed.
539095 If a mirroring server was accidentally started a second time, the second instance could have crashed after displaying an error. This has been fixed.
539106 In some cases where expressions were evaluated in stored procedures or batches outside of SELECT, INSERT, UPDATE or DELETE statements, it was possible for the expressions to be evaluated incorrectly. The incorrect behaviour would have appeared if arithmetic expressions were used with one argument a DATE, TIME, or TIMESTAMP, or both arguments were strings. In these cases, the incorrect domain could have been used for the arithmetic expression if it were used in an IF, CASE, IN, or concatenation operation.

For example, the following select improperly returned '0002', the correct answer should be a numeric with value 2.

create variable @v_res long varchar;

set @v_res = if 1=1 then '0002' else '1' - '2' endif;

select @v_res

This problem could have also resulted in conversion errors being returned in cases where they should not, or missed in cases where they should have been generated. This problem has now been fixed.

539113 Attempting to execute queries with some illegal constructs involving the CONTAINS search condition, couls have lead to a server crash. This has been fixed.
539128 If an UltraLiteJ database had a publication defined that contained only some of the synchronizable tables, and that publication was synchronized, any changes waiting to be uploaded in the tables that were not yet sync'ed would have been lost. They would still have been in the database, but would have been marked as having been uploaded.

Also, UltraLiteJ was incorrectly identifying to MobiLink that tables being synchronized were in all publications currently sync'ed and UltraLiteJ was incorrectly sending the last download time of publications. Both of these problems have been fixed.

539257 If an UltrLiteJ synchronization failed, an error complaining about a dropped connection would sometimes have been printed to the log. This has been fixed.
539289 Applications using iAnywhere JDBC driver may have hung when calling the method ResultSet.get*(). This has been fixed.

Note, this problem was introduced with the changes for Engineering case 533936.

539308 On Windows CE devices, the text of the server usage message was mangled. The message box dialog on CE was expecting utf-16 text, but was incorrectly being passed OS charset text. This has been fixed.
539309 If the MobiLink Server had been started with the -nba+ switch, it was possible for the MobiLink Server to have crashed if a non-blocking download acknowledgment was received from a remote database, and the MobiLink Server had lost all its connections with the consolidated database. The MobiLink server will now properly report that all connections to the consolidated database have been lost.
539356 The Interactive SQL utility (as well as all the graphical administration tools) did not work with authenticated servers. This has been corrected.
539358 Multiple ORDER BY expressions could have caused an exception when there existed an index with fewer columns than the number of ORDER BY expressions. This has been fixed.
539496 At verbosity level 3 or above the Relay Server was logging a faulty protocol version of the connecting Outbound Enabler. The Relay Server also did not completely log the OE_REQUEST_RS_PEER_LIST packet. Although these problems were not affecting the Relay Server's functionality, they have been fixed.
539499 If the Overview, Details Table or Graph were disabled in the MobiLink Monitor, closing the Monitor and restarting it would have resulted in a Java null pointer exception. This has been fixed. A workaround is to edit the settings file (.mlmMonitorSettings in version 10 and earlier, .mlMonitorSettings11 in version 11) to restore display of the disabled feature. For the Overview, change ShowOverview=false to ShowOverview=true. For the Table, change ShowTable. For the Graph, change ShowGraph.
539609 When running in In-Memory, No-Write mode, only one LOAD TABLE statement was allowed to execute on the database at a time. This was due to the fact that LOAD TABLE, when not running in In-Memory mode, uses the checkpoint log for its page-level undo information, and there can only be one page-level undo operation active on a given database at a time. However, the In-Memory No-Write mode does not use a checkpoint log and therefore has no need of page-level undos. This has been fixed for performance reasons. As a consequence, when running in No-Write mode, multiple, concurrent LOAD TABLE statements may now be active at any point in time, to the same or different tables.
539620 In certain rare and highly timing sensitive cases, the server could have hung when shutting down, if an xp_cmdshell() procedure was still running. This has been fixed.
539627 Some lines printed to the MobiLink server log would not have caused LogListeners to fire. In particular, warning 10082, "MobiLink server has swapped data pages to disk out:<...> concurrently used pages:<...>", never triggered LogListeners. This has been fixed.
539637 The Check for Updates feature in the Interactive SQL utility (as well as all the graphical administration tools) would always have returned "Unable to contact update server". This has been fixed.
539681 If a connection string included the LINKS parameter, but included an unrecognized protocol type (eg. due to a typo), the error message would have been: "Trying to add unknown port", which was not indicitive of the problem. This has been corrected so that the message is now: "Trying to add unknown port '<port>'" where <port> is the invalid port type.
539756 On systems other than Windows, the Database Documentation wizard would have displayed the generated HTML files in a poorly formatted way. There was nothing wrong with the HTML files, it was just that the component used to display them was inadequate. This has been corrected so that the wizard now attempts to find an installed web browser and uses that to display the files instead.

Note, users can always view the documentation using whatever browser they choose, as a work around to this issue.

There was nothing wrong with the HTML files. It was just that the component used to display them was inadequate. Users can always view the documentation using whatever browser they choose to work around this issue.

539772 Installs created by the SQL Anywhere Deployment wizard would only have appeared in the Add or Remove Programs list in Control Panel, for the users that installed the MSI. This behaviour has been changed. The install will now appear in the Add or Remove Programs list for all users.
539799 Notifier errors were cataglorized as MobiLink server errors. Errors such as failing to resolved a delivery path to a remote device, and/or failing a push attempt, was resulting in an error line in the MobiLink server log that began with an "E.". This also caused an new entry in the system event log. Notifier errors can be highly repeatative, if the business logic was not implemented in a way that minimized failing attempts. Since these failures are not affecting syncs, they have been recataglorized as informational messages that begin with "I." instead. Two sub labels, "<SISI>" and "<SISE>" have also been added to differentiate notifier informational message and notifier error message.

Notifier informational message will now take on the following format:

I. YYYY-MM-DD HH:MM:SS. <Main> <SISI> ...

Notifier error message will now take on the following format:

I. YYYY-MM-DD HH:MM:SS <Main> <SISE> ...

539805 Customer contact us asking for some feature like Oracle's 'PRAGMA AUTONOMOUS_TRANSACTION'.

After some researches I received the following answer from internal newsgroup (sybase.internal.asa.helpdesk)

I believe the SA feature that can provide functionality similar to what

Oracle's autonomous transactions do is events.

In SA, events run as independent transactions with their own transaction

control and can be triggered from within other transactions without

affecting the triggering transaction.

Here is an example:

CREATE TABLE t1( c1 int );

CREATE EVENT ev

HANDLER

BEGIN

INSERT INTO t1 VALUES( 99 );

commit;

END;

INSERT INTO t1 VALUES (1);

TRIGGER EVENT ev;

ROLLBACK

The effect of the code above is to rollback the transaction that triggered

the event but retain the committed transaction executed by the event.

Howerver cust argue that 'Event' at SQL Anywhere are not equal of Oracle's 'PRAGMA AUTONOMOUS_TRANSACTION'.

According cust with 'Events' he cannot capture its return, but with Oracle's 'PRAGMA AUTONOMOUS_TRANSACTION' he can.

Checking the SQL Anywhere 10 manual, we can see:

Event errors are logged to the database server console.

After each execution of an event handler, a COMMIT occurs if no errors occurred. A ROLLBACK occurs if there was an error.

Event handlers execute on a separate connection, with the permissions of the event owner. To execute with authority other than DBA, you can call a procedure from within the event handler: the procedure executes with the permissions of its owner. The separate connection does not count towards the ten-connection limit of the personal database server.

So, cust request to us open a feature request to implement at SQl Anywhere a feature like Oracle's 'PRAGMA AUTONOMOUS_TRANSACTION'.

539807 On Mac OS X systems, if the server was started on a non-default port (i.e. other than 2638), and with an IPv6 address as the value for the MyIP option, a UDP listener would not have been started on the default port. As a result, the server would not have been able to locate the server via broadcasts unless the sever's port was explicitly specified in the client's connection string. This has now been fixed.
539812 The MobiLink server name given by the -zs command line option was not shown in the title bar of the MobiLink server window. This problem is corrected.
539813 A new command line option (-sv) has been added to the MobiLink Listener to allow for specifying the script version used for authentication. The default value is ml_global.
539933 A newer database release has been supplied that fixes various issues with long-running servers.
540048 When attempting to set the non_keywords option to a value that contained a keyword already listed in the current value of the non_keywords option, an invalid option setting error would have been reported. This has been fixed.
540071 If an application used a prepared statement to insert an empty string via a parameter marker into a long varchar column of a proxy table, then the server may have hung, or have given a strange error. Note that inserting an empty string as a string literal works just fine. This problem has now been fixed.
540090 After installing SQL Anywhere version 11.0.0 on a non-1252 code page system (such as Chinese, Japanese or Korean), the demonstration database (demo.db) does not contain image data in the Photo column of the Products table. The column values are NULL. This problem has been resolved. The mkdemo.sql script has been revised to use client-side reads (READ_CLIENT_FILE function) to populate the Photo column of the Products table.

To correct existing demo.db databases:

1 start demo.db using dbeng11 or dbsrv11

2 change to the scripts directory of the install

3 run the following script:

SET TEMPORARY OPTION allow_read_client_file = 'on';

UPDATE Products

SET Photo=READ_CLIENT_FILE( 'adata\TankTop.jpg' )

WHERE Products.ID=300;

UPDATE Products

SET Photo=READ_CLIENT_FILE( 'adata\V-Neck.jpg' )

WHERE Products.ID=301;

UPDATE Products

SET Photo=READ_CLIENT_FILE( 'adata\CrewNeck.jpg' )

WHERE Products.ID=302;

UPDATE Products

SET Photo=READ_CLIENT_FILE( 'adata\CottonCap.jpg' )

WHERE Products.ID=400;

UPDATE Products

SET Photo=READ_CLIENT_FILE( 'adata\WoolCap.jpg' )

WHERE Products.ID=401;

UPDATE Products

SET Photo=READ_CLIENT_FILE( 'adata\ClothVisor.jpg' )

WHERE Products.ID=500;

UPDATE Products

SET Photo=READ_CLIENT_FILE( 'adata\PlasticVisor.jpg' )

WHERE Products.ID=501;

UPDATE Products

SET Photo=READ_CLIENT_FILE( 'adata\HoodedSweatshirt.jpg' )

WHERE Products.ID=600;

UPDATE Products

SET Photo=READ_CLIENT_FILE( 'adata\ZippedSweatshirt.jpg' )

WHERE Products.ID=601;

UPDATE Products

SET Photo=READ_CLIENT_FILE( 'adata\CottonShorts.jpg' )

WHERE Products.ID=700;

540092 The Interactive SQL utility could have crashed if a DESCRIBE statement was executed together with an OUTPUT statement that immediately followed it. This has been fixed.
540094 In rare circumstances, an outgoing mirroring connection attempt to a partner, or to the arbiter, may have hung indefinitely. This has been fixed.
540195 When a connection attempted to autostart a server, but then failed to connect, the client incorrectly attempted to autostart the server three times in some cases. This has been fixed so that the client will now only attempt to autostart the server once.
540200 When running the MobiLink server with minimal verbosity, and using the MobiLink Listener (dblsn), the message "Disconnected from consolidated database" would have appeared in the server log. This has been corrected. The connection used by dblsn will now be reused by the next dblsn client.
540201 On Mac OS X systems, an application may have taken a very long time to connect to a server if the server was found through an LDAP server and both the client and the server are IPv6-enabled. On Mac OS X, in order to establish a connection to a link-local IPv6

address, the scope (interface) ID must be specified. If a scope ID is not specified, it defaults to 0. A connection attempt where the scope ID is incorrect may take a long time to time out and fail. When a link-local IPv6 address was registered with LDAP, the scope ID was not included in the IP address that was registered. Doing so would not be

useful, since scope IDs for the same link can vary from machine to machine. If an application obtained such a link-local address from LDAP and attempts to connect to it, in effect it will attempt a connection with a scope ID of 0. This has been fixed so that now an attempt to if the scope ID is 0 is refused on Mac OS X systems, including when the HOST connection parameter is used in the connection string with a link-local IPv6 address with no interface ID specified.

Note that if the wrong non-zero interface ID is specified, a connection will still be attempted.

540205 If a remote server was defined using one of the Remote Data Access JDBC classes, then changing the value of the quoted_identifier option would not have resulted in changing the value of the quoted_identifier option on the remote. This problem has now been fixed.
540219 If an application called a procedure that references a proxy table, and that procedure was subsequently used in the FROM clause of a SELECT statement along with the WITH clause, then there was a chance the the server would have crashed. This problem has now been fixed.
540220 The server could have hung, or even crashed, if an HTTP or HTTPS connection was cancelled (i.e. the client application closed the socket) while a request was being processed. This has been fixed.
540227 On Linux x86 and Solaris SPARC systems, the encryption libraries have been updated to use Certicom 5.
540263 An UltraLiteJ database may have expanded needlessly, especially in the presence of updates, either via SQL statements or synchronizations. The routine to search free space on an existing page was not always recognizing when there was room to contain a row. This has been corrected.
540275 Incorrect results would have been obtained when evaluating expressions with hexadecimal constants that were larger than integer values. This has been fixed.
540349 The UltraLite Initialize Database utility (ulinit) would have reported a syntax error if the reference database contained a foreign key on a table with the keyword 'name'. Ulinit was failing to quote the table name in the foreign key statement generator. This has been fixed.
540354 UltraLiteJ could have thrown an ArrayIndexOutOfBounds exception during sync if a column in the consolidated could have stored more characters than the remote column. For this fix to be effective mlodbc11.dll must be 11.0.0.1541 or later.
540369 If request level logging of procedures was enabled, and a FORWARD TO statement was executed on a remote server from an Open Client or jConnect application, then there was a chance the server would have crashed. This problem did not occur if a non-TDS based client was used, or if request level logging of procedures was not enabled. This has been fixed.
540371 In rare circumstances, the server could have crashed while disconnecting, if the connection had created temporary procedures. This has been fixed.
540380 On AIX 5.3 systems, the ApproximateCPUTime connection property could have returned a value that was impossibly large. This has been fixed.
540387 When an application made an external environment procedure call, and then issued a commit followed by another external environment call, there was a chance the server would have crashed. This problem should not show up if either the original or external connection was accessing a temporary table. It has now been fixed
540388 UltraLite databases restrict the ORDER BY clause, when used with UNION, to referencing select list items by ordinal value rather than by name. Violations of this restriction was not diagnosed correctly in some situations. UltraLiteJ has been corrected to now issue the exception SQLE_INVALID_ORDER, to be consistent with other versions of UltraLite.
540390 A comparison between an integer and a BINARY value (in a SQL statement) would have caused a conversion error, 'Cannot convert numeric to a binary'. This has been corrected.
540392 Using the Ping utility (dbping) with the -m command line option (use ODBC driver manager)

to attempt to connect to the Web Edition server would have resulted in the error "This server is not licensed to support 'ODBC' connections". This has been corrected.

540393 If a DSN pointed to a Web Edition server, the ODBC Administrator would have given the error "This server is not licensed to support 'ODBC' connections" when the "Test Connection" button was used. This has been fixed.
540407 In the dbmlsync log file it was possible for a message to occasionally be omitted, or for two messages to be mixed together. For example, a line like the following might occur in the log:

E. 2008-08-06 16:24:34. Timed out trying to readTimed out trying to read 7 bytes.

This has been fixed.

540530 Depending on the language and character set of the operating system, the usage message could have been truncated. Running under an English language locale did not expose this problem. A buffer used for character set translation was under-sized. This has been corrected.
540536 Certain complex regular expression patterns could have caused the server to hang for a few seconds or more. Patterns which could have caused this problem were unlikely to be used in practice, as they needed to be over 100 characters long and have certain unlikely characteristics. This has been fixed so that regular expression patterns that could have caused the server to hang will now generate the error "Statement size or complexity exceeds server limits" (-890).
540557 If the operating system's character set did not match the database's character set, non-ASCII server messages obtained using the system procedure sa_server_messages(), would have been mangled. The server was not converting from the database's character set to the operating system's character set before returning the text. This has been fixed.
540569 Statements using EXISTS() subqueries with INTERSECT and EXCEPT may have returned incorrect results. This would have occurred when at least one of the select lists inside the EXISTS() subquery used "*". This has now been fixed.

For example:

select filename, file_id from t1 where

(

exists (select * from t1 except select * from t2)

OR

exists (select * from t2 except select * from t1)

)

540575 When in Profiling Mode in Sybase Central, clicking the Index Consultant, or DBISQL, icon for a statement on the Details tab, could have resulted in a syntax error. The problem was caused by syntax errors in SQL statements used by Sybase Central, which have now been fixed.
540579 Attempting to connect to a partially constructed RIM BlackBerry database could have caused a NULL POINTER exception. It was assumed that an existing RIM BlackBerry database would contain a page[0]. This situation now causes an UltraLiteJ exception to be thrown.
540681 Running out of non-cache memory may have caused the server to hang. This has been fixed.
540690 The "Check for Updates" entry on the Windows Start menu was missing. This has been fixed.
540698 Calling the OleDbDataReader GetString() method may have failed if the source string had a length of 0, or it may have returned a string that was missing the trailing null termination character when the source string length was greater than or equal to 1 (i.e., "abcde" comes back as "abcd"). This problem has been fixed.
540703 When attempting to execute a query that references a proxy table mapped to a DB2 table, and one of the columns in the DB2 table was of type "varchar for bit data", there was a possiblility that fetching data from the proxy column would have resulted in data truncation. This problem does not exist for BLOB, "char for bit data" and "long varchar for bit data" DB2 columns. The has now been fixed.
540708 If a failover occurred in a mirroring system, automatic checkpoints would not have occurred on the new primary server. Stopping and restarting both servers would have corrected the problem. This has been fixed.
540725 The Migrate Database wizard could have failed to display messages in the messages dialog if it was connected to two or more databases running on the same server. The wizard was listening for asynchronous messages on the wrong connection. This has been fixed.
540729 Attempting to cancel the Migrate Database wizard would have caused Sybase Central to crash. This has been fixed.
540789 If several connections attempted to concurrently execute CREATE, DROP or ALTER statements for a global temporary table, or its indexes, the server could have crashed. This has been fixed so that a global temporary table and its indexes can no longer be altered or dropped if other connections have previously referenced the table until those connections have disconnected.
540797 Printing results in landscape orientation did not use the full page area. The print attribute which specified the page margins did not reverse the printing area width and height when printing in landscape. This has been corrected.
540800 The Interactive SQL utility (dbisqlc) could have incorrectly reported a syntax error when executing an INPUT statement if the user or table name required quoting to be a valid identifier. This has been fixed.
540823 If a case-sensitive database was created prior to version 10 and was initialized with collation 857TRK, the Unload utility (dbunload) would have failed to unload it correctly. This has been fixed.
540826 The window which showed long binary column values would have shown incomplete (truncated) data and a corrupt image if the column held a graphic and the result set did not contain the table's primary key. Now, instead of showing partial data, an error message is displayed which advises users on how to remedy the problem.

A similar problem affected the display of long text values, and it has also been fixed.

540921 Attempting to access a remote server defined using one of the JDBC classes, could have caused the server to crash if Java failed to start. This problem has now been fixed.
540927 Attempting to execute a query that referenced a proxy table mapped to a table in an ADS database with a WHERE clause that contained a timestamp column, could have failed with a conversion error. When generating the remote query, the server was using the wrong format specification for converting the timestamp value to a string value. This problem has now been fixed.
540933 The passthrough feature is enabled automatically when scripts are found in the ml_passthough_script table. In order to process these scripts Java is used. On Mac OSX, the Java VM is not available for 32-bit applications, causing the MobiLink server to give an error and shut down. On Mac OSX, the MobiLink server no longer checks for these scripts.
540965 If a LOAD TABLE statement was executed on a table with an autoincrement column and caused the range of values for the autoincrement column to be exhausted, the server would have crashed. This has been fixed, and a "Column '<column-name>' in table '<table-name>' cannot be null" error is now given.
540984 The Connection page of the property sheets for publications, MobiLink users and synchronization subscriptions, would have ignored an object's CommunicationType setting and would always have selected the TCP/IP radio button. This has been fixed.
541053 A query containing an EXITS() predicate and returning distinct rows may have generated an incorrect result set. For this to have occurred the EXISTS predicate must have been able to be flattened into the main query block, and a KEYSET root must have been used for the query. The incorrect result set may contain duplicate rows. This problem has now been fixed.
541055 Some CONTAINS queries may have intermittently taken much longer than they should (e.g. minutes rather than seconds with a query of several frequently occuring words and 1-2Gb of indexed text). This has been fixed fixed.
541056 Using the INSTALL JAVA ... FROM expr statement, or performing an unload and reload of a database that contained Java objects, could have resulted in recovery issues later on. This problem has now been fixed.
541059 The php driver source code was missing php_sqlany_ver.h on Unix platforms. This has been corrected.
541060 The server, in rare circumstances, could have hung updating string columns. This has been fixed.
541062 If an UltraLiteJ synchronization had failed, the next synchronization could have sent the wrong set of last download times. This has been fixed.
541072 Under rare circumstances, a query plan using the Merge Join algorithm with an GroupBy ordered on the right hand side of the join, could have returned incorrect results. This has been fixed.
541073 On AIX 6, 64-bit software would not have found the LDAP support libraries, even if they were in the LIBPATH. The location of the LDAP system libraries was changed in AIX 6. The 64-bit library is in:

/opt/IBM/ldap/V6.1/lib64/libibmldap.a

and the 32-bit library is in:

/opt/IBM/ldap/V6.1/lib/libibmldap.a

This has been fixed.

Note that you still need to ensure that the directory with the LDAP libraries are in the LIBPATH. For example, for 64-bit libraries:

export LIBPATH=/opt/IBM/ldap/V6.1/lib64:$LIBPATH

and for 32-bit libraries:

export LIBPATH=/opt/IBM/ldap/V6.1/lib:$LIBPATH

As a work around to use SQL Anywhere LDAP support with AIX 6, create links in /usr/lib as follows (must be root):

cd /usr/lib

ln -s /opt/IBM/ldap/V6.1/lib64/libibmldap.a libibmldap64.a

ln -s /opt/IBM/ldap/V6.1/lib/libibmldap.a

541075 If the MobiLink Server was processing an invalid upload stream, it was possible for the MobiLink Server to have crashed. The MobiLink Server will now fail the synchronization.
541173 The following problems with GIF files have been fixed in the window used to display binary column values:

1. When inserting a GIF file into a binary column, a thumbnail is now displayed. Previously, the thumbnail remained empty.

2. The image format and dimensions were not displayed when viewing a binary column value which contained a GIF image.

541175 It was possible, although likely rare, for the server to crash on shutdown. This has been fixed.
541188 When run on Unix systems, the Interactive SQL utility (dbisqlc) would have crashed opening the Options->Configure menu. This has been fixed.
541200 Some missing items to the graphical and long plans have been added as follows:

1 - HAVING predicate was not dumped in the long plan for any GroupBy physical operator. 2 - HAVING predicate was not dumped for GroupBySortedSets physical operators in the graphical plan.

3 - The number of extension pages was missing in "Table Reference" section of the graphical plan.

4 - The 'Estimated Cache Pages' was missing in the long plan.

541201 When running Application Profiling, the start_time and finish_time columns of the sa_diagnostic_request table were incorrectly set. The column start_time was set to the correct start time plus the value from the duration_ms column, while the column finish_time was set to the correct start time plus twice the value from the duration_ms column. This has now been corrected.
541202 Statements using derived tables on the null supplying side of a left outer joins may have returned syntax errors. For this to have occurred, the derived table must have been unflattenable (i.e. it contained GROUP BY, ORDER BY, etc.) and have been used in the null-supplying side of the outer join. There must also have existed a predicate in the ON condition, which was local to the derived table (e.g., "ON .... DT.C = 10 .... "), and referenced the derived table column with a complex expression. This has now been fixed.
541297 If a GRANT or REVOKE of EXECUTE permission for a procedure did not include the procedure's owner, the entry in the transaction log would also not have included the procedure's owner. This has been fixed.
541310 If dbunload was used to attempt reloading a version 9 or earlier database that needed recovery, the dbunload support engine would have failed an assert and shut down. The assert failure has been fixed, but pre-version 10 databases needing recovery still cannot be reloaded with dbunload. If such a reload is attempted, dbunload will now display the error message "Failed to autostart server". The database will need to be started using using a pre-10 server, and if it then recovers successfully, it can be reloaded after the pre-10 server is shut down.
541313 The 'blocking' option was not included in the result set of the sa_conn_properties() stored procedure. This has been corrected.
541322 Use of the NEAR operator in a CONTAINS query may have returned incorrect results. This would have occurred when using a MANUAL or AUTO refresh index that had been refreshed several times. This has now been fixed.
541333 Under concurrent access, a connection may have blocked on row locks waiting for other connections that had long released their row locks. This would only have happened

if the connection had no changes to commit. This has been fixed.

541335 Windows that display long text result values did not consistently warn that only a portion of the value was being displayed. Specifically, if the value was longer than 65536 characters, but the maximum trunction length was set even higher, no warning was displayed. This has been fixed.
541420 In very rare circumstances, likely under heavy concurrency, the iAnywhere JDBC driver could have crashed. This has been fixed.
541439 Certain SQL statements would have returned null after being prepared. This has been corrected.
541470 If a procedure or view was created containing an expression that included subtraction of a negative constant, the procedure or view would not have been stored correctly. This has been fixed.
541478 The table name was not reported for SQLE_PRIMARY_KEY_NOT_UNIQUE when this error was encountered during a synchronization. This has been fixed.
541575 When RSA encryption was in use by the server or client on Mac OS X systems, a crash was likely under very low memory conditions. This has been fixed.
541576 When RSA encryption was in use by the server or client on Mac OS X systems, memory could have been leaked. This has been corrected.
541586 If a CREATE EVENT statement was executed without including the owner name for the event, the statement recorded in the transaction log did not include the current user's name as the owner. This has been fixed.
541591 After installing the SQL Anywhere software on a non-1252 code page Windows operating system (such as Chinese, Japanese or Korean), the demonstration database (demo.db) has a 2K page size. On 1252 code page systems, the demonstration database has a 4K page size which is expected. Some examples in the documentation may not work on non-1252 systems as a result. In particular, if a database is started on a server that has a 2K page size, databases that have larger page sizes can not be started on the same server.

To work around this issue, the demo.db database can be recreated using the dbinit, dbisql and the Scripts\mkdemo.sql script. Alternatively, the dbunload tool with the -ap option can be used to rebuild the database.

541594 The default for the Relay Server Outbound Enabler (RSOE) command line option -cr url_suffix was the Windows path, even on Unix. Now the RSOE default url_suffix on UNIX is /srv/iarelayserver as documented.
541615 If an application made a remote procedure call to a procedure that returned a result set with unsigned data types, there was a possibility that the call would have failed with a conversion error. This problem has now been fixed.
541622 If a Transact-SQL CREATE PROCEDURE statement appeared within a BEGIN ... END block, the syntax error given would have been "Syntax error near 'end' on line nnn", where nnn was the line corresponding to the end of the block. Now the error points to the first point at which the server detected a dialect conflict.
541630 Queries using the CONTAINS search conditionwith phrases longer than three words, or adjacent NEAR operators with more than three words, could have returned false matches. This happened if all of the pairwise conditions match, but in different places in the string. For example, for the phrase "a b c" the pairwise conditions are the existence of "a b", "b c" and "a * c" where * means any word. Therefore, the string 'a b x b c x a x c' will match this phrase even though it should not. The problem is now fixed.
541734 The Service utility (dbsvc) now supports creating services for the Relay Server (rshost) and the Outbound Enabler (rsoe) using "-t rshost" and "-t rsoe" respectively.
541736 Under some rare, timing-dependent circumstances, the Interactive SQL utility (dbisql) could have crashed after closing one of the windows used to view long result values. This has been fixed.
541739 When deploying a synchronization model for an UltraLite remote database to a SQL file, then using Interactive SQL to run the SQL file, errors could have occurred for DROP statements if the object did not exist, or CREATE statements if the object already existed. A user would have had to choose to ignore these errors. This has been fixed. Now, the generated SQL file uses Interactive SQL options to suppress errors that can be ignored.
541742 Virtual tables were considered non-updatable, which was incorrect. The server may have crashed if an UPDATE statement targeted a virtual table. This has been fixed.
541744 If a CREATE EXISTING TABLE command was used to create a proxy table to a remote server using one of the JDBC remote server classes, then the server would have leaked memory. This problem has now been fixed.
541747 The sample stoplists, the list of terms to ignore when building a text index, were corrupted for some languages. This has been fixed.
541756 When an application used one of the C External Environments to return a result set back to the server, returning a NULL value would have either resulted in a conversion error or a crash of the external environment. This problem has now been fixed.
541767 The system function next_connection() could have returned temporary connections (eg. those with connection IDs greater than 1000000000). This has been fixed so that the only temporary connections that will now be displayed are event connections.
541770 If an application connected to a database with a multi-byte character set made a remote procedure call using one of the JDBC remote server classes, then there is a chance the server could have either hung or crash. For this to have occurred, the remote procedure must return a result set containing long character columns, and the proxy procedure must not have initially been defined with a proper result clause, This problem has now been fixed.
541772 Calling the system function property('FunctionMaxParms',0) would have returned NULL, instead of the correct value 0. This has been fixed. This corresponds to the maximum number of arguments for the abs function.
541783 Calls to the sqlany_get_column() function in the C API library used by the data access modues for the various scripting languages (for example, PHP, PERL, Python, etc.) would have returned an incorrect value for the length field when fetching A_BINARY or A_STRING column information. This problem only affected 64-bit platforms. The length field is a size_t pointer and was being set to a 32-bit value, but on 64-bit platforms, size_t is a 64-bit value. This was fixed so that the length field points to the correct 64-bit or 32-bit value.
541857 Transactions blocked on a row lock placed by an INSERT, UPDATE, or an isolation level 2 or 3 FETCH, may have waited on the wrong connection, or may have waited indefinitely (until the transaction was forcibly aborted). For this to have occurred, the connection holding the lock must have been in the process of disconnecting when the transaction blocked. While correctness was not affected, application performance could have suffered. This has now been fixed.
541861 The server when run on Solaris systems, had poor performance compared to previous versions. Specifically, the TCP/IP communication was slower. Serveral changes have been made to correct this.
541870 Some versions of Windows Vista are misidentified as Windows Server 2008. Among other places, this would have shown up in the server console window, and with the 'platform' property. The GetVersion system call is unable to distinguish between Server 2008 and Windows Vista. This was corrected by changing the Getversion function to GetVersionEx.
541908 For some forms of simple DELETE statements on tables with computed columns, the server may have returned the following error:

*** ERROR *** Assertion failed: 106104 (...) Field unexpected during compilation (SQLCODE: -300; SQLSTATE: 40000)

This has been fixed.

542016 When rebuilding a pre-10.0 database using the Unload utility (dbunload) with the -an or -ar command line options, dbunload could have hung under very rare conditions on certain Windows systems. This problem has only ever been observed on a few machines configured as Domain Name Servers (DNS), but the hang could have occurred under other conditions as well. This has been fixed.
542139 Sybase Central would have reported errors when attempting to browse a database that had the quoted_identifier option set to Off. SQL statements sent to the database had reserved words that were used as system table columns quoted (for example, SYS.SYSTAB."encrypted"). This did not work if the quoted_identifier option was Off, so the plug-in now temporarily sets it to On.
542175 The names of objects in the transaction log were not being qualified with owner name for some statements. Now, object names in the transaction log will be qualified with the owners names when the latter are not specified for the following :

- the REFERENCES clauses of CREATE and ALTER TABLE statement

- the TABLE, [MATERIALIZED] VIEW, PRIMARY KEY, COLUMN and INDEX clauses of the COMMENT ON statement

- DROP and ALTER INDEX statements

542185 When the properties of the visual or non-visual version of the Dbmlsync ActiveX Component were examined from a development environment, it would incorrectly have been described as "iAnywhere Solutions Dbmlsync ActiveX Component 9.0.1". The string has now been changed to properly reflect the true version of the component.
542186 Under rare circumstances, diagnostic tracing could have failed to record some cursor information for statements within procedures, for example, information about cursor close time and the graphical plan. This has been fixed.
542199 Attepting to start the Interactive SQL utility (dbisql), or any of the other Java administration tools, may have failed with a error that it could not load MSVCR71.DLL. This occurred if the machine does not already have MSVCR7.DLL in the path. This has been fixed.
542208 A query using a CONTAINS search condition over a MANUAL or AUTO refresh index that searched multiple columns, would never have returned rows where the first search column was NULL, even if the others were not NULL and had matches. This is fixed.
542213 Executing queries with temporary tables may have caused the database to grow unbounded. Row pages and schema pages were not bing properly released for temoporary tables. This has been corrected.
542239 If the Admin Mode Connection Script wizard was used to create event scripts for handle_UploadData and handle_DownloadData events, they would get an "unknown event" error when syncing. The problem was that the event scripts were created with the names "handle_uploaddata" and "handle_downloaddata" (note the differences in case). This has been fixed.
542342 If a conversion error occurred while constructing the string to be executed by EXECUTE IMMEDIATE within a procedure, the error might not have been reported, possibly leading to a server crash. This has been fixed.
542344 In a SQL Anywhere SOAP response, Column "string" data greater than 250 bytes in length may have contained garbled characters if the data was character set converted. This has been fixed.

Example:

SA running iso-8859-2 database receiving a SOAP request with an Accept-Charset: UTF-8 HTTP request header will character set convert its response from ISO-2 to UTF-8.

542349 Executing an SQL query batch using the Perl, PHP or Python drivers, that contained a SELECT statement in addition to other SQL queries that did not return a result set, could have returned the error: -180 'Cursor not open' error. This has now been fixed.

For example:

IF EXISTS( ... ) then

DROP ...

ENDIF;

CREATE PROCEDURE ( ... )

BEGIN

SELECT ...

END;

542356 A query with a GROUP BY clause that referenced the same alias at least twice, would have incorrectly returned a syntax error.

For example:

SELECT item = 'abc'

FROM product p LEFT OUTER JOIN sales_order_items

GROUP BY

item,

item

This has been now been corrected.

542397 The DISH service does not set the HTTP Content-Type response header, which has occasionally caused Internet Explorer 7 to fail to render the WSDL. This has been fixed so that the response headers now include Content-Type: text/xml; charset="utf-8".

Note, the charset qualifier is not included in 9.0.2 since its output is in database character set. This change is in accordance with the WSDL 1.1 specification, see http://www.w3.org/TR/wsdl#_Toc492291097.

542482 On Mac OS X systems, if the path specified in the "Database" field of the "New Server" dialog in DBLauncher contained spaces, the server would have failed to start the database. This has been fixed.
542514 In a SQL Anywhere SOAP response, binary data types greater than 250 bytes in length were not base64 encoded. This has been fixed, and applies to SQL Anywhere SOAP services that have been defined with DATATYPE ON or DATATYPE OUT.

--EOF--

  • 本文链接地址:https://www.dbainfo.net/sap-asa-cr-number-4.htm
  • 本文为dbainfo个人原创,请在尊重作者劳动成果的前提下进行转载;
  • 转载务必注明原始出处 : Sybase数据库技术,数据库恢复专家
  • 对《SAP SQL Anywhere的所有已知BUG列表(4)》有何疑问或见解,请在本文下方发表;
  • 对网站还有其他问题或建议,请提交在留言板,谢谢!
  • 目前还没有任何评论.
    :wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)