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

随着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
542516 Shutting down the Relay Server Outbound Enabler could have caused the communication error message: "Communication error! Failed reading." to be logged in the Relay Server log file. This has been fixed.
542519 If an application made a large number of remote calls to fetch data from a JDBC based Remote Data Access server, then there was a chance the server would have crashed. For this problem to have occurred, the remote table and/or column names must have been longer than 30 characters. This problem has now been fixed.
542521 On Unix systems, when an application crashed, rather that aborting or exiting, it may have gone intio a state of 100% CPU utilization. This would have occurred when the following conditions occurred in order:

1. The application loaded one of SQL Anywhere's client libraries (JDBC driver, ODBC

driver, DBLIB), which automatically install a signal handler.

2. The application installs its own signal handler function

3. An application fault happens which causes the application's signal handler to call the SA signal handler.

The SA signal handler will return without causingan abort and the application fault would have been re-triggered. The re-trigger of the signal and the return without handling the signal generated 100% CPU utilization. This has been fixed.

542522 In rare cases, executing an invalid ALTER PROCEDURE statement could have caused a server crash or an incorrect error message. This has been fixed.
542523 It was possible for a mirroring connection (i.e. a connection from one server to another server in a high availability configuration) to have failed with no error message being written to the console. This has been fixed.
542524 If an application on a Unix system used the iAnywhere JDBC driver to connect to a DB2 server using a 64-bit DB2 ODBC driver, then calling the Connection.getTransactionIsolationLevel() method may have crashed the client. This problem has been fixed.
542528 An application using the iAnywhere JDBC driver may have in rare cases received a Null Pointer Exception when calling Connection.close(). This problem has now been fixed.
542622 If a database contained userids which had been assigned non-default login policies, running the Extraction utility (dbxtract) would have generated a reload script containing references to those users, even though some of them might not be defined in the extracted database. This has been fixed.
542634 In a MobiLink farm environment with Server-Initiated Sychronization, when the secondary notifier was under stress, it may have failed to have been promoted to the primary. This would have resulted in an I/O exception being thrown whenever a push or pollnow request arose. This problem has been fixed.
542656 When run on Windows Vista systems, selecting "Make Interactive SQL the default editor for .SQL files and plan files" in the "Options" dialog, did not make Interactive SQL the default editor. This has been fixed.
542763 UltraLite databases could have grown unnecessarily when blobs and clobs were updated. Pages from blobs/clobs on deleted rows were not bing properly released. This has been corrected.
542768 Incorrect parameters to the system functions LEFT(), RIGHT() and INSERTSTR() could have caused a Java exception. This has been fixed.
542812 If the Administration Tools were the only components installed, the tools would not run correctly, eg., Sybase Central would fail to load the SQL Anywhere plugin. The jodbc.jar file was not being installed. This has been corrected.
542825 SQL Anywhere attempts to create a single physical data structure when multiple indexes on the same table are created with identical properties. The dbspace id recorded in the catalog for a newly created index referred to the dbspace id for the new logical index instead of the dbspace id of the existing physical index shared by the new index. This problem has been corrected, and the server will now record the dbspace id of the existing index whenever sharing takes place.

Note, existing databases with this problem can be corrected by dropping and recreating the logical indexes sharing a physical index. Whether or not an existing database has an instance of this problem can be determined by checking the physical_index_id and the file_id fields of the system view SYS.SYSIDX. The problem cases exist in a database when two indexes on the same table have the same physical_index_id values but their file_id values differ.

542840 If a Disconnect event was defined and a connection was dropped using DROP CONNECTION, the value of event_parameter('DisconnectReason') would have been incorrect when evaluated inside the event handler. This has been fixed.
542868 In rare circumstances the server could have hung updating a blob column. This has been fixed.
542949 Sybase Central would sometimes have failed to populate the All Connected Users tab and failed to graph statistics on the Performance Monitor tab. These problems have been fixed.
542959 The Interactive SQL utility's (dbisqlc) OUTPUT statement was incorrectly using the value (NULL) for null values, instead of using a blank value. This has been fixed.

This can be worked around by using dbisql or by correcting the output_nulls Interactive SQL option using the statement:

set option output_nulls = ''

542962 On a busy server, if an application made an external environment or Java call which could have resulted in a thread deadlock error, there was a small possibility that the server would have hung. This problem has now been fixed.
542967 If the Unload utility (dbunload) was used to unload an existing database with comments on text indexes or text configurations, the comments were not unloaded. This has been fixed.
542977 If a connection was using the CLR External Environment, and the CLR External Environment was left idle for ten minutes or so, then that connection would no longer have been able to make CLR calls, even though other connections were able to use the CLR External Environment without difficulty. This problem has now been fixed.

Note that a simple workaround to the problem is to execute:

STOP EXTERNAL ENVIRONMENT CLR

on the connection that is having difficulty executing CLR calls. Unfortunately, stopping the CLR External Environment will have the side effect of dropping all static variables for that particular connection.

543002 An HTTP server response returning an error status, such as "404 Not Found", was returned in the server's language and the Content-Type header incorrectly specifies charset=ISO-8859-1. This has been fixed so that HTTP status messages are now always returned in the English language. Therefore the Content-Type header charset=ISO-8859-1 will now be correct.
543006 If an application was using a JDBC based Remote Data Access server to fetch long multi-byte string data, then there was a possibility the server would have crashed. This problem has been fixed.
543011 If the Windows desktop was used to associate ".sql" files with the Interactive SQL utility (dbisql), double-clicking a ".sql" file would probably not have launched dbisql. This has been fixed so that now it does, as long as the desktop was told to open the file with "dbisql.exe" (i.e. NOT "dbisql.com"). Before this change, the only reliable way to associate .SQL files with dbisql was to use the "Make Interactive SQL the default editor..." check box in the "Options" window.
543069 The server could have leaked memory, possibly leading to an 'Out of Memory' error, when using TDS connections (eg. jConnect) that fetched string data. This has now been corrected.
543100 The table editor would have allowed marking all columns in a table for deletion. If this was attempted in multiple operations; that is, by selecting some of the columns and pressing the Delete key, and then selecting the remaining columns and pressing the Delete key again. In such cases, attempting to save the table would have failed while attempting to delete the last column in the table. This has been fixed. Now it is no longer possible to mark all columns for deletion. Attempting to do so displays an error message.
543127 After executing the Unload utility (dbunload) with the -d option (data only), the resulting reload.sql file would have contained calls to the non-existent function sa_unload_display_table_status(). The same problem would have occurred when using the Sybase Central Unload wizard and chosing "Unload data only". This has been fixed.
543135 When the Interactive SQL utility (dbisql) was started with the -q "Suppress non-critical messages" command line option, it did not suppressing the following warnings:

- "Interactive SQL is currently configured to quit if a SQL statement fails to execute"

- "You are connected to an database which is not explicitly supported"

- "ODBC tracing is currently enabled"

This has been corrected and these warnings are now suppressed when "-q" is used.

543210 Queries with a large number of aggregate expressions in the select list, but without a GROUP BY clause, could have crashed the server. This has been fixed.

A workaround for this problem is to add a GROUP BY clause.

543216 The Schema Painter would have failed to save schema if it contained multibyte characters. This has been fixed.
543231 The OK button on the "Connect" dialog could have failed to do anything if all of the following were true:

1. The "Fast launcher" option was enabled

2. The "Connect" window was opened and left open in one DBISQL window

3. A "Connect" window was opened and closed from another DBISQL window

This has been fixed. To workaround the problem, close the "Connect" window and reopen it.

543245 In certain configurations, executing the REMOTE RESET statement can cause the server to crash. This has been fixed.
543248 If a comment was created for a primary key, the comment would not have been unloaded by the Unload utility (dbunload). This has been fixed.
543254 The value for the "EncryptedPassword" connection parameter was visible in clear text on the "Advanced" page of the "Connect" window. This has been fixed.
543261 The server could have hang while concurrently updating blob columns. This has been fixed.
543272 Second and subsequent connections from a single application may have used TCP/SPX options specified by the first connection made by that application using the same protocol. This could potentially have resulted in a connection being made to the wrong server. This has been fixed.
543367 Clicking the "Options" button in the Query Editor window did not automatically select the "Query Editor" tab in the "Options" window as it did in previous versions of Interactive SQL. This has been corrected.
543375 Failure of a statement which was partially executed and involved either clobs or blobs, could have caused unneccessary database growth. Blobs and clobs were not being correctly discarded following statement failure. This has been corrected.
543380 Clicking the "Create a synchronization subscription" task for a MobiLink user would have caused nothing to happen. Now, the "Create Synchronization Subscription Wizard" is opened.
543391 A security flaw in the MobiLink server was fixed.
543394 An INSERT, UPDATE or DELETE statement executed on a table with an IMMEDIATE text index could have caused correctness issues for subsequent CONTAINS queries that used the text index. For the problem to have occurred, very long string values (over 32K characters) had to have been indexed by the text index and modified by the INSERT, UPDATE or DELETE statement. This has been fixed.

For existing databases with IMMEDIATE text indexes that could be affected by this issue, dropping and recreating the text index is recommended.

543397 If an application was connected via jConnect and attempted to query the column metadata of a table containing a DATE or TIME column, then the server would have incorrectly returned the error -186 'Subquery cannot return more than one row'. When support for the TDS DATE and TIME datatypes was added, the metadata information in spt_jdatatype_info was not properly updated. This has now been fixed.
543478 In very rare circumstances, an auto-shutdown of a database could have caused the server to crash, if the server was in the process of shrinking the cache at the same time. This problem has been fixed.
543491 Sybase Central could have crash while attempting to fetch the messages for a server. This has been fixed.
543518 The SQL Anywhere http option "AcceptCharset" generated a SQL error with "SQLCODE -939 Invalid setting for HTTP option" when a match was not found within the union of the client's Accept-Charset list and the server's AcceptCharset http option charset list. This has been fixed.

With this change a SQL error is now generated only if the http option value is malformed or none of the charsets within the value are supported by SQL Anywhere. In addition, the run-time selection of a suitable response charset has changed to provide more control over the charset selection. Primarily, given that the union of server and client charset lists are empty, a charset is now selected based on the server's AcceptCharset http option value not from the client's Accept-Charset request header. The old behaviour is supported by allowing an asterisk (*) to be specified within the AcceptCharset http option list. An asterisk has the meaning that, should the client/server charset union be empty, try to use the preferred charset specified by the client. If none are found, then select from the server's AcceptCharset http option list. A summary of the processing priority of the various cases follow:

Processing Priority cases:

1 - If a charset can be selected from the union of charsets from the AcceptCharset http option and the Accept-Charset HTTP request header, then it will be used (no change in behaviour).

2 - If the client sends an Accept-Charset HTTP request header, but none of the charsets match the AcceptCharset http option, then use the first and/or highest q-value charset specified within the AcceptCharset http option. (This is a behaviour change).

3 - If the client does not send an Accept-Charset HTTP request header, select the first and/or highest q-value charset specified within the AcceptCharset http option (no change in behaviour).

Caveats:

a. Within the AcceptCharset http option value, the placement of the '+' token (which specifies the use of database charset whenever possible regardless of the q-value assigned to it by the client) is now significant. If '+' is specified anywhere within the http option value then case 1) will be true if the client happens to specify the database charset. If '+' is specified first and/or it has the highest q-value, then cases 2) and 3) above would resolve to using the database charset.

b. Within the AcceptCharset http option value, an asterisk (*) signifies that any client charset (as specified by its Accept-Charset HTTP header) should be considered prior to defaulting to the http option charset list. The best match within the union of client/server charsets ( case 1) ) has priority. In the processing priority cases above, having failed case 1) the client's Accept-Charset is scanned for a suitable charset. If a suitable charset is not found, then a charset is selected according to case 3).

c. SQLCODE -939 error is only generated if the http option value is malformed or none of the specified charsets within its value is supported by SQL Anywhere. The database charset is selected whenever a SQLCODE -939 error is generated.

543525 Issuing a REMOTE RESET, or granting REMOTE to a user, when the log offset was larger than 4GB could have caused the server to crash. This has been fixed.
543541 If an application was connected via the iAnywhere JDBC driver, and the application had made DatabaseMetaData calls, then calling Connection.close() would have given a NullPointerException if the server has already closed the connection. This problem has now been fixed.
543548 The version number built into the UltraLiteJ.jad file for RIM BlackBerry deployment would sometimes have been incorrecting generated. This has been fixed.
543552 In a scenario where a table had a large number of initial inserts followed by a large number of deletes, inserts or updates, where the number of deletes that had taken place were always greater than the number of inserts, the database may have become corrupted. These operations may have occur via program initiated operations, or via synchronization operations. This has been fixed. Existing databases that have not yet been corrupted will be fixed when the UltraLiteJ library is updated.
543562 If an application was connected using jConnect and attempted to fetch a result set containing a large number of columns (more than 3000), then the application would have failed with a TDS protocol error. This problem has now been fixed.

Note, that in order to fetch such a result set, the application must be using jConnect 6.x.

543631 If a simple statement was executed with a particular form of ORDER BY clause, then the server could have crashed while executing the statement. This has been fixed.
543647 The REFRESH MATERIALIZED VIEW statement is used to rebuild the contents of a materialized view. When this statement was used inside a stored procedure, execution of the procedure could have caused the server to crash under certain circumstances. This problem has been corrected, and the server now executes the stored procedure correctly. The problem can be avoided by using EXECUTE IMMEDIATE with the REFRESH statement.
543652 The stored procedure debugger would not allow breakpoints to be set within triggers. This has been fixed.
543656 A database that had gone through recovery after an abnormal shutdown could have been unreadable by the MobiLink Client dbmlsync. Dbmlsync would have reported that the transaction log was corrupt, even though the server successfully recovered. At the end of recovery, the server performs a checkpoint. This checkpoint was correctly updated in the database and written to the transaction log, but was not being flushed to the log properly. This has now been fixed.

The original crashed database will need to be recovered with the fixed server.

543658 If the property sheet for a column was opened and its comment updated when an index or text index was selected in the tree, then the updated comment would not have appeared in the right pane. This has been fixed.
543689 Sybase Central could have crashed, if when attempting to change a table's primary

key from within the Table Editor the primary key was dropped, but could not be re-created. This has been fixed.

543694 When using Snapshot isolation, WITH HOLD cursors would have failed to see rows modified by their own connection after the connection executed a COMMIT. This has been fixed so that when using Snapshot, Statement-Snapshot or Readonly-Statement-Snapshot isolation,

WITH HOLD cursors will see a snapshot of all rows committed at the snapshot start time, as well as all modifications done by the current connection since the start of the transaction within which the cursor was open.

Note that the contents of the cursors are unaffected by the current transaction committing.

543695 Output parameters for stored procedure calls that were marked as indirect (DBTYPE_BYREF) were not handled properly by the SQL Anywhere OLE DB provider. This problem has been corrected.
543803 On the "Request Logging" page of a server's property sheet, the drop-down list adjacent to the "All connections to the following database:" radio button would actually have listed connections, not databases. This has been fixed.
543812 If a user caused an event to fire, e.g. by disconnecting to fire a Disconnect event, and another user immediately caused that user to be dropped, the server would have crashed. This has been fixed.
543814 The ansi_substring option, which was removed in the 11.0.0 release, has been re-instated. The default value for the option is ON, as it was in version 10. For databases created with 11.0.0 where the option did not exist, a setting for PUBLIC.ansi_substring must be defined before attempting to set the option for another user and before executing "set temporary option ansi_substring ...".
543826 If an application called sp_remote_columns to determine the domain ids of an UltraLite table, and the UltraLite table contained a UniqueIdentifier column, then the domain id of the uniqueidentifer column would have been incorrectly returned as Char. This problem has now been fixed.
543835 The functions YEARS(), MONTHS(), WEEKS(), DAYS(), HOURS(), MINUTES(), and SECONDS() could have been described with the incorrect data type. If these functions were used with two parameters with the second parameter an untyped expression, then the expression was assigned the incorrect data type. Untyped expressions include NULL constant literals and host variable that are not yet bound to a type, for example during DESCRIBE.

For example, the following expression was incorrectly described as TIMESTAMP (it should be INT):

select months( current timestamp, NULL )

This incorrect type could have affected more complex expressions composed with one of the affected functions as an argument. This problem has been fixed.

Note, this change could alter the definition of materialized views; views containing the affected constructs should be refreshed.

543888 The SQL Anywhere OLE DB provider did not support multiple parameter sets in the ICommand::Execute method. The number of parameter sets is specified in the cParamSets field of the DBPARAMS structure, for example:

HRESULT Execute (

IUnknown牋牋 *pUnkOuter,

REFIID牋牋牋牋riid,

DBPARAMS牋牋 *pParams,

DBROWCOUNT牋 *pcRowsAffected,

IUnknown牋牋**ppRowset);

struct DBPARAMS {

void *pData;

DB_UPARAMS cParamSets;

HACCESSOR hAccessor;

};

This is now supported, so it is now possible to execute one INSERT statement and specify several sets of parameters in order to insert several rows into a table.

Note the following OLE DB specification restriction:

Sets of multiple parameters (cParamSets is greater than one) can be specified only if DBPROP_MULTIPLEPARAMSETS is VARIANT_TRUE and the command does not return any rowsets.

This means that multiple parameterized SELECT statements can not be executed that would each return a result set. For the SQL Anywhere provider, DBPROP_MULTIPLEPARAMSETS is VARIANT_TRUE (and always has been).

543910 The version 10 and 11 servers were truncating 32-byte names to 31 bytes. So when a version 10 or 11 client attempted a shared memory connection specifying a 32-byte server name that had a common prefix of exactly 31 bytes with a running version 10 or 11 server that also has a 31-byte name, the connection attempt would have failed. As well, if a version 10 or 11 client attempted a shared memory connection specifying a server name that had a common prefix of exactly 31 bytes with a running version 9 or prior server that had a name longer than 31 bytes, the connection attempt would have failed. This problem has been fixed. Note that for version 10 and 11, the fix affects both client and server. For version 9, the fix is just to the server. However, an unmodified version 10 or 11 client will be able to establish such a connection against an unmodified version 9

server.

543940 The server could have stop responding and continue to consume CPU when processing the SUBSTR() function. For this to have occurred, the SUBSTR() must appear on the right hand side of a string concatenation operation and must also be over a string that comes from a row in a table. Additionally, the string data must be greater than one database page in length. Even if all these conditions are met, it is very unlikely that this bug will be hit, as it depends on other internal server conditions as well. This has now been fixed.
543943 When using the Table editor to create a column or modify its data type, if the data type was set in the column's property sheet, then extraneous NO INDEX or COMPRESSED clauses could have been added to the CREATE TABLE or ALTER TABLE statement. This has been fixed.
543955 Some files for subfeatures would still have be included in the install created by the Deployment Wizard, even if their parent feature was unselected. This has been fixed.
544030 Triggers defined on global temporary tables were not fired. This has been fixed.
544047 Validation of a database may have reported that some tables contained orphaned blobs. This was only true for tables that were stored in a dbspace other than the SYSTEM dbspace. This should also have only occurred on databases using snapshot isolation. Databases containing these orphaned blobs have pages which are being wasted. The only way to free these pages for reuse is to rebuild the database file. This problem has been fix so that generating orphaned blobs should no longer be possible.
544069 The server could have crashed if two or more connections were simultaneously scanning a table for the first time after the server was started. This has been fixed.
544094 When creating a procedure or function, if an existing procedure or function was altered and a language clause was specified with an undefined language, then the server would have failed to return an error. This problem has now been fixed and the server now correctly returns an error.
544101 The initial width of the "Plan Viewer" window could have been too narrow to display all of its contents. As a result, the "Get Plan" button could have been hidden. This has been fixed.
544181 Calling the system function traced_plan() for a query containing captured host variables could have failed and return a conversion error. When using Profiling Mode in the Sybase Central plugin, this caused the profiling browser to fail to display a "Best Guessed Plan" for a query whose original graphical plan was not captured. This has been fixed.
544187 A server could have failed to start if another server was starting at the same time. The server that failed to start would have displayed the error "Database cannot be started -- No such file or directory". The error message was also misleading since the database file did exist; the server actually had a problem opening the database's temporary file. This has been fixed.
544191 In some circumstances, host variable references in batches could have caused a server crash. This has been fixed so that the error "Host variables may not be used within a batch" is now returned.
544199 In rare situations, the server could have crashed during graphical plan construction. For the problem to occur, one of the tables used in the query had to have a unique index and a foreign key index sharing the same columns and settings, and the index had to be considered or used for the query. This has been fixed.
544213 Comments on the following object types were not preserved by dbunload:

dbspaces

Java classes

Java jars

external environments

external environment objects

login policies

This has been fixed.

544214 The changes for Engineering case 535861 caused the OLE DB schema support stored procedures to not be installed in newly created databases. This problem has now been corrected.

As a work-around, databases can be upgraded using dbupgrad.exe or by executing an ALTER DATABASE UPGRADE PROCEDURE ON statement.

544318 Specific forms of SELECT statements could have caused a server crash when opened with particular cursor types. This problem has been fixed.

As an interim work-around, the server command line switch "-hW AllowBypassCosted" can be specified to avoid this problem.

544321 An HTTPS synchronization through a proxy server that required authentication would have failed. When using HTTPS through a proxy server, the client first sends a CONNECT HTTP request to establish a channel through the proxy. Unfortunately, authentication challenges was only active for GET and POST requests. This has been corrected so that CONNECT requests are now active as well.
544343 When the Deployment wizard was used to create an installment that included Sybase Central and the SQL Anywhere plugin, the plugin was not automatically installed in Sybase Central. This has been fixed
544350 A user could have dropped a publication whose upload was in an unknown state. For example, the synchronization failed due to a communication error before the upload acknowledgement was received from MobiLink. Dropping a publication whose upload status is unknown could result in lost upload data or duplicate uploads. This has been fixed. Attempting to drop a publication in such a state will now result in a SQLE_SYNC_STATUS_UNKNOWN error.
544460 Particular forms of complex predicates could have caused the server to crash when executed against a string column with declared size no more than 7 bytes. This has been fixed.
544486 If an application connected using Open Client attempted to fetch a result set containing a large number of columns (more than 3000), then the application would have failed with a TDS protocol error. This problem has now been fixed.

Note, that in order to fetch such a result set, the application must be using Open Client 15.

544496 If the server was started with the "-x none" command line option, and without the -xs option, then calling an external web procedure would have caused the server to crash. This has been fixed.
544525 If a publication that had been previous used in a synchronization was dropped, the next publication created would not have been able to synchronize due to a progress offset error from MobiLink. This has been fixed.
544612 If a row was inserted into a database table using the table in the "Results" panel, and the table contained a non-nullable TIME, DATE, or TIMESTAMP column, the column was initially filled with the current time or date in a format that was not necessarily parsable by the database. This has been fixed.
544613 In an SIS environment, if a MobiLink client device went offline (device a), and then another client device (device B) came online with the same device address (ie. IP address/port) as A, and an SIS UDP notification for client A was sent by the notifier, then client B would have received and rejected the notification with an error similar to the following:

Error: <Notifier(QAnyNotifier_client)>: Request 1604437321 is accepted by invalid respondent 'ias_receiver_lsn'. Please check the message filters on the listener

This error would have happened whenever a UDP notification for client A was sent, resulting in wasteful SIS notifications. This has now been fixed. For 9.0.2, the fix was made only for MobiLink with messaging (QAnywhere) for ASA consolidated databases. In later versions, the fix applies to all MobiLink Notifiers in all supported consolidated databases.

544614 Pressing the F2 key while inserting or updating a row in the "Results" pane table, would have resulted in an internal error. This has been fixed by ignoring the F2 key if editing mode is already entered.
544626 The iAnywhere JDBC driver may have crashed when allocating a new statement, and the Java VM was out of memory. This has been fixed. The driver will now either fail gracefully, or assert, depending on the circumstances.
544641 When running on Windows systems, the server could have taken longer than necessary to shutdown, or could even have crashed during the shutdown process. This has now been fixed.
544651 Under rare circumstances, a full text search could have returned incorrect results. For this problem to occur, the database with the text index had to have been refreshed at least once and then moved between platforms with different byte orderings. This has now been fixed. No action needs to be taken for databases with text indexes that were created on little-endian machines and were never refreshed or updated on big-endian machines. Text indexes will need to be truncated and refreshed (for MANUAL and AUTO text indexes), or recreated (for IMMEDIATE indexes), after applying this fix if they were created or refreshed on a big-endian machine.
544669 If a column histogram incorrectly contained a selectivity estimate of 100% for the NULL values, the best plan found by the optimizer could have been very inefficient. This problem affected the computation of the selectivity estimation of predicates of the form "T.X theta expression" (theta can be =, <>, >, >=, < or <=) which would have incorrectly been computed as 0%. A change has been made to the optimizer so that it no longer trusts a NULL selectivity estimation of 100%, instead it uses the computed selectivity estimation of (100% - epsilon).

To test the estimated selectivity of the NULL values for a column T.X use: "select first estimate(X, null) from T".

A workaround is to recreate statistics on the column T.X by using: "create statistics T (X)". However, if the column T.X has often only NULL values, and then it is updated to some non-null values, it is recommended to upgrade to a server containing this fix.

544670 In some cases, statements containing complex expressions could have used an excessive amount of memory that could affect other connections in the server. This has been fixed so that attempts to execute large expressions that can not be handled will now generate the error:

-890 "Statement size or complexity exceeds server limits"

544672 Some fulltext queries took inordinate amounts of memory when opening the statement. These queries typically also took too long to open. These problems predominantly affected queries with long phrases or queries over NGRAM indexes with long search terms. The memory usage and open times have been improved.
544689 All database pages for a table may not have been freed when the table was dropped. This has now been fixed.
544763 The -nc option, which limits the number of concurrent sockets opened by MobiLink server, wasn't feasible to use with non-persistent HTTP/HTTPS, because sockets that could have been continuations of valid synchronizations might have been rejected. The -sm option has been improved to provide similar functionality to -nc when used with non-persistent HTTP/HTTPS. Furthermore, the MobiLink server should usually have provided HTTP error 503 (Service Unavailable) to the remote when the -sm limit was reached and sessions were kicked out. If the -nc limit was reached, however, the error would instead have been a socket error -- usually with a system code about being unable to connect, but experience has shown the system code can vary.

Note, to limit the number of concurrent synchronizations for non-persistent HTTP/HTTPS, the -nc option should be set significantly higher than -sm. The greater the difference between -sm and -nc, the more likely (but never guaranteed) the 503 error will be sent to the remote instead of a socket error.

544779 Any web service in the SYSWEBSERVICE table with data in the PARAMETER column would have been disabled when the database was unloaded into a new database. This has been fixed.

Note, any SOAP services that defined a DATATYPE, GROUP or FORMAT clause, or any web service that defined a METHODS clause, were affected.

544787 If a statement required rows to be sorted and at least two rows had long ORDER BY key values that were equal in the first 256 bytes and the statement was executed with a parallel access plan, it was possible for the two rows to be returned in an order that did not match the ORDER BY clause. This problem has been fixed.

Note, it was possible for text indexes that contain long search terms to be affected by this problem when the text index was built or updated. If this occured, the index should be rebuilt with a server containing this fix.

544791 In rare timing dependent cases, the server could have hung on shutdown, or possibly failed in other ways, after executing a DROP CONNECTION statement. This has now been fixed.
544925 A connection may have continued to hold table or row locks even when a DDL statement failed. This has been fixed.
544938 The server supports the [NOT] DETERMINISTIC specification for user defined functions. When used for stored procedures the clause would have failed to generate the expected syntax error. Instead the clause was accepted and then ignored by the server. This has been fixed so that the server will now generate a syntax error when [NOT] DETERMINISTIC is used in the CREATE and ALTER PROCEDURE statements.
544943 The MobiLink server could have hung, or crashed, when using encrypted streams. The behaviour was highly dependent on both timing and data size. This has now been fixed.
544944 When calling sp_remote_tables() to get the column information for an UltraLite table, any unsigned columns would have been described as signed columns. This problem has been fixed.
544948 The system function xp_sendmail() would have always encoded the subject line of an email being sent. While this is properly decoded when the email is delivered to an email client, it was not decoded in many instances when sent via SMS. A change has been made to not encode the subject line when the subject contains only 7-bit ascii characters. Attempting to send a message containing non 7-bit ascii characters to a SMS client will still result in the subject line being encoded. It will be up the carrier to properly convert from SMTP to SMS.
544956 If MobiLink Client was performing a synchronization, and the status of the last synchronization was unknown, it was possible for the MobiLink Server to have reported that the synchronization had started twice. The MobiLink Log with no extra verbosity might contain the following messages:

Request from "Dbmlsync Version 10.0.1.3750" for: remote ID: rem1, user name: rem1, version: v1

Request from "Dbmlsync Version 10.0.1.3750" for: remote ID: rem1, user name: rem1, version: v1

Synchronization complete

This problem has been fixed.

544961 The Stored Procedure Debugger was not able to set breakpoints on statements within exception handlers. This has been fixed.
544969 UltraLite treated all cursors declared in embedded SQL as being FOR UPDATE. A query with the FOR READ ONLY clause could still have been updated as the clause was ignored. This has now now fixed.

Also with this fix, UltraLite embedded SQL cursors are now considered read only if no clause is present. The previous behaviour can be achieved with sqlpp 杕 HISTORICAL.

544972 The server could have crashed while optimizing a text query containing a phrase. This has been fixed.
545000 SELECT DISTINCT with more than 16 select-list items would have caused an exception to be thrown. A DISTINCT optimization should have tested that there were 16 or fewer select-list items and failed when that was not so. The omitted test has now been added.
545096 The latest release of the Perl, PHP, etc language drivers now use the C API that was released with SQL Anywhere 11.0. To allow those new drivers to be backward compatible with 10.0.1, support has been added for this new C API to 10.0.1. Note that the language drivers that ship with 10.0.1 EBFs will continue to be the ESQL version.
545105 The DatabaseInfo methods getDbFormat and getRelease, would have returned incorrect values. Additionally, getRelease now returns a String which reflects both the release version and the build number.
545251 The MobiLink Listener (dblsn), with IP tracking off (-ni) or default UDP listening off (-nu), may have shutdown unexpectedly after the first notification. This problem was introduced by the changes made for Engineering case 535235. This has now fixed.
545353 The cardinality estimation of the table expression "P key join F", where P is the primary key table and F is the foreign key table, was incorrectly computed in certain cases for multi-column keys. This has been fixed. Now, the cardinality estimation for this class of table expressions is "card(F) \ #of rows in F with at least one NULL value for multi-column key".

Example:

ALTER TABLE FOREIGN KEY ( fk1, fk2, ..., fkn) references P (pk1, pk2,..., pkn)

Q:

select * from

F, P

where F.fk1 = P.pk1 and F.fk2 = P.pk2 and ... and F.fkn = P.pkn

returns all rows from the foreign key table F less the rows having at least one NULL for the foreign key columns F.fk1, F.fk2, ..., F.fkn.

545374 When using the SQL Anywhere ODBC driver, if SQLBindCol was called immediately after a SQLFetch and before calling SQLBulkOperations( SQL_UPDATE_BY_BOOKMARK ), then the SQLBulkOperations update would have failed. This problem has been fixed.
545383 Queries accessing a table via an index could have performed poorly after performing many update and delete operations on the indexed table. If two leaf pages that required cleaning were merged, the second of the two would not have been cleaned, which could have resulted in many almost empty leaf pages. This has been fixed.
545454 The Interactive SQL utility (dbisql) could have crashed if the iAnywhere JDBC-ODBC driver was not installed correctly. This has been changed so that dbisql gives an error message instead.
545455 A server started with the -zl or -zp command line options (or by calling the system procedure sa_server_option() with RememberLastStatement or RememberLastPlan), that services large numbers of HTTP connections could have crashed. This issue would have been rare and highly timing dependent. This has now been fixed.
545463 The Interactive SQL utility (dbisql) would have crashed if a START DATABASE ... ON statement was executed when it was not connected, and had never been connected. This has been fixed.
545468 Calling either of the system procedures sa_http_php_page() or sa_http_php_page_interpreted() would have resulted in a leading and a trailing space in the output. This has been corrected.
545516 The MobiLink server now requires the ASE native ODBC driver, version 15.0.0.320, which can be retrieved from the Sybase Software Developer Kit - 15 ESD #14, for consolidated databases running on ASE 12.5 or ASE 15.0 database servers. This is required due to a bug in the older versions of the ASE native ODBC driver, that has now been fixed.
545519 The changes for Engineering case 541942 could have cause GLOBAL TEMPORARY tables to be created in the SYSTEM dbspace during database creation. Only databases created by a server with this problem are affected, and can be corrected by rebuilding with a fixed server.

This problem has two visible results:

Firstly, diagnostic tracing into a local database will cause the database to grow twice as large as expected due to diagnostic data. It will be necessary to rebuild a database this problem in order to prevent this growth from happening with subsequent builds.

Secondly, JDBC metadata that is supposed to be unique to each connection will end up being visible to all connections. This can cause a variety of problems for applications that depend on querying this metadata. This manifestation of the problem can be avoided by running dbupgrad with a fixed server against a database with this problem.

The presence of this problem in a database can be verified by querying SYSTABLE and noting that all jdbc_* tables have type of BASE.

545528 Inexpensive statements may have taken a long time to optimize (i.e. OPEN time was high), or may have had inefficient access plans. This has now been fixed. The only condition required for this to happen was that the parallel access plans were considered by the optimizer.

For more info on intra-query parallelism see:

SQL Anywhere Server - SQL Usage

Query Optimizer

Query optimization and execution

Query execution algorithms

Parallelism during query execution

This change is particularly important when moving to version 11.0.1, from 10.0.1 or 11.0.0, and running the personal server (dbeng11). The 10.0.1 personal server (dbeng10) and 11.0.0 personal server (dbeng11) are restricted to using only one CPU, and only one core if the CPU has multiple cores.

Also, the 10.0.1 optimizer did not consider the number of maximum concurrent threads (i.e. ConcurrentThreads global variable), and may generate parallel plans which will not be executed in parallel by the 10.0.1 personal server, only one parallel branch will process all the rows. This is a bug which was fixed in 11.0.0 GA.

The 11.0.1 personal server can use all the cores available in one CPU, which means the 11.0.1 optimizer will cost and generate access plans using parallel physical operators when multiple cores are available. This difference in behaviour related to the number of cores allowed to be used by the personal server may result in a very different access plan being executed by 11.0.1 compared to the access plan executed by 11.0.0, for the same SQL statement.

545543 Unloading and reloading a 9.0.2 db could have failed with a 'capability not found' error if the 9.0.2 db had remote servers defined and contains capabilities that do not exist in later versions. This problem has now been fixed. The unload/reload scripts now check for the existence of each capability in SYSCAPABILITYNAME prior to issuing the ALTER SERVER ... CAPABILITY statement.
545546 When using the Create Database wizard, if a collation's punctuation sensitivity was changed to a value other than its default, then the wizard would have failed to create the database. This has been fixed.
545565 When an application called the ODBC fuction SQLTables() to get a list of supported table types, the TEXT table type would not have been listed. In addition, calling SQLTables() to list tables would have incorrectly listed tables of type TEXT as LOCAL TEMPORARY. Similarly, when an application using the iAnywhere JDBC driver called DatabaseMetaData.getTableTypes() to get a list of supported table types, the TEXT table type would not have been listed; and calling DatabaseMetaData.getTables() would have incorrectly identified TEXT tables as LOCAL TEMPORARY. Both the ODBC driver and JDBC driver have now been updated to properly list the TEXT table type and identify tables of type TEXT correctly.
545570 The server could have crashed while inserting rows to a table when also creating statistics on the table. This has been fixed.
545574 In certain circumstances, TLS connections that should have failed, would have actually succeed. This has been fixed. Note that this problem does not occur on Mac OS X systems.
545611 In some rare cases, errors during execution of a DROP TABLE or DROP MATERIALIZED VIEW statement, could have resulted in locks being held for too long. This has been fixed.
545621 The server may crash after a materialized view has been dropped. This has been fixed.
545627 Clicking the "File/Run Script" menu item to run a script file could have caused the Interactive SQL utility to crash with an "Out of memory" error. This has been fixed so that a more ordinary error message is displayed, and running the script is gracefully aborted. This problem could have occurred when the script was very large (thousands of lines) and especially if it contained unclosed block statements.
545640 Attempting to set an HTTP header from within an inner procedure would have resulted in a SQL error indicating that setting of the HTTP header was invalid. This has been fixed so that inner procedures may now modify HTTP response headers.

For example:

With this fix an HTTP request to the SUB service now succeeds in setting the User-Header within the SUB1 function.

create service sub

type 'raw'

authorization off

secure off

user dba

as call sp_sub();

create procedure sp_sub()

begin

select sub1();

end;

create function sub1()

returns long varchar

begin

call sa_set_http_header('User-Header', 'test');

return 'test';

end;

545641 The Interactive SQL utility (dbisql) could have crashed if the Query Editor window was open and the database connection was lost. This has been fixed.
545646 Creating a new connection profile by copying an existing profile, could have resulted in the copy having the wrong plugin type. This has been fixed.
545684 When optimizing simple SQL statements the server was skipping some of the optimizations implemented to improve DESCRIBE time. This has been corrected.

For more information see:

SQL Anywhere Server - SQL Usage

Query Optimizer

Query optimization and execution

Query processing phases

545690 When a message was sent to a destination alias, the QAnywhere Server may not have immediately generated push notifications for some members of the alias. This could have resulted in the server taking as long as a minute to push notifications to clients. This has been fixed.
545704 When trying to create a Transact-SQL function or procedure, use of the "expr AS name" syntax in the arguments to a function call would have given an error. This has been fixed.

A workaround is to write the function or procedure using the Watcom-SQL dialect.

545707 When running on Unix systems, the server could have hung and not proceeded any further while generating a mini-core. This has been fixed.
545713 On Mac OS X systems, the function sqlany_initialize_interface() in sqlanydll.c would have failed if it attempted to use the default library name (that is, if the second argument to the function was NULL and the environment variable SQLANY_API_DLL was not set). This was due to the default library name having the wrong extension ('so' as opposed to 'dylib'). This has been fixed.

As a workaround, the correct library name can be specified in the second argument to sqlany_initialize_interface, the environment variable SQLANY_API_DLL can be set to the correct library name, or the extension can be manually changed in the DEFAULT_LIBRARY_NAME macro in sacapidll.c.

545744 The server may found, and used, the wrong license file when starting up. This has been corrected.

Note: if the server now reports a "License file not found" error after applying this fix, when it started prior to the fix, then the license file was not correctly installed. To correct this, the license file should be moved so that it is in the same directory as the server executable.

545760 The SQL tab for a Trigger, View, Procedure or Event could have contained stale SQL, if the object's SQL was modified and saved to the database in a separate window (opened using the "Edit in New Window" menu item). The problem would only have occurred when the object's SQL tab was displayed in the right pane before the object was modified and saved to the database in the separate window, and the object's SQL was modified and saved to the database in the separate window while the object's SQL tab was not displayed in the right pane of the main Sybase Central window.

A similar problem would have occurred if a maintenance plan was modified after having shown its corresponding event's SQL tab. The event's SQL tab would have displayed stale SQL.

In both cases, pressing F5 to refresh Sybase Central would have show the object's up-to-date SQL. Pressing F5 is now no longer necessary, as Sybase Central has been corrected to keep such objects' SQL up-to-date.

545762 The MobiLink system stored procedures for DB2 Mainframe were created with a default isolation level of RR (Repeatable Read = Serializable) instead of CS (Cursor Stability = Read Committed). This has been fixed.
545772 If an application was connected using the iAnywhere JDBC driver, and the application subsequently executed a statement that returned more than one result set, then attempting to fetch any result set after the first would have failed with a function sequence error. This problem would only have appeared once the fix for Egineering case 533936 was applied. This has now been fixed.
545785 If a SELECT statement referenced a single table and contained a TOP n or FIRST clause, it was possible for a slow execution plan to be picked. In order for this to have occurred, there needed to be at least two indexes that could be used for the plan and the depth of the indexes needed to differ. This has been fixed.
545815 The database server could have leaked memory, and eventually failed with an 'Out of Memory' error, when using TDS connections (eg. jConnect) that fetched string data. This has now been fixed. This fix is in addition to the memory leak that was fixed for Engineering case 543069.
545824 When doing dynamic cache size tuning, the server could have choosen a cache size which was larger than appropriate. This could have caused performance degradation if other system components were competing for memory. The server was erroneously basing target cache size computations on the server's "peak" working set size, rather than its "current" working set size. This has been corrected.
545899 For particular structures of tables and indexes, it was possible for an ALTER TABLE statement to fail with an assertion failure such as the following:

Assertion failed: 201501 - Page for requested record not a table page or record not present on page

This has been fixed.

545901 If an application called an external environment procedure immediately after issuing a commit, and the external environment procedure performed server side calls and issues its own commit, then there was a chance the server will have failed assertion 201501 "Page for requested record not a table page or record not present on page". This problem has now been fixed.
545902 If The Interactive SQL utility (dbisql) could not load the DBLIB library it would have crashed, rather than reporting the problem and degrading gracefully. This has been fixed.
545912 The original release of the Express Bug Fix for 11.0.0 1490 would have failed to install on non-English Windows systems. This has been fixed.
545917 When the Relay Server (rshost) or the Relay Server Outbound Enabler (rsoe) RSHOST executables printed the usage message, empty lines and/or garbage characters could have been displayed after the usage message. This has now been fixed.
545933 Attempting to backup a database of size 5GB or larger with the clause "WAIT BEFORE START" could have caused the server to hang. Backups of databases this size and larger cause the server to calibrate the dbspaces, which is done to improve the parallel performance of the backup. However, if the calibration updated the catalog, then the WAIT BEFORE START clause would have caused the backup to wait on itself. This has been fixed by turning off calibration for large databases when the WAIT BEFORE START clause is specified. If desired, the CALIBRATE DATABASE statement can be issued before the backup begins.

A workaround is to run the backup without the WAIT BEFORE START clause.

545934 A database could have failed validation before a checkpoint, and then passed validation after a checkpoint. A possible message that may have been generated in this case was "Database validation failed for page nnnnnn of database file '<file.db>'". In cases such as this, the database was in fact valid, but the validation step was falsely reporting failure. This has been fixed, although there is still a small possibility that when run on an active database, the validation step could still report errors. It is recommended that, where possible, validation occur when there is little or no database activity.

A workaround is to issue a checkpoint before running validation.

545949 Visual Studio 2008 SP1, which contained the support for the Entity Framework, was released after the initial release of SQL Anywhere 11.0.0. Full support for the Entity Framework has now been added to SQL Anywhere.
545950 The STOPLIST setting specifies the terms to ignore when building a text index. The sample stoplists for English contained words with apostrophes as well as words. An apostrophe is treated as a whitespace for the purposes of stoplist construction, causing such words to be treated as phrases (e.g. you'll is treated as "you ll"). Such words have now been removed from the sample.
545987 In the Text Configuration Object wizard, the defaults for the term breaker and maximum term length were "Generic" and "1" respectively. These were not particularly useful defaults. They have been changed so that the wizard now provides a reasonable default for the term breaker based on the database's CHAR collation, and the maximum term length based on both the database's CHAR collation and the currently selected term breaker. The term breaker now defaults to N-gram if the database's CHAR collation is a Chinese (936ZHO, 950ZHO_HK, 950ZHO_TW, EUC_CHINA, EUC_TAIWAN), Japanese (932JPN, EUC_JAPAN) or Korean (949KOR, EUC_KOREA) collation; otherwise, it defaults to Generic. The maximum term length now defaults to 20 if the Generic term breaker is selected; otherwise, for N-gram it defaults to 2 if the database's CHAR collation is a Chinese, Japanese or Korean collation, and 4 otherwise.
546038 Sybase Central could occasionally report an internal error when a table header on the "Data" tab was clicked in order to sort the data. This has been fixed.
546046 The QAnywhere plugin could have reported an internal error (NoClassDefFoundError) when connecting to a server message store if the plugin was registered with Sybase Central directly (i.e. using the QAPLUGIN.JAR file) rather rather than by using an installer-created .JPR file. This has been fixed.

The workaround is to add "mldesign.jar" to the list on the "Advanced" page of the QAnywhere 11 plugin properties window.

546070 The operation executed after an embedded SQL application executed a FETCH, could have caused a crash if the cursor was opened without WITH HOLD and a COMMIT or ROLLBACK was done by a procedure or function called by the FETCH. This has been fixed.
546072 The iAS ODBC driver for Oracle could have crashed when the application tried to create multiple connections concurrently. This problem was more likely to have occurred on Unix systems. This problem has now been fixed.
546074 A database that was initialized with a version 10 server could have become corrupted when run with a version 11 server. The problem could have resulted in the database not starting, failing assertions, or other errors. This has now been fixed.

Note that rebuilding a database to a version 11 format will provide performance improvements, while also preventing this problem.

546104 Temporary tables with LONGVARCHAR or LONBINARY columns were not being completely freed. This has been fixed.

Note, temporary tables occur when there are no indexes discovered to implement operations such as ORDER BY.

546131 The following bug fixes, which were originally made only for ASA consolidated databases, have now been implemented for ASE consolidated databases as well:

1 - primary key conflicts for table ml_qa_global_props in upload_insert script (Engineering case 463062),

2 - table ml_qa_status_history unlimited growth problem (Engineering case 495514),

3 - UDP notifications to inactive devices problem (Engineering case 544613).

546164 During the execution of server transmission rules, it was possible for the QAnywhere server to repeatedly report a java.util.NoSuchElement exception, and abort the rule execution. This has been fixed.
546171 When a delivery condition that referenced message properties was specified for a QAnywhere connector, message transmission to the connecting messaging system would have been disabled. This has been fixed.
546172 If a parallel execution plan was executed using an exists join (JE / Exists Join), then it was possible for the statement to return the wrong answer. This has been fixed.
546173 When uploading timestamp data with the .NET Direct Row API, an exception could have been thrown. Even if an exception wasn't thrown, the fractional part of the timestamp would have been incorrect. When downloading timestamps with the .NET Direct Row api, values would have been incorrect by a few seconds. Both of these problems have now been fixed.
546176 When running a farm of MobiLink servers with QAnywhere messaging enabled, the delete rules and archiving process could have logged "deadlock detected" errors in the MobiLink server log. The rules were functioning correctly, but unnecessary database contention was occurring. This has been fixed by having the delete rules and archiving process run only in the primary server.
546256 When connected to a DB2 Mainframe (D2M) consolidated database, the MobiLink server could have held locks across COMMITs, causing increased contention and sometimes resulting in deadlock or timeout errors. This has been fixed.
546290 When connected to a DB2 Mainframe (D2M) database, the iAnywhere JDBC driver could have eld locks across COMMITs, causing increased contention and sometimes resulting in deadlock or timeout errors. This has been fixed.
546294 The server could have failed assertion 104301 - "Attempt to free a user descriptor with non-zero reference count", while trying to drop a user. This assertion was likely to occur when an attempt was made to ALTER the same user in the same server session, and the ALTER had failed due to an error. This has been corrected.
546330 In the UltraLite plug-in, it is possible to view the data of a table by choosing the table in the left pane, and clicking on the 揇ata� tab in the right pane. When this was done though, subsequent attempts to change the schema of the database could have failed with the error 揂 schema upgrade is not currently allowed�. A result set created when viewing the data was not explicitly closed. This has been fixed.
546367 Sybase Central permitted utility operations while debugging or profiling. In some circumstances, running a utility operation while debugging or profiling could have caused Sybase Central to hang. This has been corrected so that utility operations are now permitted only when in Design mode.
546432 The server may have hung while performing updates to rows containing blobs. This has been fixed.
546439 The Interactive SQL utility would have reported an internal error if the OUTPUT statement operated on a result set that contained a UNIQUEIDENTIFIER column. This has been fixed.
546478 Referential integrity constraint checking could have failed, allowing a primary key to be removed when it still had referencing foreign keys, or preventing the removal of a primary key with no referencing foreign keys. The likelihood of this happening decreased as the number of foreign tables increased. This has now been fixed.
546587 If the option Chained was set to off (i.e. auto-commit enabled), executing an INSERT, UPDATE or DELETE statement inside a BEGIN ATOMIC block would have resulted in error -267 "COMMIT/ROLLBACK not allowed within atomic operation". This has been fixed. The DML statement will now be allowed to execute and a commit (or rollback if an error occurs)will be performed automatically at the end of the atomic block.
546736 In CONTAINS queries, the AND NOT (or -) operator applied to all expressions following (to the right of) the operator. This has been fixed so that AND NOT (and its variants listed below) now applies only to its immediate left and right arguments.

For example, CONTAINS query

'a AND NOT b OR c'

would be evaluated as

'a AND NOT (b OR c)'.

After the fix, the meaning of the query is

'(a AND NOT b) OR c'.

Equivalents to the AND NOT operator are: 'a & NOT b', 'a NOT b', 'a AND -b', 'a & -b', 'a -b'. Note that if hyphen is used, it has to be preceded by a space

and immediately followed by it's argument. There are two other legitimate uses for hyphen in a text query: 'a-b' and 'a - b'. The first case is interpreted as the phrase '"a b"',

whereas the second is interpreted as 'a b' (='a AND b').

Additionally, interpretation of CONTAINS queries was dependent on exact order of operators and their arguments. For example, query

'a AND b OR c'

would be evaluated as

'a AND (b OR c)'

and query

'c OR b AND a'

would be evaluated as

'c OR (b AND a)'.

This has also been fixed by imposing an order of evaluation on all the text query operators as follows:

1) FUZZY, NEAR

2) AND NOT

3) AND

4) OR

With the new rules, two examples above are equivalent

'(a AND b) OR c' = 'c OR (b AND a)'

Full syntax for the CONTAINS queries is described in the documentation:

SQL Anywhere Server - SQL Reference

Using SQL � SQL language elements

Search conditions

CONTAINS search condition

546742 The MobiLink client (dbmlsync) could have crashed when reporting certain TLS or HTTPS errors. Certain TLS errors could have caused a null pointer dereference during creation of the error message string. This has now been corrected.
546854 If a query contained DISTINCT, ORDER BY and GROUP BY clauses and an expression in the ORDER BY clause appeared in the the GROUP BY clause, but not in the SELECT list, then the wrong error was returned, namely "Function or column reference to ... must also appear in a GROUP BY." This has been fixed so that the correct error message: "Function or column reference to .. in the ORDER BY clause is invalid."

For example, the query:

SELECT DISTINCT X

FROM T

GROUP BY E

ORDER BY E

Would have returned the error: "Could not execute statement. Function or column reference to 'E' must also appear in a GROUP BY." SQLCODE=-149, ODBC 3 State="42000"

546867 A partial index scan using an index with DESC columns, may have been inefficient. For this problem to have occurred, the last column used to define the range must have been in descending (DESC) order, and the index must have contained NULLs. This has been fixed.

For example:

Previously, the server would have read approximately 85 index leaf and table pages for the query below, now the number of pages read is approximately 10.

CREATE TABLE CURRENCY_TABLE

(CURRENCY CHAR(10) NOT NULL,

DOLLAR_EQUIV NUMERIC(5, 2),

PRIMARY KEY (CURRENCY));

INSERT INTO "CURRENCY_TABLE" VALUES ('DOLLAR', 1.00);

INSERT INTO "CURRENCY_TABLE" VALUES ('POUND', 1.91);

INSERT INTO "CURRENCY_TABLE" VALUES ('DM', .45);

INSERT INTO "CURRENCY_TABLE"

select 'DM', NULL from sa_rowgenerator(1,20000);

commit;

create index currency_idx_1 on currency_table( dollar_equiv desc );

call sa_flush_cache();

select count(*) from CURRENCY_TABLE with (index (currency_idx_1 ))

where DOLLAR_EQUIV < 1000 option( force optimization);

546869 The property sheet for connectors contained a "Transmission Rules" page. This was incorrect because connectors do not have transmission rules; they have delivery conditions. As a result, that page has been replaced with a new "Delivery Conditions" page in which the single delivery condition for the connector can be typed.
546882 The GrowLog system event that fires when the database transaction log grows can be setup to truncate the transaction log upon its exceeding a certain size. In cases where the database server was very busy, the transaction log would not have been truncated often enough. This may have lead to the transaction log getting significantly larger than the threshold set in the event. This has been fixed, although in a very busy server it is still possible for the log to grow larger than the threshold for short periods of time.
546908 When running the Unload utility (dbunload) to unload a pre-10.0 version database, the directory for the unloaded table data would not have been created. This has now been fixed.
546912 The wrong item could have been edited or deleted if the list that contained the item was sorted. This would have occurred in the following places:

1. List of members for a given destination alias

2. "Properties" tab of client store property sheets

3. The "Client Properties" tab of the property sheet for a server message store

4. The "Members" tab in the property sheet for a destination alias

5. The property sheet for a client in a server message store

6. The "Transmission Rules" or "Deletion Rules" tabs in any property sheet.

7. The "Properties" tab of a connector's property sheet.

This has now been fixed.

547033 Opening the property sheet for a table that had an embedded quote in its name or in its owner's name, would have caused Sybase Central to generate an invalid SQL statement causing an error. This has been fixed.
547035 Attempting to use an UltraLite remote server with the Migrate Database wizard would have caused Sybase Central to crash. This has been fixed.
547036 The PacketsSent and PacketsReceived properties were being updated by HTTP and HTTPS connections, even though the HTTP protocol has no real concept of packets. This has been fixed by no longer updating these properties for HTTP and HTTPS connections. The BytesSent and BytesReceived properties will continue to be updated for HTTP and HTTPS connections.
547037 When using the QAnywhere plugin, it was not possible to create an empty destination alias. This has been fixed so that creating an empty alias is now possible.
547041 Some remotes could have synchronized with servers that were not licensed to synchronize with those remotes. This has been corrected.
547045 Support has been added to allow exporting a script version's connection and table scripts, as well as its defined column names, to a SQL file by selecting the version object in Sybase Central while in Admin mode, and then choosing File -> Export.... The Version Export wizard prompts for a file name, and when Finish is clicked, a SQL file is created that contains a sequence of required calls to the ml_add_...() procedures.
547049 After calling SQLGetTypeInfo, the application would not have been able to get the column names through problem could have prvented exporting MobiLink Monitor data to an Oracle database. This has now been fixed.
547073 Performance of database operations when there was a large transaction log (many transactions awaiting synchronization and/or checkpointing) has been improved.

Note, GA versions of the software will not be able to read a database that has been used by UltraLiteJ as of this change. Earlier databases will automatically be upgraded.

547076 Executing a "MESSAGE ... TO CLIENT FOR CONNECTION n" statement could have resulted in a message with mangled characters in the message text. For this to have occurred, the source connection and destination connection must have been connected to databases with different collation sequences. This has been fixed.
547078 An ODBC or OLEDB application may have been positioned to an incorrect row when fetching by bookmark value. This would only have happened if the last column of the result set was not bound (for example with SQLBindCol). This has now been fixed.
547084 A connection attempt that resulted in a warning was treated as an error and no connection was created. This was affecting the PHP, Python, and Ruby drivers. This has been fixed. Warnings no longer prevent a successful connection. The actual warning message can still be retrieved as usual.
547198 Changes for Engineering case 536370 introduced a problem where simple select statements could have caused a server crash for specific forms of table schema and index definition. This has been fixed.
547205 Renaming a column in a table having referential action triggers, could have resulted in a server crash. This has been fixed.
547206 Non-persistent HTTPS synchronizations could sometimes fail with stream error STREAM_ERROR_WRITE and a system error code of 10053. This has been fixed.
547213 The server could have looped forever executing a REORGANIZE TABLE statement. This should only have occurred if the table had a clustered index that contained non-unique values in the clustered column or columns. This has been fixed.
547224 When selecting data using the Interactive SQL utility, from an UltraLite database that was UTF8 encoded, it was possible for extra garbage characters to have be displayed at the end of the string.燜or example, if a VARCHAR column contained the string 'f黵' (the middle letter is u umlaut) and the database was UTF8 encoded, selecting that column would have displayed a garbage character at the end (typically a box).燦ote that this was a display problem only. This has been fixed.燗 possible work around is to cast the data as VARCHAR(x), where x is a value big enough to display the data.
547228 n very rare circumstances, the server could have failed a fatal assertion when commiting deleted rows containing short strings (less than a database page in length). The typical assertion seen in this instance was assertion 201501 - "Page for requested record not a table page or record not present on page". This has been fixed.
547234 When the UltraLite SQL functions length() and char_length() were used on LONG VARCHAR columns, the results were incorrectly the lengths of the strings in bytes, rather than characters. Note that some characters require multiple bytes internally. The function byte_length() is used to determine the length in bytes of the string. This has been fixed.
547248 If the server had shut down due to a start-up error involving a database that participated in mirroring, the shutdown reason would not have been recorded correctly. On Unix systems, it would have been recorded as being a result of a SIGHUP signal. On Windows systems, it would have been recorded as being a result of a request from the console. This has been fixed so that it is now correctly recorded as being a result of a start-up error.
547254 The Interactive SQL utility (dbisql) could have reported an internal error if the "Run Script" menu item was used to execute a script file that caused dbisql to close. This has been fixed.
547385 In rare circumstances, Sybase Central could have crashed when selecting a task in the tasks list. This has been fixed.
547392 Database corruption was possible if a database crashed while a lazy checkpoint was in progress. For corruption to occur, pages must have been allocated during the lazy checkpoint and one of the following must have occurred prior to the checkpoint:

- dropping a table or index

- truncating a table (that could have been truncated quickly, eg. no triggers)

- deleting or replacing long blobs (greater than roughly page size)

- [in general] an operation that resulted in pages being freed without the contents being modified

This was more likely to have been an issue on heavily loaded servers. This problem has been fixed by temporarily allocating the pages at the start of the lazy checkpoint and then re-freeing them at the end.

547415 If all terms in a CONTAINS query were dropped, due to STOPLIST, MINIMUM and MAXIMUM TERM LENGTH settings of the text index, unnecessary searches in the text index could still have been performed. This has been fixed.
547496 A long-running HTTP connection to an OEM server would have resulted in an authentication violation. This was corrected by making all HTTP connections authenticated by default.
547498 Outer references are expressions used in a nested query block which reference table columns from the outside of that query block. For example, in the query below, 'T.Z+1' is an expression used in a subquery referencing the base table column T.Z of the base table T which is in the FROM clause of the main query block. Such expressions are now sometimes considered constants inside the nested query block. These constants are used in many optimizations by the SA optimizer, such as order optimization, functional dependencies optimization, and MIN/MAX optimization. Previously, these outer references are always treated as non-constants.

Q:

select *

from T

where T.X <> (select max(R.Y) from R where R.Z = T.Z+1)

547504 A multithreading application using the ADO .Net provider, could have hung due to incorrect thread synchronization. This has been corrected.
547506 The server could have become unresponsive when executing a query, if during an index scan very few rows satisfied the WHERE conditions. This has been fixed.
547513 When running the server on Unix systems and using the -m command line option ("truncate transaction log after checkpoint"), the transaction log was not being truncated on checkpoints. This has been fixed.
547514 The QAnywhere plugin could have crashed Sybase Central when connected to a message store which contained thousands of messages. This has been fixed. Now, only the first 1000 messages are displayed. If there are more messages in the store, a message window will display a message that these are the latest 1000 messages.
547522 If the MobiLink system setup in the consolidated database was corrupt, then using the Check MobiLink System Setup command in the MobiLink plug-in could have caused a Java null pointer exception. This would only have happened if a MobiLink system setup stored procedure incorrectly had no parameters. This bug has been fixed.

A workaround is to manually remove the MobiLink system setup and then re-run the command.

547541 Using a server that is in In-memory mode to start a database requiring recovery would have caused the server to fail assertion 201842, "Checkpoint log: failed to write info page". The server running in In-memory mode was unable to use the transaction and/or checkpoint logs for recovery. This has been changed so that the server running in In-memory Never-write mode (-im nw) will now read both logs during recovery only. When in In-memory Checkpoint-only mode (-im c), the server will read the transaction log during recovery only. This is useful for example, to validate a backup copy of a database that requires recovery, without making changes to the backed up copy.
547593 When in the Maintenance Plan wizard, if the checkbox for "Disallow logins while the maintenance plan is running" was checked, then logins would have been disallowed for all databases running on the server. Now, logins are disallowed only for the database in which the maintenance plan is defined.
547594 In the Maintenance Plan wizard, if the checkbox "Validate database pages" was selected, then the generated event handler would have validated tables and materialized views as well, even if the checkbox "Validate tables and materialized views" was not selected. This has been fixed.
547708 Attempting to create a database with an apostrophe in a filename or the dba user's password, could have failed with a syntax error. Also, attempting to create a database with a dbkey containing a backslash may have resulted in a database which could not be connected to. These problems have now been fixed.
547713 Sybase Central would have failed to delete a remote server or a directory access server if it had one or more proxy tables. Now, the proxy tables are automatically deleted before

the remote server or directory access server is deleted. This fix restores the behaviour to what it was in versions 10 and earlier.

547716 Attempting to add a blob to the download stream when using the MobiLink Direct Row API and the MLPreparedStatement.setBytes() method, would have failed. The method would have returned the error "Value is out of range for conversion" if the length of the byte array was larger than 65536 bytes. This problem has now been fixed.
547730 If a corrupted UltraLite or SQL Anywhere remote client synchronized with a MobiLink server, it was possible for protocol errors to be generated. When this occurred, the MobiLink server console log would have shown the text:

I. <1> failed reading command with id:%d and handle:%d

I. <1> Synchronization complete

This has been fixed. Now, the error message "[-10001] Protocol Error: 400" will be displayed and a synchronization error will be reported.

547738 Starting with version 10.0.0, the server now uses a new mechanism to evaluate LIKE predicates that start with a prefix of non-wildcard characters. This mechanism is needed to provide correct results with the NCHAR collation. This new algorithm operates by computing sortkey hashes that specify a range of column values that could possibly match the LIKE predicate; the LIKE predicate is retained in some cases where it may further filter these returned rows. These sortkey hashes can be used as index range bounds to quickly filter the set of rows processed by the query. In the case that an index was not selected to process the LIKE predicate, the new implementation could have been more expensive, as it had the additional cost of computing the sortkey hash. The optimization has now been adjusted so that the sortkey hash bounds are used only if the LIKE predicate is used in an index scan. Otherwise, the like_prefix predicate is evaluated by comparing the column string to the pattern prefix character by character. This should give performance that meets or exceeds previous versions.
547779 When creating a maintenance plan, the SQL for the plan's event handler would not always have been displayed in the database's Executed SQL tab. Instead the event SQL would have contained "HANDLER null". This problem would only occur if the handler did not include an SMTP or MAPI password. This has been fixed.
547858 If columns used to build an NGRAM text index contained words shorter than N, some positional information could have been lost. The positional information would also have been lost if a CONTAINS query, that used the NGRAM text index, contained terms shorter than N. For example, if the value 'what a weather' was stored in a column col1 indexed by NGRAM text index with N=4, the following CONTAINS queries would match the row:

CONTAINS( col1, '"what a weather"')

CONTAINS ( col1, '"what weather"' )

CONTAINS( col1, 'what NEAR[1] weat' )

CONTAINS( col1, 'what NEAR[2] weat' )

This has been fixed, so that only the first and fourth queries will now match the row.

Note, all NGRAM text indexes built before this fix should be rebuilt either by using REFRESH TEXT INDEX ... FORCE BUILD (for MANUAL or AUTO REFRESH text indexes), or by dropping and recreating (for IMMEDIATE text indexes).

547905 If a SQL statement contained comments using %-style comments, then the ODBC driver could have reported a syntax error when the comment contained an unmatched quote.

For example:

% it's a contraction

The ODBC driver has to parse statements looking for ODBC escape sequences, but did not handle %-style comments. This has been fixed.

547906 If a column in the consolidated database was larger than the corresponding column in the remote database, then the MobiLink server may have crashed when synchronizing. This has been fixed so that the sync will now abort with the error -10038.
548007 A query that executed using intra-query parallelism did not respect the Priority connection option and would have executed at the 'normal' priority level. This has been fixed.
548032 The MobiLink server would have printed the warning, "[10082] MobiLink server has swapped data pages to disk", after it had swapped 5000 pages to disk, or about 20MB of row data. This has been changes so that it now prints this message after the first time the server must swap to disk. This should make it easier to diagnose performance problems when -cm is set slightly too small.
548033 When synchronizing through a third-party server or proxy and using TLS or HTTPS, the sync could have failed with the stream error code STREAM_ERROR_READ and system error code 4099 (hex 1003). This has now been fixed.
548043 Under heavy load, the server could have, in rare situations, generated a log that had an operation that would have been unreadable by the MobiLink client dbmlsync. Dbmlsync would have reported: "Log operation at <location> has bad data at offset <location>". This was likely only possible on multiprocessor systems, and has now been fixed.
548059 A server started with a 32K page size, and a large cache size (or a very high -gn value), could have failed an assertion during or immediately following server startup. This has been fixed.
548142 The messages "Failed to attach database worker thread", "Error while attaching database worker thread to Java VM" and "Unable to attach worker to VM.", mention worker threads and database worker threads, but these errors can occur on any thread within the server. They have now been changed to "Failed to attach thread", "Error while attaching thread to Java VM" and "Unable to attach thread to .NET runtime." respectively.
548144 If a network error occurred during a read from the stream, some MobiLink Java clients could have hung with 100% CPU utilization. This has been fixed. The MobiLink Monitor, the SQL Anywhere Monitor, the Notifier and QAnywhere are all affected by this.
548153 When using Interactive SQL to select text strings that include curly brackets or braces ie the characters 憑� and 憓� using the result format 憈ext� will cause a stack trace in Interactive SQL.
548160 In certain specific circumstances, some expressions in triggers could have caused the server to crash when executing the trigger. This has been fixed.
548173 Repeated update synchronizations, that is where existing client rows are updated, could have caused unnecessary database growth. A row storage problem has now been corrected.
548260 The function REGR_R2( Y, X ) incorrectly returned NULL as the answer when COUNT(*) * SUM( Y * Y ) was equal to SUM(Y) * SUM(Y). This has been corrected so that the server will now return the correct answer of 1.
548282 CONTAINS queries with prefix terms that contained non-alphanumeric characters would fail to match rows containing the matching terms. Additionally, if the columns in the CONTAINS query were indexed using NGRAM text index, and the length of the prefix was greater than N, the CONTAINS query would also fail to find matches. If the columns in the CONTAINS query were indexed using a GENERIC text index with MINIMUM TERM LENGTH set to a value other than the default, searches for the phrase with a prefix shorter than MINIMUM

TERM LENGTH could fail to find matches.

Examples:

query with non-alphanumeric characters: ' pre-school* ', ' a_variable_n* ', ' " pre-scho* children " '

query over 4-GRAM indexed columns: ' weath* ', ' " beau* weath* " '

query over columns indexed by GENERIC

text index with MINIMUM TERM LENGTH = 3: ' singular no* ending with ', ' " singular no* ending with " '

This has been fixed so that the above examples are now interpreted as the following queries:

' pre-school* ' = '"pre school*"' (GENERIC text index)

' a_variable_n* ' = '"a variable n*"' (GENERIC text index)

' " pre-scho* children " ' = '"pre scho* children"' (GENERIC text index)

(Note: STOPLIST and length restrictions are applied to all resulting terms except for the actual prefix, i.e. if 'pre' was in the STOPLIST, the last query would be interpreted as '"scho* children"')

' weath* ' = '"weat eath"' (4-GRAM text index)

' " beau* weath* " ' = '"beau" & "weat eath"' (4-GRAM text index)

' singular no* ending with ' = 'singular no* ending with' (GENERIC text index with MINIMUM TERM LENGTH = 3)

' " singular no* ending with " ' = '"singular ^ ending with"' (GENERIC text index with MINIMUM TERM LENGTH = 3. The ^ in the query represents the fact that the phrases with a single term between 'singular' and 'ending' will be found, and not those with no intervening terms, or multiple intervening terms)

The following new rules were added to the CONTAINS query grammar with respect to NGRAM text indexes:

1) If a prefix term is shorter than N, all NGRAMs beginning with the prefix will be matched. For example: on a 4-GRAM text index the query 'a*' will match all the rows that contain at least one 4-GRAM beginning with a, including the following:

'apple pie' (contains appl)

'container' (contains aine)

2) If a prefix term has length N or higher, it is converted to a search for the exact substring equal to the prefix. This is due to the fact that information about the beginning and end of a word is not stored in NGRAM index. Searches for 'apple' or 'appl*' on a 4-GRAM text index will both find rows containing words 'apple' and 'pineapple'.

3) If a prefix term appears in a phrase in the CONTAINS query that will use NGRAM text index, the phrase is converted into an AND of two phrases - one from the beginning of the phrase up to and including the prefix term, and the other one beginning at the term following the prefix term and ending at the last term of the phrase. For example, for a 4-GRAM text index, query ' " where ord* an* relati* distance " ' is interpreted as '"wher here ord*" & "an*" & "rela elat lati" & "dist ista stan tanc ance"'

4) If one of the arguments to NEAR is a prefix, NEAR is converted to AND. For example, for a 4-GRAM text index, query ' app* NEAR orang* ' is interpreted as 'app* & "oran rang"'

The following new rules were added to the CONTAINS query grammar with respect to GENERIC text indexes with MINIMUM TERM LENGTH > 1:

1) In a phrase, prefix term shorter than MINIMUM TERM LENGTH will be dropped. For example, on a GENERIC text index with MINIMUM TERM LENGTH = 3, query ' " the g* weather " ' will be interpreted as '"the ^ weather"' and will match both 'the good weather' and 'the bad weather', but not 'the weather is good'.

2) Outside of a phrase, prefix term shorter than MINIMUM TERM LENGTH will match terms that are between MINIMUM and MAXIMUM TERM LENGTH and begin with the specified prefix.

For example, on a GENERIC text index with MINIMUM TERM LENGTH = 3, query ' the g* weather ' will be interpreted as 'the & g* & weather' and will match 'the good weather', 'the weather is good', but not 'the bad weather'.

548322 If an application calls PreparedStatement.executeBatch(), the iAnywhere JDBC driver is supposed to return an integer array that contains a status for each row in the batch. The iAnywhere JDBC driver was instead returning an integer array containing only two elements. This problem has now been fixed.
548323 If many connections were making external environment (or Java) calls at the same time, and the number of worker threads had not been increased by an appropriate amount, then there was a possibility that the server would either have hung or crashed. A thread deadlock error will now be returned instead.
548431 Sybase Central could have crashed when pasting a column in the table editor. The problem would only have occurred if a new column was added, but a name for the new column had not

yet been specified. This has been fixed.

548437 Under rare circumstances, a loss of quorum could have resulted in the database file and the transaction log on the primary becoming out of sync. Subsequent attempts to start the database would have failed with the error "Unable to start specified database: Cannot use log file '<name>' since it is shorter than expected". This has been fixed.

Note, the likelihood of this problem appearing with 11.0.0 servers was even smaller than with 10.0.1 servers.

548455 When attempting to export synchronized data to an Oracle database, the application could have given a false positive for a table's existence, which would have resulted in an export failure since it would not have tried to create the table for the current user. This has been fixed.

Also, exports to Oracle previously used the Date data type. Now, for Oracle 9 or later Timestamp is used instead of Date.

548463 Using the Certificate creation utility (createcert) to create certificates or certificates requests would have failed with the error "Error occurred encoding object", when provided non-ASCII input. This has been fixed.
548465 Database startup events that used external environments or web procedures may have failed if the database was specified on the server start line. This has been fixed.

Note that databases started later (after the server is up and running) would not have this problem.

548470 If a mirror server had shut down and then very quickly restarted as a preferred server, synchronization may have been delayed by thirty seconds. This has been fixed.
548473 When a version 9 server was used to run a databases created with version 7 or older, the server could have choosen inefficient query access plans due to errors in estimation of join selectivities. These database do not contain column statistics in the form of domain distribution histograms stored in the system table SYSCOLSTAT, as with later version. This has been corrected so that the server will now do a much better job of estimating these selectivities.
548519 The process for creating the MobiLink stored procedures for DB2 mainframe (D2M) via syncd2m_jcl.sql was not complete. This has been fixed.

With the addition of d2mrelod.jcl, the steps are now:

1) Copy syncd2m_jcl.sql and edit it.

Change {MLTABLESPACE} to your qualified tablespace, eg. MYDB.MYTS

Change {WLMENV} to the name of a WLM associated with your DB2 instance

2) Start DBISQL and connect to DB2 mainframe.

File->Run your copy of syncd2m_jcl.sql.

3) From the %SQLANY%\MobiLink\setup directory, FTP to your mainframe, running the following commands after you connect:

bin

hash

cd xmit

quote site recfm=fb lrecl=80

quote site cyl

put d2mload.xmit

put d2mdbrm.xmit

quit

The two XMIT files on the mainframe are now:

USERID.XMIT.D2MLOAD.XMIT

USERID.XMIT.D2MDBRM.XMIT

where 'USERID' is the username you gave when connecting via FTP.

4) Open a terminal session and run the following commands from the

ISPF Command Shell:

RECEIVE INDATASET('USERID.XMIT.D2MLOAD.XMIT')

RECEIVE INDATASET('USERID.XMIT.D2MDBRM.XMIT')

The output is:

USERID.ML.LOADLIB

USERID.ML.DBRMLIB

5) Copy d2mrelod.jcl and edit it.

Change USERID to your mainframe userid.

Change DSNDB0T to your DB2 DSN.

6) Run your copy of d2mrelod.jcl

7) Copy d2mbdpk.jcl and edit it.

Change USERID to your mainframe userid.

Change DB0T to your DB2 SSID.

8) Run your copy of d2mbdpk.jcl

The MobiLink schema should now be ready to use.

548580 Synchronizing a UNIQUEIDENTIFIER field in a remote database to Oracle via MobiLink would have resulted in a 32 character UUID, followed by a NULL character and three other characters (typically also NULL). When sending GUIDs to Oracle, MobiLink was removing the hyphens to match the GUIDs generated by the SYS_GUID() function in Oracle, but was not trimming the ODBC bind length to account for the hyphen removal, thus resulting in 4 extra bytes in the string representation of the UUID in Oracle. These four extra characters have now been removed.
548619 When using the Foreign Key wizard to create a foreign key, or the Foreign Key Change Settings dialog to drop and re-create a foreign key with new settings, then the "Allows null" setting chosen would have been reversed. That is, if to allow nulls was chosen, then the foreign key would have been created to prohibit nulls, and vise versa. This has now been corrected.
548625 When the -z command line option was used, or when request level logging was enabled, the server could have generated thousands of message of the form:

"Internal warning: <x> dispatch took <y> seconds"

where x is an object name and y is a number. This would have affected the Windows platform only, and not necessarily on all Windows machines. This has now been fixed.

A workaround is turn off the -z option or request level logging.

548626 If a table had a trigger defined that made an external environment call and many connections attempted to access the table at the same time, forcing table locks and simultaneous external environment calls, then there was a chance the server would have hung. This problem has now been fixed.
548627 Remote TCP connection attempts to servers running on Unix systems with IPv6 enabled, may have failed with the error "Connection error: An error occurred during the TCPIP connection attempt." This was only likely to happen on machines that were ONLY using IPv6. This has been fixed. As a workaround, the IPv6 address of the server machine can be specified using the HOST parameter.
548710 If recovery was attempted on a database that had grown since the last successful checkpoint had been executed, some pages may have become unavailable for reuse. This has now been fixed.
548716 When the server was started with a command line that specified -xs option (comma-separated list of web protocols) without a port, the server 'Overview' did not show the default port. This has been fixed.
548721 If the CREATE SYNCHRONIZATION PROFILE statement was used to create a synchronization profile with embedded whitespace in the options string, then Sybase Central was not able to parse the string and display the option values on the Synchronization Profile property sheet. This has been fixed.
548724 When using an ASE consolidated database, the MobiLink server with messaging enabled will log deadlock errors, such as the following, when several QAnywhere clients are synchronizing concurrently:

E. 10/07 09:14:13. Error: java.sql.SQLException: [DataDirect][ODBC Sybase Wire Protocol driver][SQL Server]Your server command (family id #0, process id #342) encountered a deadlock situation. Please re-run your command.

These errors happen because ASE uses page-level locking by default. This locking level causes deadlocks with many of the SQL statements executed by MobiLink with QAnywhere, especially as many clients are synchronizing concurrently. This problem can be worked around by executing the following SQL statements on the ASE consolidated database, when the database server is not handling other requests:

alter table ml_qa_repository lock datarows

go

alter table ml_qa_delivery lock datarows

go

alter table ml_qa_notifications lock datarows

go

alter table ml_qa_global_props lock datarows

go

alter table ml_qa_status_history lock datarows

go

alter table ml_qa_repository_props lock datarows

go

alter table ml_qa_repository_staging lock datarows

go

alter table ml_qa_status_staging lock datarows

go

create index ml_qa_delivery_cli on ml_qa_delivery ( client )

go

create index ml_qa_delivery_dld on ml_qa_delivery ( client, syncstatus, status )

go

create index ml_qa_mstage_user on ml_qa_repository_staging ( mluser )

go

create index ml_qa_sstage_user on ml_qa_status_staging ( mluser )

go

These SQL statements change the QAnywhere system tables to use row-level locking, and add some indexes for increased performance.

548833 If a server was very busy, and several connections attempted to start external environments at the same time, and if several of the start external environment requests timed out, then, in very rare cases, the server could eventually have become unresponsive. This problem has now been fixed.
548870 A database could have become corrupted when deleting rows containing long string (or binary) values that were indexed. The server then may have crashed, or failed an assertion, when attempting to read rows from the table at a later time. The server would likely have crashed during full validation of a table corrupted in this manner. This has been fixed. Dropping and re-creating the index should be a valid workaround.
548890 The delivery condition for a destination alias may not have been fully visible on the "Members" tab of the alias' property sheet. The cells in the table have their height and width set explicitly . The code which calculated a row's height looked only at data in the second column, rather than using the data in all three columns. This has been fixed.
548895 Sybase Central could have created a dialog, property sheet or wizard whose window was larger than the screen. This would have made it difficult to work with the window. This has been fixed so that Sybase Central now ensures that dialogs, property sheets and wizards are no longer than the screen.
548941 Statements with a CONTAINS clause, and statements over text index stored procedures (for example, sa_text_index_vocab), could have incorrectly returned no results. This problem affected only MANUAL and AUTO REFRESH text indexes, and only occurred when statements that useed a MANUAL or AUTO REFRESH text index had to be executed simultaneously with a REFRESH statement on the same text index. Alternatively, if the statement was prepared or cached by the server before a REFRESH on the text index occurred, an empty result set could also be returned when the prepared statement or cached plan was used after the REFRESH has completed. This has now been fixed.
548981 The pages allocated for temporary tables was not being recovered after an abnormal shutdown. This has been corrected.
549048 When displaying results as text, the row count was not being displayed under each result set. This has been corrected so that the count will now be displayed, unless the result is returned from a stored procedure.
549052 Scheduled transmission rules defined in the MobiLink server for QAnywhere message transmission, could have behaved unexpectedly in some circumstances. The server would have sent push notifications to clients with waiting messages satisfying the condition of a scheduled rule according to the schedule. However, if a client synchronized with the server for any reason, whether or not as a result of a push notification from a scheduled rule, messages satisfying the condition of a scheduled rule would have been transmitted to the client. Thus, the unexpected behaviour was that messages that satisfied the condition of a scheduled rule in the server could have been transmitted from the server to clients at times differing from the times specified in the schedule. This has been fixed so that the transmission of messages that satisfy the conditions of the scheduled rules from the server to clients is now governed more closely by the schedule specified in those rules.
549085 A heavily-loaded server could have hang while running diagnostic tracing with a high detail level. This has been fixed.
549088 Under rare circumstances, the server could have failed to report the warning "Row has been updated since last time read" (SQLCODE 104), when using a value-sensitive cursor and fetching a row that had been modified since it was last fetched. This has been fixed.
549098 If an application issued an external environment request, and the external environment process crashed for whatever reason at the same time, then there was a chance, although likely rare, that the server would have crashed as well. This problem has now been fixed.
549142 The LIKE operation could have produced incorrect results. The operation did not operate case insensitively, and the first character of a range was not accepted. This problem has now been fixed.
549218 If an application creates a scrollable statement and then scrolls through the result set, calling ResultSet.getRow() will return the correct row number for all rows. Calling ResultSet.getRow() will also return the correct row number when the end of the result set is reached. However, if the application called ResultSet.isLast() while positioned on the last row of the result set and then called ResultSet.getRow(), the row number returned would have been "invalid" or "unknown". This problem has now been fixed.

Note that calling ResultSet.getRow() after calling ResultSet.isLast() while positioned on any row other than the last row would have returned the correct row number.

549235 The external names for the D2 Mainframe stored procedures were supposed to be xxxa for version 10, xxxxb for version 11, and xxxxc for version 12. The changes for Engineering case 545762 incorrectly caused the names to be xxxxW. The scripts sent out as xxxxW will still be okay, as the important thing is that major versions differ in the external names by at least one character, so customers can use multiple versions of MobiLink in the same consolidated. This has now been corrected.
549396 Some arithmetic expressions in procedure statements could have been evaluated with the incorrect result domain. This would have occurred when one of the arguments had one of the following domains { BIT, TINYINT, UNSIGNED SMALLINT, SMALLINT } and the other argument was either one of those domains or INT. The result domain would have been INT. In some cases this could have lead to a different result being returned than expected, for example if an overflow would have occurred in the correct result domain. This problem has been fixed.
549419 If an Open Client application that supports retrieving result sets with a large number of columns attempts to perform an encrypted login, the login would have failed with a protocol error. This problem has now been fixed.
549424 A server running a tracing database could have crashed. This has been fixed.
549431 If a Windows based machine had both 32 and 64 bit client software installed, and an application subsequently attempted to use the iAnwhere JDBC driver, the driver may have thrown the exception UnsatisfiedLinkError indicating that it had attempted to load a dbjodbc11.dll of the wrong bitness. This problem has now been fixed.

Note that switching the order in which the Bin32 and Bin64 directories appear in the path will work around this problem.

549453 When manually unregistering the SQL Anywhere ODBC driver from the command line using "regsvr32 -u dbodbcXX.dll", the unregistration process may have failed and reported error code 0x8000ffff. Note that the failure occurred after the user successfully acknowledged the prompt to allow dbelevate (the "SQL Anywhere elevated operations agent") to run as an administrator. This problem has been fixed.

As a work-around, run "regsvr32 -u dbodbcXX.dll" from a command shell which is already elevated.

549461 When attempting to update data in a proxy table on the "Data" tab in Sybase Central, or by manipulation of the result set in the Interactive SQL utility, the operation would have failed with the error "Feature remove savepoints not implemented." This been fixed.
549466 The "-host" and "-port" command line options were completely ignored when connecting to a SQL Anywhere database. This problem also affected the Console utility (dbconsole) as well. It has now been fixed.

As a workaround, use the "-c" command line option instead.

549518 The Schema Painter Create UltraLite Database Browse dialog was not filtering for database files, but incorrectly filtered by SQL files (*.sql). This has been fixed.
549606 If an ALTER TABLE statement added a column with a user-defined type having a default value, subsequent ALTER's affecting the table could have caused a server crash. This has been fixed.
549622 A server running on a Linux system, may have hung when under heavy I/O load, and a large number of concurrent request tasks (i.e. large -gn value). Specifically, if -gn was larger than 250, then there was a chance a hang may have occurred. This has been fixed. The workaround is reduce the -gn value.
549628 When starting a backup, if any dbspace files had not already been opened by the server (for example, the file was moved), the server could crash. This has been fixed.
549636 When connected to a SQL Anywhere database in Admin mode of the MobiLink plug-in for Sybase Central, any internal tables used for maintaining text indexes would have been displayed under the Tables folder. This has been corrected so that these tables are now excluded, since they are of no use to users when creating table scripts.
549644 When running on Linux systems, a mini core could have been improperly generated under rare circumstances.This has been fixed.
549682 In rare, timing-dependent circumstances, multi-threaded client applications with multiple simultaneous TLS connections could have crashed. This has been fixed.
549800 The SQL Anywhere ODBC driver incorrectly described a column of type NCHAR as SQL_WVARCHAR (-9), instead of SQL_WCHAR (-8), when the odbc_distinguish_char_and_varchar database option was set 'off'. In the following SQL statement, the two columns should be described as SQL_WCHAR and SQL_WVARCHAR respectively.

select cast('abc' as nchar),cast('abc' as nvarchar)

This problem did not affect calls to SQLColumns(), but it did affect calls to SQLDescribeCol(). This problem has been fixed.

The odbc_distinguish_char_and_varchar option is intended for CHAR columns only. It is provided for backwards compatibility with older versions of the SQL Anywhere ODBC driver. For backwards compatibility, the odbc_distinguish_char_and_varchar option is set 'off' by default. When odbc_distinguish_char_and_varchar option is set 'on', the ODBC driver will describe CHAR columns as SQL_CHAR, rather than SQL_VARCHAR.

549829 When using the SQL Anywhere PHP driver, calling the sasql_num_rows() function always returned zero if the function sasql_query() was used with the SASQL_USE_RESULT option, or the function sasql_use_result() was called. According to the documentation, the function sasql_num_rows() is supposed to return an estimate with SASQL_USE_RESULT, and an exact value with SASQL_STORE_RESULT. This has now been fixed.

The workaround is to use the SASQL_STORE_RESULT option or call the function sasql_store_result().

549846 In rare cases, monitoring of a heavily loaded server using the system procedure sa_performance_diagnostics, could have caused a server crash. This has been fixed.
549847 In rare cases, an execution plan using parallelism, and index-only retrieval with a string or numeric column, could have caused a crash or possibly returned a wrong answer. This has been fixed.
549866 The server could have crashed, or failed assertions, when under heavy load if pages were freed. The assertions were most likely to be about unexpected page types or contents. This has now been fixed.
549932 The iAnywhere JDBC driver has supported the PreparedStatement.addBatch() and PreparedStatement.executeBatch() methods for quite some time now, but, these methods were only supported for INSERT statements. These methods will now also be supported for UDATE and DELETE statements, provided the underlying connection is to an SA server. If the underlying connection is to a non-SA server, then these methods will still only be supported for INSERT.
549940 If a transaction log was not completely written out to disk (e.g. during a low disk space scenario), it was possible for the server to crash when trying to apply a partial log operation during recovery. This has been fixed.
549967 A SELECT ... FOR XML ... over an NCHAR value could have caused a string right truncation error to be generated.

For example:

SELECT * from table FOR XML AUTO

where table is defined with an NCHAR column, e.g.:

create table (col1 LONG NVARCHAR);

For the error to have occurred, the byte length of the NCHAR value must have been greater than 32767, and the "string_rtruncation" database option must have been set to "on" (which is the default).

This has been fixed.

549983 If an application executed a query involving both proxy tables and local tables, and the query had IN predicates that contained subqueries involving proxy tables, then there was a chance executing the query would have caused a server crash. This problem has now been fixed.
549999 If an Open Client application supports retrieving result sets with a large number of columns, then attempting to perform a Kerberos login using such an application would have failed with a protocol error. This problem has now been fixed.
550080 In the Sybase Central QAnywhere Plugin, if when connected to a server message store a client was created, and then the view refreshed, the newly created client would not have been displayed. This has been fixed.
550083 Clicking the "Generate/INSERT statement" menu in the "Results" pane could have incorrectly caused the error "An INSERT statement could not be generated. The results are from more than one table or contain only computed columns." This has been fixed.

Note, this problem appeared on the "Data" tab in Sybase Central, and has been fixed as well.

550095 If a query execution plan contained a Group-By Hash operator and one of the aggregates computed was marked as DISTINCT, then the server could have crashed while executing the statement. In order for the crash to occur, specific characteristics needed to be present in the statement. Thishas now been fixed.
550103 Attempting to query a proxy table with a SELECT statement that used the FOR XML RAW clause would have failed with an "invalid expression" error. This problem has now been fixed.
550116 In rare cases, a stored procedure call could have caused a server crash. This has been fixed.
550120 An UltraLite .NET synchronization initiated by the SYNCHRONIZE SQL statement would have hung if no global listener was provided via the DatabaseManager::SetGlobalListener method. The unmanaged code always registered a global sync listener to send sync status messages, but the managed code only created a listener for these messages if the DatabaseManager::SetGlobalListener method was called, which resulted in the hang. Now the unmanaged code now only registers a global sync listener when SetGlobalListener is called.
550159 The ia32-libs package is required to install SQL Anywhere on 64-bit Ubuntu distributions. It is also required to run any 32-bit software on 64-bit Ubuntu distributions.

Futhermore, resolving host names from 32-bit applications will fail on 64-bit Ubuntu installations, unless the package lib32nss-mdns is installed. See:

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=479144

550236 If a query execution plan included parallelism and specific expression types were used, it was possible for memory corruption or assertion failures to occur when the query was executed. The following expression types could have caused the problem:

SORTKEY()

COMPARE()

CONVERT( <date, time, or timestamp>, <string expression> )

In order for the failure to occur, further specific characteristics needed to be present in the string parameters to the above functions. This problem has been fixed.

550246 If an application attempted to create a proxy table to a SQL Anywhere or Micrsoft SQL Server remote server, and the remote table had an XML column, then the server would have returned an undefined data type error. This problem has now been fixed.
550247 The MobiLink Deployment wizard could have crashed with a missing resource exception. This has been fixed.
550252 If an application made a remote procedure call that contained output parameters of type Float, and the remote server for that RPC was using one of the SAJDBC or ASEJDBC classes, then the value of the Float output parameter would always have been 0. This problem has now been fixed.
550260 When using UltraLite .NET, the ULConnection's SyncResult was not updated after doing a synchronization via the SYNCHRONIZE SQL statement. This has been fixed.
550267 If an application set the java_vm_options option, and then attempted to start the Java VM on a Unix system, there was a chance the extra VM options would not have been used when the VM was launched. This problem has now been fixed.

Note that this problem does not exist on Windows platforms.

550362 In a database mirroring system, if the transaction log on the primary server was renamed via a backup, the mirror server could have reported various failed assertions, for example:

100902, 100903: Unable to find table definition for table referenced in transaction log

100904: Failed to redo a database operation

For this problem to have occurred, other connections must have been making changes to the database at the time the log is renamed. The problem seemed to occur more frequently if many old log files were present on the primary server. The copy of the transaction log on the mirror server would have been corrupted as a result of this problem. When the log was renamed, there was a small window during which another connection could force a log page to be sent to the mirror before the mirror was notified that the log was renamed. The transaction log lock is now held across this window.

550379 Sybase Central would have failed to load plugins on start-up when it was run on Korean Windows systems. The wrong codepage was being used to read the .jrp file. This has been fixed.
550416 If an application executed a Java in the database stored procedure, and then subsequently canceled the request, in very rare cases the server may have crashed if the cancel request coincided with the Java request actually finishing. This problem has now been fixed.
550418 The Python module would have sent all "string" host variable data as varchar data. This would have resulted in an unwanted character set conversion when the desired type was binary. This has been fixed.

As well, Python scripts can now pass an instance of sqlanydb.Binary in the variable data list. This will cause the value to be sent as binary data.

550502 There was a small possibility that canceling an HTTP request to a SQLAnywhere service, as the server was shutting down, may have caused the server to crash. This has been fixed.
550503 When running in console mode, if a SQL statement caused a warning, and the "-q" command line option was not used, the Interactive SQL utility would have prompted the user to press ENTER before continuing. This has been corrected so that the warning message is now printed, and the user is not prompted. This was the behavior in version 10.0.1 and earlier.
550506 In order to determine if a stored procedure returns a result set, the iAS Oracle ODBC issues a query to the Oracle database when the DSN option, "Procedure returns results" is checked. However, this query was not in an optimal form and the Oracle server needed to compile it every time before execution. The query has now been rewritten by using host variables, so that the actual SQL statement is always been the same, and the Oracle server can use it from the hash without recompiling it.

To further improve the query, an extra connection parameter, ProcOwner (the long form) or POwner (the short form), has been introduced in the iAS Oracle ODBC driver. This parameter can be given as follows:

-c "uid=...;pwd=...;powner=my_procedure_owner;..."

If this connection parameter is given, the query will be limited to the stored procedures owned by the given owner only. Please note, if not all the stored procedures used in the synchronization have a single owner, this extra connection parameter should not be used.

550525 If a communication error occurred during the last few bytes of the upload, or first few bytes of the download, UltraLiteJ would have assumed that the upload failed and revert the progress for it. In this scenario, MobiLink may have actually accepted the upload and thus its progress offsets would conflict with the client. This has been fixed.
550536 If an application was using Java in the database and the Java VM run out of memory, then the Java VM would have remained alive even though Java in the database requests could no longer be made. The Java VM will now exit in this situation, and new Java in the database requests will now automatically restart a new Java VM.
550555 The server could have crashed when executing the WRITE_CLIENT_FILE() function, or when unloading a table to a client file. This failure was more likely when the data being written was large (on the order of tens of megabytes), and when the server was heavily loaded. This has been fixed.
550669 If a query plan contained a hash-based operator (group-by, distinct, or join) and the plan allowed at least one other operator to consume memory at the same time as the hash-based operator, then the execution plan could have been slower than it should have been. This slowness would also have resulted from high CPU usage. The slow behaviour did not occur if the hash-based operator appeared in a parallel execution plan, but only occurred in specific memory configurations. This slowdown has been fixed.
550676 Attempting to construct a string value longer than the server's maximum string length (2^31-1) would have resulted in silent trucation of string data.

For example, the statement:

select length(repeat('a', 2000000000) || repeat('b', 2000000000))

returns 2147483647 (i.e., 2^31-1) characters, but does not raise a SQL error to indicate the operation failed and truncated the string data. This has been fixed so that SQL Error -1313 MAX_STRING_LENGTH_EXCEEDED will now be generated whenever an operation attempts to construct a string value longer than the server's internal maximum string length.

550687 In very rare circumstances, a server acting as a mirror in a High Availability setup may have spuriously hit assertion 100917 - "Unable to re-read a transaction log page" while shutting down. This has been fixed.
550693 The server could have generated bad query execution plans due to incorrect index statistics. This has now ben corrected.
550694 A string ending with an incomplete multi-byte character may have had extra characters appended to its escaped representation as generated by an UNLOAD TABLE statement. This has been fixed.
550695 Under rare circumstances, the server could have crashed while trying to load trigger definitions from the catalog. The error was likely to have occurred while trying to compile an invalid query. This problem has now been fixed.
550716 If an application updated a proxy table and then queried the TransactionStartTime property, the value returned by the property would not have been properly updated. This problem has now been fixed.
550723 If the Data tab for a table or view was selected, columns were added, modified or removed from the table or view, and the Data tab was selected again, then the column changes would not have been reflected in the Data tab. This has been fixed.
550725 A query with many predicates (original or inferred) was slower than some earlier versions, due to many semantic transformations in the parse tree. This has been fixed.
550729 The user-supplied comment clause provided by the WITH COMMENT clause that may accompany the BACKUP statement was written to the backup.syb log in the database character set, rather than the OS character set. All other information, such as database name is written in OS charset. This has now been fixed.
550803 When using the system procedure xp_sendmail(), if the message body contained a period "." on a line by itself, text following that line would have been removed from the message that was sent. A line containing a single period is the end-of-message marker for the SMTP protocol. When sending a line that begins with a single period, clients must precede it with another period character, which xp_sendmail() was not doing. This has been fixed.
550838 The server was not utilizing 100% of all CPUs with a workload that should have been mostly CPU bound with interleaving I/O. This would likely have occurred on lightly loaded servers. This has been fixed.
550839 Dynamic cache size tuning was not enabled while databases were recovering at server startup. Prior to 9.0.0, dynamic cache size tuning was enabled during recovery. This has now been fixed.
550841 Entity headers and a response body should not have been returned by a web service having explicitly set a 'Not Modified' HTTP status via a call to sa_set_http_header ( '@HttpStatus', '304' ). The following response headers were being returned:

Transfer-Encoding: chunked

Expires: ... GMT

Content-Type:...

As an artifact of the chunked transfer encoding, a response body consisting of a 0 chunk length was returned. This has been corrected so that a response body and the above headers will not be sent by the server when a 304 'Not Modified' HTTP status has been explicitly set.

550956 The Relay Server may have reported the error "Internal error! Session number out of sync." when handling a server response. When this error occurred, further traffic going through the same Relay Server to this particular responding backend server, had an increased chance of failure. This would have reduced the quality of service to the affected Relay ServerS serving the backend server where the problem first arose. The problem also would not have cleared itself until the affected Relay Server was restarted. Traffic going through other Relay Servers in the Relay Server farm, traffic going through the same Relay Server to other backend farms, or traffic going through the same Relay Server to other servers within the same backend farm would not have been affected. This problem has now been fixed.
550957 The Relay Server cannot grow the pre-allocated shared memory dynamically and it is essential that users start up the server with sufficient memory to handle foreseeable peak traffic. As well. there has been no tool for users to determine the amoumt of shared memory Relay Server was using. Now, a snap shot of shared memory usage is reported in the log file whenever the log is archived. That is when rshost.exe -ua is executed, the running Relay Server will log the current shared memory usage, archive and then truncate the log file.
550985 There are documented rules for making Relay Server configuration changes in a Relay Server farm environment. When those rules were violated, a farm of Relay Servers may have resulted in heterogeneous backend farm and server indices on different Relay Servers. When a tcp load-balancer, instead of a http load-balancer, was used to maintain client-RS affinity, client sessions could not survive moving across Relay Servers in such Relay Server farms. This has been fixed by remoings the need to keep the indices in sync across all Relay Servers.
550989 When the Relay Server was relaying normal Afaria traffic, it would have reported the following error and warning:

... <F0B1S0R0> IIS ReadClient error(10054): Connection was forcibly closed by the remote host.

... <F0B1S0R0> Failed reading from client. Aborting this request.

... <F0B1S1R1> Communication warning! Backend server disconnected before finishing response.

These are expected, as Afaria traffic uses false http content-length. The Relay Server will now suppress these messages for Afaria traffic.

550991 Client type information was not available in Relay Server log. Alternatively, users may have been able to derive the client type by looking at the optional user-agent header logging in the Web server's access log. However user-agent headers can be uncontrollable on certain mobile application platforms. Changes have been made which now allows the Relay Server to identify the following 11 types of known clients using a combination of user-agent header and proprietary header:

Afaria

dblsn

DBMLSync

MLClient // All pre-11.0.1 ml clients

MLFileTransfer

MLLightPoll

MLMonitor

UltraLite

UltraLiteJ

QAnywhere

QAnywhereUL

These client types, and the full client information (usually including build and version), will be logged by the Relay Server under verbosity level 1 or higher.

550999 If an error occurred while the Relay Server Outbound Enabler was attempting to renew the up channel, it did not try again. Current client sessions going through the Outbound Enabler would not have survived. This has been fixed so that the Outbound Enabler now attempts again to renew the up channel, in order to preserve active client sessions.
551002 When a backend farm or backend server was disabled, the associated Relay Sserver Outbound Enabler could still have connected to a Relay Server even though further new relay service to that farm or server was blocked. This problem has been fixed.
551003 When a backend server entry was removed from the Relay Server configuration file, and the rshost -u command was applied, the removed backend server should have been disabled, but it was not. This is now fixed.
551112 If a database mirroring server encounters a failed assertion, the desired behaviour is for the server to exit. This allows the mirroring partner server to detect that a failure has occurred and take an appropriate action. After a failed assertion on Windows, the server was exiting in such a way as to cause Windows to display a dialog noting the abnormal exit. This prevented the server from actually exiting until action was taken to clear the dialog, and thus prevented the partner server from being notified. This has been fixed.

In addition to this change, customers should consider configuring dbsupport to ensure that it does not prompt when a failure occurs. For example:

dbsupport -cc autosubmit

or

dbsupport -cc no

A future version of the software may avoid the need to configure dbsupport to prevent prompting in this situation.

551124 Typing completion would have inadvertently added the table's owner name when completing a column name after a table alias in the following places:

1. The column list in a SELECT statement

select C. from customers C

^

2. The WHERE clause in a DELETE statement

delete from customers C where C.

^

3. The SET or WHERE clauses of an UPDATE statement

update Customers C set C.

^

update Customers C set C.City = 'Waterloo' where C.

^

This has been fixed by suppressing adding the owner's name if the inserted text immediately follows a table alias.

551146 When creating or renaming an object, if the name specified was a SQL keyword, Sybase Central could have erroneous issued a warning that the specified name would need to be double-quoted when used in a SQL script. This has been fixed. Now, Sybase Central only issues a warning if the specified name is both a SQL keyword and a SQL reserved word.
551255 In certain circumstances, the server could have crashed, or otherwise failed, when executing mutliple LOAD TABLE statements concurrently when in in-memory no write mode (i.e., the server was started with the "-im nw" option). This failure was far more likely to occur if one or more of the LOAD TABLE statements failed with a SQL Error, as would be the case if the file being loaded from could not be located or opened. There was also a very small window of opportunity where the server could have crashed, or failed an assertion, even if none of the LOAD TABLE statements failed. This has now been fixed.
551259 If a mirror server encountered a failed assertion, the primary server could have hung when the mirror server was stopped. This has been fixed.
551261 Index scans done with a snapshot isolation level could have returned incorrect results if there were concurrent UPDATE and DELETE statements to the underlying table. This has been fixed.
551262 If a cached plan for a MERGE statement was reused, the MERGE statement could have failed to perform the required updates. In particular, this problem could have affected immediate materialized view maintenance, if the view was updated multiple times by the same connection. This has been fixed.
551264 On Windows systems, if msvcr71.dll is not on the path and Java, the Notifier, QAnywhere or SQLPassthrough were being used, then the MobiLink server would have failed to start with an error stating that MSVCR71.DLL could not be loaded. This has been fixed.

A work around is to put msvcr71.dll on the path. It is installed with the JRE.

551297 When unloaded using the Unload utilities external unload (i.e., dbunload -xx or -xi), a table containing binary values could have had the contents of these values truncated. The binary values would typically have to have been longer than approximately 500 bytes for this bug to occur. This has been fixed.

A workaround is to use an internal unload.

551406 A MobiLink server with messaging enabled, using an ASE consolidated database, could have logged errors such as the following when a QAnywhere client synchronizes:

Stored procedure 'ml_qa_upsert_global_prop' not found. Specify owner.objectname or use sp_help to check whether the object exists (sp_help may produce lots of output).

(ODBC State = 42000, Native error code = 2812)

Error: Unable to insert into table 'ml_qa_global_props_client' using upload_insert

This problem may have been as a result of the fix made for Engineering case 546131. That fix involved MobiLink creating this stored procedure at startup if it does not exist. In order for MobiLink to be able to create the stored procedure, the database option "ddl in tran" needed to be true. Therefore, there are two possible workarounds for this problem:

Workaround 1: Set "ddl in tran" to true in the database by executing the following SQL statements on the database, where database_name is the name of the database used as the QAnywhere server message store.

use master

go

sp_dboption database_name, "ddl in tran", true

go

Workaround 2: If workaround 1 is not desirable, execute the following SQL statements on the database to make the changes described in case 546131:

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

drop procedure ml_set_device_address

go

create procedure ml_set_device_address

@device varchar(255),

@medium varchar(255),

@address varchar(255),

@active char(1),

@ignore_tracking char(1),

@source varchar(255)

as

declare @d varchar( 255 )

if @active = 'y' begin

update ml_device_address

set active = 'n'

where address = @address

and medium = @medium

and active = 'y'

and device_name <> @device

end

select @d=device_name from ml_device_address

where device_name = @device and medium = @medium

if @d is null begin

insert into ml_device_address( device_name, medium, address, active, ignore_tracking, source )

values( @device, @medium, @address, @active, @ignore_tracking, @source )

end

else begin

if @source = 'tracking' begin

update ml_device_address

set address = @address,

active = @active,

ignore_tracking = @ignore_tracking,

source = @source

where device_name = @device and medium = @medium and ignore_tracking = 'n'

end

else begin

update ml_device_address

set address = @address,

active = @active,

ignore_tracking = @ignore_tracking,

source = @source

where device_name = @device and medium = @medium

end

end

go

exec sp_procxmode 'ml_set_device_address', 'anymode'

go

create procedure ml_qa_upsert_global_prop

@client varchar(128),

@name varchar(128),

@modifiers integer,

@value varchar(16384)

as

begin

if exists( select 1 from ml_qa_global_props gp

where gp.client = @client and gp.name = @name )

update ml_qa_global_props

set modifiers = @modifiers, value = @value

where client = @client and name = @name

else

insert into ml_qa_global_props (client,name,modifiers,value)

values( @client, @name, @modifiers, @value )

end

go

exec sp_procxmode 'ml_qa_upsert_global_prop', 'anymode'

go

These SQL statements make the changes to the server message store that are done automatically if database option "ddl in tran" is true.

Note, MobiLink system schema changes can only be made in a major release, so these documented workarounds are provided. Later versions contain these fixes.

551433 Calling to the StartServer or WaitForServerShutdown methods when using the Dbmlsync .NET API, would have caused problems for some values of the timeout parameter. If the timeout value was greater than 2147483647, the WaitForServerShutdown method would always have returned DBSC_ERR_TIMED_OUT, and the StartServer method would also have returned DBSC_ERR_TIMED_OUT, unless the call was able to connect to an existing dbmlsync server on the port specified. The calls will now treat values greater than 2147483647 as equivalent to DBSC_INFINITY.
551442 The changes for Engineering case 547228 did not fully eliminate the assertions and other failures that could have occurred when committing deleted rows containing short strings. This has been corrected.
551458 If an application that was connected using jConnect called DatabaseMetaData.getPrimaryKeys() to get the primary key information for a table, the key sequence of the primary key would not have been returned correctly. This problem has now been fixed.
551460 In very rare circumstances the server could have crashed when executing Java, HTTP web procedures, or Remote Data Access RPC calls. This has been fixed.
551562 If an execution plan contained an index-only retrieval scan and the scan had a predicate on a NUMERIC/DECIMAL or short string column, then it was possible for the scan to return the wrong result, omitting rows from the scan that should have been returned. This has been fixed.
551589 The batch file uljdbtserv.cmd did not work when SQL Anywhere was installed in a path that contained spaces. It also relied on environment variables other than SQLANY11. These problems have now been fixed.
551593 When the MobiLink system tables were not present on the consolidated database, the MobiLink server would have displayed the following error on start-up:

[-10076] The MobiLink server was unable to calculate the timestamp precision on the consolidated database using the ml_scripts_modified table. Timestamp precision related warnings will not be generated.

This has been fixed. The following error will now be displayed:

[-10100] The MobiLink system table 'ml_user' is missing or a table column is missing

551602 The file sbgse2.dll was a new file added in a 9.0.2 EBF for the support of FIPS encryption. The EBF installer was incorrectly installing this file only when MobiLink was installed. It was therefore possible to break FIPS encryption by installing an EBF.

For example:

- 9.0.2.GA was installed with Mobilink deselected,

- FIPS is installed, again with Mobilink deselected,

- a 9,0,2 EBF is installed accepting all the defaults.

FIPS gets broken because sbgse2.dll does not get installed.

This has been fixed. The installer now checks if FIPS is installed before copying sbgse2.dll.

551611 If an application had uncommitted data in a local temporary table, and then called a Java, or any other, external environment procedure, there was a chance the server would have crashed if the application subsequently performed a rollback later on after the Java or external environment procedure had completed. This problem has now been fixed.

Note that this problem will not show up if the local temporary table is declared with "on commit preserve rows" or "not transactional".

551615 With Microsoft SQL Server 2005 and higher, the check for the existance of an index on given table did not work with tables under schemas that did not have a corresponding user. This has been fixed.

A workaround is to deploy to file and then modify the SQL file to use the sys.schemas table wherever the sysusers table is currently used, and change the id, uid column references to object_id and schema_id for that table.

551622 The system procedure sa_get_user_status() required the connection calling the procedure to have DBA authority in order to obtain information about users other than the current user. Calling sa_get_user_status() from a procedure owned by a user with DBA authority was not sufficient to return information about other users. This has been fixed. Now, if sa_get_user_status() is called from a procedure owned by a DBA, information about all users will be returned. In addition to an updated server, this fix requires the sa_get_user_status() procedure to be updated.
551686 If a statement contained a work table, and evaluation of the expressions for the work table generated an error (for example, string trunctation or data overflow), then the server could have incorrectly returned an assertion failure error message (assertion 106502) instead of returning the appropriate error code. This assertion failure would have occurred only if expressions in the work table were not nullable. This problem has been fixed.
551690 If a request was made that was larger than the packet size, then, in rare timing dependent cases, the connection could have hung until it was cancelled or dropped. Examples of requests larger than the packet size include executing a statement with long SQL text, or executing a statement with large host parameters. This has now been fixed.
551692 If a query consisted of a non-zero number of UNION DISTINCT operations, followed by a non-zero number UNION ALL operations, the result set could have had twice as many columns as were specified by the query. The leftmost columns would have been correct, while the rightmost extra columns were bogus. The alorithm for creating the selection list for the overall query was flawed, and has now been corrected.
551695 The Table editor would have allowed the removal of all columns from a new table (that is, a table which had yet to be saved to the database) by selecting all columns and then selecting Edit -> Undo, clicking the Undo toolbar button, or typing Ctrl-Z. This has been fixed. Now attempting to remove all columns from a new table causes an error dialog to be displayed.
551700 Column widths in the debugger Details panel were not persistent. This has been fixed so that column widths are saved in user preferences.
551739 When a TCP/IP connection abnormally disconnected from the server (for example due to the DROP CONNECTION statement), there was a chance that a network buffer was leaked. This has been fixed.
551740 If a query contained an outer join and a predicate of that included the concatenation operator (||), then the server could have returned the incorrect answer for the query. In the incorrect case, the outer join was converted to an inner join. This has been fixed.

For example, the following two queries should be equivalent, but the first incorrectly returned no rows:

select R.row_num || 'z' x, string(R.row_num ,'z') y

from dummy D left outer join rowgenerator R on 1=0

where x = 'z'

select R.row_num || 'z' x, string(R.row_num ,'z') y

from dummy D left outer join rowgenerator R on 1=0

where y = 'z'

551747 Deadlocks could have occurred more often than expected at isolation level 3, if more than one transaction attempted to update the same row concurrently. This has been corrected.
551749 Connections that had executed a Java stored procedure would have taken three seconds longer than necessary when attempting to disconnect. Connections that were not used to make Java stored procedure calls are unaffected by this problem. The problem has now been fixed.

Note that this problem was introduced in the changes made for Engineering case 548322.

551750 Executing a Java stored procedure that attempted to fetch resources using getResourceAsStream() or getResource(), would have had the fetch of the resource fail. This problem has now been fixed.

Note that due to differences in compression schemes, it is strongly recommended that jars containing textual resources be created without compression turned on. For jars containing binary resources (ex. movies or images), using a compressed jar will work fine.

551751 Attempting to use the QAnywhere Server to cancel a message in an Ultralite Client Message Store would have failed with a NullPointerException. This problem was more likely to occur when using the Sybase Central plugin to connect to an Ultralite client database and then attempting to cancel a message. This has been fixed.
551752 Calling the system procedure sa_server_messages() could have resulted in the server crashing. This problem would have been rare, requiring a busy server to reproduce. This has been fixed.
551813 Messages printed to the MobiLink server log could have been mangled on systems with non-English character sets. This would have happened most often on errors from QAnywhere or the Notifier. This has now been fixed.
551820 If a PARAMETERS statement was run from an Interactive SQL window a dialog was displayed prompting for the values. If the PARAMETERS statement was then rerun, the prompt was not displayed, and the previously values were used. This behavior was not intentional and has been corrected. Now, the prompt is displayed each and every time the PARAMETER statement is executed.
551839 Host variables used as function arguments did not work correctly. This has now been fixed.
551850 Attempting to execute a badly formed UPDATE statement of the form "update test X set X..a = 2", where test is a proxy table, would very likely have lead to a server crash. This problem has now been fixed.
551858 If a remote server used character length semantics for a string column (e.g. a SQLAnywhere remote with an nchar column, or an UltraLiteJ remote with a char column), and the column on the remote database was smaller than the column in the consolidated database, then the MobiLink server could have failed to report the truncation. The server was already counting the number of characters in the the column coming out the consolidated, but it wasn't checking the length against the domain info given by the remote. This has now been fixed
551944 The fix for Engineering case 549983 introduced a problem such that two simultaneous remote data access requests from two separate connections could have caused the server to crash. This problem has now been fixed.
551953 It was possible for the MobiLink client .NET API to have thrown an unhandled socket exception when attempting to disconnect from a socket that had been forcibly closed by the operating system. This exception is now caught and handled within the dbmlsync .NET API.
551956 When the TargetType parameter to the ODBC function SQLGetData() is SQL_C_DEFAULT, the driver selects the default C data type based on the SQL data type of the source.  

For NCHAR types, the Microsoft ODBC driver selects a SQL_C_CHAR binding. Microsoft acknowledges in its knowledgebase article http://support.microsoft.com/default.aspx/kb/293659 that to do so is an error, but states that it does this to support older legacy applications. The SQL Anywhere ODBC driver selected a SQL_C_WCHAR binding. This caused problems with applications like Microsoft Access, that expected the Microsoft ODBC behaviour. This problem in Access could have been seen when setting up a linked table using the SQL Anywhere ODC driver to a database table containing NCHAR, NVARCHAR, or LONG NVARCHAR column types. The resulting table columns were displayed with "#deleted" values. To conform to the Microsoft ODBC driver behaviour, the SQL Anywhere ODBC driver has been changed. Now,爐he SQL Anywhere ODBC driver selects a SQL_C_CHAR binding for NCHAR, NVARCHAR, and LONG NVARCHAR (including NTEXT) types when the "MS Applications ( Keys In SQLStatistics)" checkbox is selected in the ODBC Administrator configuration dialog for SQL Anywhere datasources. This option can also be specified as the connection parameter "KeysInSQLStatistics=YES" in a SQL Anywhere ODBC driver connection string. This change affects any ODBC function, like SQLBindCol, SQLBindParameter, and SQLGetData, where SQL_C_DEFAULT can be specified.

551967 Attempting to view a column value which contained image data would have crashed Sybase Central. This has been fixed.
551978 If an application called ResultSet.getString() on a uniqueidentifier column, the iAnywhere JDBC driver would have incorrectly returned a string of binary bytes. This problem has now been fixed and the iAnywhere JDBC driver now returns a properly formatted GUID string.
552057 In general, applications that use Java in the database support install the classes and jars to be used into the database. Doing so allows the database to be moved from one machine to another, or from one platform to another. The other benefit of installing classes and jars into the database is that the SQL Anywhere class loader can then be used to fetch the classes and resources from the database allowing each connection that is using Java in the database support to have its own instance of these classes and its own copy of static variables within these classes. In VERY rare cases, it is beneficial to have the system class loader load a class instead of the SQL Anywhere class loader. The only real reason for having the system class loader load the class is that statics within classes loaded by the system class loader can then be shared across all connections using Java in the database support. There are of course many reasons why the system class loader should not be used:

1) since statics are shared across all connections, there is an issue with the security of data

2) mixing classes loaded by the SA class loader and the system class loader can lead to the VM throwing IllegalAccess and ClassCast exceptions

3) there is now the danger that the system class loader will get used for loading classes that should actually have been loaded by the SA class loader

Because of these potentially serious problems, it has always been STRONGLY recommended that all classes and jars to be used for Java in the database support be explicitly installed within the database. However, for those rare cases where the class really needs to be loaded by the system class loader, the server's classpath argument (-cp) can be used to add directories and jars to the classpath that the server builds for launching the JVM. Unfortunately, as of version 10.0, the server's classpath argument was being ignored when launching the JVM. This problem has now been fixed and the server's classpath argument is now properly appended to the classpath the server builds when launching the VM. Again, the use of the server's classpath argument is STRONGLY discouraged; instead, it is STRONGLY recommended that all classes and jars to be used for Java in the database support be installed explicitly in the database.

552066 If a SQL Anywhere database used with Replication Server was unloaded using the Unload utility (dbunload), some tables and procedures used by Replication Server would not have been included. This has been fixed.
552067 The server could have become deadlocked if the 'wait after end' option was used when performing a backup. For the deadlock to have occurred, there must have been an active transaction when the backup attempted to truncate the log, and then a checkpoint and commit must have occurred, in that order on separate connections, between the time that the backup attempted to truncate the log and when the backup noticed that there was an active transaction (a very short time interval). This has now been corrected.

A work around in most cases is to omit the 'wait after end' option, as it is often not required.

552077 The server could have become deadlocked when frequently executing UPDATE ststements on the same set of rows. This would only have occurred if the table being updated had a non-unique index defined. This has now been fixed.
552094 When AES_FIPS or AES256_FIPS database encryption was used for a long enough period of time, the server would have eventually failed to allocate memory, due to a small memory leak. This included use of the encrypt() or hash() functions with FIPS algorithms, or if the -fips server command line option was used. There was also a leak on the client side of approximately 1k per TLS connection attempted. All of these leaks have now been fixed.
552144 The SQL script file passed to UltraLite抯 ALTER DATABASE SCHEMA FROM FILE statement and used by the SQL Passthrough feature, must have been in a specific format. Each SQL statement must have ended with 慻o� on a line by itself.

For example:

ALTER TABLE T RENAME R

go

This format was assumed and if 'go' was not found on a line by itself, nothing would have been executed, but no error would have been generated. Now, the error SQLE_SCRIPT_MISSING_DELIMITER (-1315) is generated if 'go' is not found on a line by itself. Moreover, with this change the file may end with 'go<eof>' (previously, it had to be 'go\n'). Note that even single line script files must end with the 揼o� separator. This includes SQL Passthrough scripts. So the following is a correct example of adding a SQL Passthrough script:

call ml_add_passthrough_script( 憇cript1�, null, null, 慉LTER TABLE T RENAME R\ngo� )

If an error occurs and only part of the file is applied, the database must be shutdown and restarted (and the schema will as it was prior to the ALTER DATABASE statement).

552171 When applying a series of renamed transaction logs to the server, or when the MobiLink client (dbmlsync) reads a series of renamed transaction logs, the error "Missing transaction log(s) after file ..." cound have been reported. The offsets reported in the error message (between the end of one log and the start of the next) can be subtracted to determine the size of gap; this apparent gap would have been exactly 24 bytes. With a 4K pagesize, this would have happened to roughly 1 out of every 4000 renamed logs; it is less likely with a larger pagesize. It was only a problem when the affected log was the last one before the online (currently active) log. This has been fixed.

Note, despite the reported gap, no data was actually lost from the logs. The data can be recovered by using dbtran to generate a .SQL script and then applying this to the database.

552186 Truncating a table with deleted rows could have caused the server to fail assertion 201501 - "Page for requested record not a table page or record not present on page". For this to have occurred, the table must have contained string data shorter than a page, and one of those short values (which had to have come from one of the deleted rows) must have been held active in an open cursor or variable. This has now been fixed.
552189 The changes for Engineering case 545904 introduced a problem where the server could have issued a variety of assertions, including "200610: Attempting to normalize a non-continued row" while concurrently updating rows containing blobs. For this to have occurred, the string values must have been less than a page size, but larger than the column's inline amount. This has been fixed.
552196 Quoted SQL identifiers that were part of the Interactive SQL utility's command line were inadvertently stripped of their quotes before being passed to the database. This has been fixed.

For example, the following command line was not being handled correctly:

dbisql -c "uid=dba;pwd=sql" CREATE TABLE "123TEST" ( c INT )

552210 After selecting the Network tab in the ODBC Administrator (ODBCAD32) for ASA 9.0.2 data sources, it was not possible to configure RSA_TLS_FIPS. The RSA_TLS option would have been selected and the suboptions string would have been garbled. This problem has been fixed.
552226 The cast of a LONGVARCHAR value to VARCHAR value could have caused a crash. This has now been fixed.
552293 Execution of a query with a left outer join could have caused database corruption when the null-supplying table supplied a null row, and that table was subsequently updated. This has now been corrected.
552302 If the HTTP listener was enabled, the server may have crashed on shutdown. There is no risk of data corruption. This has been fixed.
552304 If the OS and database character sets were not the same, localized server window messages pertaining to checkpoints and events could have been mangled. This has been fixed.
552311 If a SELECT statement contained a procedure call with arguments that contained column references to other tables in the from clause, the server may have return a "Column not found" error for these column references. This would have occurred when the query rewrite process can remove tables from the query.

For example:

create table T1( a int primary key )

create table T2( a int primary key, c int )

create procedure P1 ( u int ) begin select a from T1 where a = u; end

select dt.* from T1 left outer join T2 on T1.a = T2.a, lateral( P1(T2.c) ) dt

For every row in T1 the left outer join can return at most one row because of the join on primary keys. So the query rewrite removed the left outer join and the table T2 from the query which caused a "Column T2.c not found" error for the procedure argument. This has been fixed.

552312 The changes made for Engineering case 541615 introduced a problem where attempting to create a proxy table to a DB2 or Microsoft SQL Server table using Sybase Central could have failed with a strange conversion error, instead of creating the proxy table. This problem has now been corrected.
552314 If an application called the ResultSet.getBlob() method, and if fetching the blob should have thrown a valid SQLException, then quite often the exception would not have been thrown and an empty blob would have instead been returned to the client. This problem has now been fixed.
552319 If an operation (INSERT, UPDATE or DELETE) occurred on a remote database, and the operation belonged to one or more publications that were subscribed to by different users, then the operation would have been uploaded once for each user that had subscribed to a publication containing it. This has been fixed so that the operation will now only be uploaded once.

For example, suppose two publication P1 and P2 are defined that both contain a table T1. Two ML users, U1 and U2 are defined on the remote. U1 is subscribed to P1, and U2 is subscribed to P2. A row is inserted into T1 in an operation I'll call O.

The old behaviour would have been to upload O when the subscription between U1 and P1 was synchronized, then upload it again when the subscription between U2 and P2 was synchronized. The new behaviour is that O will be uploaded for the subscription that is synchronized first (U1-P1 or U2-P2), and not uploaded when the other subscription is synchronized.

552321 If an error or warning occurred when commiting, the MobiLink server would not have reported any error or warning messages. If it was an error, the MobiLink server would have just failed the synchronization request without giving any reasons. This problem is fixed.
552323 The conversion of NUMERIC values to or from VARCHAR was incorrect. This has now been corrected. UltraLiteJ should now produce the same conversions as does UltraLite.
552355 The table editor could have crashed when the Compressed column heading was selected. It could also have crashed when opening, if the last time a column heading was selected in the Table editor, the Compressed column was selected. This has been fixed.
552454 The Import Wizard would have shown an empty combobox of databases when importing from an Oracle database. Clicking on the combobox would have caused the Interactive SQL utility to report a NullPointerException. This has been fixed. The combobox is now hidden in this case.
552465 If an application attempted to migrate tables containing unique constraints, either by using sa_migrate or Sybase Central, then there was a possibility that the migration would have failed because some of the foreign keys could not have been created. This problem has now been fixed, but only if the remote data access class involved is one of SAODBC or SAJDBC.
552473 When attempting to export results to an Oracle database using the iAnywhere Oracle ODBC driver, the Export wizard would have inappropriately prompted for a database name and then reported a NullPointerException when the "Next" button was clicked. This has been fixed. The "Database" combobox is no longer displayed in this case.
552488 The server could have failed assertion 201138 - "Attempt to allocate page ... beyond end of dbspace". For the assertion to have occurred, the database must have had an additional (non-primary) dbspace, and an operation such as TRUNCATE, DROP TABLE, DROP INDEX, etc must have been performed on an object in that dbspace. This has now been fixed.
552493 When rebuilding databases on Windows Mobile devices, the Unload utility (dbunload) could have failed with the error "Table SYSPROCP not found". If the unload was successful, reloading the new database by running the resulting reload.sql file with the Script Execution utility (dbrunsql) could have failed with the error "Cursor not open" when executing a call statement. Both of these problem have now been corrected.
552501 The Export wizard could have crashed when exporting to ASE, using the ASE Organic ODBC driver, into a new table. This has been fixed.
552503 SQL statements which don't contain Transact-SQL OUTER JOINs, OUTER JOINs, KEY JOINs, or NATURAL JOINs will now skip some of the optimizations implemented in the server, which will improve the DESCRIBE time.
552587 If an application created a remote server and then accessed that remote server using a different case than the one specified on the CREATE SERVER statement, the server would have incorrectly opened additional connections to the remote server. For example, suppose the application executed the following CREATE SERVER statement:

CREATE SERVER MyServer CLASS ...

and then created two proxy tables as follows:

CREATE EXISTING TABLE table1 AT 'myserver...'

CREATE EXISTING TABLE table2 AT 'MYserver...'

If the application now queried "table1", the remote data access layer would have correctly established a connection to the remote and returned the requested data. If the application then queried "table2", the data access layer should reuse the connection previously established to the remote, but the server instead would have created a new connection to the remote. This problem has now been fixed.

552591 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, rather than giving the "Host variables may not be used within a batch" error message. This problem has now been fixed.
552595 In exceptionally rare conditions, typically while the server was under heavy load or processing many backups on many databases simultaneously, a backup could hang and the CPU usage of the server could have gone to 100%. This has been fixed.

A workaround is to use a higher value on the -gn command line switch.

552620 After the server had started a database that required recovery, it could have crashed when running a cleaner. This has now been fixed.
552627 If the language DLL was missing, the utilities createcert, viewcert, createkey, and mlfiletransfer would all have continued to execute, but would not have output any string resources. These utilities will now fail in this case with an appropriate error message.

Also, the usage text for createcert and viewcert will now display the options in alphabetical order.

552638 The Relay server may have run out of shared memory when under high load. This was more likely to have occurred when the Relay Server was hosting a large number of backend servers. This has been fixed by leaving spare room in shared memory according to the startup configuration. The user specified amount of shared memory is left for relaying traffic.
552644 Up channel recovery upon the Relay Server Outbound Enabler detecting a communication error may have sometimes failed on some active sessions. This has been corrected.

Note, normal up channel renewal was not affected by this fix.

552648 Renaming a transaction log via a BACKUP statement could have failed as a result of a transient sharing violation error on Windows. The error may have been caused by a virus scanner or other software accessing the file as it is being renamed. This has been fixed.
552649 The Relay Server Outbound Enabler would have held on to a backend connections until the application timed out, when the request/response processing of the associated session had failed. Tnis has been fixed so that the Relay Server will now forward a command to the Outbound Enabler to explicitly disconnect the faulty session.
552653 Some situations, similar to those fixed for Engineering case 545904, allowed the server to hang while concurrently updating rows containing blobs. This has been fixed.
552658 The Relay Server may have crashed under stress and the Outbound Enabler may not have been able to recover connections to it, even when IIS replenished the service with a new worker. These potential crashes have been fixed.
552672 The combination of the HAVING clause containing a single-row subquery, and a temporary table referenced in the ORDER BY and/or GROUP BY clauses, could have produced incorrect results or a crash. This has now been fixed.
552716 The Relay Server's throughput may have been reduced significantly when under load with Afaria traffic. This was caused by Afaria traffic not terminating persistent http sessions properly, when using Connection: close header. IIS did not release its resources until the connection's Keep-Alive timeout. Per-process resource limits cap the throughput when enough sessions are waiting to be timed out by IIS. This has been fixed bay having the Relay Server terminate Keep-Alive connections regardless of the presence of the Connection: close header, in the case where content-length is violated. Since Afaria traffic always violates content-length on the last request, in both of their POST and GET sessions, IIS will no longer hold on to keep-alive resources when the last request of their session exit the web server extension. This change also stops the Relay Server from complaining about content-length violations, if the client identifies itself as an Afaria client. The I/O error only is being suppressed.

A user workaround is to increase web garden size (i.e. adding more worker processes) of the application pool associated with the rs_client.dll web server extension. This user workaround is inefficient though, letting limited resources to be held idle for unnecessary amount of time. With this fix, per process resource caps are no longer a reason for increasing the web garden size.

552720 When the Relay Server was under heavy load, with verbosity set to 4 or higher, it may have occassionally reported an OE_BACKEND_DISCONNECTED error. This was due to another session having taken over the request id. This was not harmful to known client types, as all known clients initiates their own disconnect. However, this may have caused the Relay Server to hold onto resource for the worker waiting for that packet. This would have timeout in 100 sec, and was transparent to the client. This has been fixed, the client worker is no longer held up until it ties out, as the faulty discarding has being removed.
552729 Under rare circumstances, the server could have crashed, or failed an assertion, if it needed to grow a database file quickly by a large amount (e.g., as a result of inserting a very large blob). Furthermore, there was a possibility for corruption affecting the data that triggered the file growth. This has now been fixed.
552739 For an ADO/OLE DB application, if the CursorLocation was adUseClient and the size of the query was larger than 4K characters, then the SQL Anywhere OLE DB provider would have crashed. Also, if the client query contained single quotes (apostrophes), then the query metadata would not have been obtained. Both of these problems have now been fixed.
552760 If the default port number was already in use (eg. by another server), the server may have failed to start TCP/IP, rather than choosing a different port number. If the -z command line option was used, the error "TCP/IP link, function bind, error code 10013" would have been displayed on the server console. This would only have happened on Windows Server 2003, and has now been fixed.
552767 A QAnywhere application could have reported a deadlock error from the SQL Anywhere server, if the application was attempting to retrieve a message from the message store while the QAnywhere agent was synchronizing. This has now been fixed.
552771 Using a poorly formed connection string ("-c" command line option) could have caused the Interactive SQL utility (dbisql) to crash on startup. This has been fixed.
552779 When executing an "OUTPUT" statement, dbisqlc would have executed the current query two extra times. Some output file formats require a particular date format to be used and in version 10.0.0 and later, changing the date format option on a connection does not affect cursors that are already open. To work around this change of behaviour, dbisqlc closed the current query, changed the DATE_FORMAT option to the format required by the output file format and then reopened the query to write the result set to the output file. It then closed the query again, restored the old DATE_FORMAT option, and reopened the query. Thus the query was executed a total of three times.

Note that the Java-based dbisql has always executed the query a total of two times (once for the original query, once for the OUTPUT statement). That behaviour is not addressed by this change.

The problem in dbisqlc has been corrected in most cases by avoiding the close/set-date-format/reopen operations if the requested output file format does not have a mandated date format or if the current date format matches the date format required by the output file format. If the specified output file format requires a specific date format and it is different from the current date format, the query will still be executed two extra times. To avoid executing the query multiple times, set the DATE_FORMAT option for the current connection as listed below before executing the query for the first time:

Output file format DATE_FORMAT setting

DBASEII MM/DD/YY

DBASEIII YYYMMDD

FOXPRO YYYMMDD

WATFILE YYYY/MM/DD

Output file formats not listed above do not have a mandated date format and dbisqlc will not close/reopen the current query to execute the OUTPUT statement.

552888 If an application called PreparedStatement.setBlob(), and if the underlying java.sql.Blob implementation misbehaved, then there was a chance that the iAnywhere JDBC driver would have failed when the PreparedStatement was executed. Workarounds have now been implemented in the iAnywhere JDBC driver to attempt to handle the Blob implementation misbehaviour.
552921 When assigning the result of a bitwise NOT operation on a value of type Bit, TinyInt or Unsigned SmallInt to the same type, the error "Value -1 out of range for destination" was returned. This was due to these types being converted to an Integer before applying the operation. This has been fixed
552931 When executing a batch command which returned multiple resultsets, if fetching the second or subsequent resultset caused an error, no exception was returned to the application. This problem has now been fixed.
553064 If an application accidentally defined a Remote Data Access server that used the SAJDBC class and connected back to the same database as the local user connection, then an error indicating that the server definition was circular was not displayed. This problem is now fixed and an error message is now displayed. Note that this problem does not affect SAODBC class remote servers.
553103 During the optimization process, the optimizer creates and maintains order properties for all physical operators placed in the access plans generated as part of the search space generation process. These order properties are used to decide if SORT physical operators are needed, for example to satisfy an ORDER BY clause at the root of the access plan. Maintaining and tracking order properties are expensive operations as described in [1]. For performance reasons, the optimizer will now build and maintain only those order properties needed by an interesting order property, such as the one imposed by an ORDER BY clause. This change does not affect in anyway the performance of the order optimization, it just makes the optimization process more efficient.

[1]揇atabase System with Methodology for Generalized Order Optimization擬atthew Young-Lai, Anisoara Nica, 2007 US Patent 7,359,922.

553289 If a query execution plan contained a SORT operator in a parallel execution strategy, it was possible for the server to crash while processing the request. This type of plan can be used during a CREATE INDEX statement. The crash was timing and load dependent and would have predominantly affected servers processing requests from multiple connections. This problem has been fixed.
553300 Network error messages in the MobiLink monitor, the SA Monitor, the Notifier or the QAnywhere server could have been garbled on non-English machines. This has been fixed.
553309 A cursors position in a result set was not always correct after changes were made (i.e. inserts, updates and deletes). This has been corrected.
553310 An application that uses the iAnywhere JDBC driver must now have the jodbc.jar built with the same build number as the dbjodbc and mljodbc shared objects. If the jar and shared objects are out of sync, a SQLException will be thrown at connect time and the connection will be refused.
553312 If the MobiLink Monitor's Details Table, Utilization Graph, or Overview panes were disabled, when reenabled they might not be visible, under some circumstances, or a program error may have occurred. Also, resizing a pane or the application, could have produced unexpected results. These problems have been fixed. Now when resizing the application, only the Chart pane size is changed; and when resizing a pane, only the panes on either side of the splitter bar are affected.
553387 The following fixes have been made to support MobiLink in DB2 Mainframe Compatibility Mode

- The ml_pt_script table did not have an explicit ROWID column. This was required for the CLOB column. Some D2M deployments support an implicit ROWID, and some do not, inluding compatibility mode. Fixed by adding an explicit ROWID column.

- The SQL used for JCL-based CREATE PROCEDURE statements included the SQL body of the stored procedure. This worked most of the time, but not under compatibility mode. Now, the external-procedure form of CREATE PROCEDURE is used, which doesn't include the body (which of course isn't necessary because it is in the *.xmit files).

- The SQL used to create the SQL-based D2M stored procedures didn't escape single quotes. This wasn't noticed because D2M treats most unquoted text between single quotes as a string, so it just worked. Single quotes are now escaped in the procedure body, inside the call to DSNTPSMP.

- The D2M ml_add_pt_script stored procedure didn't work under compatibility mode, for several reasons:

1) it had a VARCHAR( 256 ) parameter (the flags for the SQL Passthrough script) that caused conversion problems inside the procedure when run under compatibility mode. This parameter has been changed to VARCHAR( 255 ).

2) it referenced a Unicode string, which isn't supported under compatibility mode. This has been fixed by replacing it with a non-Unicode string.

3) it used a form of the SIGNAL statement that isn't supported under compatibility mode. This has been corrected.

553469 Backups done where the checkpoint log was copied (WITH CHECKPOINT LOG COPY), did not mark the dbspaces as active. This allowed databases that possibly required recovery to be started in read-only mode. If this was done, it could have lead to assertion failures as the server tried to flush pages that had been dirtied. This has been fixed.
553482 Prior to executing the "begin_connection_autocommit" script, the MobiLink server will temporarily turn on auto-commit on the ODBC connection, due to restrictions with some consolidated databases. On ASE consolidated databases, this will generate a warning (SQL_SUCCESS_WITH_INFO) in the ODBC driver:

"AutoCommit option has changed to true. All pending statements on this transaction (if any) are committed."

This warning was being generated whether the begin_connection_autocommit script was defined or was absent. This has been fixed. The server will now only turn on auto-commit when the script is defined and will only execute the script if it is defined. If the script is defined, it is still possible to see this warning logged in the MobiLink server console log. This is expected behaviour.

553491 The Apache redirector module would have crashed when used with the Sun built Apache web server that currently ships with the Solaris operating system. This has been fixed.
553520 If a database server acting as mirror lost its connections to the arbiter and primary server, the database being mirrored did not restart and wait for the connections to be re-established. This has been fixed.
553561 The OUTPUT statement would have unnecessarily re-executed the query which generated the last result set, if the Interactive SQL utility was run in windowed mode and the result set had not already been displayed. This has been fixed so that the statement is not re-executed in this case.
553600 A query of the form: "SELECT * FROM table-expression" could have been misdiagnosed as a syntax error when there was exactly one column in the select list. This has now been fixed.
553687 Tables storing CHAR and NCHAR values longer than approximately 126 bytes, may have used two bytes of storage more per value than was necessary. If the column's PREFIX value was smaller than 126, then strings longer than the specified prefix value would have used two extra unnecessary bytes as well. This has been fixed.

Note, rebuilding the database after applying this fix will remove all of the unneeded bytes.

553689 If a query contained at least two predicates on the same column T.A with the following conditions:

1. there existed an equality predicate T.A = expression, with a selectivity estimation of selectivity1, and the expression was not a constant

2. there existed a range predicate on T.A with constant bounds (for example, T.A > 111), with a selectivity estimation of selectivity2

3. there existed an index on column T.A, where the column T.A may have been the only column in the index, or the index had a prefix of other columns before T.A, all of which are equated with constants in the query: e.g., the index idx<C1, C2, A> is defined, and the predicates 'T.C1 = 10 and T.C2 = 20 and T.A > 111 and T.A = R.X' are used in the query.

4. The selectivity estimation of the range predicate was much larger then the selectivity estimation of the equality predicate, i.e., selectivity1 << selectivity2

Such a query had an overestimated number of rows, and the execution plan chosen by the optimizer may have been inefficient. This has been fixed.

553693 If a server had many external environment requests active, and several of these external environment requests were subsequently cancelled at the same time, there was a chance the server would have crashed. There was a very small window where a cancel request could have been ignored by the external connection. This has now been fixed.
553719 The Unload utility (dbunload) was not able to rebuild a pre-Version 10 database if the variable SATMP was unset, but variable ASTMP was set. Dbunload would have returned a connection error in this case. This has been fixed.

Note, as workaround the SATMP variable can be set.

553720 If an HTTP/1.1 client made a request on a keep-alive connection, and then after receiving the response, did not send another full request over the connection for one minute, the connection would have timed out and sent a 408 Request Timeout status message. This is consistent with the HTTP/1.1 specification, but if the HTTP client was Apache, it would have been confused by the error message. The behaviour has been changed so that the error status code is suppressed (and the connection is simply closed) if all of the following are true:

- A complete request and response have previously been sent on the connection

- No data has been received on the connection since the most recent response was sent

- The keep-alive timeout has expired

553748 When using the iAS ODBC driver for Oracle, calling SQLColAttribute with an attribute code of SQL_DESC_TYPE_NAME would not have returned the type names of columns. This has now been fixed.
553752 If a CREATE SYNCHRONIZATION SUBSCRIPTION statement was executed with an OPTION clause that gets the option value from a variable (e.g. OPTION sv=@Var) and the variable was set to null, then the server may have crashed, or inserted a random option value into the catalogs. This has been fixed so that the server now returns a sql error (SQLSTATE_BAD_SYNC_OPTION_VALUE) "Synchronization option '%1' contains semi-colon, equal sign, curly brace, or is null".
553759 The "Replace All" action in the syntax highlighting editor could have corrupted the text if the action was restricted to the selected text. This has been fixed.
553775 While synchronizing a large download using "direct TCP" on BlackBerry devices (not through the BES), the synchronization would have failed with "... Max connections opened".

This has been fixed.

Note: For IDENT BlackBerry devices, the default is Direct TCP connections. For non-IDENT BlackBerry devices, the default is BES connections. Using the URL suffix ";deviceside=false" forces Direct TCP connections.

553897 If an application used one of the C_ODBC32, C_ODBC64, C_ESQL32 or C_ESQL64 external environments and specified .dll or .so in the external name clause, then the external environment would have incorrectly added an extra .dll or .so to the shared object name and then give an error. This problem has now been fixed.

Note that a workaround is to not specify the .dll or .so in the external name clause.

553901 On rare occasions, a mirror server could have crashed, or failed an assertion on shutdown, particularly if the arbiter and primary were being shut down at the same time. On Linux, the problem could have also manifest itself as a hang in libc's __lll_mutex_lock_wait. This has been fixed.
553911 The Service utility (dbsvc) included with versions 10.0.0 and up, did not recognize services created with pre-10.0 versions of dbsvc. This has been fixed. Old services can now be viewed, deleted, started and stopped. If an old service is created using the patched dbsvc, the new service will no longer be visible by pre-10.0 dbsvc.
554067 A Windows application using the iAnywhere JDBC driver, could have hung if all of the following conditions were true:

1) the application installed a message handler connections

2) the application shared a connection amongst multiple threads

3) one of the threads executed a statement that returned an asynchronous message

4) at the same time another thread used the same connection and called createStatement(), prepareStatement() or prepareCall(), before the asynchronous message was returned from the server

This problem has now been fixed.

554080 Applications which used the EncryptedPassword connection parameter could have crashed when attempting to connect. This has been fixed.
554106 The ODBC driver would have issued an HY090 error if any of the connection string parameter to SQLConnect were specified as a combination of a NULL pointer and SQL_NTS. This situation is permitted by the ODBC specification. As a result, this restriction has now been removed.
554242 The Validation utility (dbvalid) was not validating materialized views by default. The utility was generating a list of tables to validate that only included base tables. This has been corrected incorporate initialized materialized views in either the fresh or stale state.
554265 If more than one message store connection was open, and the connections were broken from outside of Sybase Central, attempting to then disconnect from within Sybase Central could have caused Sybase Central to crash. This has been fixed.
554271 If the MobiLink client (dbmlsync) was run against a database with a character set that was different from the operating system's character set, then errors generated by the database would have been garbled when displayed in the dbmlsync log. This has been corrected so that these messages will now be displayed correctly.
554273 If a database mirroring system was running in asynchronous mode and experienced a very high rate of transaction log page updates, the mirror server could have crashed or reported a failed assertion. This has been fixed.
554369 Using the property sheet to rename a primary key, foreign key or unique constraint, could have caused Sybase Central to crash. This has been fixed.
554373 Sybase Central would have crashed if the server was shut down while the Performance Monitor tab was displayed. This has been fixed.
554383 In the MobiLink Monitor Details Table, if the optional column "connection_retries", or optional columns starting with "download_" or "sync_", were enabled, the column labels for these columns would have been misaligned by one or two columns. A similar problem would have occurred when exporting to a database, where that data was exported to incorrect columns in the database tables. Both of these problems have been fixed.
554708 Attempting to install an EBF against an Evaluation, Developer, Web or Runtime edition of 11.0.0 would have failed with a missing directory table entry error. This has been fixed in version 11.0.1.
554764 When running on heavily loaded Unix systems, applications using a large number of connections may have crashed. This has been fixed.
554779 It was not possible to retrieve index or key information through calls to the SAConnection.GetSchem method. The SAConnection.GetSchema method was using a view which did not include the primary keys. This problem has been fixed.
554781 In a database mirroring system, if the mirror server was starting while the transaction log on the primary server was being renamed, the primary server could have crashed. This has been fixed.
554782 For particular forms of statements, it was possible for the server to incorrectly return the following error when trying to open a cursor:

The optimizer was unable to construct a valid access plan [-727] ['WI010']

In order for the problem to have occurred, the statement must have referred to only a single table and used only columns satisfied by an index. Further, snapshot isolation must have been enabled. This has now been fixed.

As a workaround, the statement hint "options(force optimization)" can be included to avoid the error.

554854 If the evaluation of certain expressions resulted in an error code, it was possible for memory to be leaked. When this memory leak occured in an INSERT, UPDATE, DELETE, or SELECT statement, the memory leak would have been transient. In the case of stored procedures and triggers, this leak could have lead to a slow increase in the size of the main heap. In that case, less memory would have been available for caching file pages, or other purposes, until a reboot. This problem has been fixed.
554876 If an application established an HTTP session from the PHP external environment, then the server may have hung or crashed. This problem has now been fixed.
554880 If the Server Monitor was used to monitor several servers, and one or more of those servers were down, then it was likely that the server monitor requests would have started to time out, and cause communication errors within the browser. This problem has now been fixed.
554886 Some particular constructions of the LIST aggregate could have caused the server to crash while processing the statement containing the LIST aggregate. In order for the crash to occur, the LIST must have contained an ORDER BY clause. This has been fixed.
554889 Simple SELECT, UPDATE, and DELETE statements with a specific predicate structure could have caused the server to crash. A workaround to avoid the crash is to set the option Max_plans_cached=0. This problem has been fixed.
554998 When ADO asks for the schema information related to a query (e.g., SELECT * FROM Products), it requests a number of attributes like "IDNAME", "TABLENAME", etc. The SQL Anywhere OLE DB provider returns a DBID for schema rowset columns that matches Microsoft's declared DBID. For example, the schema column DBCOLUMN_IDNAME is defined in Microsoft's OLEDB.H header file as follows:

extern const OLEDBDECLSPEC DBID DBCOLUMN_IDNAME = {DBCIDGUID, DBKIND_GUID_PROPID, (LPOLESTR)2};

This is what the OLE DB provider would return as the DBID for the "IDNAME" column. This strategy works for many ADO methods that request schema information. However, the following example illustrates a problem with the ADO RecordSet Save() method.

Dim strConnection = "PROVIDER=SAOLEDB;ServerName=demo;DatabaseName=demo;USERID=DBA;PASSWORD=sql"

Dim strSQLStatement = "SELECT ID, Name FROM Products"

Dim strXMLLocation = "c:\\temp\\products.xml"

Dim objADOConnection As New ADODB.Connection

Dim objADORecordSet As New ADODB.Recordset

objADOConnection.Open(strConnection)

objADORecordSet.Open(strSQLStatement, objADOConnection, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)

If Not (objADORecordSet.EOF And objADORecordSet.BOF) Then

objADORecordSet.MoveFirst()

objADORecordSet.Save(strXMLLocation, ADODB.PersistFormatEnum.adPersistXML)

End If

For reasons unknown, the ADO RecordSet Save() method returns the error "catastrophic failure".

The SQL Anywhere OLE DB provider has been changed to return only the "property ID" part of the DBID. This is equivalent to returning the following structure.

extern const OLEDBDECLSPEC DBID DBCOLUMN_IDNAME = {NULL, DBKIND_PROPID, (LPOLESTR)2};

This permits the ADO RecordSet Save() method to complete successfully.

555007 Sybase Central could have crashed when attempting to change the visible columns (via View -> Choose Columns...), or column widths, while the MobiLink 11 node was selected in the tree. In addition, when in Model mode, the list of columns under the View -> Sort menu would sometimes not have contained all the displayed columns when the MobiLink 11 node was selected in the tree. Both of these issues have now been fixed.
555024 When the server was run on Unix systems, the PHP external environment would have reported all errors, warnings, etc, even when PHP was explicitly configured not to do so. This has been fixed.
555033 Providing the function ML_GET_SERVER_NOTIFICATION() with long MobiLink stream parameters (longer than 128 characters) could have caused the results of the function call to be incorrect. This has been fixed so that the poll will now work with arbitrary length

stream parameters

555034 Push notifications over a SYNC gateway may have stopped working after the listener reconnected. The was timing dependent and was more likely to have occurred when there was a proxy, a redirector, or a relay server being used between the listener and the SYNC gateway of the MobiLink server. The listener may have reconnected to the SYNC gateway when the IP address of the remote device had been changed, when the QAAgent registered with the listener on startup, or a communication error had occurred. This problem has now been fixed.
555054 Sybase Central was allowing the modification or deletion of the QAnyNotifier_client notifier. Doing so could have caused problems with QAnywhere. To prevent any problems, it is now only possible to modify the notifier's description, polling interval and event SQL.
555056 A new feature was added to the Interactive SQL utility (dbisql) in version 11.0.0, which automatically released database locks after executing queries when it was run as a windowed application. This feature was on by default, and was undocumented. It unfortunately also broke the locking tutorial, and introduced an unexpected behavioral change. The behavioral change has now been rectified. Automatic lock releasing is now OFF by default. This is a behavioral change from 11.0.0, but it makes dbisql consistent with older versions. Also, users can now control the automatic lock releasing feature explicitly. The "Result Set" tab in the "Options" window contains a new checkbox called "Automatically release locks". Check this if dbisql is to release locks after executing a statement.
555059 When using Microsoft's AppVerifier (a development/debugging tool), the tool may have reported various errors, such as the use of an invalid handle in client libraries (ODBC, dblib, etc) or in the database server. These problems have been fixed and the database server and client libraries now run cleanly under AppVerifier.

Note, without the use of AppVerifier it would have been extremely rare for users to encounter these problems.

555181 In very rare circumstances, cancelling a DDL statement could have caused the server to crash, cause corruption or possibly other erratic behaviour. The cancel would need to have been detected after a DDL completed successfully, but before the DDL was auto-committed, which is a very tiny window. Whether or not a problem would be caused by a cancel at that time, and if so, the nature of that problem also depended on the DDL itself and what the connection did afterwards. This problem has been fixed.
555185 It was not possible to retrieve the columns for a primary key index using the method SAConnection.GetSchema. The SAConnection.GetSchema method was using a view which did not include the columns for primary keys. This problem has been fixed.
555208 Interactive SQL utility options, which were set from a .SQL file while it was running as a console application, would not have been saved. This has been corrected so that now they are.
555211 Sybase Central would have crashed when attempting to use the Column property sheet to rename a column that had not yet been saved to the database. This has been fixed.
555228 Under some circumstances the server could have crashed when a table was dropped. This has bben fixed.
555236 SQLColumns returns a result set including COLUMN_SIZE, BUFFER_LENGTH, and CHAR_OCTET_LENGTH among other things. For a column typed NCHAR(30) or NVARCHAR(30), the COLUMN_SIZE was returned as 30 and the BUFFER_LENGTH as 30. The BUFFER_LENGTH should have been 60. For CHAR_OCTET_LENGTH, NULL is returned, whereas it should have ben 60 as well.

From the ODBC standand:

"COLUMN_SIZE": For character types, this is the length in characters of the data; The defined or maximum column size in characters of the column or parameter (as contained in the SQL_DESC_LENGTH descriptor field). For example, the column size of a single-byte character column defined as CHAR(10) is 10.

"BUFFER_LENGTH": The defined or the maximum (for variable type) length of the column in bytes. This is the same value as the descriptor field SQL_DESC_OCTET_LENGTH.

"CHAR_OCTET_LENGTH": The maximum length in bytes of a character or binary data type column. For all other data types, this column returns a NULL.

These problems have been fixed.

555245 Under rare circumstances, selecting a table type in the Query Editor could have caused an internal error. This problem was highly timing-dependent. This has been fixed.
555250 The name of the current user did not appear in the list of owners in the Import Wizard on the page that asks "Where do you want to save the data" if the current user does not own any database objects. Now, the user name always appears in the list of owners.
555390 If the option PUBLIC.quoted_identifier was set to 'off', executing the reload script produced by Unload utility (dbunload) would have failed when attempting to set subsequent options. This has been fixed.
555444 When synchronizing using HTTPS through an HTTP proxy, MobiLink clients would have incorrectly appended the url_suffix to the HTTP CONNECT request, which could have caused some proxies and servers to fail. This has been fixed.
555450 Column names that are greater than 29 bytes in length were being truncated. This has been fixed.
555453 If an encryption key was specified, it was not possible to create a server message store when running on Linux systems. This has been fixed.
555616 he MobiLink server was allocating more memory than necessary and thus wasting memory. The amount wasted was approximately equal to 13% of the -cm option value. This has now been fixed.
555617 When calling SQLForeignKeys(), the result set was not returned in the correct sort order. According to the ODBC standard, the sort orders are:

1. If the foreign keys associated with a primary key are requested, the result set is ordered by FKTABLE_CAT, FKTABLE_SCHEM, FKTABLE_NAME, and KEY_SEQ.

2. If the primary keys associated with a foreign key are requested, the result set is ordered by PKTABLE_CAT, PKTABLE_SCHEM, PKTABLE_NAME, and KEY_SEQ.

This has now been corrected.

555621 When displaying a graphical plan without statistics, estimates for internal nodes were not included. This has been fixed.
555622 Lower bounds are imposed on selectivity and cardinality estimates during the optimization process. These bounds are meant to be greater than 0, but less than one row of the result set of a physical operator, and are set to be a very small percentage, which in the case of very big tables, or big intermediate result sets (> 10,000,000 rows), were actually bigger than one row. This has been fixed.
555623 The following fixes have been made to graphical plan descriptions:

1. Range expressions of a partial index scan are now always printed as "low expression <[=] column name <[=] high expression [ASC |DESC]". The low and high expressions can be NULL value if the real fence post was set to NULL value; they can be '*' if the real fence post is not set (this is actually an open range partial index scan).

2. Selectivity estimations are now printed with 9 decimal digits.

555626 If the server used a cached plan for a query with an IN list predicate which contained a variable, and used the IN list predicate to return the rows in descending order

using a table index, then the result set may have had fewer rows than it should have.

For example, if table T1 had an index on column col, then the following query may have return too few rows:

select * from T1 where col in ( 5, Var1 ) order by a desc;

This has been fixed.

555765 There was a very small chance that the server would have returned a thread deadlock error on an external environment call in situations where no actual thread deadlock occurred. For this problem to have occurred, a previous valid thread deadlock must have been returned by the server, resulting from a large number of connections attempting to issue an external environment call at the same time. This problem has now been fixed.
555769 If an application, or set of applications, constantly connected, made a Java call, and then subsequently disconnected, then there was a chance the Java VM used by the server would have thrown an 'out of memory' exception. This problem has been fixed.
555789 In very rare circumstances, the server could have reported assertion failures 101428 or 101424 "Writing page with no position in file." when running with AWE enabled and under periods of heavy activity or high server stress. This has been fixed.
555808 For a query containing a WITH RECURSIVE table, if the estimated cardinality of the recursive table after the first iteration was lower than 2 rows, the optimizer would not have set the alternative JNL operator if an alternative index existed. The resulting execution plans may have been very inefficient, depending of the number of rows on the right hand side of the JoinHashRecursive operator. This has been fixed.

Example:

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 Ancestor

Ancestor(child) has exactly one row after the first query block is computed. Computing the second query block is very efficient if the executed plan is "Ancestor<seq> JNL R2<row_num>". However, because the optimizer did not set up the JNL operator, the inefficient plan "Ancestor<seq> JH* R2<seq>" was executed.

555809 The Server Message Store would have been unable to connect to the store after creating it, if an encryption password was specified. This has been fixed.
555827 When using the Create Table wizard to create a new table, or the Table Duplicate dialog to duplicate a table, the default_value for the dbspace option was ignored; that is, the dbspace selection in the wizard or dialog would have always defaulted to "system". This has been corrected so that it now defaults to the value of the default_dbspace option, if the option value corresponds to the name of a dbspace.
555936 An attempt to drop a database whose page size was larger than the server's page size, using the 'DROP DATABASE' statement, would have resulted in the error "An attempt to delete database 'database file' failed", leaving the reason for the failure unclear. The server will now raise the more specific error, "Page size too big: 'database file'".
555940 Simple statements of the form "select TOP n from T order by T.X [asc|desc]" may have had a very inefficient query access plan. This has been fixed.
555959 If an application executed a remote query that involved a User Defined Function, and the call to the function passed in column references as parameters, there was a chance the server would have crashed when the server decided to run the query in partial passthru mode. This problem has now been fixed.
555961 The server's log window could have contained garbage characters if a language DLL was used that was older than the server. There was also a very small chance that the server could have crashed in this case. This has been fixed.
555963 If an NCHAR, NVARCHAR, or LONG NVARCHAR parameter was bound as SQL_C_DEFAULT, the binding would have defaulted to SQL_C_CHAR, instead of SQL_C_WCHAR. This has been corrected.
555965 In rare and timing dependent circumstances, a request could have hung on a heavily loaded server. This has only been observed when the request was a cached statement with host variables containing data larger than the communication buffer size, after a schema change, set option or drop variable. This has been fixed.

Note, setting the max_client_statements_cached database option to 0 may workaround this issue.

555973 Tested and reproduced with:

Product: SQL Anywhere 11.0.0.1526 with UltraliteJ feature

OS: Windows XP SP2

BlackBerry Java Development Environment: JDE 4.1.0.185 and MDS 4.1.0.22 20050927

Remote Database for ASA Proxy tables: Oracle 10g

After synchronizing UltraliteJ app tables with Consolidate ASA database, BlackBerry application exits with java.lang.OutOfMemoryError. When confirming BlackBerry memory, there's actually 17M free.

555976 With the release of SA 10.0.0, identifiers were restricted such that they could no longer include double quotes or backslashes. Unfortunately, if an application wants to create an externlogin to a remote SQL server using secure logins, then the remote login needs to be specified in the form user\domain. As a result, the remote login specification of a create externlogin statement has now been extended to accept both identifiers and strings. Note that no catalog changes have been made; hence, the remote login specification is still restricted to 128 bytes.
555978 Executing a "CREATE PROCEDURE ... LANGUAGE ..." or a "START EXTERNAL ENVIRONMENT ..." statement when connected to a case sensitive database, would have failed with an "external environment not found" error, if the external environment name was not specified in lower-case. This problem has now been fixed.
555985 The MobiLink server would given an error message that the classpath was too long if the Java classpath given in the -sl java option was longer than about 3000 characters. This restriction has been removed.
555989 It was possible that the last download timestamp for one or more publications would not have been updated after receiving and applying the download from the server. This has been fixed.
556111 In specific situations, it was possible for the server to crash when processing a statement that contained a LIST aggregate function with an ORDER BY specification inside of a subquery. This has been fixed.
556121 Changes made as part of the fix for Engineering case 554242, introduced a problem where running the Validation utility (dbvalid) with a user who did not have DBA authority, or execute permission on the dbo.sa_materialized_view_info procedure, would have failed

with the error message:

Permission denied: you do not have permission to execute the procedure

"sa_materialized_view_info"

This has been fixed.

556123 Under certain circumstances, use of the system procedure sa_row_generator() could have caused the server to crash, or enter an infinite loop. This problem has been fixed.

Note that the result set of the stored procedure will be empty when the specified values are not appropriate.

556127 If the server could not find a transaction log file when attempting to start a database that needed recovery, it would have returned the misleading error "Specified database not found" (SQLCODE -83). This has been fixed. The error now returned in this situation is "Cannot open transaction log file -- <filename>" (SQLCODE -106).
556132 The name of a .SQL file to run can be specified on the command line without an explicit READ keyword. If the .SQL file requires parameters, it is now possible to give the parameters following the file name without the READ keyword. For example,

DBISQL x.sql [parm1]

is equivalent to

DBISQL READ x.sql [parm1]

556146 The optimizer may have generated a query access plan that used intra-query parallelism that could not be executed in parallel, by underestimating the execution cost. This has been corrected by adjusting the costing of such enumerated plans during the optimization process so that it is closer to what the server does during query execution. This was done by using a new property of the partial access plans - "partitioned during execution". Hence, less than optimal parallel plans are more likely to be estimated as such by the optimizer.
556154 A server participating in mirroring system may have crashed if a mirroring connection timed out due to liveness, or, on very rare occasions, if a connection attempt to the partner or arbiter failed. This has been fixed.
556162 If concurrent connections made DDL changes to the same global temporary table, then it was possible for the server to fail to reapply the resulting transaction log using the "-a" server command line option. Normal recovery should have been performed properly. This has been fixed so that the server will now be able to apply the transaction logs without error. Existing transaction logs will work correctly as expected.
556163 If the sa_validate() procedure was called without arguments, materialized views were not being validated. This has been fixed.

Note, for changes to the sa_validate() procedure to take effect, the database will need to be rebuilt with a server containing this fix.

556175 Queries with unflattenable subqueries may have returned incorrect results, or crashed the server. The following conditions must have been true for the incorrect result set to have been, or for the server to have crashed:

- the query contained a subquery predicate (e.g., EXISTS() , NOT EXISTS()) which could not be flattened in the main query block, which was used in the cost-based optimization by the SA Optimizer

- the subquery predicate was correlated to at least two tables from the main query block

- a correlation expression was equated to a constant in the main query block

For example:

select *

from f, i, fi

where f.fund_id = 1 <==== f.fund_id is a correlation expression for the NOT EXISTS() predicate and it is equated to a constant

and f.fund_id = fi.fund_id

and fi.investor_id=i.investor_id

and i.investor_id not in ( select ib.investor_id <=== i.investor_id is a correlation expression for the NOT EXISTS() predicate

from ba , ib

where f.fund_id = ba.fund_id <==== f.fund_id is a correlation expression for the NOT EXISTS() predicate

and ib.bank_account_id=ba.account_id

)

556292 Output host variables for SQL statements would not have been updated when using the UltraLite engine if a warning had been triggered. This has been fixed.
556296 In rare cases, creating a procedure could have caused a server crash. This has been fixed.
556326 Applications running on Unix systems, and using the iAS ODBC driver for Oracle, could have received an "Out of memory" error when calling SQLTables, SQLColumns, SQLPrimaryKeys, SQLForeignKeys, SQLProcedureColumns, SQLProcedures, or SQLStatistics. This problem has now been fixed.
556340 Applications fetching data from an NCHAR column that was greater than 32767 bytes, using the Perl, Python, PHP, or Ruby drivers, may have crashed. This has been fixed.
556447 When editing a DATE value in the "Results" pane of the Interactive SQL utility (dbisql), or on the "Data" tab in the SQL Anywhere plug-in for Sybase Central, if the date was typed in, rather than using the date chooser dialog, the value entered was ignored when the value was updated. This has been corrected so that the value entered is now sent to the database.
556453 Newly added or modified DATE values on the "Data" tab for a table, could have been displayed using the canonical YYYY-MM-DD format rather than that specified in the "Date_format" database option. This has been fixed.
556516 If an application was using one of the JDBC based Remote Data Access classes (i.e. either SAJDBC or ASEJDBC), and the remote login failed, then there was a possibility that the error reported would not contain the actual reason for the failed login. When jConnect throws a JZ00L SQLException, the actual reason for the failed login is usually contained in a chained SQLException, rather than the main SQLException. The server will now report the error on the chained exception instead of reporting the topmost SQLException.
556527 A new network protocol option 'http_buffer_responses' has been added. When set to 'On', HTTP packets from MobiLink will be completely streamed into an intermediary buffer before being processed, instead of processing the bytes as they are read off the wire.

Syntax: http_buffer_responses = { off | on }

Protocols: HTTP, HTTPS

Default: off

Because of the extra memory overhead required, this feature should only be used to work-around HTTP sync stability issues. In particular, the ActiveSync proxy server for Windows Mobile devices will throw away any data that is not read within 15 seconds after the server has closed its side of the connection. Because MobiLink clients process the download as they receive it from MobiLink, there is a chance they will fail to finish reading an HTTP packet within the allotted 15 seconds causing synchronization to fail with stream error code STREAM_ERROR_READ, when synchronizing using non-persistent HTTP. By specifiying 'http_buffer_responses=On', the client will read each HTTP packet in its entirety into a buffer before processing any of it, thereby beating the 15 second timeout.

556539 UltraLite and UltraLiteJ were not able to recognize a correlation name following the table name in UPDATE and DELETE statements. Without this ability, WHERE clauses that require the correlation name to disambiguate column references could not be written.

For example:

update Employee E

set salary = salary * 1.05

where EXISTS( SELECT 1 FROM Sales S HAVING E.Sales > Avg( S.sales) GROUP by S.dept_no )

The syntax for UPDATE and DELETE statements was been expanded to correct this.

556552 In certain cases, rebuilding a pre-10.0 database to version 10.0 or later may have failed due to an incorrectly charset-converted database file-name. The SQL error that was reported was:

"Cannot access file '<incorrectly-converted-file-name>.db' -- The filename, directory name, or volume label syntax is incorrect."

This issue only occurred when using an OS charset whose label was not used prior to version 10.0.0, such as "GBK". Additionally, for this issue to have occurred, the database must have used a different charset than the OS charset - specifically, the filename must contain characters that require translation to be valid in the database charset. This has been fixed.

556724 Using the "Request Logging" page of a server's property sheet to attempt to enable request level logging for all connections to a database, or for a single connection, would have caused Sybase Central to crash. This has been fixed.
556754 When deleting a row containing a CHAR or BINARY (i.e. string) column, there were some circumstances where the space on the table page for the string might not have been reclaimed. This problem only occurred with string data shorter than approximately one page in size, and the string must have been held active, either in a cursor or in a variable, then inserted into a new row, and then deleted while still held active. The database cleaner must also run after commiting the delete, but before closing the cursor or value holding the string. This has been fixed.
556757 If a JDBC application called ResultSetMetaData.getColumnTypeName() with an invalid column index, then the application may have crashed. This problem has been fixed.
556771 On Windows platforms other than Windows Vista, performance counters for the server were not visible in the performance monitor when the server was started as a service. The code to check if the process was still alive was using the wrong permissions to open the process. This has been corrected.
556778 The return values of the built-in functions user_id() and suser_id() may have incorrectly been described as not nullable even if the function argument was not nullable. This may have lead to the assertion error 106901 "Expression value unexpectedly NULL in write". This has been fixed so that the functions' results are always described as nullable.
556913 SQL Anywhere JSON services incorrectly encoded the apostophe (') within a string to a double backslash (\\), the backslash was not encoded. This has been fixed so that a backslash is now correctly encoded to a double backslash, and the apostrophe is not encoded.
556925 The fix for Engineering case 553312, may have prevented restarting the MobiLink Monitor after disabling the Details Table, Utilization Graph, or Overview panes. This has been fixed. Pane sizes are now also properly restored when re-enabling after restarting.
556960 The "Join Type" value on the "Join" page of the Query Editor could not be reset to its initial empty value. This has been corrected so that now it can.
556974 Using a QAnywhere JMS connector to communicate with a Websphere MQ JMS provider could have resulted in the following two issues:

- The MobiLink server could have reported the error "The property name 'JMSTimestamp' is reserved and cannot be set." when Sending a message from a QAnywhere application to the JMS connector.

- The ReplyToAddress of a QAnywhere message originating from a Websphere JMS provider could have contained a malformed queue name.

Both of these issues have been corrected.

556989 The server may have crashed, or returned incorrect data, on GET DATA requests if the cursor reused a query access plan for a simple SELECT statement. This has been fixed
557107 When locking a table in exclusive mode (i.e. LOCK TABLE {tablename} IN EXCLUSIVE MODE), the server would first obtain a read lock on the table, increasing the likelihood of deadlocks occurring. This has now been fixed.
557311 A connection established by an HTTP request to an HTTP listener port, would have leaked a small amount of memory when the connection was closed. This has been fixed.

Connections to HTTPS listener ports were not affected by this problem.

557328 If an application logged on the database using a userid with multibyte characters, and the application subsequently made a Java in the database call, then there was a chance the Java VM would have failed to start if this was the first time a Java call was made since the database was started. This problem has now been fixed.

The workaround is to log in using a userid without non-multibyte characters and execute a START JAVA statement. Once the Java VM is successfully started, making Java calls using userids with multibyte characters will work fine.

557332 If a string column used a UCA collation with accent or case sensitivity, and the column appeared in an index with order DESC, then the server could have returned incorrect answers for LIKE predicates on the column. Problematic LIKE predicates started with a prefix of non-wildcard characters, such as the following: "T.x LIKE '01234%'". This has been fixed.
557363 By default (or with SET 'HTTP(CH=auto)') an SA HTTP client procedure would have sent its HTTP request using chunk mode transfer encoding when posting data that was greater than 2048 bytes. If the server rejected the request with a 501 "Not Implemented" or 505 "HTTP Version Not Supported" status, the procedure would have automatically re-issued the request without using chunk transfer encoding. When in default mode, an SA client would not have used chunk transfer encoding when posting data that was less than 2048 bytes in length. This has now been changed so that the data byte limit is now 8196 bytes, from 2048 bytes, and the status 411 "Length Required" has been added to its criteria for re-issuing the request without using chunk mode transfer encoding.
557465 In exceptionally rare circumstances, the server may have crashed during the rewrite phase of optimization, when attempting to execute a very large and complex SELECT statement. This may have occurred when the server was close to running ouf of stack space, or was low on cache. The problem was seen with queries containing UNION, EXCEPT, INTERSECT, and deeply nested subselects. This has been fixed. The server will now correctly return the error "-890: Statement size or complexity exceeds server limits".
557507 If the statement:

set option public.login_mode='Standard,Integrated'

was executed, it would have been recorded in the transaction log as

set option public.login_mode='Standard'

This could have affected mirroring environments where the login_mode was set correctly on the primary server, but not on the mirror. This has been fixed.

557518 An extremely busy server with multiple CPUs, maxed on processing queries, could have crashed in rare conditions. This has been fixed.
557527 A SQL Anywhere HTTP client function was only able to return a varchar data type. Support has now been added to the HTTP client so that it can also be defined to return binary, varbinary or long binary data types, i.e.:

CREATE function client() RETURNS long binary URL 'http://localhost/image_service/...' TYPE 'HTTP:GET'

Note, this change only extends the semantic meaning of the returned value, declaring the return data type as binary does not change the behaviour at the transport level. Textual data may still be converted to the database character set based on Content-Type HTTP header or SOAP envelope encoding criteria.

557677 The server automatically collects and updates column statistics during the execution of DML statements. Earlier versions of the server did the auto collection only when a single DML statement affected more than a threshold number of rows, in order to reduce the overhead of collecting statistics on a relative basis. Support was added in release 10.0.1 to also do some automatic statistics collection on all DML statements, including those affecting as few as a single row. A subtle defect in this new support caused the server to miss some opportunities for automatic statistics collection for UPDATE statements, as opposed to the INSERT and DELETE statements. This has now been corrected.
557679 When running a 64-bit version of perfmon, the Adaptive Server Anywhere or SQL Anywhere counters would not have been displayed if the 64-bit version of the counters library (dbctrsX.dll) was registered and the 32-bit version was not. This has been corrected.

Note, both versions of the counters library are registered during a normal product installation so it is unlikely that users would encounter this problem.

557685 UltraLite and UltraLiteJ erroneously accepted DEFAULT TIMESTAMP as a clause in the CREATE TABLE and ALTER TABLE statements, and treated the clause as if DEFAULT CURRENT TIMESTAMP had been entered. Attempts to execute CREATE TABLE or ALTER TABLE statements with this clause will now result in a syntax error.
557686 The MobiLink server could not start in a server farm if the consolidated databases were running on DB2 or DB2 mainframe database servers, and the MobiLink server in the farm was requested to start with a liveness setting from the ml_property table (the ml_property table in the consolidated database contained a liveness value for the server farm). This problem has now been fixed.
557767 If an ALTER TABLE statement needed to rewrite the rows of the table (for example, if a 17th nullable column is added) and the table contained long or compressed strings, the operation could have taken much longer than necessary and the database may have end up with many more free pages than before the ALTER. The number of extra pages would have been approximately the number of pages in the table in question. This has been fixed.
557794 Under certain circumstances, it is possible that database indexes could have become corrupt. This has been fixed.
557802 In rare circumstances, server CPU usage could have been unnecessarily high. The problem would only have occurred with certain layouts of memory within a heap, and when certain heap operations were being performed on the heap. This problem has been fixed.
557808 The changes for Engineering case 552171 introduced a problem where occasionally the use of the db_backup() function on a running database server could have returned a corrupt transaction log page. This would have caused the MobiLink client (dbmlsync) to fail the synchronization, or the Backup utility (dbbackup) to fail to recover the newly backed-up file. In both cases, this was a transient failure, and the sync/backup could simply have been restarted when the error was detected. This has now been fixed.
557812 If an UPDATE or DELETE statement used a keyset cursor and the statement executed at isolation level 0 or 1, it was possible for the statement to update or delete rows improperly. This could have occurred if another transaction deleted a row identified by the UPDATE or DELETE statement and committed, and then another transaction inserted a row and committed before the UPDATE or DELETE statement had finished processing. In this case, the newly inserted row would have been improperly processed by the UPDATE or DELETE statement. DELETE and UPDATE statements use a keyset cursor if there is a possibility that an updated row could be re-processed by the statement (for example if an UPDATE modifies a column in the index scan, or if a join is present). This has now been fixed.

A workaround would be to use a higher isolation level (2 or 3).

557818 When running on Windows CE devices, an UltraLite database could have failed to start, reporting SQLE_DYNAMIC_MEMORY_EXHAUSTED, when the default cache size chosen for the database was too large. The default cache size that is now chosen takes the physical memory available in to consideration, and limits our size accordingly. The cache size allocated on Windows was also somewhat reduced. Specifying the cache_size connection parameter with an appropriate value will work around this problem.
557829 If the MobiLink Listener (dblsn) was started with the -q option ("run in minimized window"), and it was then restored by double clicking on the icon from the today screen, the "shutdown" button did not appear. This has been fixed.
557837 Incorrect results were possible when there was both an equality condition and another redundant conjunctive expression such as:

x >= 2 AND x = 3

with only a column name on one side of the comparison. That column name must also have been the first column in an index. This has now been fixed.

557849 The Interactive SQL utility (dbisql), or the SQL Anywhere plug-in for Sybase Central, could have crashed when opening the "Connect" dialog when run with JRE 1.6.0 update 11. This has been fixed.

Note, SQL Anywhere 11.0.0 and 11.0.1 ship with JRE 1.6.0 update 4, which does not suffer from this problem.

557870 If a table containing columns declared as compressed strings was used in a parallel plan that contained a parallel hash join, it was possible, in rare circumstances, for the server to have crashed. This has been fixed.
557924 If a connection string containing the "verify=no" TCP option was passed to the Interactive SQL utility (dbisql) and the -jconnect option was used, the dbisql would have crashed. This has now been fixed.
557938 It was possible for a deadlock to have occurred in the database server if the QAnywhere server was performing delete rules and archiving messages at the same time. Furthermore, the exception thrown by this deadlock exposed another problem in the QAnywhere server error handling where it was possible for a transaction to be left open, causing other connections to block due to unreleased table locks. Both of these issues have been fixed.
557953 The Index Consultant may have caused the server to crash following query optimization. The class of queries for which this could happen was characterized by the existence of a comparison or EXISTS() subquery predicate in one of the query blocks.

For example:

select * from sales_order_items soi1, sales_order_items soi2

where soi1.id = soi2.id

AND

soi1.quantity <

(

select avg( quantity ) from sales_order_items soi3

where soi3.prod_id = soi1.prod_id

);

This has now been fixed.

557955 Calls the function SQLGetInfo() would have incorrectly returned SQL_CB_NULL for SQL_CONCAT_NULL_BEHAVIOR. As the result of the server concatenating a string and NULL is the string, calls to SQLGetInfo() have now been corrected to return SQL_CB_NON_NULL for SQL_CONCAT_NULL_BEHAVIOR.
557960 The UltraLite Unload utility (ulunload), when run with the -s option "Unload schema as SQL statements", would have generated invalid unique constraints when they contained more than one column. This has been fixed.
557973 If an index already existed on a particular set of columns, attempting to create a unique index over the same set of columns might have failed, if the index contained deleted, but not cleaned, entries. This has been fixed.

Note, a work around would be to call sa_clean_database manually before creating the index.

558001 Under certain circumstances, the server could have computed, and displayed, incorrect statistics, For example, the selectivity may have been reported as infinite. This were likely no side effects on query performance related to this defect, which has now been corrected.
558084 A new tailoring of the Japanese UCA collation has been added which defines primary-level differences between all Hiragana letters, as well as primary-level differences between all Katakana letters. This new tailoring will permit correct equality comparisons of Hiragana and Katakana letters in case-insensitive collations. The new collation is used by specifying a collation of UCA(locale=ja;sorttype=direct;...).
558085 The MobiLink server now supports two new command options,

-vR show the remote ID in each logging message

-vU show the ML user name in each logging message

When both -vR and -vU are specified, the MobiLink server will add the remote ID and the MobiLink user to each message logged:

yyyy-mm-dd hh:mm:ss. <sync_id> ({remote_id},{user_name})

When started with -vR and without -vU, the prefix will be just the remote_id:

yyyy-mm-dd hh:mm:ss. <sync_id> (remote_id,)

and the MobiLink user name will be empty. When started with -vU and without -vR, the

prefix will be just the user name:

yyyy-mm-dd hh:mm:ss. <sync_id> (,user_name)

and the remote ID will be empty.

The new feature may be useful for MobiLink users who are running the MobiLink server with the command options -on or -os, as the logging messages for a synchronization can span multiple MobiLink server logging files, which makes it is hard to find out the remote ID and MobiLink user name for a given sync ID from such logs. This extra logging information will only apply to the synchronization threads. For the main thread of the MobiLink

server, the logging messages will still contain the following prefix,

yyyy-mm-dd hh:mm:ss. <Main>

because there is no remote ID or MobiLink user name for the main thread. These two command line options will not be affected by the -v+ option, that is, the MobiLink server will not add the remote ID or the ML user name into its logging messages, even if the -v+ option is used. Therefore, the description for the -v+ option

has been changed to - "show all verbose logging specified with lower case letters".

558108 Calling the function SQLGetTypeInfo() would have returned an incorrect AUTO_UNIQUE_VALUE column value in the result set for non-numeric types. The value return would have been 0, but according to the ODBC specification a NULL should have been returned.

ODBC specificatrion for AUTO_UNIQUE_VALUE :

Whether the data type is autoincrementing:

SQL_TRUE if the data type is autoincrementing.

SQL_FALSE if the data type is not autoincrementing.

NULL is returned if the attribute is not applicable to the data type or the data type is not numeric.

The behaviour has been corrected to follow the ODBC specification.

558232 The MobiLink Monitor has a default filter which highlights failed synchronizations in red. Failed synchronizations logged by the MobiLink Server were not being shown in the Monitor in red as the server was telling the Monitor that every sync was successful. This has been fixed.
558286 A query may have taken a very long time to execute if it contained an uncorrelated subquery in an ANY or ALL predicate that referenced a procedure that was not inlinable. The problem was due to the subquery plan that was generated not having a work table above the procedure call, so every repeated subquery execution caused the procedure to reexecute. This has been fixed.
558446 Executing an insert statement of the form: 'INSERT INTO <remote table> ON EXISTING UPDATE SELECT * FROM <table>', would have caused the server to correctly return an error; but, if the application attempted to execute an insert statement of the form: 'INSERT INTO <table> ON EXISTING UPDATE SELECT * FROM <remote table>', the server would have crashed. The problem has now been fixed and the server now correctly returns an error in both cases.
558481 The Interactive SQL utility (dbisql) could have crashed when executing a statement which returned a result set, if the redirection operator ( ">#" ) was used to save the result set to a file. This has been fixed.

Note, this problem only affected graphical operation of the program.

558510 A table in the QAnywhere for Ultralite schema could have been created improperly, resulting in a failure to initialize the message store with the error (-131) "param 1: timestamp". This has been fixed
558554 If a user-defined domain was created with char-length semantics, the Unload utility (dbunload) would not have preserved this attribute. This has now been fixed.
558580 Incorrect results could have been obtained with queries containing a temporary table on left side of a LEFT OUTER JOIN. This has been fixed.
558713 If a simple SELECT statement was executed with the option Row_counts set to 'on', the returned row count value on open may have incorrectly been zero. This has been fixed
558739 After deploying a synchronization model with logical deletes to a DB2 consolidated database, and then synchronizing, either of the following synchronization errors would have occurred for the MobiLink server (depending on the database setup):

[IBM][CLI Driver][DB2/NT] SQL1216N Graphic data and graphic functions are not supported for this database. SQLSTATE=56031

[IBM][CLI Driver][DB2/NT] SQL0104N An unexpected token "N''" was found following ", ?, ?, ?, ?, ''". Expected tokens may include: "<space>". SQLSTATE=42601

This has been fixed. A workaround is to deploy to a file and edit the consolidated SQL file to change instances of four single quotes to two single quotes.

558753 Attempting to cancel an external environment request while the server was very heavily loaded may have caused the server to crash. Note that this problem would have been quite rare. The problem has now been fixed.
558756 Attempting to execute a query that referenced a view containing a remote query, could have crashed the server. The crash would have occurred if the remote query had both GROUP BY and HAVING clauses, and/or aliases. This problem has now been fixed.
558915 When deploying a Synchronization Model to file, any characters in .SQL files that are not supported by the OS console code page would be changed to a substitution character, even though the character would have been displayed correctly in the MobiLink plug-in. This has been fixed so that .SQL files now use UTF-8 character encoding. The generated .bat or .sh file is still written using the console code page, since it must run in a console, but the UTF-8 character encoding is now specified when the Interactive SQL utility is invoked in the .bat or .sh file.
558953 Executing a CONNECT statement could have caused the Interactive SQL utility (dbisql) to connect to the wrong database if a connection had been already made to a database, and the CONNECT statement did not specify an engine name (ENG) or database name (DBN). This has been fixed.
558973 Using the ATLER EXTERNAL ENVIRONMENT ... LOCATION statement to set the executable path to a MBCS string, could have caused the server to subsequently fail to launch the external environment. When fetching the external environment location from the catalog, the server was not subsequently converting the string to the OS charset. This has now been fixed.
558984 The JDBC sample applications incorrectly contained references to the SQL Anywhere 10 ODBC driver. This has been fixed.

Comments were also added that explain the DriverManager.registerDriver and DriverManager.getConnection code.

559185 Attempting to execute a CONNECT statement could have crashed the Interactive SQL utility (dbisql) if it was started without an initial connection. This has been fixed.
559192 If an application fetched columns of type NUMERIC, DATE, TIME, or TIMESTAMP, and the column was bound as a string in the client application, then performance could have decreased. The slowdown was most apparent in statements where a large number of rows were fetched with relatively little server processing per row. This has now been fixed.
559197 When creating a new user, or changing an existing user's Profile authority setting, Sybase Central would not have always updated its group memberships in the Users & Groups folder. This has been fixed.
559258 The stored procedure debugger failed to report information about the size of string and numeric data types when debugging a stored procedure. This has been corrected.
559360 Sybase Central allowed for explicitly adding members to, or removing members from, the diagnostics group, but in some instances the members would not have actually been added or removed. This has been fixed by no longer permitting this. Now members can be added to, or removed from, the diagnostics group implicitly by granting or revoking Profile authority via the user's properties dialog. In addition, Sybase Central no longer allows deleting the diagnostics, rs_systabgroup and SA_DEBUG groups, nor change any of these groups to users.
559372 If an application used one of the connection scoped external environments (i.e. PHP, PERL or one of the external C environments); and the external environment failed to start up due to high server load or time-out, then there was a chance the external environment executable would not have ended. This problem has now been fixed.
559383 When configuring an ODBC FileDSN on Windows, NEWPWD=* incorrectly showed up in the Advanced tab of the configuration dialog. The NEWPWD=* parameter was not actually added to the FileDSN though. This has been fixed.
559399 If the deleted_length of a text index was greater than 50% of the doc_length, the server should refresh the text index. However, it was possible to get into a state where the pending length was very small and the deleted_length was very large, yet refreshes still did not occur. The check for the pending_length was occurring too early and prevented the server from ever checking the pending length. As a result, the index was never being refreshed. This has been corrected so that the server now checks that one condition or the other is true to continue to the refresh code.
559402 In previous versions of SQL Anywhere, a password connection parameter was not written to a FILEDSN (.dsn file). Beginning with version 11.0.0, the password is written to the .dsn file in the format "Password={some pwd}". This behavior is not in keeping with the spirit of the ODBC specification which states, "the PWD keyword is not stored in a .dsn file". This change in behavior occurred as a result for a change to the SQL Anywhere ODBC driver to return "Password={some pwd}", instead of "PWD={some pwd}" in the connection string. Also, "Userid=user" was returned instead of "UID=user". The Microsoft driver manager only recognizes the UID and PWD forms of the connection parameters, which caused it to add the Password parameter. This problem has been corrected. The SQL Anywhere ODBC driver will now return "UID={user};PWD={some pwd}" in the connection string, as it did in earlier versions. This will result is the Driver Manager no longer including the password.
559403 If a connection with a Configuration object failed, for example due to an incorrect password, a connection then with a corrected configuration object would have caused a SQLE_CONFIG_IN_USE error to have been thrown. This has been fixed.
559412 The OUTPUT USING statement could have failed to export the results of a DESCRIBE statement. This has been fixed.
559413 If many connections made concurrent external environment requests, and some of these requests failed due to thread deadlock, then attempting to close one of these connections may have caused the client to hang. This problem has now been fixed.
559431 Attempting to execute an INPUT USING statement would have cause the Interactive SQL utility to crash if the connection string was empty or missing. This has been fixed.
559440 When run on Linux systems, a server that had been handling TCP/IP connections could have displayed the message "epollerr: Bad file descriptor" in the console on shutdown. Also, under very rare circumstances on all UNIX platforms, the server could have experienced problems handling TCP/IP connections. Both of these problems have now been fixed.
559446 If a server running on Linux systems with GTK libraries installed was auto-started, or started by the Start Server utility (dbspawn), in an X Window environment, an empty window titled "SQL Anywhere Developer Edition" would have remained visible until the server was shut down. This has been fixed.
559481 Executing an ALTER TABLE statement could have caused unneccessary database growth.
559600 Executing a "MESSAGE .. TO CLIENT FOR CONNECTION conn-id IMMEDIATE" statement shortly before the target connection abnormally disconnected could have resulted in the message callback being called after an API request returned an error. The abnormal disconnect could have been caused by a liveness timeout, idle timeout, DROP CONNECTION, server shut down, or other conditions. Depending on the application's message callback routine, this could have resulted in a crash or other incorrect behaviour. This has been fixed so that the message callback will not be called after an API request has returned an error due to an abnormal disconnect.
559632 An embedded SQL PREPARE or OPEN request could have caused the application to crash in rare cases, if the connection was dropped before, or during, the request. This has been fixed.
559636 MobiLink clients, except UltraLiteJ, now support a new network protocol option on Windows Mobile and desktop, 'network_adapter_name', which allows clients to explicitly specify the name of the network adapter to be used to connect to a MobiLink server. Example: "network_adapter_name=Serial on USB".
559653 When connected to an authenicated SQL Anywhere database from the MobiLink plug-in in Sybase Central using the "Generic ODBC DSN" option, the connection would have been read-only. This has been fixed.
559678 Incorrect results could have been obtained with queries containing IF search expressions, aggregate functions, or references to columns not specified in the GROUP BY clause. These are now diagnosed as errors.
559694 The persistent store was not being properly closed on open failure (such as authentification failure) with write-at-end configuration. This could have lead to problems reconnecting to the database. The store is now closed on an open failure.
559810 If an INSERT statement inserted a string into a CHAR or VARCHAR column with character-length semantics, then it was possible for the server to fail with the following assertion failure:

100914: string too long when recording operation in transaction log.

In order for the failure to occur, the inserted string must have had byte-length semantics and it must have contained more characters than the column definition. Further specific characteristics of the database and statement were needed to reproduce the problem. This problem has been fixed.

559813 The server would have reported the number of processors detected and some imposed limits. The messages have been changed so that they will now report:

- number of processors detected (changed format)

- processor limits imposed by Edition, licenses purchased, and -gt option

- max number of processors that will be used

Also, the Edition limit that is imposed during licensing is now also imposed by the server itself.

For some Unix systems, the number of processors used can not be limited. If the number to be used exceeds the per-processor license limitation, an additional message is reported, and is unchanged from previous versions.

559822 If the optimizer selected a parallel execution plan for a query with a GROUP BY operator on the right hand side of a nested loops join, and the group by contained an AVG or other composite aggregate function, then it was possible for the statement to incorrectly generate the error: "Field unexpected during compilation". In this case the server would have continue to process other requests. This problem has been fixed.

A workaround is to disable parallel plans by setting Max_query_tasks=1 as a connection option, or in the query OPTIONS clause.

559844 If a query execution plan used a multiple index scan with an Except Merge operator (EM), then it was possible for the statement to fail with an assertion failure such as the following:

Assertion failed: 106502 - NULL in not-NULL work table column

In order for the failure to occur, one of the indexed columns in the query must have been declared not-NULL. This has been fixed.

559864 Connecting, disconnecting, and reconnecting using the same connection handle would have caused error -298 "Attempted two active database requests" in dbcapi.

For example:

conn = sqlany_new_connection();

sqlany_connect( conn, <connection_string> );

sqlany_disconnect( conn );

sqlany_connect( conn, <connection_string> );

The last sqlany_connect() call would have returned error -298. This has been fixed. The workaround is to call sqlany_free_connect() and allocate and new handle.

559897 If a critical error occurred and an application then called db_fini, without first closing the connection, the database could have become corrupted. This has been fixed.
559898 If an application made use of one of the Remote Data Access JDBC classes, and the application then disconnected abnormally, then the connection to the remote server was never closed. The problem did not exist if the application used one of the Remote Data Access ODBC classes instead. This problem has now been fixed.
559941 NULL values were not being handled properly in single-valued SELECT queries. The value was treated as if it was not null, and an unpredicatable value was used. This has been corrected.
560044 In some cases, an error was generated for expressions that contained only values that were known at open time.

For example, the following generated a "division by zero" error:

select if 1=0 then 1/0 else 42 endif val

This problem occurred because the expression '1/0' was evaluated as part of building the access plan for the query. Constant expression trees were evaluated at open time in a bottom-up fashion so that the value can be used at execution time (avoiding multiple evaluations and supporting optimizations). In some cases, the expression was not actually needed, as in the above example with an IF expression. In these cases, the constant folding process could have generated an error that would not have been returned if the constant literals were replaced with field references.

This has been changed. Errors generated during constant folding are no longer returned at open time. Instead, the constant expression tree is left in its original structure and evaluated at execution time if the value is needed. This execution-time evaluation will generate the related error if the value is actually needed.

560045 When the QAnywhere consolidated database contained a large number of messages that satisfied a delete rule, and there were QAnywhere clients synchronizing frequently, it was possible that delete rules would have always failed because of database deadlock errors such as:

Error: [QA] Problem evaluating transmission rules for user ianywhere.server.deleteRules: Problem updating object in repository using key "delete from ml_qa_repository from ml_qa_repository mbr where msgid in (select msgid from ml_qa_messages ml_qa_messages where status > 20 and (syncstatus = 1 or originator in ('ianywhere.connector.beajms','ianywhere.server')))": java.sql.SQLException: [Sybase][ODBC Driver][Adaptive Server Anywhere]Deadlock detected: [Sybase][ODBC Driver][Adaptive Server Anywhere]Dea

Error: dlock detected

This has been fixed. It is possible that some deadlock errors will still occur, but the errors will not prevent delete rules from deleting old messages.

560056 If a connection was forcibly closed by the server (via DROP CONNECTION, liveness or idle timeout), or was closed by the client libraries because of a liveness timeout, the client application could have crashed if the next operation it attempted was to open a cursor

without preparing it. This has been fixed.

560069 When executing a VALIDATE statement, or running the Validation utility (dbvalid), table validation would have failed to report errors when an index did not contain all the rows in the table. This has now been corrected.

Note, when validating a database with a 10.0.1 server between 3920 and 3930 inclusive, it was also possible for errors to be reported, when in fact there were no error. I this case, the 10.0.1 server should be updated to a build number of 3931 or higher, and the validation rerun to see if the errors are still reported.

560080 If a user-defined function was created with the DETERMINISTIC keyword, the parsed version of the CREATE FUNCTION sstatement that was placed in the catalog did not contain this keyword. The function may not then have been treated as deterministic, and if it was unloaded, the CREATE FUNCTION statement would also not have contained the keyword. This has been fixed.

Note, to fix existing user-defined functions created with DETERMINISTIC, the function will need to be recreated.

560107 Table names in case insensitive databases are required to be unique under case insensitive comparisons, e.g., names FOO and foo refer to the same table. In some cases, the server may have allowed multiple tables with the same name that differed only in case to be created. This has been fixed so that the server will now generate the expected error.

Note, once a database contains multiple tables with the same names, all variations of the name will refer to the same (somewhat non-deterministic) instance of the table. The situation can be corrected by dropping and recreating the tables. Any existing data needs to be saved and restored as necessary.

560109 A reboot was required after the SQL Anywhere Monitor was installed when it was to be used as a service. This problem has now been fixed, and a reboot should no longer be required.
560351 Columns of type UNIQUEIDENTIFIER were being fetched in binary format in the SQL Anywhere C API (php, Perl, Python and Ruby), where as they should have been returned as strings. This has been fixed.
560678 If a database's CHAR collation was a tailored UCA collation with a sorttype specified, then comparisons for catalog strings (such as table names and user names) would have incorrectly ignored the sorttype. For example, the Swedish collation UCA(locale=swe; sorttype=phonebook) considers 'v' and 'w' to be different characters at the primary level; however, those letters would have been considered equal during catalog string comparisons, as if the catalog collation were UCA(locale=swe) with no sorttype specified. This problem has been fixed.
560902 Complex queries involving proxy tables may have cause the server to crash. Some known instances of this issue have been fixed.
560908 When the UltraLiteJ Database Transfer tool was run on a BlackBerry device or simulator, a user may have left the password field blank assuming that the utility would use the default password "dba". However, leaving the password field blank would have resulted in a failure to connect to the database. This has been corrected. If the password is now left empty, the default password will be used to connect to the specified database.
560924 Executing an ALTER TABLE statement could have caused unneccessary database growth.
560935 Restoring a database from a backup archive using the RESTORE DATABASE command with the RENAME option could have corrupted the transaction log associated with the restored database. Translating the transaction log file using the dbtran.exe utility would have resulted in an error indicating that the log was missing a CONNECT operation. This has been fixed.
560943 The dbmlsync ActiveX component was not able to launch the dbmlsync application properly on Windows if some or all of the dbmlsync options are given by a file, and the dbmlsync command line contained the option @filename. This problem has now been fixed.
561067 The QAnywhere Agent (qaagent) now attempts to reconnect to the message store database when the connection is dropped.

Notes:

- The initial database connection will be retried a given number of times if the first connection fails

- Command line options for connection retries and retry delay:

-cr <n> (n is the number of retries to connect after a failure)

-cd <n> (n is delay, in seconds, between retries)

- The defaults are 3 retries with a 10 second delay between retries

- If all retries fail, the QAnywhere Agent displays an error and waits to be shut down

- If a database connection fails during operation, the QAnywhere Agent will go through termination steps, including finalizing connections, terminating threads and external processes, and then re-starts.

561095 Incorrect results could have been obtained with queries containing IF search expressions, aggregate functions, or references to columns not specified in the GROUP BY clause. These are now diagnosed as errors.
561118 The persistent store was not being properly closed on open failure (such as authentification failure) with write-at-end configuration. This could have lead to problems reconnecting to the database. The store is now closed on an open failure.
561122 The .NET QAManagerBase class now supports ExceptionListener delegates, which allows for applications to be notified of QAExceptions that occur while receiving messages on the background thread.

The following are the relevant APIs:

/// <summary>

/// ExceptionListener delegate definition.

/// </summary>

/// <param name="ex">The exception that occurred.</param>

/// <param name="msg">The message that was received, or null if the message

/// could not be constructed.</param>

public delegate void ExceptionListener( QAException ex, QAMessage msg );

/// <summary>

/// Sets an <see cref="ExceptionListener"/> delegate to receive QAExceptions

/// when processing QAnywhere messages asynchronously.

/// </summary>

/// <param name="address">The address of messages.</param>

/// <param name="listener">The exception listener to register.</param>

public void SetExceptionListener( string address, ExceptionListener listener );

In 10.0.x and later, the .NET and Java QAManagerBase class now supports exception listeners.

The .NET and Java QAManagerBase class now supports a property, RECEIVER_INTERVAL, that represents the maximum wait interval (in milliseconds) in the background receiver thread for receiving messages. The default is 60000 milliseconds. As with other QAManager properties, this property must be set before calling an Open() method.

The .NET and Java QAManagerBase class now supports a ReOpen() method that can be called in an ExceptionListener or MessageListener to re-establish connections to the message store database. Following is the API description.

/// <summary>

/// Reopens the QAManagerBase. This re-establishes connections to the message

/// store, without releasing any resources. This method may called in a

/// message or exception listener, and in that case it is not necessary to

/// call Start() again. This method simply executes Close() then Open() if

/// not called in a listener, and in that case Start() must be called to

/// restart receiving of messages.

/// </summary>

/// <exception cref="iAnywhere.QAnywhere.Client.QAException">

/// if there is a problem reopening the manager.

/// </exception>

public void ReOpen();

561127 By default, the reload.sql script generated by the Unload utility (dbunload_) includes calls to a temporary procedure (sa_unload_display_table_status) to display progress messages when loading tables and creating indexes. The -qr command line option will now suppress generation of these calls.
561311 Executing a MESSAGE ... IMMEDIATE statement shortly before a connection was disconnected, could, in rare timing dependent cases, have caused the application to crash, or the message callback to run after the connection was disconnected. This has been fixed.
561321 When aggregate functions processed a NULL value for one or more rows, they generate the following warning: (SQLCODE 109) "Null value eliminated in aggregate function". If the aggregate function was specified with DISTINCT for its argument, this warning was not set for execution plans that used the SingleRowGroupBy or OrderedGroupBy execution algorithms. This has now been corrected.
561378 The Relay Server Outbound Enabler could have logged one of the following error messages in the log file:

"Failed to retrieve session[x]"

or

"Session mismatch: session[x].snum=y instead of z"

or

"Session mismatch: session[x].sfp=y instead of z".

when a client unexpectedly disconnected from a Relay Server in the middle of sending a request, or receiving a response. These errors would have happened in a Relay Server farm environment with more than one Relay Servers in the farm and in particular, in the general case when using an Afaria client or a QAnywhere client running a listener. This has now been fixed.

561524 Under very specific and rare memory conditions, the server could have crashed while performing a sort. This has been fixed.
561553 When a query of the form "SELECT f(c) from t where t.c < 5", where f() was a user-defined function and t was a proxy table, was executed the server would have attempted to push the "where c < 5" to the remote server in order to reduce the number of rows being returned. Unfortunately, due to the fix for Engineering case 555959, this behaviour was changed such that the WHERE clause was no longer getting pushed to the remote, resulting in more rows being fetched from the remote than necessary. Note that the fix for case 555959 resulted in a performance degradation only, the resulting result set was still correct. Nevertheless, this has now been resolved and the WHERE clause will now properly be pushed to the remote server when it is safe to do so.
561554 It was possible for the server to crash while processing a specific builtin function in the context of a procedure. This has been fixed.
561596 Incorrect values were being used by the SQL scanner for some hexadeciml constants. This was corrected
561603 Synchronizing with UltraLiteJ, through the Relay Server to a MobiLink server farm with more than one server, would have caused erratic behaviour. This has been fixed.
561616 Application errors could have occurred after opening and closing more than 255 connections. Each .NET connection allocated two SQLCAs, but only one was freed when the connection was closed. The other would not have been freed until the connection was garbage collected. This has been fixed.

A workaround for this problem is to call GC.Collect() regularly.

561801 In rare circumstances, selecting a table in the tree and clicking its Data tab, would either have caused an "Invalid ORDER BY specification" error or the table's rows would not be sorted by the primary key. This has been fixed.
561813 The MobiLink server could have crashed when using the -xo option ("specify network protocol and options for version 8 and 9 clients"). Monitoring pre-10.0.0 synchronizations would also have had erratic behaviour. These issues have been fixed.
561816 The Relay Server State Manage (rshost) would have crashed if its configuration file was missing or invalid, or if a non-switched command line argument was used (i.e. one that was not preceded with '-' in Unix, or '-' or '/' in Windows). This has been fixed.
561820 The iAS ODBC driver for Oracle could have leaked memory when fetching binary data (CLOB, BLOB, NCLOB, LONG VARCHAR, and LONG RAW) from an Oracle database. This problem would only have occurred when sending the fields as part of the MobiLink download stream to the remote. This has now been fixed.
561825 The PHP external environment did not expose all of the $_SERVER fields during an HTTP request, as specified by the CGI/1.1 specification. This has been fixed.
561831 The PHP external environment, when used in the HTTP context, was not sending the appropriate HTTP status code back to the client. This has been fixed.
561839 There was a possibility, although small, that a busy SQL Anywhere server may have truncated HTTP response data. This has been fixed.
561989 The Interactive SQL utility (dbisql) would have failed to launch on Windows machines when run as a console application, if a connection parameter was given and the parameter value contained a space. This has been fixed.
562026 Using the UltraLiteJ Database Load utility (ULjLoad) with the -a, -i or -f options may have caused the tool to crash or produce incorrect results. The rows loaded without the -i switch would still be synced to the server. The -a switch would not load schema information from an existing database file. The -f switch would crash the tool. These problems have now been fixed.
562027 When running on Sun SPARC systems, the MobiLink client (dbmlsync) would have complained about "missing transaction log files", if there were any offline transaction log files bigger than 2GB. This problem now been fixed.
562037 When using the UltraLiteJ Database Load utility (uljload) with the -d option, in combination with the -a option, in order to load data into an existing database with the schema information in it, no data was loaded into the database. This has been fixed.
562039 The start times for synchronizations reported by the MobiLink Monitor and the MobiLink Server, when used with the -vm option, could have been incorrect if the MobiLink Server had been running for several days. Also, the output for the -vm option could have been incorrect if a request used non-blocking download acks, and phase durations reported by -vm option could have been slightly different than phase times reported by the MobiLink Monitor. These issues have now been fixed.
562083 The MobiLink server could have silently ignored bad HTTP requests. In particular, subsequent requests received by MobiLink server B, for a session started in MobiLink server A, would have been silently ignored. The error was particularly likely to appear if an HTTP intermediary was misbehaving and sending different HTTP requests for the same session to different MobiLink servers. This has been fixed, and this case will now issue an error.
562171 The SQL Anywhere server generates "expression error" messages for generic semantical problems in queries. Under certain circumstances, the server could have generated an expression error with a parameter that did not point to the correct problematic part of the query.

For example, the following query:

select manager_id,

sum(emp_id), max(manager_id) over (order by manager_id rows between manager_id preceding and salary following) as max_mgr

from employee

where manager_id > 5

group by manager_id, salary, max_mgr

would have resulted in an error "Expression error near 'employee.manager_id > 5'", rather than the more appropriate "Expression error near 'max(employee.manager_id) over( ... ) ... as max_mgr". The real problem with this query is that the alias 'max_mgr' cannot refer to a window aggregate expression, as the alias is part of the group by list.

This problem has been resolved.

562181 The UltraLite M-Business component was missing the following methods:

Class SyncParms:

String getPublications()

setPublications( String publication_list )

These methods are used to set the publications that will be used for synchronization (publications control which tables get synchronized). The publications are specified as a comma separated string. Earlier versions of the UltraLite M-Business API used a "publication mask" to identify the publications for synchronization. A mask was an internal number representing a set of publications. The publication mask methods

were removed in version 11.0, and these methods were meant to replace them.

562216 Using database files with empty filenames like ".db" or " .db" caused various problem. different kind of problems. Now, for database, dbspace, transaction log and mirror log files, the server no longer allows file names like this.
562227 Aggregates in sub-queries, containing outer references, were not always handled correctly. This could have resulted in:

- bogus diagnostics regarding misplaced aggregation

- some illegal usages were not diagnosed

- incorrect results in some cases

This has been corrected.

562235 When a new column is added in the table editor, the column now defaults to allowing or prohibiting nulls, depending on the value of the PUBLIC allow_nulls_by_default option.

as well,changing a column's data type to a domain (either in the table editor or in

the column property sheet) now updates the column's nulls setting to allow or prohibit nulls, depending on the chosen domain's nulls setting. If the domain does not explicitly allow or prohibits nulls, then the column's nulls setting is not updated.

562236 In some cases, client applications running on Solaris systems may have hung while communicating with the server through shared memory. Other symptoms may also have included communication errors between the client and the server. This was more likely

to happen on multi-processor machines. This has been fixed.

562245 Using the MobiLink file-based download to transfer files on Palm devices to a VFS volume, could have failed. The error reported would have been STREAM_ERROR_INTERNAL. On some devices, VFSFileSeek returns an EOF error when seeking to the end of file, but the seek actually succeeds. A work around for this problem has been implemented.
562258 On Windows 2003, and sometimes on Windows XP, it was possible to start both a personal server and network server which listened on the same TCPIP port. If this occurred, clients could unexpectedly, and unreliably, get "Database server not found" errors. This has been fixed As part of this change, network servers on Windows Vista and Windows 2008 no longer start a TCPIP listener on the 127.0.0.1:<port> address by default. Connections to this address are still accepted by the TCPIP listener which starts on the 0.0.0.0:<port> address.
562318 A column check constraint's property sheet did not show the constraint's column, while a table check constraint's property sheet showed a "Column:" label with an no column name. A boolean test on the constraint type was inverted. This has been fixed.
562398 Aggregates in sub-queries, containing outer references, were not always handled correctly. This could have resulted in:

- bogus diagnostics regarding misplaced aggregation

- some illegal usages were not diagnosed

- incorrect results in some cases

This has been corrected.

562414 In exceptionally rare circumstances, the server could have hung during startup. This hang would only have occurred when the server was run on a multi-processor machine. This has been fixed.
562456 Changing a column's data type via its property sheet would have been reflected immediately in the Table editor when switching pages in the property sheet. As well, the change would not have been reverted if Cancel was clicked in the property sheet. This has been fixed.
562534 Executing a query of the form "select ... into #temp ...", or a query with a stored procedure in the FROM clause, may have caused the server to crash. This would have occurred if the statement contained a CONVERT or CAST function call to a user-defined type, or a WITH( column-name <user-defined type>, ...) clause. This has been fixed.
562535 The server may have crashed when trying to build a plan containing a hash filter. This has been fixed.
562605 If more than one of the dblocate filtering options (-p, -s, -ss) was used and a hostname or IP address was specified, only one was used. There was an implicit ordering and only the first of the ordering that was specified would have been used; the second and subsequent options would have been ignored. The ordering was:

hostname/IP address specified on command line

-p

-s

-ss

This has been fixed. If more than one of these options is specified, they are all now applied.

562619 Incompatible configurations could not have been used for connections. For example, a database created with shadow paging would not have permited a connection using a configuration that specified "at end" processing. This has been corrected. Now, the physical configuration from the database, not the configuration, is used when connecting to the database.
562627 SQL Anywhere supports the "UPDATE( colname )" condition that can be evaluated by trigger code to determine if the value of the specified column has been modified from its current value in the row. The server was failing to evaluate the condition correctly when the column value was modified internally during statement execution. As one example, if the user statement did not modify the column value, but a BEFORE trigger did, then the condition in an AFTER trigger failed to evaluate to TRUE when it should. This has been fixed so that the server will now evaluate the condition correctly, regardless of when the column value is modified,
562656 Attempting to fetch data from a proxy table, when connected using a non-DBA user, would have failed if the remote server was one of SAJDBC or ASEJDBC. A permissions problem on the global temporary table used to hold the rows fetched from the remote server has now been fixed in newly created databases. For existing databases, log in with a DBA user and execute the following statement:

grant select,insert,update,delete on dbo.omni_rset_fetch_table to PUBLIC

562689 Using the concatenation operator '+' with VARCHAR and UUID did not produce correct results. This has been fixed.
562826 When backing up a database with no transaction log, a client-side transaction-log only backup (i.e. using the Backup utility) would have caused the server to crash. A transaction-log only server side backup (i.e. using the BACKUP statement) did not cause a crash. Although a server side backup did not cause a crash, the SQL error that was issued in this case gave no indication as to what the failure actually was, i.e., it reported "Syntax error near 'backup option'". As well as fixing the crash, a more useful SQL error code/message for the server-side case is now displayed: "Error during backup/restore: No files are part of this backup".
562827 Using the concatenation operator '+' with VARCHAR and UUID did not produce correct results. This has been fixed.
562829 When querying a proxy table mapped to a remote ASE or Microsoft SQL Server table, if the remote table had a varchar(255) column, then fetching data from that column would have resulted in data truncation. This was due to an off-by-one error, which has now been corrected.
562833 When the MobiLink Server had a large number of synchronizations running concurrently (in the range of 10000), a MobiLink Monitor connected to it could have become unresponsive, and not displayed new information in a timely manner. This has been fixed.
562838 Applications using the Broadcast Repeater utility were not able to find servers running on Linux machines on a different subnet using broadcasts. The server's broadcast response was being malformed. This has now been corrected.
562951 If a database was created with the DBA user specified as "dba" (or Dba, DBa, DbA, dBA, dBa, dbA), unloading the database would have failed. This has been fixed.
562957 The server may have crashed when executing a Group By Indexed strategy for a SELECT

statement. This has been fixed.

562962 The QAnywhere message transmission status code which formerly displayed as "Local", is now displayed as "Do_not_transmit". This change was made to match the documentation.
562971 Attempting to export data from a SQL Anywhere database into an UltraLite database would have failed if a value being exported was null and the target column in the UltraLite database was a unique identifier column. This is now fixed.
562972 Attempting to export data from a SQL Anywhere database into an UltraLite database could have failed if a value being exported was a Date. This would happen when the option return_date_time_as_string was set to 憃ff�. This is now fixed.
563040 If an application used the CURRENT TIMESTAMP constant in an insert into a proxy table, there was a possibility that the server would have crashed. Note that the remote server needed to be either ASE, SQL Server, Oracle or generic ODBC, for this problem to occur. This problem has now been fixed.
563117 When the Relay Server Outbound Enabler (rsoe) was started with http instead of https (i.e. -cr https=1;... ), it would not have been able to communicate with a newly added relay server. The workaround is to restart rsoe. This has been fixed.
563118 If a communication error occurred at an early stage of the Relay Server Outbound Enabler (rsoe) attempting to establish the up channel with the Relay Server, the RSOE would have continued to fail to reconnect forever. This has been fixed. The workaround is to restart the RSOE.
563132 An adddition fix was needed to avoid a boundary mis-routing problem introduced by the original fix for Engineering case 561378.
563143 When a QAnywhere consolidated database contained a large number of messages that satisfied a delete rule, and the MobiLink server was shut down, the server would not have actually terminated until all messages had been deleted, which could have been a very long period of time. When delete rules are executed, old messages are deleted in batches of 100 at a time until there are no more messages satisfying the delete condition. However, there was no mechanism to stop the execution of delete rules on MobiLink server shutdown. Such a mechanism has now been added for delete and archive rules.
563171 The MobiLink server would have failed synchronizations from version 10.0.1 and later clients, when they connected via HTTP. The error would have been 'HTTP error 404' (not found), and most clients would have reported this as the error. This has been fixed.
563202 The Interactive SQL utility (dbisql) would have reported an internal error when attempting to use the Import Wizard to import data from a SQL Anywhere database while connected to an UltraLite database. This has been fixed.
563319 When creating or upgrading a database, the server looks for a file called authenticate.sql, which is used to set the database_authentication option. The file should reside in the <install_dir>\scripts directory, but the server would continue to look elsewhere if it was not found there. This has been fixed so that it looks for this file only in the scripts directory.
563344 In certain situations, the server could have crashed while processing a hash join. This has been fixed.
563352 Prebuilt binary libraries for PHP 5.2.8 have now been added.
563394 Execution of LOAD TABLE statement will now use asynchronous IO in order to improve performance. Actual performance gains will vary depending on hardware and database configuration but tests have shown an approximate doubling of performance. Asynchronous IO is only used when accessing a local data file (not a client file, etc).
563404 Synchronizations could have failed with protocol errors when some, but not all, of the parameters for a delete command in the .NET irect row API were set to DBNull.Value or null. This has been fixed so that an exception will be thrown when attempting to execute the command.
563405 The MobiLink server could have crashed if a IDataReader returned by MLUploadData was not closed. If the server didn't crash it would have leaked memory. The crash would have occurred at a random time after the synchronization completed. This has been fixed.

Note that enclosing the use of the IDataReader in a 'using' block will automatically close it.

563499 When processing a GROUP BY statement with a specific number of aggregates, it was possible for the server to crash. This has been fixed.
563533 Transactions could have failed with the error SQLSTATE_PREEMPTED being incorrectly returned to the application.
563535 Worker threads are created to process the stream data from clients, and perform the database activities for each synchronization. Two sets of workers were being created, one set for pre version 10 clients, and another set for current clients (version 10 and later). Now, when the -xo switch is not specified, the MobiLink server no longer creates the threads to process the old client requests.
563541 The server could have used an incorrect selectivity estimate for a predicate containing IS [NOT] TRUE, IS [NOT] FALSE, or IS [NOT] UNKNOWN. This could have lead to ineffecient access plans. This has been fixed.
563545 When executing several remote queries, if the remote queries contained NChar variables in the WHERE clause, then some of the queries may have returned an incorrect result. This problem has now been fixed.
563592 When run on Windows systems, both the MobiLink server and the Relay Server Outbound Enabler (RSOE) could have held onto sockets for longer than necessary. This would have caused both to use up sockets faster than necessary, possibly exhausting system socket limits. With the RSOE, needless timeouts could also have occurred. This behaviour was particularly evident with non-persistent HTTP/HTTPS connections, and appeared to be very much OS and machine dependent. This has been fixed.
563693 n some cases, it was possible for the server to report an error when processing a statement that explicitly, or implicitly, used sys.dummy. The error would have been reported as SQLCODE -300: '*** ERROR *** Assertion failed: 106105 (11.0.x.xxxx) "Unexpected expression type dfe_FieldOrigRID while compiling"'

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

select TE1.xidx

from (select * from sys.dummy) as D, TE1

where exists ( select * from TE2 where TE2.x = TE1.xidx and TE2.xidx <= 1 )

For the incorrect behaviour to have occurred, the statement must have had a reference (explicit or implicit) to sys.dummy, where the dummy_col field was not referenced, and there must have been an exists join optimization used, where a generated distinct on rowids was needed. This has now been fixed.

563736 If an ODBC DSN explicitly specified an isolation level, and that DSN was then used within the Interactive SQL utility (dbisql), then the isolation level specification would have been ignored. This problem has been fixed.
563832 The Windows makefiles for the PerformanceFetch, PerformanceInsert, and PerformanceTransaction SQL Anywhere samples could not have been used to build the sample applications, as they referenced directories that no longer existed in the version 11.0 installation. This has now been fixed.
563835 The server uses column statistics to aid with query optimization. The statistics are stored in the database catalog and are loaded into memory on demand, and unloaded when not used for a period of time. Under very rare circumstances, when running on multi processor systems, it was possible for the server to think that no statistics existed for a specific column. The problem was likely to have been self correcting over time and there were no correctness issues. However, it was possible that the absence of column statistics may have caused some queries to run inefficiently. This problem has been resolved.
563839 The SQL Passthrough feature was originally written as a plugin to the MobiLink server in Java. A number of issues were found, including using extra database connections, which needed to be addressed. The feature has now been re-written as a core part of the MobiLink server, so it no longer requires a Java VM on startup.

When SQL Passthrough was being used, ie. when there was at least one row in the the ml_passthrough_script table, the MobiLink server could have used twice the number of consolidated database connections than necessary, (ie. up to twice the -w value). When creating these extra connections, the MobiLink server would, during a synchronization, make another consolidated database connection, perform some work, disconnect that connection, then resume the synchronization. In other words, penalizing each synchronization with the time/cost of connecting and disconnecting to the consolidated database. Besides the performance and database connection penalties, these connects/disconnects could also have made the MobiLink server reach OS socket limits faster, potentially causing failures.

Most MobiLink clients (ie. dbmlsync, dbtools sync interface, dbmlsync ActiveX integration component, and all UltraLite runtimes -- except UltraLiteJ, which doesn't support SQL Passthrough) have been updated as part of this fix. This change will cause newer clients to fail if run against an the 11.0.1 GA server. Thus MobiLink clients of version 11.0.1 2156 or later will require a MobiLink server of version 11.0.1 2156 or later.

563844 The MobiLink client (dbmlsync) would have occationally reported the error:

Failed writing remote id file to '<filename>'

Despite the error, synchronizations would have continued successfully, and the remote id file would have appeared on the disk in good order. This problem has been fixed.

563848 If an ODBC application called SQLColAttribute() on a long varchar, long nvarchar or long binary column, with an attribute value of SQL_DESC_DISPLAY_SIZE, then the ODBC driver would have incorrectly returned the value 65535. This problem has been fixed and the driver now returns the value 2147483647.
564010 The server may have crashed if a floating point value was converted to a string, and then subsequently cast to a string with a too small size. This has been fixed.
564025 Messages generated by the MESSAGE ... TO EVENT LOG statement were not printed to the system event log when the server was started with the -qi switch. This has been fixed.
564046 The changes for Engineering case 559413 introduced a problem where attempting to cancel a Java call could have caused the Jave VM to stop responding. This has now been fixed.
564066 When an HTTP connection that had made an external environment call was closed at the exact same time that the external environment exited, there was a chance that the server would have crashed. This problem has now been fixed.
564277 If a simple statement was processed and bypassed the optimizer, it was possible for the server to choose an index that was less efficient than the best one, leading to poor performance. This problem would have occurred if the WHERE clause contained equality and range predicates. This has been fixed.

A workaround can be achieved using the following command line switch on the server start line or the "OPTIONS(FORCE OPTIMIZATION)" in the query text.

-hW AllowBypassCosted

564304 The server may have crashed when simple SELECT statements are executed against the utility database. This has been fixed.
564435 In an ADO/OLE DB application, when a UNIQUEIDENTIFIER (or GUID) was used as a parameter in a query, an error message like "Cannot convert 0x to a uniqueidentifier" may have resulted, or the query may simply have failed to return any results. This problem has been fixed.

Sample schema:

create table uuidtable( pkey int, uuid uniqueidentifier, stringform uniqueidentifierstr );

Sample query:

select * from uuidtable where uuid = ?

The following .NET/OLE DB example shows typical uniqueidentifier parameter binding:

OleDbCommand cmd = new OleDbCommand(txtSQLStatement.Text.Trim(), _conn);

OleDbParameter param1 = new OleDbParameter();

param1.ParameterName = "@p1";

param1.DbType = System.Data.DbType.Guid;

cmd.Parameters.Add(param1);

cmd.Parameters[0].Value = new Guid("41dfe9f9-db91-11d2-8c43-006008d26a6f");

564472 The Interactive SQL utility (dbisql) could have reported an internal error if, when connected to an UltraLite database, the text completer was opened in a SELECT statement and the caret was immediately after a period. This has been fixed.
564475 When in the new Watch dialog, when selecting 'user' or 'sync' as a property to set a condition for, if 'Add' was pressed, nothing would have happened. This has been fixed.
564479 When run on BlackBerry devices, the download of a large download_delete_cursor of a table with many columns, UltraLiteJ could have reported an out of memory error when the BlackBerry ran out of object handles. This would have occurred even when many of the deletes were to be ignored by the client. The handles used by a download are a factor of the number of rows times the number of columns in each row. This has been fixed. UltraLiteJ normally applies the download after all rows have been received, however, now it immediately rejects deletes for non-existant client rows, and reduces significantly the handles used by all other download deletes. In an ideal situation, the download_delete_cursor script would reduce the number of rows sent by not sending any download deletes if the last download timestamp was the newer value, or if the row corresponding to the delete was never on the client (creation date greater than last download timestamp).
564639 When MobiLink servers with QAnywhere messaging were set up in a server farm, push notifications could have stopped working in some circumstances. In particular, if the MobiLink server(s) handling synchronization requests from QAnywhere clients were different from the server that initiated the push notification (as would have been the case if the notifications were the result of outbound JMS messages in a server running a JMS connector), only the first push notification would have been sent, and no further notifications would have been sent. This has now been fixed.

It should be noted that, in a MobiLink server farm deployment, there could be a latency of at most the automatic rules evaluation period to send a push notification to a client as a result of an outbound message to that client. This is due to scalabilty factors in a situation where there is a high volume of outbound messages being processed by the MobiLink server.

564677 A failed COMMENT ON PROCEDURE statement could have prevented the procedure from being dropped. This has been fixed.

Note, a workaround is to stop and restart the database before attempting to drop the procedure.

564679 An INPUT ststement, with multiple references to the same host variable, could have been handled incorrectly when the leftmost reference was the host variable by itself in the VALUES list, and another reference occurred in an expression that was more complicated than just the host variable by itself.

For example,

INPUT INTO tab( pk, col1 ) VALUES( :hv, 100 - :hv )

This has been fixed so that the final substitution for non-leftmost host-variable references is delayed so that the type of the first reference can be established.

564701 Executing a CREATE TABLE IF NOT EXISTS ... statement would have failed if the table existed, but had not yet been used since the database was started. This has been fixed.
564828 Following a cursor OPEN for a simple select statement that bypasses optimization, the SQLCOUNT value could have been incorrectly set to 0, when the number of rows was to be exact (ie. Row_counts was 'on'), and the number of rows was estimated to be 0 . This has been fixed so that the correct setting is now -1 in these cases.
564829 When the MobiLink server was listening for HTTP and/or HTTPS requests, and a load balancer or any other utility (eg. the RSOE) performed a simple TCP/IP connect, then an immediate close without sending any bytes, the MobiLink server would have taken four minutes to time out the socket. If too many such connections happened in a short time, the MobiLink server could have run out of sockets earlier than necessary. This has been fixed.
564857 In very rare circumstances, SQL Anywhere .NET provider could have crashed the work process in IIS. This problem has been fixed
564866 An INPUT ststement, with multiple references to the same host variable, could have been handled incorrectly when the leftmost reference was the host variable by itself in the VALUES list, and another reference occurred in an expression that was more complicated than just the host variable by itself.

For example,

INPUT INTO tab( pk, col1 ) VALUES( :hv, 100 - :hv )

This has been fixed so that the final substitution for non-leftmost host-variable references is delayed so that the type of the first reference can be established.

565050 The Import wizard could have crashed if the "Next" button, on the page which asks for a destination table name, was clicked before the page has initialized. This has been fixed.
565054 Calling the ODBC functiom SQLColAttribute( ..., SQL_DESC_BASE_COLUMN_NAME, ... ) could have incorrectly returned the correlation name, instead of the base column name. This has been fixed so that the base column name is returned. If there is no base column, the column alias is returned.

Note, this fix requires both an updated ODBC driver and server.

565061 Dbisqlc would have reported an error, and then crashed, if there was a version mismatch with the language DLL (e.g., dblgen11.dll). This problem has been fixed.
565097 The metadata returned for a query with a UNION operator, could have been incorrect. This has now been corrected
565102 If an application executed a PHP external environment procedure, and the PHP procedure subsequently called exit, then the server would have taken up to 5 seconds to return control to the application, and would then have displayed a dropped connection message in the console. This problem has now been fixed.
565104 The php process may have crashed after completing a php external environment call. This has been fixed.
565110 When binding a column in ODBC, the column type, a buffer and a length are specified. For static types (int, long, double, time, etc) the ODBC driver ignores the length specified because the length is constant. The ODBC driver should have been treating SQL_GUID columns as static as well, but was incorrectly respecting the length specified, which sometimes resulted in truncated values. This has been fixed.
565232 In very rare circumstances, if a complex view which cannot be unflattened (e.g., a grouped view) was used multiple times in the same statement, the optimizer may have generated an access plan which computes an incorrect result set. One of the conditions for this to have occurred was for a predicate of the form " V.X theta [ANY|ALL] ( select aggregate(e) from V as V1 where ... )" to be present in one of the query blocks of the statement. This has been fixed.
565244 The SQL Anywhere HTTP server will generate error responses that may be classified into two categories: System and User error messages. System error messages are generated for the following conditions: protocol errors, time-out and cancel. User error messages are generally caused by a SQL error. It is recommended that the application handle SQL errors within an EXCEPTION clause and render application specific error responses. By default a User error message is output in the body of the response as HTML or plain-text when the SERVICE is configured as TYPE 'HTML' or 'RAW' respectively. User error messages may have been returned using chunk-mode transfer encoding, while keeping the connection alive. In the event that the web service encountered an error when outputting its response, or was explicitly canceled by dropping its database connection, the response message was prematurely truncated. A change has been made to make the default behaviour more consistent, SQL errors explicitly handled by the application are not affected by these changes. By default System and User error messages:

- do not use chunk mode transfer encoding

- explicitly set 'Connection: close' response header

- shutdown the HTTP connection once the error message is sent

Any pending (pipelined) requests following the request encountering the error are terminated. Also, an error response is guaranteed to close the HTTP connection. Interrupting a response (already underway such that the response headers have already been sent) will truncate the output and close the HTTP connection. User error messages that are explicitly caught by the EXCEPTION clause may also CALL SA_SET_HTTP_HEADER('Connection', 'close') prior to issuing the error page to force the HTTP connection to close after the response has been sent.

565255 A multi-threaded embedded SQL application could have crashed if db_fini was called with the last active SQLCA at the same time as db_init was called with another SQLCA. The crash was very timing dependent. A race condition has been corrected.
565257 In rare situations, access to a mirrored database could be blocked, making the mirroring servers appear to hang. This has been fixed.
565283 When evaluating predicates outside of DML statements (for example, in SET or IF statements in procedures, triggers, events, or batches), the server could have improperly treated UNKNOWN as FALSE. For example, the following statement should set @str2 to NULL, but it was incorrectly being set to FALSE:

SET @str2 = if NULL like 'a' then 'TRUE' else 'FALSE' endif;

This has been fixed.

565286 The server could have released locks on rows prematurely. Data corruption, crashes, unexplained deadlocks and incorrect query results were all possible. For this to have occurred though, there must have been a significant amount of contention for a particular row. This has now been corrected.
565441 Changes have been made to the MobiLink client to accomodate the changes made to the MobiLink server for Engineering case 563839. Therefore, running the 11.0.1 GA MobiLink server with SQL passthrough enabled (i.e. rows have been added to the ml_passthrough_script table), with 11.0.1 MobiLink clients (dbmlsync) from an EBF will cause synchronizations to fail with the message:

This client is newer than your MobiLink server. You must upgrade your MobiLink server before you can synchronize.

In order to resolve this problem, the MobiLink server must be upgraded as well. As a temporary work around, SQL Passthrough can be disabled by deleting all the rows in the ml_passthrough_script table and restarting the Mobilink server.

565447 Index corruption was possible if an index contained many (more than 64,000) consecutive entries that differed by the same constant amount. A check to ensure that the count value does not overflow when merging pages was missed. This has been corrected.
565474 An HTTP client procedure may have hung when receiving chunk mode encoded data. For this problem to have occurred, the client needed to identify itself as an HTTP/1.1 version client (by default it identifies itself as HTTP/1.0). This may be done in the following ways:

SET 'HTTP(VER=1.1)'

TYPE 'HTTP:POST' and length of the values for input parameter equal or exceed 8192 bytes

TYPE 'HTTP:POST' SET 'HTTP(CH=ON)'

This has been fixed.

565624 Under certain non-deterministic conditions, a server-side backup could have blocked other tasks, such as remote procedure calls, HTTP requests, and external environments from running. As well, in certain very rare and timing sensitive conditions, it is also possible that a backup could have hung indefinitely while starting. Both of these problems have now been fixed.
565651 If an application executed a query like "select ... for t where c = v', where c was a char or varchar column, v was as variable of type nchar or nvarchar, and t was a proxy table to a remote table in Microsoft SQL Server, then the query would have failed with SQL Server reporting the error "The data types varchar and ntext are incompatible in the equal to operator." This problem has now been corrected.
565663 The German (DE), French (FR), and Chinese (ZH) language help files were missing for Sybase Central 6.0.0. This has now been corrected.
565664 When run on machines with only one network adapter, checking the box "Only show local servers" in the "Find Servers" dialog would not have displayed local servers. This has been fixed.
565667 The methods QAManagerBase.SetMessageListener and QAManagerBase.SetExceptionListener would have throw a QAException with error code COMMON_NOT_OPEN_ERROR, when called before an Open() call. This has been fixed. Now, SetMessageListener and SetExceptionListener can be called any time after the creation of a QAManagerBase object, as in earlier versions of QAnywhere.
565678 When the server was started with the -fips command line option ('All strong encyption done using FIPS approved modules'), attempting to create an unencrypted database would have failed with the error "The simple algorithm is not available in FIPS mode". This has been fixed
565835 The server may have crashed if the procedure debugger's connection, and the debugged connection, stopped at the same time. This has been fixed.
565837 When using the INPUT statement with dbisqlc, column inputs may have failed if the length of the input record exceeded the capacity of the input buffer. This failure could have been signalled by a conversion error, or it could have gone undetected (the remaining columns having been truncated or set to the null value. This problem has now been fixed.
565839 If an application used one of the connection scoped external environments (i.e. PHP, PERL or one of the external C environments) and the SA server was running on a non-Windows platform, then there was a chance the external environment process would not have gone away once the application disconnected. This problem was introduced by the changes made for Engineering case 559372, and has now been fixed.
565844 When using MobiLink servers in a server farm (by specifying the -ss command line option), servers could have crashed and/or unexpectedly caused failed synchronizations. The problem was more noticeable in environments with poor network quality or where retries after synchronization failures occurred very quickly after the original synchronization. This has been fixed.
565874 If an alias or correlation name was entered in the Query Editor, and then the "OK" button was clicked while the editor for the alias or correlation name was still open, the editor's value could have been ignored. This has been fixed.

Note, a workaround is to press ENTER after typing in the alias/correlation name, and then click the "OK" button.

565880 If an application used either the C_ODBC32 or C_ODBC64 external environments, then the server may have reported a connection dropped error when the application disconnected. This problem has now been fixed.
565891 When run on Unix systems, the server would have crashed or hang if a client application attempted to connect and disconnect in a tight loop. Another symptom may have been that the client would have received the following error:

-832 Connection Error: Found server but communication error occurred.

For this to have occurred, the connection must have been via shared memory, the application must have previously connected and disconnected successfully so as to unload the client libraries (ODBC, DBLIB, or DBCAPI), and the time between the last disconnect and the new connect was within 10ms. This has been fixed.

566033 When running the SQL Anywhere Deployment wizard, the MSM installer type option actually created an MSI installer type. This has been fixed.
566043 When working with .NET data sources and the OLEDB adapter using Visual Studio, the Configure Dataset with Wizard dialog may have resulted in "Dynamic SQL generation is not supported against a SelectCommand that does not return any base table information." or theTableAdapter Query Configuration Wizard dialog may have resulted in "Failed to get schema for this query". The SQL Anywhere OLE DB provider has been corrected.
566046 If the maximum value in an autoincrement column after performing a LOAD TABLE statement was a negative value, the SYSTABCOL.max_identity value for that column would have been set to a negative value. This would have caused subsequent inserts into the table, which did not provide a value for the autoincrement column, to generate errors. This situation could have arisen when rebuilding a database having a table with an autoincrement column and only negative values in the column. Note that the use of negative values with autoincrement columns is discouraged. This has been fixed so that the max_identity value in this situation will now be set to zero after the LOAD TABLE statement completes.
566058 Under very rare circumstances, a query plan using a hash join in an EXISTS subquery could have caused the server to crash. This has been fixed.
566071 If an application used either the C_ODBC32 or C_ODBC64 external environments, then returning result sets from the external environment could have taken a long time, and resulted in thread deadlock errors due to the fact that the C_ODBC external environments were not turning autocommit off. This problem has now been fixed.
566165 In very rare circumstances, the server could have crashed if the procedure debugger run a 'step into' or 'step over' request at the end of a procedure or trigger. This has been fixed.
566207 The QAnywhere plug-in for Sybase Central now supports the connection retry command line options for the Agent (see Engineering case 561067).
566372 Data inserted into a compressed column may have caused a decompression error when retrieved. This would only have occurred if the data was already compressed so that compression would result in increased data length, the column was created with the NO INDEX clause, and the data length was very close to a multiple of 8 times the database page size. An error in calculating the maximum possible length for the compressed data has been fixed.
566450 When executing queries involving index scans, the boundary values for the scans could, in some cases, have been evaluated incorrectly causing the queries to fail to return any results. This has been fixed
566651 A SERVICE may invoke a procedure that explicitly sets the 'Connection' and 'Content-Length' HTTP response headers using the SA_SET_HTTP_HEADER system procedure. The setting of the 'Content-Length' was ignored, and the setting of 'Connection:close' implicitly disabled chunked-mode transfer encoding. Changes have been made to provide greater control over SQLAnywhere HTTP server responses. The following is a summary of the new behaviour:

Client is HTTP/1.0:

The server does not support Keep-Alive and Chunk-mode operation for this HTTP version.

By default the server never sets the 'Transfer-Encoding' header and always sets 'Connection: close' header, shutting down the connection once the response has been sent. A SERVICE procedure may set the 'Content-Length' header but setting the 'Connection' header is ignored.

Client is HTTP/1.1:

By default the server responses use chunked-mode transfer encoding and automatically set the 'Transfer-Encoding: chunked' header. If the SERVICE procedure explicitly sets a 'Content-Length' header to some value, then the 'Content-Length' header is sent in place of the 'Transfer-Encoding' header and the response body is not chunk-mode encoded. Note: It is an error for a SERVICE procedure to set both a 'Content-Length' and 'Transfer-Encoding' header.

The server will assume 'Connection: keep-alive' if the client does not send a 'Connection' request header. If a client explicitly sends a 'Connection: close' request header and/or the SERVER procedure explicitly sets 'Connection: close' the server will shutdown the connection once the response has been sent.

Setting Content-Length

In most cases data will need to be buffered in order to calculate the Content-Length. Therefore, it is recommended to use chunk-mode transfer encoding whenever possible. If 'Content-Length' must be set, then care must be taken to ensure that the result-set is not character set translated when the response is composed. It is recommended that the 'CharsetConversion' http option is set to off when returning textual data. Also, setting 'Content-Length' should only be done within a TYPE 'RAW' SERVICE since some services (i.e. 'HTML', 'JSON') add content to the response.

A check has been added to ensure that the actual length of the response matches the value of 'Content-Length' header. If the values do not match then the server will shutdown the connection, once the response has been sent, regardless of whether or not a 'Connection: keep-alive' response header has been sent.

566673 Exporting data from a SQL Anywhere database to a MySQL table could have failed if the Interactive SQL utility (dbisql) was asked to create a table for the data, and the data contained any of the following SQL Anywhere types: TINYINT, UNSIGNED SMALLINT, UNSIGNED INT, UNSIGNED BIGINT, or TIMESTAMP. The mapping of data types between SA and MySQL was incorrect, this has been fixed.
566685 If a simple statement was processed by the server and bypassed the query optimizer, it was possible for the server to choose an inefficient plan if the statement contained a specific form of contradiction. For example, the following statement could have generated a plan that would have read all rows from TRange:

select * from TRange where x1 = 3 and x2 between 2 and 1

A more efficient plan would recognize that the BETWEEN predicate is never true (2 > 1), and uses a prefilter to avoid fetching any rows from TRange. This has been fixed so that the more efficient plan is selected.

566688 Prebuilt binary libraries for PHP 5.2.9 have now been added.
566689 Importing a table into an UltraLite database may have failed if it contained NCHAR or NVARCHAR columns. This has been fixed so that the importer converts NCHAR and NVARCHAR columns into VARCHAR columns. The operation may still fail if the UltraLite database cannot represent the characters being imported, so this is guaranteed to work only if the UltraLite database is created with a UTF8BIN collation sequence.
566693 On certain processors other than x86 and x86_64 (64 bit HP-UX for example), the server may have crashed in extremely rare conditions when using a connection number to get connection information. Examples of getting this type of connection information include getting a connection property for another user, or calling sa_conn_info. This has now been fixed.
566703 The PHP external environment was passing strings as LONG VARCHAR, which was causing character set conversion between the server and the PHP process. This would have corrupted binary data. This has been corrected so that all strings are now passed as LONG BINARY, which means that no character set conversion will be done.
566705 In the PHP external environment, calling phpinfo() would have showed no useful information for the sqlanywhere_extenv module. This has been fixed. Now, server version information, as well as the names of the server, database, and user are displayed.
566711 The PHP external environment process would have crashed if the system procedures sa_http_php_* were called from the Interactive SQL utility, or anywhere outside of an HTTP server request. This has been fixed
566805 Creating a string object shorter than, but within roughly a database page size of, the 2^31-1 (2GB) upper length limit could have incorrectly resulted in the SQL error MAX_STRING_LENGTH_EXCEEDED. This has been fixed.
566828 Errors that occurred while running a SQL passthrough script in schema-diffing mode were not being marked as critical, which could have caused the database schema to become corrupted. This has been fixed.
566830 It was not possible to export NUMERIC values to a new MySQL table if the precision of the source column was greater than 15. This has been fixed.

Note that exporting data into an existing table did not have this problem.

566957 The server may have crashed when executing a DML statement that modified tables in an additional dbspace while a lazy checkpoint was in progress. This problem was introduced by the changes for Engineering case 547392, and has now been fixed.
566970 When rebuilding a QAnywhere database, the reload of the ml_qa_status_history table could have failed with the error: "No primary key value for foreign key". This has been fixed.
566986 The version of OpenSSL that is used in the RSA implementation on the Mac has been upgraded to version 0.9.8k. This was done because of a bug in OpenSSL, described here:

http://www.openssl.org/news/secadv_20090325.txt. Note that only the third bug listed affected SQL Anywhere, and only on 64-bit Mac.

567017 When using the SQL Anywhere Support utility to check for updates (dbsupport -iu), it may have returned "Error checking for updates. Please try again later." Subsequent retries by the same dbsupport instance would also have failed. A counter variable was not being reset. This has now been fixed.
567157 In very rare circumstances, the server could have crashed during startup while recovering a database that used a mirror transaction log file. This has been fixed.
567163 If an application attempted to start an external environment on a server that was busy stopping or starting external environments for other connections, there was a chance the server would have returned a thread deadlock or 'main communication thread not found' error. There was also a chance, although small, that the server would have crashed in this situation. This problem has now been fixed.
567222 Previous releases of QAnywhere relied on timestamp based synchronizations for message transmission. As a result, modifying the system time on a device could have interfered with the QAnywhere synchronization scheme, and in some cases caused QAnywhere to cease message transmission. This synchronization scheme has now been replaced with a progress counter based scheme in order to improve the reliability of synchronizations by removing the dependency on the device system clock.
567328 When using an UltraLiteJ database with auto checkpointing and persistent indexes, if two connections were open on separate threads it was possible that changes committed to the database by the second connection may have been lost, and space in the database lost. This would have occurred when one connection was synchronizing (Connection.synchronize()) and the second connection was commiting changes to the database (inserts, updates and/or deletes), and the application terminated abnormally (power lost, crash). If the Connection.synchronize() call completed successfully, or with an ULjException, changes would not have been lost. This has now been fixed.
567336 If response headers were added, modified or deleted by the external environment, the (calling) SQL procedure had no way of inspecting and identifying changes to the response headers. This deficiency has been corrected by adding the functions HTTP_RESPONSE_HEADER( header_name ) and NEXT_HTTP_RESPONSE_HEADER( header_name ) for value retrieval and iteration of response headers. Response headers may be modified directly within a SERVICE procedure by calling SA_SET_HTTP_HEADER() or may be modified through an external environment process such as a PHP call through via SA_HTTP_PHP_PAGE.

The usage semantics of HTTP_RESPONSE_HEADER() and NEXT_HTTP_RESPONS_HEADER() are the same as for HTTP_HEADER() and NEXT_HTTP_HEADER() respectively, which are used to inspect the request HTTP headers.

567347 If an application connected to a server via Open Client, using a newer version of Open Client 15, then it was likely that cancelling a request would have given a protocol error on the next request to the server. This problem has now been fixed.
567361 On some non-Windows platforms, pressing CTRL+C when the Interactive SQL utility (dbisql) was running in console mode could have caused spurious error messages which reported an unexpected signal 11, or "SIGSEV" error. This has been fixed so that these messages no longer appear when CTRL+C is pressed.
567409 If a CREATE TABLE statement was executed using EXECUTE IMMEDIATE and a declared temporary table with the same name already existed, an error was not given. This has been fixed.
567417 The DBLib client library could have crashed if there was a language resource problem, such as a missing language dll or .res file. In order for this crash to have occurred, db_init must have been called at least twice, and then another dblib call must have been made (such as db_string_connect or EXEC SQL CONNECT). This has been fixed, and db_init will now return 0 on language resource problems.
567427 If a transaction running under snapshot isolation attempted to update or delete a row that had been deleted and committed by another transaction, the update or delete would have failed with the wrong error. Typically the error would have been "Unable to find in index 't' for table 't' (SQLCODE: -189; SQLSTATE: WI005)", or it could have failed silently. This has now been fixed.
567541 As a result of changes made for Engineering case 545640, SQLAnywhere DISH services were not sending HTTP response headers. This has been fixed.
567543 If the WHERE clause of a query block contained many predicates using host variables, it was possible that the PREPARE or OPEN times would have been unnecessarily long. The server was not recognizing the two expressions with host variables were the same. his has been fixed.
567556 If a SQL Remote user was copied to the clipboard and the Message Types tab was selected, and then right-clicked within the right pane, a Paste menu item would have been shown. This menu item would never have been enabled after a SQL Remote message was copied to the clipboard. This has been fixed so that the menu item is no longer present.
567570 It was possible for the server to enter a loop while processing some statements that included an implicit or explicit use of the table SYS.DUMMY. This has been fixed.
567590 The SQL Anywhere Monitor was setting redundant HTTP headers which would have caused the browser-based interface to function incorrectly when using SSL on Internet Explorer. This has been fixed by removing the redundant HTTP headers.
567699 There were two scenarios where non-collected metrics could have been displayed by the SQL Anywhere Monitor. The two scenarios were:

- If a user was viewing a tab with only one metric on it, went to administration and disabled collection of that metric, and went back to the monitoring tab, that metric's graph would still have been displayed, even though the tab itself was hidden.

- If a user disabled collection of a metric that was displayed on a tab with several other metrics, the disabled metric would still have been displayed on the tab along with all the other metrics.

These have both been fixed so that only the collected metrics are now displayed.

567754 When providing a list of DER-encoded trusted root certificates to a MobiLink client for TLS synchronization, the client only accepted the first item in the list and ignored the rest. There was no problem if the list of certificates was PEM-encoded. This has been fixed.

Note that this problem affected all MobiLink clients except UltraLiteJ.

567778 Some of the files required to enable Windows Accessibility features were being installed in the wrong directory. This could have resulted in the Administration tools (eg Sybase Central)not running. This has been fixed.
567790 Incorrect results, including bogus error messages, could have been obtained when aliases (from the SELECT list) were referenced in a GROUP BY clause. This has been corrected.
567794 If the MobiLink Server was connected to an Oracle consolidated database, and an event was defined that called a stored procedure within a package, it was possible for a crash to have occurred in the iAnywhere Oracle ODBC Driver, which would in turn crash the MobiLink Server. This problem has now been fixed.
567800 If an alert email was sent that contained non-ASCII characters (i.e. multi-byte characters), this email would have arrived mangled if the machine running the SQL Anywhere Monitor was using a single-byte character set. This problem has now been fixed.
567906 The MobiLink server could have crashed when multiple -x options were specified on the command line, with at least one being HTTP and another being HTTPS. This could have happened, for example, when a VPN connection was created or dropped in the middle of a non-persistent HTTP/HTTPS synchronization, and the network intermediaries were set up such that one path resulted in HTTP and the other resulted in HTTPS. This has been fixed.
567932 Client-side certificates can now be used to authenticate MobiLink clients to third party server and proxies. The following two synchronization parameters have been added to provide support for this feature:

identity - Indicates the file that contains the client's identity. An identity consists of the client certificate, the corresponding private key, and, optionally, the certificates of the intermediary certificate authorities. This parameter is equivalent to MobiLink server's 'identity' parameter.

identity_password - An optional parameter that specifies the password used to encrypt the private key found in the identity file. It is only required if the private key in the identity file is encrypted. This parameter is equivalent to MobiLink server's 'identity_password' parameter.

Note that MobiLink clients cannot authenticate directly to the MobiLink server using client-side certificates. They can only be used to authenticate to third-party servers and proxies which have been configured to accept client-side certificate authentication and are sitting between the client and MobiLink server.

Also note, this feature is not supported in UltraLiteJ, and because of ECC compatibility issues between different versions of Certicom's Security Builder libraries, it is also not supported when using ECC TLS. It is only supported for RSA TLS.

567942 If a query was processed using a parallel execution plan, it was possible for the statement to exceed the setting of the Max_temp_space option by a factor of the number of branches in the plan. This has been fixed.
567944 Incorrect results, including bogus error messages, could have been obtained when aliases (from the SELECT list) were referenced in a GROUP BY clause. This was corrected.
568091 Under rare circumstances, if starting a database that truncates the transaction log at a checkpoint (i.e., WITH TRUNCATE AT CHECKPOINT clause to the START DATABASE statement or on a server started with the -m command line option) failed, the server may have crashed. This has been fixed.
568216 On Advanced Edition servers, the value of the ServerEdition server property was incorrect. This has been corrected.
568217 On Mac OS X systems, an archive restore could have failed with an "insufficient space" error, even when enough space to complete the restore was available. This has been fixed.
568219 If the amount of available physical memory during an archive restore was low (the threshold is around 20 MB), but this was not the case during the archive backup, then the operation would have failed with an "insufficient memory" error, regardless of the amount of available swap space. This has been fixed.
568233 If a query had multiple uses of a function such as now() and one of the uses was within a COALESCE expression, then it was possible for the query to unexpectedly give different values for the two uses. For example, the following query could return different values for time1 and time2:

create temporary function T_W( x int )

returns timestamp

begin

waitfor delay '00:00:00.500';

return NULL;

end

select coalesce( T_W(0), now() ) time1, coalesce( T_W(1), now() ) time2

In addition to now(), the following expressions also had this behaviour:

getdate()

today()

current date

current time

current timestamp

current utc timestamp

In addition to coalesce() expressions, the same problem could occur with the now() or related function used within these expressions:

ISNULL()

IFNULL()

IF

CASE

ARGN

This has been fixed.

568263 A database could have been corrupted by an ALTER TABLE statement which changed the nullability of a column. Because the nullability of a column affects the internal storage format of row, all rows in the table must be reformatteded when the nullability changes. This has been implemented.
568264 The server could have hung, consuming CPU, while attempting to shutdown a database if all workers were busy servicing other requests on different databases. This has been fixed.

A workaround is to increase the -gn value of the server.

568421 Remote server capabilities were accidentally set OFF during a rebuild of a case-sensitive database. This has been fixed.
568422 Under rare circumstances, a server participating in a mirroring system may have crashed on database shutdown. This has been fixed.
568426 When browsing permissions for tables and views, a user might have been listed more than once on the Permissions page of the property sheet for a table or view. Similarly, a table or view might have been listed more than once on the Permissions page of a user's property sheet. When fetching permissions, rows with the same grantee but different grantor, were not properly grouped. This has been fixed.
568431 If an application executed an external environment stored procedure, and the external process terminated in the middle of the external call, then there was a chance the server would have crashed. This problem has now been fixed.
568436 When running on a Windows machine configured to use the 1252 code page, if the Interactive SQL utility (dbisql) attempted to open a file which contained a Euro sign (€), it would have asked for which code page to use to interpret the file. Now, dbisql recognizes that the Euro sign is part of the Windows 1252 code page, and reads the file without prompting. This change also fixes similar behavior when a file contains any of the following characters:

€ U+20AC Euro sign

� U+017D Latin capital letter Z with caron

� U+017E Latin small letter Z with caron

568455 If an application executed a statement of the form IF EXISTS( SELECT ... FROM proc(), remote_tab ...) where proc() was a stored procedure that returned a result set and remote_tab was a proxy table, then itwas likely that the server would have crashed. This problem has now been fixed.
568460 All database resources were not completely freed when an ALTER TABLE DROP INDEX statement was executed. In particular, the database pages for the rows and indexes of the table, before the table is rebuilt, were not being freed. This has been corrected.
568468 The SQL Anywhere server supports the "UPDATE( colname )" condition that can be evaluated in statement-level trigger code to determine if the value of the specified column has been modified from its original value in any of the rows in the row set affected by the UPDATE/INSERT/MERGE statement being executed. The server would have failed to evaluate the condition correctly for multi-row sets under certain circumstances. This has been corrected so that the server will now evaluate the condition correctly.
568475 On the Basic Dbmlsync page of the Synchronization Profile's property sheet, only a single publication could have been specified. In addition, if a synchronization profile was created with multiple publications via the Interactive SQL utility, then the publications would have been lost when the property sheet was used to modify the synchronization profile. Now the property sheet supports multiple publications.
568632 When viewing table data for a SQL Anywhere database, Sybase Central could have reported an internal error. This has been fixed. The problem was highly timing dependent.
568641 Attempting to insert a large long binary value into a MicrosoftS SQL Server proxy table, would have failed with a "wrong precision" error. This problem was introduced by the fix for Engineering case 565651, and has now been fixed.
568645 On very rare occasions, the server may have failed to start on Solaris systems. This has been fixed.
568652 Adding two columns with default values to a global temporary table would trigger assertion 100712 (page level logging already in progress).
568657 Signed and unsigned short values were not being translated properly by the SQL Anywhere Python interface. Attempting to use short values would have resulted in errors like "struct.error: bad char in struct format" or "struct.error: unpack requires a string argument of length 1". This has been fixed.
568660 Referential integrity constraints (i.e. primary keys, foreign keys or unique constraints) involving long values may have resulted in unexpected errors. This problem has now been fixed.
568663 The server could have crashed during Application Profiling if any variables or host variables were present in the workload. This has been fixed.
568674 Attempting to execute an CREATE ENCRYPTED DATABASE statement to create a database encrypted with simple encryption, or the CREATE DECRYPTED DATABASE statement to decrypt a database encrypted with simple encryption, without having specified an encryption key, would have returned the error (-131 "Syntax error near '(end of line)' on line 1"). This has been fixed.

As a workaround, add "KEY 'unused'" to either statement; whatever key is specify will be ignored.

568821 Querying the deprecated server property MaxMessage, would have caused the server to crash if the property MessageCategoryLimit was set to 0. This has been fixed.
568831 A server running in a database mirroring system could have hung while log pages were being sent from the primary server to the mirror server. The primary server periodically sends a "catchup" request to the mirror to ensure that the mirror does not get too far behind in applying log operations that it has received from the primary and written to disk. It was possible for this request to cause a hang if it was received at the same time as an operation for a new connection was being processed in the transaction log. This has been fixed.
568836 Incorrect results could have been obtained when using an index which had nullable columns In some cases, fewer rows were returned than were required. This has been fixed..
568866 The UltraLite Initialize Database utility (ulinit) is used to create an UltraLite database, based on information in the SQL Anywhere database that it is connected to. If the schema being extracted from the SQL Anywhere database contained elements that UltraLite did not support (like column datatypes or default values), the utility would have failed. Ulinit has been changed so that by default, it will attempt to create an UltraLite database that comes as close as possible to the SQL Anywhere database. For example, if a column in the SQL Anywhere database included the DEFAULT TIMESTAMP clause (a default that UltraLite does not support), a warning is generated and a default of CURRENT TIMESTAMP is generated instead. In particular, if a default in the SQL Anywhere database is not supported in the UltraLite database, the default value is ignored and creation continues. This enhancement was made because, in some cases, it抯 possible the SQL Anywhere tables cannot be modified, and yet a reasonable UltraLite alternative is available. The ulinit utility also now has a 杅 switch that can be used to make the utility fail if the exact schema does not match (in other words, the old behavior is given and the utility will fail).

This fix also addressed a problem where warnings were emitted into the SQL file if the ulinit utility was run with 杔.

568972 In cases where the standalone version of the SQL Anywhere Monitor and the regular SQL Anywhere Monitor were installed on the same machine, the SQL Anywhere Monitor could have loaded the wrong ODBC driver. This has been fixed. The old incorrect behaviour would, in the vast majority of cases, not have had any noticeable impact on the SQL Anywhere Monitor. The application would still have worked normally. So, the SQL Anywhere Monitor EBF should also be applied when applying a SQL Anywhere EBF. Applying the SQL Anywhere EBF without the SQL Anywhere Monitor EBF could cause the SQL Anywhere Monitor to stop working.
568976 In rare, timing dependent circumstances, the server may have hung when executing queries using intra-query parallelism. This has been fixed.

A workaround is to disable intra-query parallelism by setting the max_query_tasks option to 1.

568984 If an application connected via HTTP and executed a PHP external environment stored procedure with a long varchar or long binary argument, then there was a very small chance the server would have crashed if the HTTP connection was cancelled at exactly the same time that the PHP external environment call was made. This problem has now been fixed.
568986 Performing a PutMessage operation from the Java QAnywhere Client using UltraLite, or from the Standalone Java QAnywhere Client, would have resulted in a memory leak equal to the size of the content of the message. This has been fixed.
568991 Connecting to the server using Open Client and attempting to describe the input parameters of a dynamic statement, would very likely have cause the application to hang. This problem has now been fixed.
569012 The "UserAgent" HTTP header for QAnywhere/MobiLink communications previously only specified "QAnywhere/11.0.1", and "QAnywhereUL/11.0.1", for SQL Anywhere and UltraLite clients respectively. It did not differentiate between data synchronization and listener components. This has been fixed. Now, the header specifies "QAnywhereSync/11.0.1" for a SQL Anywhere data sync client, "QAnywhereULSync/11.0.1" for a UltraLite data sync client, and "QAnywhereLsn/11.0.1" for a MobiLink listener client.
569013 MobiLink clients and the certificate utilities would have failed to read PEM-encoded trusted certificates files which contained blank lines before the first PEM header. The PEM parsing code has now been modified to skip leading white space characters.
569020 1. When two separate connections (including one that might be synchronizing) are accessing the database in parallel, some lock row conflicts or download conflicts may not have been detected.

For example:

Connection 1 deletes row with primary key value 2 but does not commit

Connection 2 inserts row with primary key value 2 - here there was an undetected row locked or download conflict if connection 2 was synchronizing

When connection 1 was rolled back, a database corruption mau have occurred. This has been fixed.

2. Duplicate primary keys during a download were not detected. If the download contained two or more rows with the same primary key, the last row would be kept (this is not neccessarily correct if the download_cursor script does not have an ORDER BY clause). This has been fixed. UltraLiteJ will now report the SQLE_DUPLICATE_ROW_FOUND_IN_DOWNLOAD error when this is detected. Like UltraLite, this error is only reported for duplicate rows in the download_cursor - no detection is done for duplicate rows in the download_delete_cursor, or if the same primary key is in both the download_cursor and download_delete_cursor.

3. The all database synchronization would not have included new tables if the database was synchronized before the table was added (unless the application was restarted). This has been corrected.

569114 The SQL Anywhere Monitor, when installed by the standalone installer, was not able to monitor MobiLink servers. The standalone installer was not installing the library mljstrm11.dll as part of the SQL Anywhere support component. This problem does not exist in the edition of SQL Anywhere Monitor included with SQL Anywhere. This has been fixed.
569122 When deploying a synchronization model to an UltraLite remote database, the batch file generated to run ulsync had an example CONNECTION string that incorrectly used my_db.db, rather than my_db.udb. A correct CONNECTION string in the batch file is now generated.
569124 When a Synchronization Model was modified to include either handle_DownloadData or handle_UploadData events, the model file could not have then been re-opened. An error message would have been displayed stating "unknown or missing event ID handle_DownloadData" or "unknown or missing event ID handle_UploadData". This has been corrected.
569127 The result set returned from calling the system procedure dbo.sp_jdbc_primarykey() may have contained more rows than it should. This problem was introduced by the changes made for Engineering case 531119, and has now been fixed.
569298 In some cases, it was possible for recursive UNION queries to give incorrect results. This has been fixed.
569307 A SQLAnywhere service requiring authorization returned realm information based on the request URL. This has been fixed. The realm is now always set to the database name (or its alias) regardless of the request URL.
569314 The datepart() function could have returned an incorrect result for the CALWEEKOFYEAR and CALYEAROFWEEK date parts for dates greater than December 29 of years for which January 1 of the following year falls on Tuesday, Wednesday or Thursday. The first week of a year is defined as the week containing the year's first Thursday. All days in that week should have the same CALWEEKOFYEAR and CALYEAROFWEEK values, even for days in the previous year. This has been fixed.
569316 If an application connected using the iAnywhere JDBC driver and created a very large batch, containing either long binary or long varchar parameters, then executing the batch may have given a strange out of memory error dialog after which the application would have crashed. The driver has now been modified to allow such large batches to be executed; however, any such batches that require a very large amount of contiguous memory to be allocated will be executed one row at a time, instead of being batched. In addition, whenever the driver decides to execute a batch one row at a time, a SQLWarning will be returned on the executeBatch() call indicating that the "batch was executed in single row mode due to memory limitations".
569323 If the disk that the SQL Anywhere Monitor was resident on was in a low disk space situation, the Monitor would have generated disk space low alerts every 5 minutes instead of the default of generating the alerts every 30 minutes. This has been fixed.
569327 If an application made an external environment call to a connection scoped external environment process, and that process then set an error and exited, then there was a chance the server would have crashed. This problem has now been fixed.
569330 The server could have crashed, or failed an assertion, if a materialized view had been disabled soon after an update. This has been fixed.
569509 The MobiLink Listener would have gone into an infinite loop light weight polling continuously, without respecting the polling interval, when communication errors continue to occur. This has now been corrected.
569510 HTTP light weight polling may have failed with communication errors. This has been fixed.
569513 When an error or a timeout was detected between request phases of an http request-response cycle, the Relay Server outbound Enabler was not disconnecting the backend in a timely manner. This has been corrected.
569516 The Relay Server Outbound Enabler (RSOE) may have produced bad http requests. While relaying a packet of a http request, the RSOE would have reconnected to the backend server when the connection was lost, even if it was at the request boundary, producing a bad http request. This has been fixed by introducing a reconnect retry at request boundaries to improve robustness, and replace reconnect with an error for non-boundary packets.
569520 Dynamically added backend server farms, or servers, may have been incorrectly disabled. This is fixed.
569543 The SQL Anywhere Monitor could have reported "too many errors" or "too many failed syncs" alerts when it should not have. This has been fixed.
569704 Very complex queries, with more than 20 tables being joined, that were being optimized using the 'FIRST-ROW' optimization goal, may have had inefficient access plans. This has been fixed.
569753 A database server acting as the mirror server in a mirroring system, could have hung in rare cases. This has been fixed.
569759 Executing the CREATE ENCRYPTED DATABASE or CREATE DECRYPTED DATABASE statement would have caused assertion 100202 if the source database was already running and the filename given in the statement did not contain the '.db' suffix. This has been fixed.
569776 When processing a SIMILAR TO, REGEXP or REGEXP_SUBSTR expression and the request_timeout option was set, incorrect results could have been returned. If the request_timeout option was not set, it was possible for a cancelled expression to have taken several seconds, or more, to respond. This has been fixed.
569778 If an application made a PHP external environment call that generated a large message, and then called exit(), there was a small chance that the server would have crashed. This problem has now been fixed.
569784 If a procedure definition did not contain a RESULT clause, and returned its results from a SELECT statement with a TOP n clause that used variables, describing a query of the form:

SELECT *

FROM proc()

could have been incorrectly described by the server as having a single column with the name "expression". The result set returned by the statement would have had the correct schema. This has been fixed.

Calling the procedure directly (i.e. call proc()) was not affected by this problem, and would be correctly described, so this statement can be used as a workaround. Describing the schema of the result set using a RESULT clause is also a workaround. To fix procedures created with older servers, an ALTER PROCEDURE <proc> RECOMPILE has to be executed for each such procedure.

569797 When unloading or extracting a database into a new database that was created with strong encryption, the Unload and Extract Database wizards would have display the encryption key in plain text in the Unload or Extract Database Messages Dialog. This has been corrected so that now the encryption key is displayed as "***".
569931 If a user-defined function using the Transact-SQL dialect issued a RAISERROR statement, and that function was called from another Transact-SQL function, the calling application could have failed to receive the error. In some cases, this would result in the application hanging. This has been fixed.
569932 While performing certain operations that require sorting large amounts of data, such as creating an index, established temporary space limits that were set using the "max_temp_space" database option, could have been violated. This has been fixed.
569934 The server has been improved such that queries of the form:

SELECT [...,]contents[,...] FROM dir_table WHERE [...AND] file_name=[string|variable] [AND...]

now execute much faster. In the above example, dir_table is a proxy table to a directory access server, the WHERE clause contains zero or more AND clauses and no OR clauses, and one of the predicates in the WHERE clause is of the form file_name=[string | variable].

569942 If an application that was connected using Open Client executed a query that generated a large column name, then there was a chance the application would have exited with a TDS protocol error. This problem has now been fixed.
569951 The number of rows affected was not being reported following the execution of a TRUNCATE TABLE statement. This has been fixed.

Execution of a TRUNCATE TABLE statement would have failed with an SQLE_UNCOMMITTED_TRANSACTIONS error ("You cannot synchronize or upgrade with uncommitted transactions <table name>"), if there were any uncommitted transactions, even on the current connection. This has been fixed. The TRUNCATE TABLE statement will now only report an error if there are uncommitted inserts and updates on another transaction. With this respect, TRUNCATE now behaves exactly like DELETE.

569952 If an error occurred in the middle of the execution of a TRUNCATE TABLE statement (11.0.1) or API (11.0.0, 11.0.1), a rollback of the deletes would not have been done. This has been fixed.

Synchronizations with the special truncate table download_delete_cursor may have resulted in a fatal error if a second connection did a commit after the truncate was applied, but before the the synchronization completed. This would have occurred only if there were more than a few rows in the table being truncated (248 for 1K page size). This has been fixed.

570093 If a SELECT statement contained the clause FOR UPDATE BY LOCKS, and a cursor was opened without specifying updatability cursor flags from the client application, then the BY LOCKS specification could have been incorrectly ignored by the server. This would only have happened if the statement was a simple query that was processed bypassing optimization. The consequence of this was that intent locks would not have been taken on the table being scanned. The only API affected by this problem was Embedded SQL.

Also, if a statemented executing at isolation 3 used an index scan for a table marked for update, then the rows of the table could have incorrectly been locked with exclusive (write) locks, instead of intent locks. The consequence of this was that other connections attempting to read the row could have blocked, even if the row was ultimately not modified.

These problems have now been fixed.

570094 The server would have crashed when parsing a procedure that contained a CASE statement with a WHEN clause which had an unary search condition other than ISNULL. When unparsing the WHEN clause the server was expected a binary search condition and crashed when attempting to access the second operand. This has been fixed.
570098 In some circumstances, a 10.x server could have hung at shutdown if a parallel backup had been performed, or an outbound HTTP connection (SOAP, etc) had been used. When those features were used on an 11.x server, the server would not have hung at shutdown, but unpredictable behaviour (crash, hang) could have occurred at runtime. This problem has been fixed.

Note that the likelihood of encountering the problem with 11.x servers is extremely small.

570115 Character set translation wasn't being done properly by the SQL Anywhere Python driver. Unicode encoding and decoding errors were possible, as well as incorrect translations. This has been fixed so that conversions are based on the connection's CharSet property.
570116 The mirror server in a mirroring system could have hung while processing log pages received from the primary server. This has been fixed.
570128 A small amount of memory was being leaked when a CREATE ENCRYPTED DATABASE or CREATE DECRYPTED DATABASE statement was executed. This has been fixed.
570140 Attempting to insert a binary or varbinary variable, or host variable, into a Microsoft SQL Server proxy table with an image column would have failed with an 'invalid precision' error when the length of the binary value was between 8001 and 32768 bytes. This problem has now been fixed.
570141 In rare cases, the mirror server in a mirroring ssystem could have crashed at shutdown. This has been fixed.
570144 The Relay server's configuration file has a 64k size limit that, if exceeded, can caused the Relay Server to fail on start up. This limit has been removed. This limit was not affecting dynamic growth of configuration.
570308 Attempting to return a result set from within a BEGIN ATOMIC block would caused a memory leak in the server. This has been fixed.

Note that returning a result set from within an atomic block is not allowed, and an error is issued in this case. This behaviour has not changed.

570369 The listener may not have substituted action variables properly in some cases. The light weight polling handler would have substituted the variables $ml_user, $ml_password and $ml_connect with undefined values, as they were thought to be irrelevant in unauthenticated light weight polling. This has been fixed. They will be substituted properly into the action string and, if they are not specified, the values will be empty. Action variables in irrelevant contexts would have been substituted with undefined values as well. This is too is fixed, by not not be substituting them at all. For example, using $poll_key in the action string of a non-light-weight-polling handler will now result in $poll_key without substitution instead of an undefined result.
570468 When attempting to create a proxy table, if the connection was subsequently cancelled, either explicitly or implicitly, by shutting down the database or server, then there was a small chance the server would have crashed. This problem has now been fixed.
570473 On Linux systems, it was possible that the SQL Anywhere Monitor would have failed to start. When the Monitor starts up, it explicitly sets the location of the installed Java VM to ensure it always uses the Java installation shipped with the Monitor. Unfortunately, because of the case-sensitive nature of paths in Linux, it was possible that the path set was not being picked up properly. This has been corrected so that the Monitor now uses the correct case for the path on Linux.
570476 A SQLAnywhere service, processing an x-www-urlencoded (standard GET or POST) HTTP request which calls HTTP_VARIABLE() with an @BINARY attribute, will return %-encoded (URL encoded) data. This has been fixed. An @BINARY attribute will now implicitly decode the value without character set translation. A new attribute, @TRANSPORT, has been added to allow the return of data in its raw HTTP transport form. With this change, HTTP_VARIABLE may retrieve x-www-form-urlencoded values in three different forms:

* No attribute - return a value that is %-decoded and character set translated to the database character set encoding. %-encoded UTF-8 decoding is supported. This should be the default usage for retrieving textual x-www-form-urlencoded data.

* @BINARY should be used to retrieve x-www-form-urlencoded binary data values. The value is %-decoded with no character set translation, UTF-8 %-encoded data is not supported in this mode since %-encoded data are simply decoded into their equivalent byte representation.

* @TRANSPORT will return the raw HTTP transport form of the value, where %-encodings are preserved.

This change does not impact the usage of @BINARY for multi-part/form-data form based uploads. The use of @TRANSPORT in this case is identical to @BINARY. Prior to this change, the work-around was to HTTP_DECODE the value returned by the HTTP_VARIABLE function when it was called with an @BINARY attribute.

570493 In very rare cases, if an event fired while a database was being shutdown, the server could have crashed. This has been fixed.
570503 When using secure streams and an invalid TLS handshake occured, the MobiLink server could have waited for a full network timeout period before disconnecting. This has been fixed. The MobiLink server will now immediately terminate the network connection with a "handshake error" error message.
570650 Using the TRANSACTION LOG TRUNCATE clause on the BACKUP DATABASE statement could have lead to the error "Assertion failed: 100910 Error renaming transaction log file before deleting it." This would have occurred when the user under which the server was running did not have delete permissions on the directory where the transaction log was located. Now, the server no longer deletes and re-creates the transaction log file, instead it truncates the file to one page. This should also prevent any interaction with virus scanners and disk defragmenters, which was often the case when files were being created.
570652 If a version 10.x or later database had a torn (ie "partial") write in the checkpoint log, the server could have reported assertion failures, including 201866 (only on 10.x servers), 201869 (only on 11.x servers), 200502, 200505, or 200512. In the case of a single torn write, these failures should not have been reported, and the database should be recoverable once the server is upgraded to include this fix. If upgrading the server does not resolve the assertion failures, the database is likely corrupt and does not just have a torn write.
570656 If a MobiLink synchronization script included the two characters "ui" inside an {ml ...} structure for named parameters, and the "ui" characters were not part of a named parameter, then MobiLink would have incorrectly replaced the "ui" with a question mark when it sent the command to the consolidated database. For example, the following script would have had no problem, since the "ui" in this case was part of the named parameter "build":

INSERT INTO t1(pk,build) VALUES ( {ml r.pk}, {ml r.build})

However, the following script would have failed, because the "ui" in the column list for the insert would have been replaced:

{ml INSERT INTO t1(pk,build) VALUES ( r.pk, r.build )}

This has now been fixed.

570690 The "Longest Active Synchronization Time" and the "Longest Active Wait for a Database Worker Thread" metrics were incorrect in the SQL Anywhere Monitor, and the monitoring values printed by the -ppv options LONGEST_SYNC and LONGEST_DB_WAIT, would have been incorrect. These metrics in the Monitor had the incorrect sign, but the absolute values were correct; essentially the graph was drawn upside down. A side effect of this is that the alert on these metrics would never be raised. These issues have been fixed.
570738 In very rare, timing dependent cases, a server backup could have hung while starting up. This has been fixed.
570799 When exporting to an UltraLite database using the Export wizard, the corresponding OUTPUT statements added to the command history would have been incomplete if no password was given for the UltraLite database. This has been fixed.
570884 The FIPS module is now supported by the SQL Anywhere server and clients on 64-bit Windows, and 32-bit and 64-bit Linux.
570896 In rare circumstances the server may have crashed when a new HTTP connection was created. This has been fixed.
570903 In very rare circumstances it was possible for the SQL Anywhere JDBC driver to have caused a crash in the Java VM. The Hotspot log generated for the crash would most likely have indicated that the crash occurred while attempting to construct a class cast exception. This has been fixed.
570915 When the iAS ODBC driver for Oracle was used by the MobiLink server to upload multiple CHAR type columns to a consolidated database running on an Oracle 9.2.0.8 server, it could have failed with the error;

"ORA-01461: can bind a LONG value only for insert into a LONG column"

This problem has now been fixed.

570923 If a database error occurred when trying to install or update the MobiLink System Setup, the error message would have included the SQL statement that was being executed, which could have lead to the message box being too large for the screen. This has been fixed. Now the SQL statement is only shown when the Details are shown.
570928 If a statement was executed with a hash group by operator, and there was an aggregate function AGG( DISTINCT x ) for a blob value x, it was possible in some situations for the server to have crashed. This has been fixed.
570940 On Japanese Linux systemss, the Service utility (dbsvc) would not have output any messages. This has been fixed.
571029 If an application attempted to execute a batch with a long binary or long varchar column, and the values within the long columns were large, and the batch size was also reasonably large, then the iAnywhere JDBC driver may have given an 'out of memory' dialog, even though the Java VM still had lots of memory available. This problem has now been fixed.
571215 If two grouped queries appeared in different outer joins with an unquantified expression in the group-by list, it was possible for NULL to be substituted for the unquantified expression value elsewhere in the query. For example, the following query could have returned NULL incorrectly for columns A1, A2:

select today(*) A1, D2.A2, D3.A3

from dummy D1

left join ( select today(*) A2 from sys.dummy group by A2 ) D2 on 1=1

left join ( select today(*) A3 from sys.dummy group by A3 ) D3 on 1=0

This fault could have lead to the following (non-fatal) assertion failure:

Run time SQL error -- *** ERROR *** Assertion failed: 102501 (10.0.1.####)

Work table: NULL value inserted into not-NULL column

SQLCODE=-300, ODBC 3 State="HY000"

This has been fixed.

571233 When the -pi option 'ping MobiLink server' was used on the MobiLink client (dbmlsync) command line, dbmlsync would have returne an exit code of 0 (indicating success), even if it was unable to contact the Mobilink server. This has been fixed, and a non-zero exit code will now be returned in this case.
571242 If a non-existent stored procedure was called with argument names in the CALL statement, the server would have returned the misleading error message: "Parameter '' not found in procedure '???'". This has been fixed so that a prcedure not found error is returned.
571252 The INPUT USING, or Import Wizard, was not able to import REAL values from a SQL Anywhere database to an UltraLite database. This has been fixed.
571253 When installing only the MobiLink components on Linux systems using the 1.0.1 GA install, the dbfhide utility was not installed. This utility should be installed, as it is used for both MobiLink and Relay Server setup. This has been corrected.
571267 In the SQL Anywhere Monitor, the 'Total CPU Time' displayed for MobiLink resources would have been unreasonably large. This was due to the values being scaled as milliseconds, rather than as seconds. This has been fixed and the values are now correctly displayed in seconds.
571282 When creating a synchronization model, if a custom download subset was choosen, without specifying one or more tables to join, then the download_cursor events would not have been generated. Instead errors like the following would have appeared as comments in the Events editor:

/*

* ERROR: Unexpected error encountered while generating event.

* Error for: RHS of #set statement is null. Context will not be modified. table-scripts\download_cursor.vm

* [line 59, column 8]

*/

This problem only happened in the New Synchronization Model wizard, not when custom download subset was enabled in the Mappings editor. The problem has been fixed for new synchronization models.

To work around the problem, in the Mappings editor change the Download Subset (Dnld. Sub.) to None and then back to Custom, then switch back to the Events editor.

571284 The server may have crashed following execution of an ALTER TABLE statement that added or modified columns with a DEFAULT or COMPUTE clause, if all materialized views had been dropped since the last server start. This has been fixed.
571436 A statement that used subsumed ORDER BY clauses in aggregate functions would have failed with a syntax error. This type of statement was executed without an error in version 9.0.2, and has now been fixed.

For example:

select list(e1 ORDER BY e2, e3 ), list( e4 ORDER BY e2,e3,e5)

from ....

The first ORDER BY clause 'e2, e3' is subsumed by the second ORDER BY clause 'e2,e3,e5'.

571460 On Linux systems, the Service utility (dbsvc) would not have honored the -pr (nicelevel) and -a (user) command line options. This has been fixed.
571465 If a network error occurred in the MobiLink Monitor, the SQL Anywhere Monitor, QAnywhere, or the Notifier, there could have been garbage characters trailing the error string.

For example:

"The server monitor was unable to contact the MobiLink server. The host 'mlstress02' is still available. Error: Timed out trying to read 128 bytes. rWms"

This has been fixed.

571611 On Linux systems, the server could have used larger amounts of memory than intended under some circumstances. Affected functionality included external function calls, the Java external environment, outbound HTTP connections, and remote data access. This has been fixed.
571620 OEMs now have the ability to prevent users from saving connection passwords with favorites. To do this, add the (new) "allowPasswordsInFavorites" directive to the "dbisql" section of the OEM.INI file:

[dbisql]

allowPasswordsInFavorites=false

Allowable values for this directive are "true" and "false". The default is "true". If this directive is added to OEM.INI, and its value is "false", the visible change is in the "Add to Favorites" window: the checkbox called "Save the connection password" will not be visible, and will be assumed to be unselected.

571624 If an application executed a query that generated a warning, and that warning was attached to a Statement, PreparedStatement, CallableStatement or ResultSet object, and the object was subsequently closed without calling clearWarnings() first, then the JDBC driver would have leaked memory. This problem has now been fixed.
571625 If an application called DatabaseMetaData.getCatalogs(), DatabaseMetaData.getSchemas() or DatabaseMetaData.getTableTypes(), then the JDBC driver would have leaked a very small amount of memory. This problem has now been fixed.
571628 If an application called a stored procedure which in turn called a proxy procedure, and the local stored procedure generated a warning prior to calling the proxy procedure, then the server may have returned the error: "remote server not capable". This problem has now been fixed.
571643 When editing a table's schema with the table editor, typing a Ctrl or Alt key combination could have initiated editing of the focused cell and either selected a menu item or opened a menu. This has been corrected so that typing a Ctrl or Alt key combination now performs the latter operation,and does not initiate editing.
571671 When editing a synchronization model's mappings with the table or column mapping editors, typing a Ctrl or Alt key combination could have initiated editing of the focused cell and either selected or opened a menu. This has been corrected so that typing a Ctrl or Alt key combination only performs the latter operation, and does not initiate editing.
571806 The server may have returned the nonfatal assertion error 102605 "Error building columns" when a query used a complex subselect on the Null supplying side of an outer join.

For example:

select V1.N1

from T1 V0

left outer join

( select 'M' as N1

from ( select V4.c as xx

from T2 as V4,( select count(*) as N3 from T3 ) V3

where V4.b = V3.N3 ) V2

) V1

on V0.a = V1.N1

This has now been fixed.

571810 MobiLink clients (except for UltraLiteJ) now cache the host socket address to avoid extra calls to socket methods, such as getaddrinfo, inet_addr, and gethostbyname, for non-persistent HTTP and HTTPS synchronizations.
571817 NCHAR, NVARCHAR, and LONG NVARCHAR values from a SQL Anywhere database were exported as CHAR to an Oracle database if DBISQL had to create a table in the Oracle database to hold the data. This has been fixed.
571957 The server could have generated a dynamic memory exhausted error when trying to execute

a very complex statement. This has been fixed. The server will now return the SQL error

SQLSTATE_SYNTACTIC_LIMIT.

571988 Fetching the connection property 'ServerNodeAddress', would have incorrectly returned the client's node address rather than the server's. This has been fixed.
572122 When a Synchronization Model was created and deployed on Unix systems, the created .sh files had statements like "if [[ value == value ]] ". The "[[", " ]]" and "==" were syntactically incorrect, causing error messages. This has been fixed.

Also when running an mlsrv.sh file with an argument that contained spaces, such as "dsn=SQL Anywhere 11 Demo", would have failed. The connection string is now quoted within the file to correct this.

572123 When deploying a Synchronization Model on Unix systems, generated .sh files were not created with executable permissions set. A workaround was to run "chmod a+x" on all of the .sh files. This has been fixed. Now executable permission is set for everyone when .sh files are generated.
572124 Opening a previously deployed and saved Synchronization Model file with a new remote database, and then trying to deploy it using the last settings, would have failed with a file error while recreating the remote database. This has now been fixed.

A workaround is to manually delete the remote database and transaction log before redeploying.

572158 After application of an EBF, Sybase Central, and/or the Interactive SQL utility, may not have been able to connect to a database. The Sybase Central and dbisql fastloaders were not being terminated during the install of the EBF, resulting in a reboot prompt due to locked files. If the reboot prompt was ignored, the locked files are not updated which could result in various connection failures. This has been fixed.
572179 On Linux systems, the Service utility (dbsvc) would not have stopped MobiLink services correctly. This has been fixed. The correct command was correctly echoed to the console but not actually executed. A workaround is to execute the command that was echoed.
572187 Multi-index scans which return very few rows were having their cost underestimated during query optimization. This may have resulted in multi-index scans being chosen incorrectly, which may have impacted the performance of the query execution. This has been fixed.
572196 It was possible for the MobiLink client (dbmlsync) to have sent an incorrect last download timestamp up to the MobiLink server, if dbmlsync had been running on a schedule, and ALL of the following had occurred during the last synchronization :

1) All of the data in the download stream had been applied, but had not yet been committed to the remote database.

2) An SQL Error had been generated by dbmlsync before the download had been committed. Examples of errors that could have occurred include an error occurring in the sp_hook_dbmlsync_download_ri_violation or the sp_hook_dbmlsync_download_end hooks, or an error occurring as dbmlsync had attempted to resolve referential integrity issues.

3) Another hook had been defined in the remote database that would have executed on another connection. For example, the sp_hook_dbmlsync_download_log_ri_violation or the sp_hook_dbmlsync_all_error hooks would have executed on a separate connection.

This problem has now been fixed, and the proper last download timestamp is now sent up to the MobiLink server in the synchronization when this situation occurs.

572347 For specific classes of the UPDATE statement, it was possible for the server to consume too much memory while processing the request. In extreme cases, the server could have failed with an out-of-memory error. This has been fixed.
572544 During full text searches using a text index with a GENERIC term breaker, if a CONTAINS query contained a phrase with a term longer than MAXIMUM TERM LENGTH, the positional

information for the term could have been lost. This could have caused incorrect results to be returned. This has now been fixed.

Example:

Consider a text index on col1 of table t, built using a text configuration with MAXIMUM TERM LENGTH equal to 7, MINIMUM TERM LENGTH equal to 1:

SELECT t.*

FROM t CONTAINS( col1, '"there is an elephant at the zoo"' );

Before this fix, the query above would be equivalent to:

SELECT t.*

FROM t CONTAINS( col1, '"there is an at the zoo"' );

and would miss documents containing the phrase "there is an elephant at the zoo".

572547 When resetting a SQL Anywhere resource from the SQL Anywhere Monitor, it was possible that the reset dialog would have been dismissed before the reset operation had completed. This has been fixed.
572549 On Solaris systems with a non-UTF8 locale (eg. GB18030), when installing SQL Anywhere to a path containing MBCS characters, the installer would have failed to register the Sybase Central plugins. This has now been fixed.
572556 If the command line options -nogui and -onerror exit were used, and a connection could not be opened, when there was no command tail and connection parameters are given, dbisql did not quit and entered interactive mode. This has been fixed so that dbisql now quits with error code 9 ("could not connect").
572935 If an UNLOAD ... INTO VARIABLE or UNLOAD ... INTO CLIENT FILE statement was used to unload either a table or a query containing an NCHAR column, the database server could crashed if the NCHAR character set was did not match the destination character set. This problem has been fixed.
572936 After running for several days, it was possible that the SQL Anywhere Monitor would have stopped checking if SQL Anywhere resources had updates available. This has been fixed.
572961 When the SQL Anywhere Monitor starts, it starts monitoring all the resources that are defined. If many resources were being monitored, this startup process could have taken several minutes, and caused degraded performance on the computer running the Monitor. A change has been made that attempts to alleviate these problems by having the Monitor be more conscious of limited system resources when the it starts. This improves the startup time of the SQL Anywhere Monitor when it is monitoring many resources.
572968 A small amount of memory was being leaked on every synchronization by the QAnywhere Agent for Ultralite. This has been fixed.
572973 During a large download, an out of memory error could have occurred on BlackBerry devices and simulators. This has been fixed. The row limiting algorithm has been improved, increasing the capacity of large downloads. To enable row limiting, first enable lazy loading of indexes, then use ConfigPersistent.setRowMaximumThreshold() and ConfigPersistent.setRowMinimumThreshold() to appropriate values (try 50,000 / (maximum cols per table + 1)).
573160 If an initial database size was specified in a CREATE DATABASE statement or with the -dbs option on the Initialization utility (dbinit), the resulting database would have been slightly larger (about 2MB) than the requested size. This has been fixed.
573172 The server could have become deadlocked if the 'wait after end' option was used when performing a backup. This has now been fixed.
573208 Full text searches, where both arguments to the NEAR operator were the same token, would have matched documents containing a single copy of the token. This has been fixed.
573222 Support for FIPS 140-2 certified encryption has now been added to 64-bit Windows for UltraLite (except UltraLiteJ) and MobiLink clients .

If the "FIPS-approved Strong Encryption" feature is not already installed, proceed as follows after applying the EBF:

- From Add & Remove Programs, select SQL Anywhere 11 and click the Change button.

- Select the Add option and enter the Add-on Registration Key and click Next.

- In the dialog, ensure that the "FIPS-approved Strong Encryption" feature is selected and proceed.

If the "FIPS-approved Strong Encryption" feature is already installed, proceed as follows after applying the EBF:

- From Add & Remove Programs, select SQL Anywhere 11 and click the Change button.

- Select the Modify option and de-select the "FIPS-approved Strong Encryption" feature, to temporarily remove it, and proceed.

- Again from Add & Remove Programs, select SQL Anywhere 11 and click the Change button.

- Select the Modify option and select the "FIPS-approved Strong Encryption" feature and proceed.

573228 When concurrent connection requests were made to servers running on multi core or multi processor Unix systems, connections could, in rare cases, have hung, received communication errors, or otherwise failed. This has been fixed.
573427 When creating, duplicating or renaming an object, Sybase Central would have performed a case-sensitive comparison to determine if an object with the same name already existed in the database. Now, a case-insensitive comparison is performed.
573452 Fetching a result set may, on rare occasions, have caused an application that connected using a newer version of Open Client 15 to hang or give a protocol error. In addition, cancelling a request may also have caused the application to hang or give a protocol error. These problems have now been fixed.

Please note that if an application does use Open Client 15 to connect to SQL Anywhere, then it will be necessary to update the version of Open Client 15 once this fix is installed.

573456 On Windows x64 systems, attempting to start the MobiLink server with the -xo command line option (specify network protocal and options for version 8 and 9 clients), would have failed with a missing dll error if HTTPS was requested. The dll mlhttps11.dll was missing from the install. This has been corrected.
573614 If requests were made to close several connections at the same time, then the server may have taken much longer than necessary to close all the connections. This problem was very rare and not very noticeable, but has been fixed.
573625 If an application asked for the connection status through the following ODBC API

SQLGetConnectAttr( hdbc, SQL_ATTR_CONNECTION_DEAD, ... )

after an error occurred, the iAnywhere Solutions ODBC driver for Oracle could told the application that the connection was still alive, even though the connection had actually been killed, or had timed out. If this problem occurred for the MobiLink server main connection, in most cases, the server would have displayed the following messages:

[10009] MobiLink table 'ml_scripts_modified' is damaged

[-10020] Unable to flush scripts

and refused any synchronization requests. This MobiLink server would then have needed to be be restarted in order to carry on any synchronization. This problem is fixed now.

573636 After performing a database backup, a warning message of the form "Unable to open backup log '...'" could have been sent to the client and console. Note that this warning came as a "message" to the client, not as a warning SQLCODE from the BACKUP statement. The problem was far more likely to have occurred on Windows Vista or later when running as a non-elevated process, as the server typically tried to write the log into the SQL Anywhere installation directory which is not typically writable by non-elevated pocesses. This problem was fixed by properly detecting which of the possible directories for placement of backup.syb were writable, and adding the %ALLUSERSPROFILE%\SQL Anywhere XX (XX=version number) directory to the list of possible directories. On Vista and later, the %ALLUSERSPROFILE% directory is typically C:\ProgramData. On earlier versions of Windows, it is typically C:\Documents and Settings\All Users\Application Data.
573824 The 32-bit Unix versions of the SQL Anywhere ODBC Driver Manager (libdbodm) would have leaked a very small amount of memory for every statement handle that was allocated and subsequently freed. The memory leak problem has now been fixed.

Note that the memory leak does not exist with the 64-bit Unix versions of the SQL Anywhere ODBC Driver Manager, and that the SQL Anywhere ODBC Driver Manager does not exist on Windows platforms. It should also be noted that several SQL Anywhere components on Unix platforms use the SQL Anywhere ODBC Driver Manager implicitly, and are therefore impacted by this problem. In particular, the server will use the SQL Anywhere ODBC Driver Manager for performing Remote Data Access operations; as well, the Mobilink Server uses the SQL Anywhere ODBC Driver Manager to talk to the consolidated database. Also, the iAnywhere JDBC driver uses the SQL Anywhere ODBC Driver Manager to make connections.

573839 In the Synchronization Model wizard, when creating a model using a consolidated database and an existing remote database, the mapping editor's column headings could have been incorrect. In particular, the "Consolidated Table" column would have incorrectly been labelled "Mapping Direction". This has been fixed.
573841 When starting a database created by a backup, particularly one created using BACKUP ... WAIT BEFORE START ... WITH CHECKPOINT LOG NO COPY, the server could have failed with an error of the form "Database cannot be started -- <log file name> not expecting any operations in transaction log". This problem has been fixed.

As a workaround, add "-a <log file name>" to the server's command line. When recovery completes, the server will shut down. Afterwards, restart the server normally (without the "-a <log file name>" option).

573843 In an UPDATE statement, no diagnostic error message was issued when a SET clause was not followed by a name. Thisn has been fixed so that an eroor message is now issue for this situation.
573990 When calling the SADataReader.GetBytes method into a binary or varbinary column with a null buffer, it would have thrown the exception "no current row of cursor". This problem has been fixed.
574014 In some circumstances, it may have taken longer than expected to shutdown a database when it was started and then immediately stopped. This would only have been noticeable if the following three conditions were true:

a) cache collection was enabled on the previous run of the database,

b) cache warming was enabled on the current run of the database,

c) the server accessed a large number of pages during the cache collection interval, i.e., the first queries executed against the database referenced a large number of pages (as may be the case in a scan of a large table or set of tables).

This has been fixed. Note, cache collection is on by default, and is controlled by the -cc server command line option. A workaround is to disable cache warming using the -cr- server command line option.

574022 When editing a table's schema using the table editor, the Cut, Paste, Delete and Undo toolbar button enabled states would not have been updated if the Ctrl key accelerators were used to perform these operations. This has been fixed.
574222 During a full text search, with a very long query containing conjunctive or disjunctive expressions only, the server could have failed with the error: "Text query parser error: parse stack overflow at or before character <n>". This has been fixed.

Examples of queries that would failed:

CONTAINS( col, 'apple & banana & tomato & cucumber & ..... & parsley' )

CONTAINS( col, 'dog | cat | camel | .... | chipmunk' )

where ... is a list of terms separated by the & or | operator.

574314 Attempting to modify a service that was already running using the Service utility (dbsvc) with the -w "create service" command line option would have failed. The utility would have deleted the server, but would not have been able to re-create it. This has been fixed. If the service is running, dbsvc will now report an error and will not delete the service.
574337 If MobiLink servers were running in a server farm against a very busy consolidated database, some of the MobiLink servers may have shutdown automatically, due to the fact that they were no longer able to maintain their liveness to the consolidated database. To fix this problem, a new MobiLink server command line option to supply server farm database connection parameters has been added:

-ca "keyword=value;..."

This new option can be used to let the MobiLink servers connect to another database that is running on a less busy database server, and then the MobiLink servers will use this

second database to maintain their state information for the server farm. This second database can be running on an SA, ASE, Microsoft SQL Server, Oracle, DB2, or MySQL database server. However, it must contain the MobiLink server system objects.

Note, the -ca command line option must be the same for all the MobiLink servers across the same server farm, otherwise, redundant synchronizations may not be detected and data inconsistency can happen.

574348 When deploying a Synchronization Model, and using a secure stream, the Deploy Wizard's Secure Stream Server Certificate page incorrectly referred to an "Identity certificate file" and the File dialog opened by the Browse button only showed certificate files (with .crt and .cer extensions). The wizard should have listed identity files (with a private key as well as a certificate, and .id file extension by iAnywhere convention). This has been fixed. Now the page is called "Secure Stream Server Identity", which refers to an "identity file", and the File dialog by default shows only identity files with .id extension, although listing .crt and .cer files is still an option (in case the .id extension is not used). A workaround is to change the filter to show all file types and choose an identity file.
574352 If a Synchronization Model was deployed to a location that contained a space in the name, or the deployed model contained a space in the name, then the remote and consolidated script files would not have functioned correctly. This has now been corrected. A workaround is to manually edit the files and quote any file paths that contained spaces.
574354 The iAS ODBC driver for Oracle could have crash in a stored procedure call, if the stored procedure contained char or varchar type INOUT parameters, and the data length of these parameters was greater than 2000 bytes (1000 bytes for driver versions, 9.0.2 and 10.0.1). This has now been fixed.
574364 If an application accessed a connection-scoped external environment via an HTTP request or from an event, then the external environment would have shut down when the HTTP request finishes or when the event completed. As a result, the next HTTP request or event that accessed the external environment required that the external environment be restarted. The server has now been improved such that starting an external environment is between 20% to 25% faster. Note that applications that use a database-scoped external environment (i.e. Java or CLR) will see a very modest performance improvement.
574473 The conflict() function, used with SQL Remote in RESOLVE UPDATE triggers, did not return correct results. The result of the function was always FALSE. This has been fixed.
574475 Under very rare circumstances, a client-side backup that truncates or renames the log may have hung the server. This has now been fixed.
574693 The QAnywhere Agent for UltraLite would have given a misleading error message if an invalid username or password was specified in the connection string. The error message that was being generated looked like:

Internal error: SQLCODE: -108, SQLSTATE: []

Source statement: SET OPTION isolation_level=read_committed

QAnywhere Agent failed to initialize message store

This has been fixed so that the agent now returns error code -103 as expected

574697 If a NUMERIC INOUT parameter was bound as SQL_PARAM_INPUT_OUTPUT, the result that was returned to the caller was always 0.

For example:

CREATE PROCEDURE _TEST_PROC

(

@IN_VAL1 NUMERIC(7, 0),

@IN_VAL2 NUMERIC(7, 0),

@OUT_VAL NUMERIC(7, 0) OUTPUT

)

AS

BEGIN

SET @OUT_VAL = @IN_VAL1 + @IN_VAL2

END

If the statement "CALL PROCEDURE _TEST_PROC( 100, 200, ? )" was prepared, and the third parameter was bound as SQL_PARAM_INPUT_OUTPUT, the result after execution was 0. It should have been 300. If the parameter was bound as SQL_PARAM_OUTPUT, the result returned was correct.This problem has been fixed.

Note that in the above Transact SQL procedure, OUT_VAL is an INOUT parameter, since Transact SQL parameters are always INPUT and the addition of the OUTPUT clause makes them INOUT.

574698 The QAnywhere Java clients could have gone into an endless loop, with 100% CPU usage, if it attempted to uncompress a message whose content has become somehow corrupted. This has been fixed so that the clients now return a suitable error message to indicate that it failed to retrieve the message.
574707 If an application made an external environment request, and the server was under heavy load, then there was a chance the external environment would have taken too long to respond to the request. In such situations, the server would have timed out the request and returned control back to the application. If the external environment responded to the request at exactly the same time the server timed the request out, then there was a very small chance the server would have hung. This has now been fixed.
574708 Executing a query that required a result set to be fetched from a remote table, could have in very rare situations, caused the server to crash. This problem has now been fixed.
574710 When the SQL Anywhere Monitor was run on Linux systems, and used to monitor a large number of resources, there is a very good possibility that the Monitor would have performed poorly. This problem only existed after applying the 11.0.1 build 2222 EBF. This problem has now been fixed.
574746 If an unknown connection parameter was provided to the ODBC driver, the driver would have given the error: "Parse Error: Invalid or missing keyword near '<unknown parameter>'". Some applications (for example, Crystal Reports in some cases) generate connection parameters which are unknown to SQL Anywhere, which resulted in connection failures. This has been fixed so that unknown connection parameters are now ignored. This returns the ODBC driver to the Adaptive Server Anywhere 9.x and earlier behavior.
574912 If a database contained a DISCONNECT event handler called E, and a transaction log containing a DROP EVENT E statement was applied to the database, recovery could have reported failed assertion 100904 ("Failed to redo a database operation ... Event E in use"). This has been fixed.
574920 A client side backup of a database with a path and filename length greater than 69 bytes in the client character set, could have failed or truncated the filename. This has been fixed.
574929 When an UltraLiteJ client did a ping-only synchronization to a MobiLink server, the authenticate_user connection event was not fired. This has been fixed. A work around is to sync a single table (download only) with a different script version, where that script does not have any upload or download scripts.
575116 The changes for Engineering case 569934 enhanced performance for directory access queries of the form:

SELECT [...,]contents[,...] FROM dir_table WHERE [...AND] file_name=[string|variable] [AND...]

These quesries now execute much faster as the "file_name=" predicate evaluation is now pushed down into the directory access server. Unfortunately, if the "file_name=" was specified as a fully qualified reference as in "dir_table.file_name=", then the predicate would not have been pushed down. This problem has now been fixed.

575121 n exceptionally rare circumstances, the server may have crashed when using user-defined data types with a DEFAULT clause. This has been fixed.
575142 Invalid metadata could have been constructed for a UNION DISTINCT operation. The Interactive SQL utility uses this metadata for display purposes when connected to an UltraLite database. This could have resulted in abnormal terminations for statements such as: "SELECT 1 UNION DISTINCT SELECT 2". This has now been corrected.
575149 The changes made for Engineering case 556453 introduced a bug that caused the Interactive SQL utility (dbisql) to crash when attempting to edit a DATE value in a result set. This has been fixed.
575181 If an UltraLite application had more than one open table or result set, and an attempt was made to execute the SQL SYNCHRONIZE statement, the UltraLite runtime would have returned the error SQLE_SCHEMA_UPGRADE_NOT_ALLOWED (-953). This has now been fixed.
575323 When executing a query that referenced a proxy table in another SQL Anywhere database, and made use of the newid(), strtouuid() or uuidtostr() system functions, it may have executed much slower than expected. This problem has now been fixed.
575325 When doing concurrent database operations during a synchronization, uploaded LONG VARCHAR or LONG BINARY columns could have been corrupted in the consolidated database. This is now fixed.
575490 Wide-fetching a query that referenced a proxy table could have returned the last row multiple times, instead of returning no rows and the SQLE_NOTFOUND warning. This has been fixed.
575493 The Unload Database or Upgrade Database wizards in the UltraLite plugin for Sybase Central could have failed if the XML file was located in a path that contained spaces. This has been fixed.
575495 When an INSERT or UPDATE was pending upload on a row, and there was a no-sync DELETE on the same row, there may have been a row left in the row page store for the table after the clean-up that is done after a successfull upload.

Had Index Persistence been turned off for the database and a row with the same primary key been inserted or downloaded afterwards, there would have been a primary key violation the next time the database was shutdown and re-connected to.

Also, primary key violations could have occurred on databases with Index Persistence tuirned off after error recovery from failed synchronizations.

These problems have now been fixed.

575516 When editing a Synchronization Model, deleting the "timestamp column name" (or another text box's contents) and then trying to switch to another Synchroniation Model without saving changes, would have caused an error to occur. This has been fixed.
575517 When using the Table Mapping editor, changed the sorting order of table mappings in the GUI may have displayed a prompt to save the model, even though no changes were made. This has been fixed.
575538 When the Relay Server Outbound Enabler's attempts to re-establish its channels to a Relay Server failed (for example, RelayServer still down), it could have occasionally quit further attempts. This has been fixed.
575539 If the Relay Server Outbound Enabler (RSOE) was connected to an Apache RelayServer, and then RSHOST was shutdown through a command line (rshost -s), then this would have caused the RSOE's up channel to enter a loop and issue an "Invalid opcode!" error message. This has been fixed.
575556 Executing queries with full outer joins or Transact SQL outer joins could have caused the server to crash, or behave unexpectedly, if a CONTAINS clause was present in the same query block as the join. This has been fixed.

Note, with Transact SQL outer joins, a CONTAINS clause is permitted only in the WHERE clause, and can only reference the preserved side of the join, not the null-supplying side.

575755 The Maintenance Release and EBF installs were not correctly updating the product version number in the .NET configuration file 'machine.config'. This has been fixed.
575760 When there is only one connection, the maximum number of prefetch rows has been increased to 10000. If there is more than one connection, the maximum number of prefetch rows remains unchanged at 1000.

Performance may improve when all of the following conditions are met:

- an application has only one connection

- fetching a result set with many thousands of rows

- each row in the result set has small number of columns

- the data size of the fetched columns is small

- prefetch is enabled

- the connection is over TCP/IP (shared memory connections are not likely to see a significant performance improvement)

575782 Under certain rare circumstance, a mirror server may have crashed on shutdown when processing a transaction log rename request. This has been fixed.
575783 When adding a SQL Anywhere resource to the SQL Anywhere Monitor, it was possible for the authorization dialog could have appeared twice. This has been fixed.
575787 The transaction log on the mirror server in a mirroring system may have become corrupt under rare circumstances. One example would be the mirror server processing a log rename request when the primary server disconnects. Should corruption occur, the database on the mirror server would have failed to start with the error "Can't use log file since it is shorter than expected." This has been fixed.
575790 If an application connected using the iAnywhere JDBC driver and fetched a large number of numeric values, then the fetch could have taken a long time. The iAnywhere JDBC driver has now been improved to fetch numeric values in a much quicker fashion if the numeric column has a precision that is less than or equal to 18 and a scale of 0. No performance improvements have been made if the scale is nonzero or if the scale is zero but the precision is greater than 18.
575983 When editing a DATE or TIMESTAMP value in a result set, the editor would not have accepted dates in the ISO format (YYYY-MM-DD). This has been corrected so that the ISO format is now accepted.
576008 If a query contained a LIKE predicate with a non-string value (Integer, Date, etc.), then it was possible for the predicate to evaluate a little more slowly than it could have. The non-string value was converted to NCHAR before the comparison, and this imposed additional overhead that was not present in previous versions. It is equivalent and faster to perform the comparison using VARCHAR, which is now how the comparison is done.
576009 The size of the stack used by some database server threads was not governed by the -gs and -gss server command line options. Some of these threads used stacks that were excessively large (1MB) for a CE environment, and could have lead to problems loading DLL's on some CE systems. These stack sizes have been reduced to 64K or less. The default stack size for request tasks is unchanged at 96K. Some versions did not allow a -gss value of less than 96K, but now values as low as 64K are permitted.
576016 Use of the "-f" command line option did not behave consistently when the fast launcher option was on. It would work correctly the first time, but subsequently running "dbisql -f filename" with a different file, would have opened the first file again. This has been fixed.
576120 The MobiLink server would have reported [-10001] 'Protocol error' during synchronizations, if a DROP INDEX had been issued against the UltraLite remote database. This has been fixed.
576213 If a SELECT statement included an alias specified as a single-quoted string, and the string contained a double quote or backslash, a syntax error should have been given, but was not. This has been fixed; an error will be reported in this case.
576252 Support for SQL Anywhere Explorer and SQL Anywhere Toolbar has been disabled for Visual Studio 2010. They still support Visual Studio versions 2005 and 2008.
576257 Changes have been made to the iAnywhere JDBC driver in order to improve fetch times for Date, Time and Timestamp values. Applications that are fetching a large number of Date, Time and/or timestamp values from the same ResultSet object, will now see a large improvement.
576263 If the CREATE DATABASE statement was used to create a database with a filename that contained a \n (for example CREATE DATABASE 'c:\\new.db'), the file_name column in the SYSFILE system table could have been incorrect. An incorrect file_name value would only have occurred if the CREATE DATABASE statement was issued when connected to a database other than the utility_db. This has been fixed.

Note, this problem did not affect the Initialization utility (dbinit), or applications calling the dbtools library.

576447 The SQL Anywhere Python support module (sqlanydb.py) did not set the rowcount attribute for UPDATE, INSERT or DELETE statements. This has been corrected.
576448 When run on Unix systems, if the redirector was configured to route to more than one backend, and one of the backend servers went down, the redirector could have failed to route requests to the live backend. In this case, the redirector would have added the error message "No machine is available to handle request" to the error log. This has been fixed.
576500 When a Synchronization Model was being generated for a MySQL database, columns that had been defined as nchar and nvarchar in the MySQL database, would have been mapped as char and varchar in the Synchronization Model. This has been fixed.
576501 If a Synchronization Model had a table mapping that was upload-only or download-only, then attempting to synchronize would have caused a warning that some scripts were missing. This has ben fixed by generating ignored scripts for the unneeded upload or download scripts, which suppressed the warnings. A workaround is to disable the warning, or create dummy scripts.
576669 Executions of a BACKUP DATABASE TO ... archive backup statement, using the "with checkpoint log no copy" clause, would have been slower than necessary, particularly when the transaction log file was large. This has been fixed.
576689 SQL Anywhere HTTP client procedures defined with a PROXY clause would have caused the server to crash. This has been fixed.
576709 A mirror transaction log file could have become corrupted after the file was grown. The error received would have been "Error: Cannot open transaction log file -- <mirror file name> is an invalid transaction log mirror." The server was failing to update the mirror log file size at the appropriate time. This has been fixed.
576913 If an application executed a remote query that must be handled in NO PASSTHRU mode, and the query contained many tables, then it was possible for the server to fail assertion 101508, instead of giving the "syntactic limit exceeded" error. This problem has now been fixed, and the error is now properly returned.
577092 Previously, the SQL Anywhere Python driver (sqlanydb.py) raised an OperationalError for all database errors. The driver now raises an IntegrityError for the following SQLCODEs:

SQLCODE Error

-193 Primary key for table '%1' is not unique : Primary key value ('%2')

-194 No primary key value for foreign key '%1' in table '%2'

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

-196 Index '%1' for table '%2' would not be unique

577109 If an application maked use of the Java in the database feature, and a JAVA stored procedure wrapper was defined such that the number of SQL arguments in the stored procedure was greater than the number of arguments defined in the Java method signature, then calling the Java stored procedure may have crashed the server. This problem has now been fixed, and a Java signature mismatch error will now be returned.
577129 On some Linux distributions (eg Suse 11), the server may have taken an exceedingly long time to write out a mini-core dump. This has been fixed.
577142 The MobiLink server would not have skipped a script that was defined to be ignored, if the script contained white space (spaces, tabs, and/or line-breaks) before the special prefix, '--{ml_ignore}'. This problem is fixed now.
577297 If a procedure was used in the FROM clause of a query, it was possible for the server to crash if the procedure result set had a particular form. This has been fixed.
577321 The MobiLink server with messaging (-m command line option) could have crash when used with an ASE 12.5.3 consolidated database server and the ASE ODBC driver version 15.0.0.140. This problem was introduced by the changes for Engineering case 560045, and has now been fixed.
577334 When using the SQL Anwhere C API (drivers for PHP, Perl, Python, and Ruby), applications executing RAISERROR with a user-defined error, would have seen the correct error code returned, but the error message was returned as "Unknown error". This has been fixed.
577512 Sybase Central plugins for Ultralite & QAnywhere were not being registered when deployed by the Deployment wizard. This has now been corrected.
577532 An application running under a Java VM in server mode, and fetching a large result set, will now retrieve the result set much faster.
577548 It was possible for the server to apply stale values in an UPDATE statement if concurrent requests issued UPDATE statements at isolation level 0 or 1. This would occur with particular timing when the UPDATE statements did not bypass the query optimizer, and neither UPDATE statement contained a join, or a subquery converted to a join. This has been fixed.
577714 The ADO.Net sample program LinqSample was not working correctly. This has now been fixed.
577928 It was possible for the server to crash when executing an UPDATE or DELETE statement for particular execution plans. This has been fixed.
577932 When deploying SQL Anywhere using the Deployment wizard, the PHP Extenv DLLs were being deployed (php-<PHP version>_sqlanywhere_extenv11.dll), but not the PHP SQL Anywhere DLLs (php-<PHP_version>_sqlanywhere.dll). These have now been added to the list of files deployed.
577938 Sybase Central could have occasionally reported an internal error on startup, when the Fast Launcher option was turned on. This has been fixed.
577974 Using an ADO.NET Entity Data Model object with an ASP.NET Web Site project did not work correctly. This has been corrected.
577984 When the Relay Server Outbound Enabler (rsoe) was shutdown, the message "<UpChannel-xxxx> networkRead: interrupted error errCode: 218, sysCode: 0" was written to the log file. This is a lower level error indicating the blocking read operation had been interrupted. This error message is redundant and confusing, and has been removed. An informational message will still be printed at a higher level.
578001 If an ODBC escape sequence was used that was preceded by a keyword, it was mangled by the Interactive SQL utility. The first and last characters were stripped off. This has now been fixed.
578130 If LOAD TABLE, or OPENSTRING were used, and all of the following conditions were true:

- ENCODING 'UTF-8' was specified

- the destination table has both CHAR and NCHAR columns

- the CHAR encoding was not UTF-8

- file data that was destined for a CHAR column contained illegal characters or characters which could not be converted losslessly to the CHAR encoding

the server could have crashed. This problem has been fixed.

578153 If a database created with a version 9 or earlier server was backed up via the Backup utility (dbbackup), or the BACKUP DATABASE statement, the backup copy could not have been unloaded using the Unload utility from version 10 or later. This has been fixed.
578172 Calls to the methods SADataReader and SADataAdapter would not have returned any data for temporary tables. An AutoCommit when opening a data reader would have dropped temporary tables. This has now been fixed.
578191 If a server had request-level logging enabled (eg -zr sql command line option) while the stored procedure debugger was being used (ie Sybase Central was in "Debug mode"), the server could have crashed. This problem has been fixed.
578292 If a scheduled event was defined, and the event made a CLR external environment call, then the server's, and the CLR external environment's, memory usage would have continued to grow in size with each execution of the event. Note that this problem was specific to the CLR external environment. The problem has now been fixed such that the server will now grow and shrink as needed, and the CLR external environment will shrink whenever garbage collection kicks in.
578346 On parallel systems, highly concurrent (tens of connections) temporary table modifications are now faster.
578365 In extremely rare circumstances, the internal representation of the lower bound of an index scan could have become corrupted for servers run on 32 bit systems. The problem could have manifested itself in many ways, although the most likely would have been an incorrect result set being returned. This has now been corrected.
578385 Following an initial install of version 11.0.1, the installer would have left incorrect information as to the version of the documentation that was installed, 11.0.0 instead of 11.0.1. Any method of checking for documentation updates, via the web page, at the end of install, using dbsupport, or using the Admin Tools, would then have used the incorrect version. This has now been corrected.
578401 The iAnywhere Solutions ODBC driver for Oracle could have held the socket descriptor and service handle, even when the database connection had been disconnected. This could have resulted in the driver running out of service handles with the following error: "ORA-12519: TNS:no appropriate service handler found". The OCI function, OCIServerDetach, was missing in the logoff function. This has now been corrected.
578612 An INSERT statement, with a VALUES clause containing subquery expressions, could have caused a crash. This has been corrected.
578616 If a server had a large number of connections making external environment calls, to the same database-scoped external environment, and the external environment process crashed due to heavy load, out of memory or some other reason, then there was a small chance the server would also have crashed. This has now been fixed.
578617 On Unix systems, an ANSI-only (no wide call support) ODBC driver is now available. The name of the driver is libdbodbcansi11_r. Only a threaded variant is provided. On Mac OS X, in addition to the dylib, the driver is also available in bundle form (dbodbcansi11_r.bundle). Certain frameworks, such as Real Basic, do not work with the dylib and require the bundle. The regular SQL Anywhere ODBC driver treats SQLWCHAR strings as UTF-16 strings. Starting in SQL Anywhere 10, when Unicode support in the Unix ODBC drivers was first introduced, the driver could not have been used with some ODBC driver managers, such as iODBC, which treated SQLWCHAR strings as UTF-32 strings. When dealing with Unicode-enabled drivers, these driver managers would translate narrow calls from the application to wide calls into the driver. An ANSI-only driver gets around this

behaviour, allowing the driver to be used with such driver managers, as long as the application does not make any wide calls. Wide calls through iODBC, or any other driver manager with similar semantics, remain unsupported.

578636 Support has now been added for the SQL statements CREATE PUBLICATION, ALTER PUBLICATION and DROP PUBLICATION. This change also includes support for publication predicates.
578818 A busy server could have crashed, or given an error, when updating a text index defined with the IMMEDIATE REFRESH clause. This has been fixed.
578859 The GUI launchers for the 11.0.1 Administration Tools no longer worked after Java for Mac OS X v10.5 Update 4 was installed. The following error messages would have appeared in the logs:

[JavaAppLauncher Warning] Java application launched from PPC or bad stub. Relaunching in 32-bit, and tagging sub-processes to prefer 32-bit with $JAVA_ARCH=i386.

[JavaAppLauncher Error] This process is [i386] and was re-exec'd from [i386], but for some reason we are trying re-exec to [].

[JavaAppLauncher Error] unable to find a version of Java to launch

This has been fixed.

There are two workarounds:

1. Use the command line launchers instead of the GUI launchers.

2. Run the following from a terminal:

. <SQL Anywhere 11 Installation Directory>/System/bin64/sa_config.sh

for TOOL in DBConsole.app InteractiveSQL.app MobiLinkMonitor.app

SybaseCentral.app ; do chmod +w "$SQLANY11/../$TOOL/Contents/MacOS/

JavaApplicationStub" ; cp /System/Library/Frameworks/JavaVM.framework/

Versions/A/Resources/MacOS/JavaApplicationStub64 "$SQLANY11/../$TOOL/

Contents/MacOS/JavaApplicationStub" ; done

Note, the portion of the script from "for" to "done" should be one single line.

578933 The FORWARD TO statement could have truncated the forwarded statements to roughly a database page size in length. This has been fixed.
578975 Under certain conditions, it was possible for the server to hang when performing operations with long strings. This has been fixed.
578990 If an application called DatabaseMetaData.getSystemFunctions(), the string returned would have contained the functions named dbname and username. The correct function names are database and user. This problem has now been fixed.
578998 When an application connected using the iAnywhere JDBC driver and attempted to describe the metadata of a table or result set that contained a char column, the metadata would have returned the type name of the column as Char, but the SQL type would still have come back as Types.VARCHAR. If a JDBC application wanted to get the JDBC driver to return the SQL type of Char columns as Types.CHAR, then the application was required to set the "odbc_distinguish_char_and_varchar" database option. As of SQL Anywhere 12 the new SQL Anywhere JDBC driver, and the deprecated iAnywhere JDBC driver, now return the type name Char and SQL type Types.CHAR for table and result set columns of type Char, and the typename Varchar and the SQL type Types.VARCHAR for columns of type Varchar, regardless of the database option setting.
579018 If an application created a proxy table and specified the remote owner in the location clause, then attempting to access the proxy table would have failed with a syntax error if the remote owner name was a keyword. This problem has now been fixed.
579150 The server may have crashed if a statement that referenced a proxy table was very complex and used alias names that depended on many other alias names. This has been fixed.
579215 The SQL Anywhere Python driver (sqlanydb.py) would have failed to load on Mac OS X systems as a result of failing to load the SQL Anywhere C API runtime library. The driver was looking for dbcapi.dll or libdbcapi_r.so, whereas on Mac OS X the file name is libdbcapi_r.dylib. This has now been corrected.
579219 Calling the function SQLGetInfo() function with the SQL_SQL92_STRING_FUNCTIONS information type returns a bitmask indicating which SQL 92 functions are supported by the database server.

The following bits should not be returned:

SQL_SSF_CONVERT

SQL_SSF_SUBSTRING

SQL_SSF_TRIM_BOTH

SQL_SSF_TRIM_LEADING

SQL_SSF_TRIM_TRAILING

as SQL Anywhere does not support the above SQL 92 functions (e.g., SELECT TRIM(BOTH ' ' FROM ' abc ').

Only the following following bits should be returned.

SQL_SSF_LOWER

SQL_SSF_UPPER

This problem has been fixed.

579233 When using the SQL Anywhere Python database interface (sqlanydb.py) the Cursor.rowcount attribute value was inaccurate under when calling executemany. The rowcount attribute was set to the number of rows affected/returned by the last execute in the series. This has been fixed. The rowcount attribute will now contain the sum of the row counts of the executes (or -1 if unknown).

Also, when the server returned an estimated, rather than an exact row count, Cursor.rowcount was set to a negative number, the absolute value of which was the estimate. Cursor.rowcount will now be set to -1 in this case.

579404 If MobiLick Client (dbmlsync) had been running as a server, and a client application had executed the ShutdownServer() method, the exit code from the dbmlsync executable would have been EXIT_FAIL, which indicated a general failure. This would also have resulted in the progress message text changing to "Synchronization Failed" on shutdown, although it was difficult to see on a desktop system. The dbmlsync executable now returns EXIT_OKAY in this situation, which also results in the progress message text changing to "Synchronization Succeeded" on shutdown.
579816 A new connection parameter has been added to the ODBC driver. This parameter (ESCAPE) allows you to specify the escape character used in the LIKE clause of SQL statements generated by the ODBC driver when returning a list of tables or columns.

By default the ODBC driver uses the tilde character (~), but some applications do not properly query the ODBC driver to see what escape character is used, and assume that it is the backslash character (\). With this new connection parameter, users can specify the escape character in the connection string to make these applications work properly.

"DSN=My Datasource;UID=xxx;PWD=xxx;ESCAPE=\;ENG=myserver"

579826 It was possible for an INSERT statement to fail with an inappropriate error "Invalid host variable". This error could have been given if a wide insert was performed on a table, followed by a procedure or batch statement issuing an INSERT to the same table. This has been corrected.

The problem can be avoided using "options(force optimization)" on the INSERT statement.

579837 The iAnywhere Solutions Oracle ODBC driver could not recognize synonyms of stored procedures. Thus an application, such as the MobiLink server, that uses this driver was not able to execute procedure synonyms if the DSN used by the application was configured with the "Procedure returns results" check box checked. This problem has now been fixed.
579948 The system procedure sa_index_density(), could have reported 'Cannot convert' errors. This has been fixed by changing the datatypes of the result set columns "density" and "skew" from numeric(8,6) to double. As a result, the definition of the sa_index_density procedure in the database must be replaced for the fix to take effect. This can be accomplished by executing: ALTER DATABASE UPGRADE PROCEDURE ON

A workaround is to rebuild the database prior to running sa_index_density. Re-creating or reorganizing the offending index may also be a workaround.

579981 The second argument for the system function get_identity() is the number of values to allocate. If this value was 0, the function did not adjust the next available value for the table. If no inserts into a table defined with a DEFAULT AUTOINCREMENT column had been made, get_identity('<table-name>',0) returned NULL. This has been fixed. A value of 1 will now be returned in this case.
580004 When describing arguments of a stored procedure called with non-positional arguments, no information was returned from the server.

For example:

CREATE PROCEDURE foo ( IN a INTEGER, OUT b INTEGER )

BEGIN

SET b = a * 2

END

No information was returned when describing input arguments for the statement "call foo( b=?, a=?)". This has been fixed.

580012 The changes for Engineering case 576257 resulted in a substantial performance improvement within the iAnywhere JDBC driver when fetching a large number of Date, Time or Timestamp values. New changes, which build on these earlier changes, make fetching Date, Time and Timestamp values even faster, when using the iAnywhere JDBC driver.
580016 Unexpected behavior could have occurred when IN predicates were used in subqueries in INSERT, UPDATE, and DELETE statements. This has been corrected.
580057 Using Sybase Central to triggering an event in a 9.x database, would have produced the error "Procedure 'sa_conn_list' not found" after the event was triggered. This has

been fixed.

580133 The OUTPUT USING statement's ability to export results to Excel files has been improved:

1. The CREATE TABLE ON clause is now supported. Previously, consistently creating tables was not possible, although exporting to existing tables worked.

2. If the table name was quoted with backticks, the output operation would have failed. This has been fixed.

3. The OUTPUT statement would not have worked at all if the USING clause contained "driver=" rather than "dsn=". This has been fixed.

4. Exporting a result set which contains primary key columns with the CREATE TABLE ON clause would have failed, as the Excel ODBC driver does not support the required SQL to designate primary keys. This limitation has now been worked around.

For datatypes that the OUTPUT statement cannot handle, such as BINARY or LONG BINARY, the user must do the conversion to a supported type explicitly. Note that the Interactive SQL utility in version 10 and earlier did allow exporting BINARY columns, although it simply treated bytes as characters when it wrote them to the Excel file. It's unclear whether that was a "good thing" in general. To emulate that behavior in now, use the following:

SELECT ID, Name, Description, Size, Color, Quantity,

UnitPrice, CAST(Photo AS LONG VARCHAR )

FROM Products;

OUTPUT USING 'DSN=MyEXCELDSN' INTO tabProducts CREATE TABLE ON

Also note that the Microsoft Excel ODBC driver treats the file as read-only by default. To write to the file, turn off the "Read only" flag in the DSN or, if not using a DSN, include "ReadOnly=0" as a connection parameter in the OUTPUT statement.

For example:

SELECT * FROM Departments;

OUTPUT USING 'Driver=Microsoft Excel Driver (*.xls);

dbq=c:\test\test.xls;ReadOnly=0'

INTO Departments CREATE TABLE ON

580146 If an application attempted to drop a user that had externlogins defined, then the server would have given an error indicating that externlogins were defined. The server behaviour has now been changed to quietly drop externlogins as part of dropping a user.
580168 When a NUMERIC or DECIMAL column with precision greater than 47 was fetched using OLE DB, ODBC, or JDBC, a memory buffer overrun would have occurred. This would have resulted in a corrupted heap. The client application may then terminate unexpectedly due to the corrupted heap. This problem has been fixed.
580174 If an application using the iAnywhere JDBC driver, created a scrollable, updateable Statement or PreparedStatement, created a ResultSet object off of the Statement or PreparedStatement object, called ResultSet.updateRow() to perform a positioned update of a row in the ResultSet, and then positioned the ResultSet to a row before the updated row, attempting to call next() to go beyond the updated row would have failed. A similar problem exists if the application positions the ResultSet beyond the updated row and then tries to call previous(). Both problems have now been fixed.
580186 An INSERT statement, with a VALUES clause containing subquery expressions, could have caused acrash. This has been corrected.
580190 If an error had occurred while the MobiLink client (dbmlsync) was applying a download, and there had also been referential integrity errors that dbmlsync could not resolve, then dbmlsync would have reported that the download had been committed, even though it had been rolled back. This has been corrected so that dbmlsync now correctly reports that the download was rolled back.
580191 Spacy tokens need to be quoted with double quotes. If the quoted token further contains spacy sub token then nested double quotes are need, and they need to be escaped with escape sequence. This was not working correctly when used in a MobiLink Listener (dblsn) configuration file. For example:

-l "subject=$remote_id;

content=sync cardealer;

action='run dbmlsync.exe -c \"filedsn=c:\my fdsns\CarDealer.dsn\" -ot dbmlsync.log -k -e sa=on';"

This works correctly on the command line, because the tokenizer of the commandline processor in the OS supports escaping double quotes using a backslash, but using the same command in a configuration file would have failed. This problem has been fixed by improving the common configuration file parsing routine to support <slash><slash> and <slash><double quote> as escape sequences for <slash> and <double quote> respectively. The escape mechanism is effective only inside a quoted token.

580222 If the MobiLink Server had been started with "-s 1" command line option, to indicate that the server should always apply changes to the consolidated database one row at a time, then the MobiLink Server would still have executed SAVEPOINT commands. SAVEPOINT commands are not needed when running in single row mode, so they are no longer executed when the MobiLink Server had been started with "-s 1".
580353 Queries with TOP or START AT clauses were incorrectly flagged with an error when they exceeded 64K. This restriction has now been removed.
580390 If both a BEFORE UPDATE and a BEFORE UPDATE OF trigger were defined on the same table, and the BEFORE UPDATE OF trigger was not the first to fire when an update was performed using INSERT ... ON EXISTING UPDATE, then the BEFORE UPDATE OF trigger would not have fired at all. This has now been fixed.
580391 The fix for Engineering case 529193 was not complete, which meant spurious referential integrity constraint violations could have been reported. This has been corrected.
580538 When connected to a slow server, immediately doing something to modify the contents of the "SQL Statements" field, would have cause the Interactive SQL utility to crash with the exception "java.lang.IllegalStateException: Attempt to mutate in notification". This has now been fixed.
580569 On some Linux systems, if the SQL Anywhere Monitor had been configured as a service to be started automatically after a reboot, monitoring could have failed. Automatic services wwere being installed with a priority "09". Some distributions install the network service with priority "10" and the network service would not have started until after the SQL Anywhere services had started, which led to the failure. This has now been fixed.

A workaround to correct this problem is to execute the following commands (requires administrator priviledges):

/opt/samonitor11/bin32/samonitor.sh uninstall

/opt/samonitor11/bin32/samonitor.sh install

580574 The Apache Redirector is now available for Apache 2.2 on Linux. The new file is named mod_iaredirect.so, and is located in <install-dir>/mobilink/redirector/apache/v22.
580590 The SQL Anywhere Python Database interface now supports the ability to register callbacks to control how database types are mapped into Python objects when results are fetched from the database server. Callbacks are registered using the new module-level "register_converter" method. This method should be called with the database type as the first parameter, and the conversion function as the second parameter. For example, to request that sqlanydb.py create Decimal objects for data in any column described as having type DT_DECIMAL:

import sqlanydb

import decimal

def convert_to_decimal(num):

return decimal.Decimal(num)

sqlanydb.register_converter(sqlanydb.DT_DECIMAL, convert_to_decimal)

Converters may be registered for the following database types:

DT_DATE

DT_TIME

DT_TIMESTAMP

DT_VARCHAR

DT_FIXCHAR

DT_LONGVARCHAR

DT_STRING

DT_DOUBLE

DT_FLOAT

DT_DECIMAL

DT_INT

DT_SMALLINT

DT_BINARY

DT_LONGBINARY

DT_TINYINT

DT_BIGINT

DT_UNSINT

DT_UNSSMALLINT

DT_UNSBIGINT

DT_BIT

DT_LONGNVARCHAR

580598 Tools such as the Data Source utility (dbdsn), which need to run as an elevate process to perform privileged operations on Windows Server 2008 R2, failed to do so and would have reported errors when run in an unelevated command shell. This has been fixed.
580599 The SQL Anywhere JDBC driver getTimeDateFunctions() call did not return the correct names for the CURRENT_DATE, CURRENT_TIME, and CURRENT_TIMESTAMP functions. It returned "current date,current time,current timestamp" instead of "current_date,current_time,current_timestamp". The same problem also existed in the iAnywhere JDBC driver. These problems have now been fixed.
580607 User Impersonation on IIS caused Win32Exception "Access is denied". This has been fixed.
580636 The Relay Server can be started automatically by the first Relay Server Outbound Enabler (RSOE) connection, but the connection may have failed within 1.5 seconds if the Selay Server's configuration file was too big. Thhe Relay Server will eventually have finished starting, but the RSOE would not have attempted to reconnect to the Relay Server. This has been fixed by allowing 15 seconds for the Relay Server to startup before giving up the the RSOE connection. RSOE reconnect attempts will be fixed in a separate issue.
580647 Setting a TIME column from a java.util.Date, with only time information filled in, could have failed with the Java 2 Micro Edition (J2ME). This has been corrected.
580735 In rare circumstances, transaction log corruption could have occurred, or the server could have haved assertion 100918 ('Invalid redo log page header'), shortly after restarting a database. The probability of this happening on any given database restart was approximately 1/pagesize (ie. for 4K pages, the probability is approximately 0.0002). The corruption was likely to go undetected, and the assertion was unlikely to fire in most cases. However, sites using Mobilink or SQL Remote would have been alerted to the presence of such corruption by errors occurring during synchronization. This has now been fixed.
580743 Editing a table on the "Data" tab in Sybase Central, or in the "Results" panel of the Interactive SQL utility, could have left the table locked until the tool disconnected from the database. The table lock could in turn have prevented other operations in Sybase Central from completing (e.g. the Unload Database wizard in the SQL Anywhere plug-in, or the Deploy wizard in the MobiLink plug-in). This has been fixed.
580744 When applying a software update (EBF), the attempt to migrate data from an old SQL Anywhere Monitor database to a new SQL Anywhere Monitor database could have failed with an "Authentication Error". This has been fixed.
580772 Executing a remote query that involved the use of the ROWID() function, where the table specified to ROWID was a remote table, would very likely have caused the server to crash when the query was processed in partial passthru,. This problem has now been fixed.
580773 The server could have hang in some very rare circumstances, when there was considerable temporary file growth. This has now been fixed. A workaround is to pre-grow the temporary file using the ALTER DBSPACE statement, or to create a DiskSpace event to periodically grow the temporary file.
580788 The EBF installers for Linux are now capable of installing FIPS components. To initially install the components, the setup script must be invoked with the -regkey (alias -k) command line option, and be passed a registration key that entitles the installation of the FIPS componenents.

e.g., ./setup -k <FIPS registration key>

or ./setup -regkey <FIPS registration key>

It is not possible to specify the registration key through the EBF Installer UI itself. Subsequent invocations of the EBF install will then update previously installed FIPS components without needing to specify a registration key.

581029 The fix for Engineering case 571029 would have caused the Interactive SQL utility to give an "optional feature not implemented" error when exporting data to Excel. This problem has now been fixed.
581032 The result set returned by the system procedure sp_sproc_columns() has been changed to include information about parameter modes. The "column_type" column was previously an integer value and was always 0. Now it is a varchar(5), with values 'IN', 'OUT' or 'INOUT'. Also, for functions, the column_name will be returned as @RETURN_VALUE for the function return value; a row for this value was not previously returned.
581036 Sybase Central running on Windows systems with the zh_HK locale would have defaulted to zh_CN instead of EN. This occurred because jdk1.6 added a new country code for Hong Kong.

The problem hass now been fixed.

581046 A procedure with the statement

MESSAGE ... FOR CONNECTION ... IMMEDIATE

did not contain the IMMEDIATE clause in the stored definition of the procedure. This has been fixed. A workaround is to execute the MESSAGE statement using EXECUTE IMMEDIATE.

581050 Under certain circumstance, execution of a MERGE statement could have caused the server to raise assertion 100905 ("Articles on the table use do not match those on the table"). The server will now execute the statement correctly.
581249 If an application attempted to create a proxy table using the CREATE EXISTING TABLE statement, and the remote server specified in the location clause does not exist, then the server may have given a strange syntax error instead of giving the "remote server not found" error. This problem has now been fixed and the proper error will now always get returned.
581269 There were no implementations for the datatypes LONG BINARY and LONG VARCHAR. These have now been added.
581403 It is now possible to specify the ESCAPE connection parameter in the "Connect" dialog when connecting to SQL Anywhere servers.

Note, this new feature is actually available for use with all the graphical administration tools.

581417 Light weight polling against a secondary MobiLink server that is in a MobiLink server farm, may have failed. This is now fixed.
581426 When the number of concurrent synchronizations was greater than the maximum number of concurrent active synchronizations specified by the -sm command line option, the MobiLink server would have quietly rejected any synchronization requests without showing any error or warning messages. This has been fixed. The MobiLink server will now issue the following warning message:

[10101] Synchronization request from client '?' was rejected

where ? is the rejected remote ID. A more complete description of this warning code can be found in the documentation.

581454 The following improvements/fixes have been made related to exporting data from a SQL Anywhere database to Excel files, via the Microsoft Excel ODBC driver:

1. Attempting to export CHAR, LONG VARCHAR, NCHAR, NVARCHAR or LONG NVARCHAR values, would have failed with a message that the type was unsupported. Now, these types are mapped to VARCHAR (the closest type supported by the Excel driver).

Note that the Excel ODBC driver only supports text column widths up to 255. Attempting to export longer values, will still get an error message.

2. The driver portion of the OUTPUT USING string had to be specified as "Driver=" or "driver=". Now, that part of the string is treated without respect to case, so "DRIVER=" is also accepted.

3. REAL, FLOAT, and BIGINT values could not have been exported due to limitations in the Excel ODBC driver. These limitations have been worked around.

4. Numbers that were not MONEY or SMALLMONEY were exported as CURRENCY (i.e. they were displayed with a dollar sign in the Excel spreadsheet). Now they are exported as numbers. MONEY and SMALLMONEY are still exported as CURRENCY.

5. The Export Wizard would consistently have failed when exporting to tables it had to create. The error message was "Syntax error in the CREATE TABLE statement". This has been fixed.

581542 If a database had a schema with a very large number of columnsa, it was possible that when dbxtract was run, that the select statement generated to extract the data from some of the tables would have used an incorrect column order. This would likely have resulted in the rebuild failing, since the data types of the columns in the new database would not match the data that have been extracted from the remote database. The problem has now been fixed.

Note that this problem only affected dbxtract, and not dbunload.

581580 The server may have crashed if a Transact SQL SELECT INTO statement referenced an OPENSTRING expression. This has been fixed.
581586 If the -dt server command line option was used to specify a directory where temporary files were to be created, the server did not use that location when attempting to clean up old temporary files previously left behind when a server did not shut down cleanly. This has been fixed.

A workaround is to specify the temporary file location using one of the SATMP, TMP, TMPDIR or TEMP environment variables.

581613 When deploying a Synchronization Model that added a timestamp column to a MySQL consolidated table for timestamp-based downloads, existing rows would never have been downloaded because of MySQL bug #17392. This bug caused the new timestamp column to have values of 0, instead of the column default. A would around for this problem has been implemented. An UPDATE statement is now generated to follow the generated ALTER TABLE statement that adds the timestamp row.

A manual workaround is to update the timestamp column for each row where it is zero, after the column is added.

581622 If multiple Java classes, or external environment objects, were selected in the right pane and File -> Print... was select from the menu, then multiple Print dialogs would have been shown. Now a single Print dialog is shown.
581709 During optimization process, the SQL Anywhere Optimizer optimizes subqueries by considering different alternative strategies for computing the result of the subquery. During othis process, the optimizer doesn't perform any transformations which correspond to each alternative subquery strategies. Instead, the estimated costs of different strategies are used to decide which execution technique will be executed for this SQL statement in the final access plan. The final best access plan is built to reflect the execution strategy chosen for the subquery. In certain cases, when WINDOW subquery strategy was chosen (see Strategy 4 and Strategy 5 below) the final best access plan was missing the rowid expression of the table pushed into the derived table (in the example below, the rowid of the table "sales_order_items soi" from the main query block). This has been fixed.

For example:

The subquery optimization process supported by the SQL Anywhere Optimizer since version 9.0, is described in the patent [1]. The example below illustrates the five execution strategies considered during the optimization process for a SQL statement using a grouped subquery. This issue is related to a bug introduced in version 10.0.0 when two rowids must be built for each base table to support Snapshot isolation. The bug would have manifest itself if and only if Window Strategy 4 or Window Strategy 5 was chosen in the best access plan.

[1] System and Methodology for Cost-based Subquery Optimization Using a Left Deep Tree Join Enumeration Algorithm", Anisoara Nica, US Patent 20040220923, awarded August 2009

Original query Q0:

SELECT so.id, so.order_date, p.*

FROM sales_order so, sales_order_items soi, product p

WHERE

so.id = soi.id

AND soi.prod_id = p.id

AND p.quantity = (SELECT max(soi1.quantity) FROM sales_order_items soi1 WHERE soi1.prod_id = p.id )

SQL Anywhere Optimizer subquery execution strategy 1, Q1, evaluate subquery as an expression:

SELECT so.id, so.order_date, p.*

FROM sales_order so, sales_order_items soi, product p

WHERE

so.id = soi.id

AND soi.prod_id = p.id

AND p.quantity = (SELECT max(soi1.quantity) FROM sales_order_items soi1 WHERE soi1.prod_id = p.id )

SQL Anywhere Optimizer subquery execution strategy 2, Q2, evaluate subquery as an uncorrelated derived table:

SELECT so.id, so.order_date, p.*

FROM sales_order so, sales_order_items soi, product p,

(SELECT max(soi1.quantity), soi1.prod_id FROM sales_order_items soi1 GROUP BY soi1.prod_id ) as DT2 (max, prod_id)

WHERE

so.id = soi.id

AND soi.prod_id = p.id

AND p.quantity = DT2.max AND p.id = DT2.prod_id

SQL Anywhere Optimizer subquery execution strategy 3, Q3, evaluate subquery as a derived table with Bloom-filter predicates:

SELECT so.id, so.order_date, p.*

FROM sales_order so, sales_order_items soi, product p,

(SELECT max(soi1.quantity), soi1.prod_id FROM sales_order_items soi1 WHERE soi1.prod_id IN Bloom-filter( p.id) GROUP BY soi1.prod_id ) as DT3 (max, prod_id)

WHERE

so.id = soi.id

AND soi.prod_id = p.id

AND p.quantity = DT3.max AND p.id = DT3.prod_id

SQL Anywhere Optimizer subquery execution strategy 4, Q4, evaluate subquery as an uncorrelated derived table with WINDOW functions:

SELECT so.id, so.order_date, p.*

FROM sales_order so, product p, //// <<-- NOTE that "sales_order_items soi" was moved inside to the DT4

(SELECT max(soi1.quantity) OVER (PARTITION BY soi1.prod_id ), soi1.prod_id, soi1.id FROM sales_order_items soi1 ) as DT4 (max, prod_id, id)

WHERE

so.id = DT4.id

AND DT4.prod_id = p.id

AND p.quantity = DT4.max AND p.id = DT4.prod_id

SQL Anywhere Optimizer subquery execution strategy 5, Q5, evaluate subquery as a derived table with WINDOW functions, with Bloom-filter predicates:

SELECT so.id, so.order_date, p.*

FROM sales_order so, product p, //// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<------------------------------------------NOTE that "sales_order_items soi" was moved inside to the DT5

(SELECT max(soi1.quantity) OVER (PARTITION BY soi1.prod_id ), soi1.prod_id, soi1.id WHERE soi1.prod_id IN Bloom-filter( p.id) FROM sales_order_items soi1 ) as DT5 (max, prod_id, id)

WHERE

so.id = DT5.id

AND DT5.prod_id = p.id

AND p.quantity = DT5.max AND p.id = DT5.prod_id

581747 If a statement of the form "SELECT columns FROM table WHERE index_col = value" was opened more than once by a connection, an OPEN or CLOSE request could have failed with one of the following errors: "Cursor already open", "Cursor has not been declared", or "Cursor not open". The statement must have only involved one table, and the where clause must have had one or more predicates of the form col = value which can all be satisfied by one index. This has been fixed.
581752 If the mirror server in a mirroring system failed to start (e.g. due to a TCPIP port conflict), it could have crashed when shutting down. This has been fixed.
581755 An undocumented feature could have prevented a MobiLink server from starting when multiple MobiLink servers were trying to start at the same time, against the same consolidated database. The error displayed would have been:

<main> [-10002] Consolidated database server or ODBC error: ODBC:

[Sybase][ODBC Driver][SQL Anywhere]Primary key for table 'ml_property' is not unique:

Primary key value("'ML','server_info','release_version''")

(ODBC State = 23000, Native error code = -193)

when the consolidated database was running on a SQL Anywhere server. This problem has now been fixed.

581768 If the SQL Anywhere Monitor could not send an email alert, a generic "Email server for alerts not configured" alert was raised. This alert has been replaced by a new "Could not send email" alert which includes more descriptive error messages. This was done in an effort to provide more clues for diagnosing issues with email alerts.
581793 If a SQL_NUMERIC or SQL_DECIMAL value had a precision sufficiently greater than the bound precision, then an internal buffer would have been overrun. For example, if a bound column was defined as DECIMAL(10,2), and the precision described by the input SQL_NUMERIC_STRUCT parameter value was 40, then an internal buffer would have been overrun. This problem has been fixed.
581829 The MobiLink Listener (dblsn)would have failed to query an optimal polling interval from secondary MobiLink servers, as the primary notifier was not broadcasting the polling interval to secondary servers. This affected a light weight poller dblsn, but not application using the light weight poller API directly. This has now been corrected.
581830 The implementations of CreationParms::AddRef and CreationParms::Release, contained confusing casting. Both methods cast the POD object to a ConnectionParms object, which has now been fixed.
581957 The database option, divide_by_zero_erro, was removed in version 11.0.0. It has now been re-instated. The default setting for the option is On (as it was in version 10), which gives the same behavior as before this change, i.e. an attempt to cause division by zero results in an error.
581958 When monitoring several resources, there was a chance that the SQL Anywhere Monitor could have failed with an 'Out of Memory' Exception. The frequency of this error was dependent on the machine the SQL Anywhere Monitor is running. Also, Linux machines would have seen this error slightly more often than Windows machines. This has now been fixed.
581979 Retrieving property('Platform') on a system running Windows 2008 R2 RC3, would have returned "Windows7". This has been fixed, the property now returns "Windows2008R2".
581980 If an application executed a statement of the form:

SELECT ... INTO LOCAL TEMPORARY TABLE localtemptab FROM extenv_proc()

where extenv_proc() was an external environment procedure that returned a result set, then the SELECT ... INTO statement would have succeeded, but attempting to subsequently access the newly created localtemptab would have resulted in a 'table not found' error. This problem has now been fixed.

581986 Executing certain illegal operations on catalog tables could have caused the server to crash after the statement was rejected with an appropriate error. This has been fixed so that the server now works correctly.
581990 The ODBC function SQLTables() can be used to get a list of all schemas (users) by calling the function with the SQL_ALL_SCHEMAS argument. The list of users returned by this function only included users that owned a table. In a newly initialized database, this excluded some users, and in particular the DBA user. Now the complete list of schemas is returned, including those that do not own a table.
581991 In some cases it was possible for a database to become corrupted if the last write to disk was only partial completed, due to a power loss before the write to disk finished. This would have been extremely rare on a desktop machine or laptop using a conventional disk, but would have been much more likely with flash memory on handheld devices. In either case, corruption was more likely if the database file was encrypted. In order to prevent this corruption it is necessary to change the physical format of the database file. With this change in file format, the database should automatically recover from a partial write.

WARNING: When choosing to use a database with the new file format described below you give up the ability of being able to use older software that is not aware of the file format change. Therefore, once you create this database you will not be able to start an old server with such a database file. Any attempt to start the server with a build prior to this fix will generate an error "server must be upgraded to start 'database' ( capability 37 missing)". Syntax has been added to dbinit and the create database statement to allow for the creation of databases with this new file format. In order to create a database with this new format, use either:

- dbinit -xw mydb.db // -xw (creates a database with the new file format)

- CREATE DATABASE mydb.db CAPABILITY 'TORNWRITEFIX' ...

Syntax has also been added to dbunload to rebuild databases so that the new database will be created with the new file format. In order to rebuild a database with the old format to one with the new format use:

- dbunload.exe -c 'your connection string to your old db' -xw -ar // this will replace your old database with a new one

- dbunload.exe -c 'your connection string to your old db' -xw -an new.db // this will create new.db in the new file format while maintaining your old database in the old file format

NOTE: make sure to have a backup of your database file before attempting this. Also if your database is strongly encrypted then you'll need to provide the encryption key for both the old database and the new database file using the -ek command line parameter.

In order to upgrade a database with this new file format from version 9 to version 10 or version 11 you'll need to use 10.0.1 3930 or greater or 11.0.1 2278 or greater.

582144 There were no implementations for the datatypes LONG BINARY and LONG VARCHAR. These have now been added.
582152 When using the the SQL Preprocessor (sqlpp) command line tool to generate code for UltraLite, the -eu command line option was supposed to flag SQL that UltraLite cannot handle. When this option was on, the following UltraLite-supported statements would have been incorrectly flagged as Disallowed language extensions:

CREATE SYNCHRONIZATION PROFILE ...

ALTER SYNCHRONIZATION PROFILE ...

DROP SYNCHRONIZATION PROFILE ...

SYNCHRONIZE ...

This has been corrected. The workaround is to not use the -eu command line option on SQLPP.

582186 The "View Data in Interactive SQL" menu item was not always enabled or disabled appropriately. Specifically, for views owned by SYS, the menu item was disabled, rather than enabled; for invalid, disabled and uninitialized views, the menu item was enabled, rather than disabled. Now, the menu item is only enabled for non-materialized views which are valid, and materialized views which are both enabled and initialized.
582405 When processing a simple query that bypassed the query optimizer, in some cases it was possible for the server to crash if. This may have occurred when the query contained the SELECT TOP n clause, and 'n' was was a host variable, rather than a literal constant. This problem has now been corrected.
582589 If 10 MobiLink Monitors or SQL Anywhere Monitors connected to the same MobiLink server, and the last to connect then disconnected, then the MobiLink server could have crashed. This has been fixed.
582756 The changes for Engineering case 544187 caused the server to have a limited number of temporary files that it could create in the lifetime of the server process (64K on non-UNIX systems, 4G on UNIX systems). The problem would have shown up as an error writing to an invalid handle, and a fatal "disk full" error would have been reported. On Windows, the message in the server console would have looked like the following:

A write failed with error code: (6), The handle is invalid.

Fatal error: disk full when writing to "???"

This problem has been fixed.

A related problem was also fixed where failure to create a temporary file for the utility_db would have cause the server to crash.

582778 Calling the system procedure sa_get_histogram(), which is used to obtain the current state of a histogram on a specified column, could have caused the server to deadlock. The probability of such a deadlock taking place was extremely low and depended upon a number of factors. This problem has now been resolved.
582782 When a consolidated database was running on an Oracle RAC, the MobiLink server could have skipped rows being downloaded to remote databases in a time-based download. In the following situations, rows modified in the Oracle database could be missed from the download stream:

1) the MobiLink server connected to one node on an Oracle RAC;

2) another application, A connected to another node on the same Oracle RAC;

3) application A modifies rows in a synchronization table without commit;

4) a MobiLink client, R1 issues a synchronization request that contains a time-based download from this table;

5) the MobiLink server completes the synchronization request successfully;

6) A commits its transaction;

Then the rows modified by application A would not be down loaded to remote R1. This problem has now been fixed.

Note, as a result of this change, the Oracle account used by the MobiLink server must now have permission for the GV_$TRANSACTION Oracle system view instead of V_$TRANSACTION. Only SYS can grant this access. The Oracle syntax for granting this access is:

grant select on SYS.GV_$TRANSACTION to <user-name>

582789 The MobiLink server would still have tried to access the ml_scripts_modified table in the consolidated database, even when it was running with MSDTC on and its system objects were installed on an MLSD database specified by the -cs command line switch. This would then have resulted in the MobiLink server reporting the error message:

Table "ml_scripts_modified" not found

during each synchronization, when a pooled database connection was reused.This problem has now been fixed.

582799 The server could have crashed during a LOAD TABLE statement if the DEFAULTS ON clause was used, and a load-time error occurred when evaluating or assigning the default expression. This has been fixed.

The workaround is to fix the column default definition so that no error occurs.

582808 The Apply button on a property sheet could have become enabled even when no changes had been made on the property sheet. For this to have occurred, the property sheet had to contain a formatted text field or spinner control. This is now fixed.
583189 The server could have crashed in some circumstances after a table definition was

reloaded. This has been fixed.

583194 The QAnywhere Standalone Clients were not adhering to the synchronization policies as they are defined in the documentation. In several scenarios, the clients would trigger synchronizations even though the policy requirements were not satisfied, although it was never the case that a synchronizations didn't occur when one should have. This has been fixed so that the clients now synchronize only at the appropriate times as defined by the policies.
583241 Under some specific circumstances, the server could have crashed while updating tables with triggers. This has been fixed so that execution of UPDATEs now takes place correctly.

A workaround is to recreate the table under question.

583353 The version of samonitor.sh included with the development version of the SQL Anywhere Monitor on Unix platforms provided a start() method to spawn the database server, but did not provide a stop() method to shut it down. This has been fixed.

Note: if the desktop environment has a system tray supported by Java 1.6, it is possible to shut down the server monitor cleanly by right clicking on the SQL Anywhere Monitor logo and choosing "Shutdown"

583380 The server may have returned the error "-890: Statement size or complexity exceeds server limits", or needed a very long time to complete, for very complex statements that used proxy tables and alias names that depend on many other alias names. During the Describe Output or Open of the statement, the server may have consumed a large amount of cache space and blocked other requests. This has been fixed.
583393 When right-clicking the SA Monitor tray icon and selecting "Exit SQL Anywhere Monitor", nothing would happen. This problem has now been fixed, and the SQL Anywhere Monitor now shuts down as expected. This problem was introduced by the changes for Engineering case 575525.
583560 If an application that was connected to a local server, either via the SQL Anywhere ODBC driver or the iAnywhere JDBC driver, attempted to perform a wide or batched insert into a proxy table and the insert subsequently returned with a conversion or some other error part-way through the insert, then the rows leading up to the error would have been inserted into the proxy table twice. This problem has now been fixed.
584125 Specifying an IPv6 address with a port number for the HOST option, eg. LINKS=tcpip(host=(<ipv6 address>):<port>) would give an SQLE_CONNECTION_ERROR (-832) with the text "Unexpected error 10" or "Mismatched braces near '???'". This only happened when parentheses were used for both the TCP parameter and the HOST option. This has been fixed.

As a workaround, use braces to specify the TCP options, eg. LINKS=tcpip{host=(<ipv6 address>):<port>}".

584152 A statement-level "after update of" trigger would not have fired if the columns in the "of" list were modified by another trigger, but were not present in the set clause of the originating query. This has been fixed.

Note, row level triggers do not have this problem.

584304 If an application executed an external environment procedure and subsequently canceled the external call, then all other external environment requests would have blocked until the external procedure being cancelled acknowledged the cancel request. This problem has now been fixed.
584310 Download performance of the MobiLink server has been improved for tables that contain no BLOB columns, when the consolidated database is running on Microsoft SQL Server.
584322 The following new features have been added to the iAnywhere Solutions ODBC driver for Oracle:

1) In order to determine if a stored procedure returns a result set, or if a procedure uses Oracle VARRAYs, the iAnywhere Solutions Oracle ODBC driver needs to describe the stored procedure through Oracle OCI functions. The driver now provides an extra connection parameter, ProcOwner (long form) or POwner (short form), which is used to by tyen driver to describe all the stored procedures invoked by the application. This parameter can be given as followis:

-c "uid=...;pwd=...;procowner=my_procedure_owner;..."

2) The iAnywhere Solutions ODBC driver for Oracle now supports VARRAYs used by packaged procedures.

584327 In some very rare cases, the SQL Anywhere Monitor could have caused a Java process to consume 100% of the CPU. This has been fixed.
584466 The server was only looking at the groups that a user was a direct member of when verifying authorities acquired via group inheritance. This has been corrected so that the server now checks for inheritable authorities through all group memberships, direct and indirect. For example, if 'group1' is a member of 'group2' and 'user1' is member of 'group1', 'user1' will obtain all inheritable authorities of group2 also.
584478 BlackBerry devices with OS 4.2 or later, may now read and write UltraLiteJ databases to either the internal flash or the SD (media) Card, in addition to the previously supported persistent store. While the persistent object store of BlackBerry devices is faster, it has limited capacity and is shared with RAM and program storage. Newer devices such as the Bold, Storm and Tour have internal flash (Bold and Storm have almost 1GB) and many devices support SD Cards. Persistent store is 3-4 times faster than internal flash, and internal flash is faster than SD cards. Databases stored on internal flash (URIs begining with "file:///store/") or media cards ("file:///SDCard/") can keep more rows in memory, and/or use a bigger cache to improve performance.

Databases names must follow the format for a fully qualified, absolute path file name as described in the file URL format as part of IETF RFCs 1738 and 2396. That RFC dictates that a file URL takes the form:

file://<host>/<path>

In the form above, <host> is the fully qualified domain name of the system on which the <path> is accessible, and <path> is a hierarchical directory path of the form:

<root>/<directory>/<directory>/.../<name>.

For BlackBerry devices, the internal flash is accessed using URIs starting with file:///store/ (case sensitive) while the SD media card is accessed using URIs starting with file:///SDCard/ (case sensitive). File paths are case insensitive except for the host portion which is case sensitive. Percent (%) characters have special meaning and relative paths (directories "." and "..") are not allowed. For more information on file name restrictions, please consult the BlackBerry JDE (4.2 or later) API Reference for the javax.microedition.io.file package.

The following example creates a configuration for using the media card. The database is store in the directory "ulj" and is called "test.ulj".

// BlackBerry media card Sample - use file:///store/ulj/test.ulj

// for internal flash

Connection conn;

ConfigFileME config = DatabaseManager.createConfigurationFileME(

"file:///SDCard/ulj/test.ulj"

);

try {

conn = DatabaseManager.connect(config);

} catch(ULjException ex) {

conn = DatabaseManager.createDatabase(config);

// Create the schema here.

}

To maintain support for BlackBerry 4.1 devices, a new distribution directory UltraLite\UltraLiteJ\BlackBerry4.2 has been added which contains files for 4.2 or later devices. BlackBerry 4.1 devices and simulators should continue to use the UltraLite\UltraLiteJ\J2meRIM11files. BlackBerry 4.2 and later devices can use either distribution if they do not require SD card or internal flash storage.

The UltraLiteJ Database Transfer tool has not been updated.

584486 Unloading a SELECT statement into a compressed variable could have caused a server crash. This has been fixed.
584512 When validating databases, using the VALIDATE DATABASE statement or the Validation utility 'dbvalid -d'), spurious errors could have been reported under rare circumstances. This has been fixed.
584517 When validating a database, either using the VALIDATE DATABASE statement, or with the Validate utility (dbvalid -d), an error would not have been reported if a transaction log page was encountered in the database file. This has been fixed.

Note, this situation would have been due to file corruption on the disk. Transaction log pages are not stored within the database.

584691 A new "IF NOT EXISTS" clause can now be optionally specified in CREATE TABLE, CREATE INDEX, and CREATE PUBLICATION statements. If this clause is present, and the object named in the statement already exists, then executing the statement will not modify the database and no error will be returned.

The complete syntax for the new clause in the various statements are:

- CREATE TABLE [IF NOT EXISTS] table-name (...)

- CREATE [UNIQUE] INDEX [IF NOT EXISTS] index-name ...

- CREATE PUBLICATION [IF NOT EXISTS] publication-name ...

584721 When using the SQL Anywhere C API, no error information was returned when a connection attempt failed. This problem was introduced as part of a previous fix to dbcapi, and has now been corrected.
584722 When installing EBFs on Unix systems, the installer would not have applied the updates if the destination directory included spaces. This has been fixed.
584873 If the QAnywhere Agent for Ultralite was running using the automatic policy, and a message was sent during a loss of communication with the QAnywhere server, then the message would not have been sent upon re-establishing communication. This has now been fixed so that and unsent messages will be sent shortly after that connection is re-established.

A workaround for this problem is to perform an action that will trigger a

synchronization (eg. send another message, call triggerSendReceive, etc.)

585013 If an application executed Connection.prepareStatement(), or Connection.prepareCall(), on one connection, and the prepare request took a long time, then attempting to execute Connection.createStatement(), Connection.prepareStatement(), or Connection.prepareCall() on a different connection would have ended up blocking until the original prepare returned. This problem has now been fixed.
585015 Exporting numeric values to an Excel spreadsheet would have failed when running the Interactive SQL utility on Windows systems which were configured to use something other than a period for the decimal separator in numbers. This has been fixed.

Also, it is now possible to consistently export TIME, DATE, and TIMESTAMP values to Excel spreadsheets.

585018 Calling the function SetParameter(), could have caused the UltraLite runtime to crash when the database had no base tables. This has been fixed.
585024 When inserting or updating a row using a table on the "Result" tab, values read from a file were silently truncated at 1,000,000 characters. This limitation has been removed.

Note, this bug affected both the Interactive SQL utility, and the "Data" tab in Sybase Central.

585030 The "C" and "P" command line options for SQLPP cause the flagging of SQL syntax during precompilation. The use of "C" is to verify conformance to the core language features of a particular SQL standard, and "P" is to verify conformance to the complete ANSI language, as supported by SQL Anywhere, including optional packages. However, the use of "P" erroneously reported conformance for core language features only, duplicating the output generated by the use of "C". This has been fixed. Using "P" now reports language conformance, including optional ANSI standard packages, as described in the documentation.
585035 The QAnywhere server could have stopped sending/receiving messages with an Enterprise Messaging Server, through its JMS connector, when a SQLException was thrown by the JDBC driver. This has been fixed.

Where possible, the QAnywhere server should recover gracefully from exceptions thrown by the JDBC driver and continue processing messages.

585046 Consider an UltraLite database with a table as follows:

CREATE TABLE tbl1(a INTEGER, PRIMARY KEY (a))

INSERT INTO tbl1 VALUES (10000000)

Fetching the results using the Interactive SQL utility (dbisql) in command-line mode as follows:

dbisql -ul -c "uid=dba;pwd=sql;dbf=c:\temp\test.udb" select a from tbl1

would have returned the value 1000. The value was truncated in the display, and was only an issue when displaying the results to the command shell. This is now fixed.

585056 If the database option Escape_character was set to OFF, attempting to change a user's password via the NEWPWD connection string parameter would have failed silently. This has been fixed. A workaround is to leave the escape_character setting at its default (ON).
585077 The Database Transfer utility would have failed to transfer some databases. After establishing the connection, the utility would have immediately finished the transfer, and the progress bar on the client would still have indicated 0%. The log on the desktop utility would have shown a negative value for chunks of data expected. This has been fixed.
585258 The MobiLink server would not have shown any script contents, if the scripts were written in Java or .NET, even when the verbose option (-vc) was specified in its command line. This problem is fixed now.
585282 If an application connected via Open Client or jConnect, and requested a packet size greater than 512 bytes, the SQL Anywhere server would have restricted the packet size to a maximum of 512 bytes. This restriction has now been relaxed such that the maximum Open Client or jConnect packet size is now 4096 bytes for a version 11.0.1 or above server, and 1024 bytes for a version 10.0.1 server.
585306 Reading a blob (long binary) value from the database would have taken 7 times longer than it did to write the blob (as tested on a BlackBerry Bold). This has been fixed.
585456 The queue lengths in the Utilization Graph of the MobiLink Monitor could have been incorrect and the RAW_TCP_STAGE_LEN, STREAM_STAGE_LEN, HEARTBEAT_STAGE_LEN, CMD_PROCESSOR_STAGE_LEN metrics printed by the -ppv option could also have been incorrect. These issues have now been corrected.
585530 The changes for Engineering case 568426 broke the Table and View permissions grid support for 9.x databases. This has now been fixed.
585713 Under rare circumstances, the server may have hung when run on Solaris systems. This was more likely to have occurred on machines with greater parallelism (e.g., Niagara chips) under a highly concurrent load. This has been fixed.
585735 For some queries, a result set row could have indicated that a column value was not null, even if the value is null. Retrieving this value could then have returned misleading, or invalid data. This has now been fixed.
585979 Using the BCP utility to insert data into a table could have failed with a protocol error, if the version of Open Client that BCP used was older. This problem has now been fixed.
586180 Under certain circumstances, the server could have failed an assertion, or crashed, while

processing queries containing large strings. This has been fixed.

586188 Opening the Events folder could have caused a "Can't decode condition name" error if an event was created via Interactive SQL utility, instead of via Sybase Central. This has been fixed.
586217 Methods in the SADataReader clase could have returned an incorrect fraction for datetime and time columns. This has now been corrected.
586362 If an application made use of a global temporary table in an external environment via a server-side connection, then there was a chance that the server may have failed an assertion, hung, or crashed, when the application connection closed. This problem has now been fixed.
586414 When running the Interactive SQL utility in a command window, if the output was redirected to a file, and the "-q" command line option was not specified, error messages would not have been displayed in the command window. This was a problem because the user had to press ENTER to continue the script, but the message saying to do that was redirected to the file. This has been corrected spo that the error output is now sent to the STDERR device, which is displayed in the console .

To workaround this problem, use the "-q" command line option. That will print the error message in the console and will not prompt the user to press a key to continue.

586427 A typo in the message displayed when connecting to an unsupported database type has been fixed.
586596 The SQL Anywhere server allows specification of the isolation level for a query as part of query text via the OPTION clause. This specification is valid only for the current statement and is meant to override other specifications of isolation level, e.g., those provided by the setting for the database option isolation_level, and cursor flags provided by the application at PREPARE and OPEN times.

The server failed to honour the per statement specification for isolation level and used instead other specifications. This problem has been resolved. Now the isolation level specified in the query text is given the highest precedence.

586604 On Solaris systems, if the directory /usr/ucb precedes /bin and /usr/bin in the PATH, the installer could have failed. Fixed by prepending /bin and /usr/bin to our local copy of PATH.
586629 OPENXML namespaces may have caused the server to crash. This has been fixed.
586829 UPDATE and DELETE statements could have acquired intent locks on tables that were not modified by the statement, possibly introducing concurrency or deadlock problems to an existing application. This has been fixed.
586837 On Unix systems, the 64-bit server may have failed to start when the virtual memory user limit (ulimit -v) was low relative to the sum of the physical memory and swap space. This has been fixed.
586868 When using SMTP to send email alerts, an incorrect error message could have been reported when an error occurred. This has been fixed.
587028 The fix for Engineering case 581991 could have inadvertently turned on the feature for a new database architecture even if it was not requested. This has now been fixed. This could only have affected a database that was created using 9.0.2 build 3867-3880 or 10.0.1 build 3930-3948. The query:

select * from sa_db_properties() where propname = 'HasTornWriteFix';

can be used to determine if the setting is ON or OFF. Turning the setting OFF requires a rebuild of the database using an engine with this fix.

587036 If a LONG VARCHAR column containing multi-byte data was fetched by the OLE DB provider, the resulting string may have contained appended null characters. As a result, the Length attribute of the string (e.g., strTxt.Length) may have been larger than expected. This problem has been fixed.
587040 If the SQL Anywhere Monitor encountered an internal error and attempted to restart data collection, there was a chance that data collection would not have restarted correctly. This has been fixed.
587193 Under certain circumstances, the server could failed an assertion, or crashed, while

processing queries containing large strings. This has been fixed.

587214 When HTTP client debugging was turned on, calling the HTTP client procedure would have resulted in a request time-out. This problem was introduced by the changes made for Engineering case 565244, and would have occurred when client logging was initiated, either with the -zoc command line option, or by calling the system procedure sa_server_option(), to set the 'WebClientLogFile' file name. This has now been fixed.
587246 If a synchronization model was created that contained mappings with errors, and then the mappings were deleted or disableds, the sync model could still not have been deployed. The workarounds to this were to either recreate or enable the mapping, or manually edit the sync model file and remove the scripts with errors. This has been fixed.
587256 If a database with a foreign key declared as "NOT NULL" was unloaded or rebuilt, the resulting reload.sql or database contained the foreign key without "NOT NULL" declared. This has been fixed.
587308 The UltraLiteJ runtime would have crashed if a SQL statement had too many terms (exceeding 150). UltraLiteJ used a fixed size stack to store the tokens of the statement when parsing it. The problem has now been resolved by growing the stack when necessary.
587396 If two or more connections, or two or more events, that made CLR calls closed or completed simultaneously, then there was a chance the CLR external environment may have hung. This problem has now been fixed.
587402 If an application made an external environment call, and another connection that also made an external environment call closes at the exact same time, then there was a very small chance that the server would have incorrectly returned a thread deadlock error, rather than allowing the external environment call to go through. This problem has been fixed.
587404 If an application made repeated calls to the CLR external environment, then the CLR environment (not the server) would have leaked memory. This problem has now been fixed.
587429 No limit on the size of a CONTAINS query was imposed. This has been fixed.

After this change, a CONTAINS query cannot contain more than 300 valid terms (terms that are not in the STOPLIST

and are within permitted term length range).

587671 The server may have crashed when trying to find matching materialized view candidates. This would have happened when a materialized view candidate had a very complex SELECT clause, and the server was close to stack overflow or had too little cache space. This has been fixed.
587699 If the DBTools function DBSynchronizeLog() was called when no callback routines (errorrtn, msgrtn, warningrtn, logrtn, progress_msg_rtn, progress_index_rtn, msgqueuertn, confirmrtn) were defined, it would have crashed. This problem has been fixed. It is no longer necessary to define all callback routines.

A workaround is to define each of the callback routines. Example:

a_sync_db sync;

.

.

.

sync.confirmrtn = (MSG_CALLBACK) ConfirmCallback;

587795 Updates or deletes to temporary tables may have caused the engine to crash if the temporary file had corrupted pages. This has been fixed.
587856 An application that was connected via jConnect or Open Client, that attempted to insert or retrieve a date value prior to January 1,1753, would have been incorrectly received an invalid date value error for the insert, and would have been returned the date January 1, 1753 for the fetch. This problem has now been fixed. Note that application must use newer versions of jConnect or Open Client in order to get date support for dates prior to January 1, 1753. Also, the restriction of January 1, 1753 using jConnect or Open Client still exists for datetime values.
587873 If an application made a CLR external environment call and then subsequently cancelled the CLR request, there was a chance that the CLR external environment would crash. This problem has now been fixed.
587888 Previously, if an application connected to a Web Edition server and attempted to make use of a directory access server, the Web Edition server would fail the request with a "this server is not licensed to support the 'Remote Data Access' feature" error. This problem has now been fixed. Note that attempting to make use of other remote data access server classes will still give the "not licensed" error when the application is connected to a Web Edition server.
588055 When running the CREATE ENCRYPTED/DECRYPTED DATABASE '<newdb>' FROM '<sourcedb>' statement, if the transaction or mirror log name stored in the source database file was unqualified, we would have tried to locate it with respect to the engine's current working directory rather than the location of the database file.

For example, if the engine was running in the directory /foo, the statement CREATE ENCRYPTED DATABASE 'new.db' FROM '/bar/source.db' was issued, and the transaction log name stored in source.db was 'source.log,' we would have tried to open /foo/source.log.

If the current working directory had a version of the log file that was incompatible with the source database, the operation would fail. This has been fixed.

588076 If a proxy table existed in a case-sensitive database, and the proxy table had an index on it, unloading and reloading the database would have failed with the error "Cannot create item (<index_name>) in the specified dbspace". This has been fixed.
588253 A database upgrade would not have added execute permissions to "public" on the recreated procedure sp_password. This has been fixed.
588329 If an application connected via jConnect used the method CallableStatement to execute a stored procedure, then there was a chance the connection would have terminated with a protocol error. This problem would only have occurred if the stored procedure had an argument named @p# where # was an integer between 0 and n-1 with n representing the number of arguments in the stored procedure. For example, if an application connected via jConnect used CallableStatement to execute a stored procedure named test, and if test had 3 arguments, and if one of the arguments in test was named @p0, @p1 or @p2, then the server would have dropped the connection with a protocol error. This problem has now been fixed.

It should be noted that this problem does not affect applications using the iAnywhere JDBC driver.

588497 Execution of the MERGE statement within SQL Anywhere could have caused the server to crash under some specific circumstances. This problem has now been resolved.
588498 If a server attempted to abandon or cancel a request to start an external environment, due to the server being extremely busy or overloaded, then there was a very small chance the server would have hung. This problem has now been fixed.
588499 The server would have stopped the TCP listener and printed the message "TCP Listener shutting down (130)" to the console log, if it has accepted a new client connection but the client side has already gone. This has been fixed.
588539 If an application attempted to access a JDBC based Remote Data Access server, and the tsql_variables option was set to ON, then the server would have failed the request with a syntax error. This problem has now been fixed.
588692 On Unix systems, if the transaction log for a primary server was not located in

the server's current working directory, and was renamed when the mirror server was unavailable and the primary server was restarted, synchronization would have failed when the mirror server then became available again. This has been fixed.

588720 If an application started Java, then subsequent connections to the server may have found that the option settings for date_format, time_format, timestamp_format and date_order were different than expected. This problem has now been fixed.
588740 We learned that in the interest of improved performance, Microsoft Windows explicitly prevents certain documented methods of guaranteeing that data has been written to the physical storage medium from working on IDE/SATA/ATAPI drives (SCSI drives are unaffected). Recoverability after a power outage could be compromised. The database server now performs additional operations to flush data to disk to improve recoverability. In testing, there was no measurable performance degradation by this change.

Relevant third-party articles:

http://perspectives.mvdirona.com/2008/04/17/DisksLiesAndDamnDisks.aspx

http://msdn.microsoft.com/en-us/library/dd979523%28VS.85%29.aspx

http://research.microsoft.com/apps/pubs/default.aspx?id=70554

http://groups.google.com/group/microsoft.public.win32.programmer.kernel/browse_frm/

thread/4590ed3a4133828f/406cfb3a9deae044

588917 The policy file for .NET 2.0 was installed incorrectly. This has now been corrected.
588921 If an application attempted to query a non-nullable bigint column from a proxy table, and the remote server class was asejdbc, then the request would have failed with a strange conversion error. This problem has now been fixed.
588924 If a timestamp column was defined with "not null default [utc] timestamp", and an insert specified a null value for that column, then the insert would have failed with a SQL error. In version 9 and earlier, the insert used the default instead and did not fail. This behaviour has now been restored.
588940 When using the Import Wizard to import data from a file, if the file specified did not exist, an incomplete error message was displayed. This has been corrected so that the message is now complete.
588950 The Import Wizard could have crashed when clicking the Back button on the "Where do you want to save the data" page, if "In an existing table" was selected but no table was selected in the list. This has been fixed.
589219 If many connections attempted to make CLR external environment calls simultaneously, then there was a chance that some of the requests would have failed with a strange unhandled exception error. These unhandled exception errors would come from the CLR external environment, and not from the server itself. This problem has now been fixed.
589236 The MobiLink server could have crashed following a failed synchronization. This has now been fixed.
589406 Creating a text configuration object, or creating a text index from a text configuration, did not qualify object names when they were logged in the transaction log. This has now been corrected.
589437 A single-value SELECT could have produced incorrect results when the select list involved non-trivial expressions (such as function calls). This has been corrected.
589624 Some string operations, involving concatenation and substring on compressed columns, may have caused the fetch request to hang forever. This has been fixed.
589646 The number of bytes required to store a bitstring column value could have been under reported. This could then have potentially caused buffer overruns in client applications. This has been fixed so that the correct byte suze is now reported.
589655 No limit on the size of a CONTAINS query was imposed. The query length was not checked, and number of terms was not counted. This could have lead to queries that would have taken very long to execute, or to server crashes. This has been fixed. Now, a CONTAINS query cannot contain more than 300 valid terms (terms that are not in the STOPLIST

and are within permitted term length range).

589666 When converting NUMERIC values to a VARCHAR, the server could have truncated the results when the precision of the NUMERIC value exceeded 30. This has been fixed by changing the conversion to produce a VARCHAR with size 2 plus the precision of the source NUMERIC value.
589762 The server would have crashed if the system functions db_property('LogFileFrangments') or sa_db_properties() were executed against the utility database. This has been fixed.
589802 Applications would have been able to connect to a database using the database's alternate server name, and then create, stop, and drop other databases on the same server. This has been fixed, all of these operations are now disallowed when connected through an alternate server name.
589821 If the remainder() function was used with DECIMAL arguments and the value of the second argument was zero, then NULL would have been returned and an error was not generated when the divide_by_zero_error option was set to On (the default value). This has been fixed.
589829 Selecting the Data tab for either an invalid or disabled view, or a disabled or truncated materialized view, would have caused Sybase Central to crash when attempting to recompile and/or refresh the view. This has been fixed.
589848 SQL Anywhere server could have generated a spurious "cardinality violation" error when executing the MERGE statement if the statement being executed did not contain any WHEN MATCHED clauses, or none of the specified WHEN MATCHED clauses were unconditional, and there were at least two rows in the input data set that matched a single target row and don't qualify for any of the WHEN MATCHED clauses. This has been corrected so that the server will now silently ignore these duplicate rows instead of generating a cardinality violation error.
590017 When converting NUMERIC values to a VARCHAR, the server could have truncated the results when the precision of the NUMERIC value exceeded 30. This has been fixed by changing the conversion to produce a VARCHAR with size 2 plus the precision of the source NUMERIC value.
590020 When run on Unix systems, queries of the form "SELECT ... FROM directory_access_table WHERE file_name=...", where directory_access_table was a proxy table to a directory access server, would have returned an empty result set. This problem would only have occurred if the server had been updated to include the fix for Engineering case 569934. This problem has now been fixed and the server will now properly return a result set.
590030 A new "OR REPLACE" clause can now be optionally specified in the CREATE SYNCHRONIZATION PROFILE statement. If this clause is present, and the profile named in the statement already exists, then it will be replaced. Otherwise, it will be created.
590041 If query optimization with matching materialized views generated an error while processing a materialized view candidate, the error was still returned to the application. For example, if a materialized view candidate contained additional tables for which the user did not have SELECT permissions, the error "Permission denied: you do not have permission to select from "tablename" would have been returned. This has been fixed. Now, if an error is encountered while processing a materialized view candidate, the error is ignored and the view is not used in the view matching process.
590045 When executing a SELECT DISTINCT query against a newly created table with no data, the runtime would have crashed with a NullPointerException. This has been fixed.
590048 The "SYNCHRONIZE OFF" table constraint in a CREATE TABLE statement may have failed when the same statement had column defaults specified as well. For example, the statement "create table t ( id int primary key default autoincrement, c2 int, synchronize off)" would have crashed the runtime. This has been corrected.
590061 If a MobiLink server had a connection from a MobiLink Monitor, or a SQL Anywhere Monitor, it could have hung while printing warning 10082, "MobiLink server has swapped data pages to disk ... ". This was due to a deadlock between the thread printing the warning and a thread sending a monitor event. This has been fixed.
590098 A server crash could have occurred while running the Index Consultant. This has been fixed.
590156 The server may have incorrectly rewritten WHERE, ON, or HAVING clauses, causing no rows, or too few rows, to be returned. This would have happened when the server found redundant conjuncts and try to remove them. This has been fixed.

A sample of this type of query:

select 1 from T

where a = 1 and ( b = 2 or c = 8 ) and ( d = 4 or e = 10 )

and ( a = 1 or e = 7 or c = 9 )

590210 The SQL Anywhere OLE DB provider implementation of IMultipleResults::GetResult() returned an incorrect 'rows affected' count for inserts, updates, and deletes. In this situation, the result returned by OleDbCommand.ExecuteNonQuery(), which called the GetResult() method, was -1. This problem has now been fixed to return the correct 'rows affected' count.
590215 Database corruption was possible in certain rare circumstances. This has been fixed.
590243 Sorting a list of messages on the "Messages" and "Archived Messages" tabs by the "Status Time" column, would not have sorted the messages correctly. The comparator for the date column had been based on the string representation of the date, rather than the date itself. This has been fixed.
590374 Calling the QAManager.close() method, immediately after receiving a message asynchronously, could have caused the manager to hang indefinitely. This has been fixed
590383 On UNIX systems, there were directories left in the temporary directory, with names of the form __SQLAnyCli__X_Y, where X is a process number and Y is an alphanumeric number. This usually happened when a SQL Anywhere client application was terminated abnormally. An example of this was the PHP driver running within the Apache web server. This has been fixed.
590401 If an application used a JDBC based Remote Data Access class, and the application subsequently changed the setting for quoted_identifier or ansinull, then the new setting would not get sent to the remote server. This problem has now been fixed.
590468 When opening a database's ER Diagram tab and creating, modifying or deleting a table or foreign key, the ER Diagram would not have been updated automatically. The ER Diagram tab had to be manually refreshed via View -> Refresh Folder, or View -> Refresh All, in order to see the changes. Now the ER diagram is kept up-to-date automatically.
590471 When the set of tables shown in the ER Diagram was limited (by selecting File -> Choose ER Diagram Tables...), and then subsequently renaming one the tables that had been selected in the Choose ER Diagram Tables dialog, the table would then no longer have appeared in the ER Diagram. This has been fixed.
590569 Only users with DBA authority should be able to execute COMMENT ON DBSPACE statements, but the server was failing to check for this permission. This has been fixed. The server now ensures that the user has DBA authority before executing a COMMENT ON DBSPACE statement.
590591 If the server was started on Netware, and multiple connections that had made Java calls shut down at the same time, then there was a chance the server would have crashed. This problem has now been fixed.
590602 Executing a SQL statement, immediately followed by an OUTPUT statement and nothing else, would have cause an internal error if the "Show separate Messages pane" option was set on. This has been fixed.
590607 Incorrect results may have been obtained for functions with a variable number of arguments, when NULL was specified as the first argument. This has been corrected.
590633 Symbols from the Dbmlsync C++ API could pollute the user's default namespace. These symbols are now segregated into their own namespace named "DbmlsyncClient11". Existing Dbmlsync C++ API applications will still be able to compile without modification, since the dbmlsynccli.hpp header file now also includes "using namespace DbmlsyncClient11". Those wishing to exclude the USING command, and be forced to reference the symbols using the namespace, can define a macro called MULTIPLE_DBMLSYNC_API_VERSIONS in their source code.
590692 The server may have modified the wrong table when executing an UPDATE or DELETE on a view, if the view was specified in the FROM table-list as well. This has been fixed.
590702 In some cases, executing query plans with a HashGroupBy and a Distinct could have required up to twice as much CPU time than necessary. This has been fixed.

The presence of this issue can be identified by examining a graphical plan with statistics. If the estimated number of rows coming out of a HashGroupBy or a Distinct is small (less than 100), and the actual number of rows is large (many thousands or more), the hash operator may be operating less efficiently than possible. The performance penalty for a query suffering from this problem is unlikely to exceed 100% (i.e twice as slow).

590803 When using the debugger in Sybase Central, sometimes a breakpoint was hit and the error "The source code could not be displayed for the <procedure/event/trigger> because the database filter is excluding it." was incorrectly shown. This has now been fixed.
591001 In very rare circumstances, the server may have crashed when it should have returned the sql error SQLSTATE_SYNTACTIC_LIMIT. This may have occurred when loading very compley view definitions, or executing a SELECT INTO into table statement. This has been fixed.
591002 The changes for Engineering case 582782 could have caused the MobiLink server to be much slower for small sync than servers without the fix. This problem would have occurred when a consolidated database was running on an Oracle RAC. The slowness is in the Oracle server: fetching the minimum starting time of the open transactions from gv$transaction can take as much as a couple of seconds and it is much slower than from v$transaction. This has now been corrected.
591061 If a database had a partial write to the checkpoint log, then it was possible that database recovery could have failed in a case which was actually recoverable. This only affected encrypted databases. This has now been fixed.
591275 The JDBC based Remote Data Access classes are generally not recommended due to their higher resource requirements and significantly lower performance, when compared to the ODBC based Remote Data Access classes. However, for those applications where an ODBC based Remote Data Access class is not an option, improvements have now been made to increase the performance of fetching results from a remote server using a JDBC based Remote Data Access class. Nevertheless, even with these performance improvements, the recommendation is still to use ODBC based Remote Data Access classes instead of the JDBC based classes whenever possible.
591301 The server may have returned too many result rows if the query contained a DETWEEN predicate with constants, and a parallel index-only scan was used. This has been fixed.
591546 When the server executed a CREATE VIEW statement, and the view's SELECT statement referenced a materialized view that was not yet initialized, the statement would have failed with the error "Cannot use materialized view 'viewname' because

it has not yet been initialized". The script generated by dbunload -n could have failed trying to recompile views. This has been fixed.

591824 When running on Windows Vista, menu items that toggle a property on or off would not always have shown the check mark next to the menu item's text. Similarly, menu items that choose a value from a mutually exclusive set of values would not always show a sphere next to the currently selected value. Both of these problems have now been fixed.
591832 When using the debugger in the Sybase Central, a NullPointerException could have been thrown when leaving debugging mode. This would likely have occurred infrequently, but has now been fixed.
591833 The ADO.NET provider could have failed to unpack and load dbdata.dll. A race condition has been fixed.
591837 The Index Consultant in the Interactive SQL utility would have failed to process queries containing line-terminated comments (ie -- or //). This has been fixed.

As a work around, removing the comments allowed the analysis to proceed.

592018 It was possible for the Interactive SQL utility (dbisql) to have crashed when clicking the File/New menu item, or by pressing CTRL+N, when connected to a database and the contents of a file was being displayed. The problem was timing dependent, and was more pronounced the longer the database latency was. This has been fixed.
592035 Clicking the "Get Plan" button in the Plan Viewer window could have caused the Interavtive SQL utility to crash if it, or another Plan Viewer window, was executing a statement at that time. This has been fixed.
592269 Very large dates or timestamp values, such as "9999-12-31", would not have synchronized. The synchronization would have failed, possibly due to the exception "UltraLiteJ Error[-85]: Communication error Unexpected end of file from server", and the MobiLink sync log may have shown an error like "[-10308] Upload data for column 15 of table 'SalesOrder_1_0_getlist' is invalid"; however the column identified was not the column causing the problem. It was also possible that no error was detected, but that subsequent columns may have been corrupted. This has been fixed.
592421 Executing the utility SASetupAspNet.exe would have caused an unhandled exception "Could not load file or assembly iAnywhere.Data.SQLAnywhere" to be thrown. This problem has been fixed.
592425 When the server starts, the port numbers on which the server is listening are displayed on the console, but only if they were not supplied on the command line (using the -x tcpip(port=xxx) switch). This has been fixed - the port numbers are now always displayed.
592454 If left running for a long time, there may be a gradual degradation in responsiveness of the SQL Anywhere Monitor. For this to have occurred, a SQL Anywhere resource would have had to be unavailable at the time the Monitor was started. The performance degradation would not normally have been noticeable until sufficient time had passed. There were no other visible symptoms of this problem.
592467 There was an arbitrary limit of 1000 on the number of messages which could be shown on the "Messages" or "Archive Messages" tabs for a message store. That limit has now been relaxed. If there is enough memory to display all the messages, they will be displayed. Under low memory conditions, only the last 1000 messages will be displayed, but a warning message will now be displayed in this case.
592589 Some computed bitstring values (i.e. those produced as a result of a set_bit, &, |, ^ or ~) might not have hashed properly. Operations that can hash bitstring values during their execution (for example, select distinct of a bit column) could have returned incorrect results. This has been fixed, but existing tables containing affected values will require an unload/reload. Alternatively, if c is an affected column in table t, "update t set c = ~c" can be run twice with a server containing the fix.
592638 Some DELETE operations may corrupted the database. This occurred when a row was deleted from a multi-level index which was sufficienly full that no index-page reduction was required, and no subsequent operations modified the database page in question. This has been fixed.
592670 A connection failure could have occurred following an application crash. This would have occurred when there was an active temporary table and a commit or rollback had been executed following the first fetch using the temporary table. This has been corrected.
592728 The list of TCP/IP protocol options in the Connect dialog was incorrect. The list should not have contained the options 'TDS' or 'BroadcastListener', and the option 'SendBufferSize' was missing. These have been fixed.

Note, these issues affected the Connect dialog when connecting to SQL Anywhere, regardless of which program was being used -- DBISQL, Sybase Central, or DBConsole.

592784 Calls to the ODBC function SQLGetTypeInfo() always returned 0 in the CASE_SENSITIVE metadata column for the XML data type. For case-sensitive databases, string comparisions of columns and variables of type XML is case sensitive. Therefore, SQLGetTypeInfo() has been fixed to returned 1 in this case.
592860 On Unix systems, starting the server as a daemon could have hung if a fatal error occurred while starting up. This included Linux Standalone and Network services installed with the Service utility (dbsvc) as 'automatic on startup'. This has been fixed.
592873 By specifying the primary key in a separate clause of the CREATE TABLE statement, the UltraLite runtime allowed tables to be created with Long column types (ie. BLOBS, CLOBS) as primary keys.

For example: 'CREATE TABLE t1( v1 LONG VARCHAR, PRIMARY KEY(v1))'

The use of long datatypes in indexes is not supported by UltraLite, and inserting into the resulting table would have resulted in a crash. This has been corrected, long datatypes are now flagged as invalid when used in an index.

592887 Some database corruptions could have caused the cleaner to attempt to reference pages beyond the end of the database. This situation is now caught, and the server will halt with assertion failure 201301.
592912 In some cases, the database server was not able to fully recover from a crash, and displayed an assertion failure message. The server console would have shown that the server was able to recover the database, and a checkpoint was completed successfully, but then assertion failure 100920 was displayed: "Transaction log page X is corrupted." This problem has now been fixed.
592976 When using the debugger in the Sybase Central, right-clicking in the Editor to show the popup menu would have make the cursor disappear. This has now been fixed.
592981 Generating SQL procedures using the iAnywhere WSDL compiler (WSDLC) may have failed if the target WSDL (Web Services Description Language) contained an operation with a message referencing a complex fault type. This has been fixed. Generating fault stubs for WSDLC -l sql ... is not supported. The fault message type is now ignored and the SQL for the SOAP procedure is generated as expected.
593118 Only users with DBA authority should be able to reset a login policy, even if it is for themselves. The server was failing to check for this permission. This has been fixed. The server now ensures that only users with DBA authority can reset a login policy.
593120 The QAnywhere server could have stopped sending and receiving messages with an Enterprise Messaging Server, through its JMS connector, when connectivity to the EMS was interrupted and subsequently restored. This has been fixed.
593135 The server could have become deadlocked soon after starting a database. For this to have occurred, the database in question must have had a large dbspace, which must have been rapidly growing, and recent inserts and updates must either have failed, or have been undone by another transaction. This problem has now been fixed.
593143 When running the database transfer tool on a BlackBerry Bold, the buttons were too small to display all text. Only the first character, plus some ellipses showed up on all buttons. This has been fixed.

Now, all buttons display normally. However, the layout of the buttons is affected. They are aligned to the left, instead of in the center.

After the fix, buttons on other models of the BlackBerry remain legible.

593273 The server could have crash when attempting to execute a statement having a WHERE clause with a disjunction on sargable predicates, such that each predicate can be used for a partial index scan. This has been fixed.

For example:

select * from R left outer join T where R.X = 10 OR R.Y = T.Y

Both "R.X = 10" and "R.Y = T.Y" are sargable. An index must exist for on R<X> and R<Y>.

593329 When a database was run on a server started in "in-memory" mode (-im connand line option), and a checkpoint was performed during recovery, the server could have hung on shutdown. This has been fixed.
593334 The error "Fatal error: Could not write to file" could have been returned from the server when attempting to write to a file in a clustered environment. While the clustering service was performing some tasks, it was possible that the database server would be given an error ERROR_NOT_READY when attempting to perform an operation on the file. The server now retries the operation several times in this circumstance.
593347 An application connected using the iAnywhere JDBC Driver, and calling the method PreparedStatement.setBlob() to insert a blob of length between 64M and 256M, would have seen the insert take much longer than if the application used the method PreparedStatement.setBinaryStream() instead. This problem has now been fixed, and in addition, also improves the performance of using PreparedStatement.setBinaryStream().

Note that using setBlob() requires significantly less memory than using setBinaryStream(), and also, for blob values greater than 256M in size, setBlob() may actually be the only option.

593428 If an application executed a query containing a large number of proxy tables on a 64-bit server, and the query ended up being executed in NO PASSTHRU mode, then there was a chance the server would have failed assertion 101508 instead of giving the "syntactic limit exceeded" error. This problem has now been fixed, and the "syntactic limit exceeded" error is now properly returned.
593472 If a subquery contained an equality predicate with an outer reference, and the left and right expressions of the equality predicate had different domains, then the computed result set may have been incorrect. The equality predicate must have been of the form "local column = outer reference column". This problem has now been fixed.

For example:

select * from R, S

where R.X NOT IN ( select T.X from T where T.N = S.I)

where the column T.N is of type numeric and the column S.I is of type integer.

593523 The addition of fractional days to a timestamp value would have been incorrect. This was corrected.
593676 When using the SQL Anywhere ODBC driver, the transaction isolation level can be set with a call to the ODBC function SQLSetConnectAttr(). The following is an example for setting the transaction isolation level to "readonly-statement-snapshot":

SQLSetConnectAttr( dbc,

SA_SQL_ATTR_TXN_ISOLATION,

(SQLPOINTER)SA_SQL_TXN_READONLY_STATEMENT_SNAPSHOT,

SQL_IS_INTEGER );

The following isolation level options are available.

SQL_TXN_READ_UNCOMMITTED

SQL_TXN_READ_COMMITTED

SQL_TXN_REPEATABLE_READ

SQL_TXN_SERIALIZABLE

SA_SQL_TXN_SNAPSHOT

SA_SQL_TXN_STATEMENT_SNAPSHOT

SA_SQL_TXN_READONLY_STATEMENT_SNAPSHOT

When any of the "snapshot" isolation levels were selected, the ODBC driver would have set the transaction isolation level incorrectly upon connecting to the server. The following is an example of a SET statement that was executed:

SET TEMPORARY OPTION isolation_level = readonly-statement-snapshot;

This would have resulted in a syntax error and the server options would not have been changed. This problem has been fixed. The ODBC driver will now generate the following correct syntax with quotes around the isolation level value.

SET TEMPORARY OPTION isolation_level = 'readonly-statement-snapshot';

594121 The value of property('StartTime') could have been returned as NULL if used in an event that was fired immediately after the server was started. This has been fixed.
594130 If the Interactive SQL utility, Sybase Central, or DBConsole reported an internal error, and the link to check for software updates was clicked, it would not say that updates were available, even if they were. This has been fixed.
594288 The message for SQLE_INDEX_NOT_UNIQUE errors did not contain the index or table names. This has been fixed so that the error is now set with the appropriate parameters.
594317 If a synchronization had failed during the download, but before MobiLink had been able to generate any data for the download, then the MobiLink server would have placed the synchronization in the restartable state. When the same remote database synchronized again, there was a chance that the MobiLink server would not have been able to find the previous synchronization to cancel it, preventing the remote database from synchronizing. This problem has now been fixed.

A workaround to this problem would be to stop and start the MobiLink server.

594327 If an application called the method DatabaseMetaData.getDatabaseProductVersion() on a closed Connection object, then the iAnywhere JDBC Driver would have thrown a NullPointerException, instead of returning the appropriate SQLException. This problem has now been fixed.
594373 When used with a BIGINT argument, the INTTOHEX function could have returned an incorrect value. This has been corrected.
594463 The server could have crashed if the definition of a declared temporary table used in a procedure was modified. This has been fixed.
594465 The addition of fractional days to a timestamp value would have been incorrect. This was corrected.
594470 Attempting to call the system procedure sa_performance_statistics(), could have resulted in the failure of assertion 109510 on machines with many CPUs. This has been fixed.
594476 On Linux systems, invoking the Service utility (dbsvc) with the options "-l -cm" would have given unexpected results. In particular, it would not have displayed the service creation command. This has been fixed.
594479 On Linux systems, the Service utility (dbsvc) did not accept localized confirmations for overwrite or delete. For example, in the German version, when dbsvc asked to confirm overwriting or deleting a service, it showed the language specific options (J/N), but it expected a 'Y' for confirmation. This has been fixed.
594492 In rare cases, a database mirroring server could have crashed at shutdown. This has been fixed.
594528 In very rare situations, the server could have failed assertion 104908 at shutdown. This has been fixed.
594568 Queries executed with a plan that involved parallel hash joins that caused a run-time error (for example, a conversion error) could have occasionally hung. This has been fixed.

A workaround is to disable parallel plans (i.e. set MAX_QUERY_TASKS = 1).

594666 If an application called the ODBC function ResultSet.getCursorName(), then the iAnywhere JDBC Driver would have returned a truncated cursor name. The JDBC driver was incorrectly assuming that the returned length from SQLGetCursorNameW was in bytes, when in fact the value returned is in characters. This problem has been fixed, and the full cursor name is now properly returned.
594708 When a SQL Anywhere database that was being monitored by the SQL Anywhere Monitor, had a percentage of cache used that was over the user-set threshold in the Monitor, the Monitor could have failed to raise the corresponding memory usage alert. This has been fixed.
594711 The cardinality estimation of an index having more than one sargable equality predicate on a prefix column could have been incorrectly set to 0%. At least one of the sargable predicates must have been an equality with a constant and at least one of the sargable predicates must have been an equality with a non-constant expression. This has been fixed.

For example:

There exists an index on T <X,Y>: create index T_xy on T (X,Y)

Select * from

T, R where T.X = 1 and T.X = R.X and T.Y > 10

594888 The performance of ODBC metadata functions, such as SQLPrimaryKeys, SQLTables, and SQLColumns, has been improved for case-sensitive databases. This performance improvement will not occur for case-sensitive databases if SQLSetStmtAttr is called to set the SQL_ATTR_METADATA_ID attribute to SQL_TRUE. However, by default, this attribute is set to SQL_FALSE. When set to SQL_FALSE, case-sensitive databases will now enjoy the same performance as case-insensitive databases.

Please note that when the SQL_ATTR_METADATA_ID attribute is set to SQL_TRUE, the string arguments to metadata functions are treated as identifiers, not strings (or patterns like "co%"). Identifiers can be delimited, in which case leading and trailing spaces are removed. Identifiers need not be delimited, in which case trailing spaces are removed.

594897 The initial directory used by the file browsing windows in the graphical administration tools was "C:\Windows\System32" on Vista and Windows 7. The inappropriate initial directory was chosen only when the application was launched from an icon (e.g. in the "Start" menu.) This has now been changed to the system-defined user home directory, which is the initial directory used on Windows XP.
594913 UltraLite primary key constraints must be named "primary". This requirement was not being enforced when the primary key was defined. This has been corrected so that now it is. Databases that have primary key constraints not named "primary" should be rebuilt.
594914 The Relay Server had been relying on standard http cookie reflection or header reflection from the client to maintain affinity of the http session. However, some mobile devices suffer from thin http support, where both cookie and header reflection are not supported. So, the Relay Server Outbound Enabler (RSOE) now injects an IAS-RS-AFQ header at the first HTTP request of all session. The value of the header is the affinity token for the rest of the request belonging to the session. The backend server is responsible for transporting the affinity token to their client in their application protocol. The client is responsible for inserting the following query parameter to the query string of the subsequent responding URL.

IAS-RS-AFQ=<affinity_token>

The relay server will respect this affinity control when affinity information was not found in standard cookie nor in proprietary header.

594916 In some circumstances, the server may have failed to recover a database with assertion failure 201135 - "page freed twice". Some newly allocated database pages were not being initialized. This has been fixed.
594917 Backend farm Outbound Enabler security requirements and client security can be specified by client_security and/or backend_security properties of the backend farm in the Relay Server configuration file. These setting were not enforced though until the first Relay Server configuration update. This problem has now been fixed so that these setting are enforced immediately after Relay Server startup.
594922 The Relay Server at log level 3+ will produce packet header logging in the RS-OE protocol. The Relay Server at log level 5+ will also produce packet header logging plus the hex dump of the payload. This has been changed to now suspress level 3 packet header logging when verbosity level is 5 or above.
594929 If an application called a CLR stored procedure at exactly the same time that another connection or event that made a CLR stored procedure call terminated, then there was a small chance the server would have incorrectly returned a thread deadlock error instead of completing the CLR call. This problem has now been fixed.
595100 The Connect to Database dialog had strings overlapping text boxes. The "Connection String:" string and the "Specify Custom User" string overlapped their text boxes. This has been corrected.
595104 The Relay Server may be set up to autostart by the first RSOE connection. Concurrent autostarts were unnecessarily failing some of the RSOE connections that attempted to spawn the state manager (rshost.exe), but lost the race. This left those losing RSOE connections in an idle failed startup state, requiring users to restart them. The following error message would have been shown on the RSOE console and log file:

400 Auto started rshost.exe but it exited with return code <?>.

This has been fixed by suppressing the startup error for the failed connections, as long as the connections can attach to the stage manager started by others.

595276 Procedures containing XML generation functions (XMLAGG, XMLELEMENT, etc.) that were simultaneously executed by large numbers of connections, could have caused the server to crash. This has been fixed.

A workaround is to rewrite procedures that cause this behaviour to use the XML generation functions as EXECUTE IMMEDIATEs with a trim. For example, :

CREATE PROCEDURE FOO()

BEGIN

SELECT XMLELEMENT('foo');

END;

could be rewritten as:

CREATE PROCEDURE FOO()

BEGIN

EXECUTE IMMEDIATE trim('SELECT XMLELEMENT(''foo'')');

END;

Note that such rewritten procedures will no longer be able to take advantage of plan caching.

595294 The install or uninstall process could have left the machine.config file in a bad state. This has been fixed.
595416 Support has now been added for Mac OS X 10.6
595494 When running on Windows Vista or later, if the server encountered a fatal error it was possible to see a Windows crash dialog as well as a "Send Error Report" dialog. This has been fixed.
595502 The Relay Server may have incorrectly reported that shared memory was exhausted and then failed to relay further traffic after a rare memory abuse. This fix improves the memory manager by detecting and reporting incidents when a block of shared memory is freed by more than one process, and will allow the Relay Server to continue following the abuse. The detection was added without introducing extra computational overhead. The error report has the following format in the relay server log:

E. 2009-10-22 14:39:32. <1036.440.ShmDebug> Internal Error! Freeing already freed memory!: 00011390

The error message is useful in reporting issue to tech support so that we can identify defects in the higher level logic and eliminate the source of the rare abuse.

595504 If an authenticated application connected to an authenticated database and executed an external environment call, then there was a chance the external call would fail with an authentication violation error. This problem has now been fixed.
595624 The Relay Server Outbound Eeabler (RSOE) will verify routing of the relayed packets, and issue session mismatch errors when a routing issue occurs. One of the verifications was checking against a session finger print (sfp). The error message contained useful elements like session index, observed sfp and expected sfp, but the message being logged in the RSOE log was mangled so that it was not possible to use the detail information in the message to diagnose routine issues effectively. This has now been corrected.
595699 In very rare cases, the Windows and Linux server may have hung and stopped processing requests if request level logging was turned on. This has been fixed.
595744 After an HTTP request failure, the Relay Server Outbound Enabler (ROSE) would have unnecessarily failed an HTTP client retrying an HTTP request on the session using the acquired session cookie. This has been fixed by adding support in RSOE for this kind of resume.
595745 After a session was interrupted due to client disconnecting from the Relay Server, the Relay Server Outbound Enabler (RSOE) may have logged cancelled operations on the session using incorrect backend connection context information. This has been fixed. Along with this fix, a typo was corrected where sfp was being logged as spf.
595746 If the Interactive SQL utility executed a DROP statement which included an "IF EXISTS" clause, subsequent statements in the same batch would not have been parsed correctly. The symptom was that an unexpected error message would have been displayed, which referred to more than one of the statements which followed the DROP statement. This has been fixed.
595878 Under rare circumstances, the server could have crashed when processing an INSERT ... SELECT statement. This has been fixed.
595997 When using a Synchronization Model with a Microsoft SQL Server consolidated database that had a table with a UNIQUEIDENTIFIER or TIMESTAMP primary key column, and using snapshot download and downloading of deletes, the following error would have occurred for the generated download_delete_cursor script:

[-10002] Consolidated database server or ODBC error: ODBC: [Microsoft][ODBC SQL Server Driver]Restricted data type attribute violation

This has been fixed.

595999 With versions of the server that included the changes made for Engineering case 555808, queries with a recursive union could have failed to match rows on the recursive passes. Although there was nothing wrong with the fix itself, the changes exposed the underlying problem, which has now been fixed.

A workaround is to drop indexes on the table(s) being queried recursively, although there may a performance implications to doing this, which could be significant.

596021 Database recovery using in-memory mode would have failed with assertion 201865. The database must have had multiple dbspaces for this assertion to have occurred. This has been fixed.

A workaround is to recover without in-memory mode, but thist will cause the database on disk to be modified.

596034 Attempting to run a silent install using an MSI file created by the Deployment wizard, could have failed with the error:

Error 2769: Custom Action CAD_writeStrings did not close 3 MSIHANDLEs.

This has been corrected by no longer using MSIHANDLEs in custom actions, but rather using PMSIHANDLE variables, which are automatically freed when they go out of scope.

596235 When deploying a Synchronization Model to a new UltraLite database, if the remote schema had LONG NVARCHAR columns, an error would have occurred because UltraLite does not support LONG NVARCHAR columns. This has been fixed so that a warning is now given, and a LONG VARCHAR column is used instead in the new UltraLite database.
596417 There was a scenario, although rare, where an UltraLiteJ client may have hung and no longer have been able to synchronize when MobiLink server farms are involved. This has been fixed.
596419 When autostarting a database, database-specific options (such as -ds) which had values containing quotation marks were not handled correctly. For example, the following would not have worked correctly:

dbisqlc -c "dbf=my.db;dbs=\"d:\tmp\spacey path\""

This problem has now been corrected.

Note that using quotation marks on the command line to start a database server worked correctly:

dbeng11 my.db -ds "d:\tmp\spacey path"

A related problem was found and fixed in dbisqlc which handled the START DATABASE statement itself, and constructed a connection string containing a "dbs=-ds ..." parameter, rather than passing the START DATABASE statement to the server. Dbisqlc was not putting quotes around a -ds parameter that contained spaces.

596641 If all of the following conditions were met, then SQL Remote would have continued to hold locks in the database until the next time that it needed to send the results of a SYNCHRONIZE SUBSCRIPTION to a remote database:

1) SQL Remote was running in send-only mode (-s)

2) SQL Remote was running in continuous mode

3) SQL Remote was satisfying a resend request for user "X", and was forced to re-scan the transaction logs

4) While scanning the transaction log, a SYNCHRONIZE SUBSCRIPTION operation was scanned for a user "Y"

5) User "Y" had already been sent the results of the SYNCHRONIZE SUBSCRIPTION operation in a previous run of SQL Remote.

This has been fixed by releasing the locks when the send phase of dbremote reaches the end of the transaction log and determines that the SYNCHRONIZE SUBSCRIPTION operation does not need to be sent to the remote user.

The problem can be worked around by stopping and starting the dbremote process that was running in send-only mode.

596656 If an application made an external environment call, and the external environment procedure subsequently made a server-side call that required acquiring a lock that was already held by the connection making the external environment call, then there was a chance the application would hang. This problem has now been fixed.
605029 When the Relay Server Outbound Enabler (RSOE) loses a connection to the Relay Server, it will attempt to recovery the connection at a rate controlled by the -d switch. The reattempt may have unnecessarily failed, causing more reattempts before the service was restored. This has been fixed. The fix also improves error reporting on the RSOE so that it will report the HTTP response code and message in an error in cases when the web server rejects the request before it reaches the Relay Server extension.
605032 Under rare situation, the Relay Server may have notified the Relay Server Ooutbound Enabler (RSOE) to disconnect a stale backend connection when the HTTP response had been completed, but the RSOE didn't indicate that the backend server connection had been completed within a tolerable latency. When this happened on a request that was not the first one of a HTTP session, the Relay Server didn't fill in available OE and session indexes to optimize the lookup of the backend session, and caused the RSOE to perform extra work to lookup the session. The RSOE was also logging misleading invalid indices because of this. This problem has now been corrected.
605039 When using using the "-im nw" command line option (in-memory, no-write mode ), the server does not use a temporary file for the database; however, sa_disk_free_space() was returning a row for the temporary dbspace. This has been fixed.
605058 If a client-side cursor UPDATE was performed using the SQL Anywhere OLE DB provider, and the column was of type VARCHAR(n), where n was greater than or equal to 256 and the column value was originally NULL, then an error message similar to the following would have been issued by ADO:

Row cannot be located for updating. Some values may have been changed since it was last read.

The OLE DB provider was failing to return DBSTATUS_S_ISNULL for the column value and returned an empty string instead. This caused ADO to generate an UPDATE statement with a WHERE clause expression of the form "column = ?" and a bound value of '' (a zero-length string). This problem has been fixed. ADO will now generate an UPDATE statement with a WHERE clause expression of the form "column IS NULL".

A workaround is to use a server-side cursor.

605071 The Relay Server, in general, is not forward compatible with future versions of the Relay Server Ooutbound Enabler (RSOE). Changes have now been made which will allow future version of RSOE to fallback to a protocol version that is compatible with the Relay Server in use at the time. New Relay Servers will no longer reject connections from newer RSOEs, but will request a protocol version adjustment. This fix also contains an independent change that allows the RSOE to work with legacy 11.0.x Relay Servers without patching the Relay Server with the capability to request a protocol version adjustment. Heterogeneous Relay Server farms, with a mix of new and old Relay Servers, has also been enabled by this change. This can be useful in progressive Relay Server farm upgrades. Here is the compatibility matrix following this change:

RS RS

11.0.0.ga-1529 11.0.0.1530 and up

11.0.1.ga and up

12.0 beta and up

RSOE

11.0.0.ga-1529 YES YES

RSOE

11.0.0.1530 and up NO YES

11.0.1.ga and up

12.0 beta and up

605250 It was possible that for a long running query alert to have been generated with "null" as the query text in the alert. In most circumstances, this was caused by the server option "RememberLastStatement" being turned off. This has been corrected so that when this situation now occurs the alert text has been updated to suggest that the user turn on RememberLastStatement, rather than presenting the unhelpful query text of "null".
605253 Sybase Central would have throw an exception on startup on Windows 7 systems. The Windows XP theme that Sybase Central used did not work poperly in JDK 1.4.2. That theme is no longer used on a Windows 7 system, the classic Windows theme is used instead.
605385 When installing 11.0.1 on Mac OS X 10.6 (Snow Leopard), the registration key panel had problems displaying the key as entered. Sometimes, nothing would have been displayed, other times mangled characters would have been displayed. This has been fixed.
605386 When any of the Java based administration tools (Interactve SQL, Sybase Central,

Mobilink Monitor, DBConsole) were launched on Mac OS X systems, two copies of

the admin tool icons were being displayed on the Dock. This has been fixed.

605393 The value being maintained for the CacheFree property was not as documented and was of limited use. The value now returned is the number of cache images that contain no useful data. The values for the properties CacheFree+CachePinned+CacheFile should give the current cache size (i.e. number of images currently in the cache). The values for the properties CacheFile+CacheFree should give an upper bound on the number of pages immediately available for reuse (without resorting to growing the cache).
605412 If client_security (or server_security) was set to 'on' in the Relay Server for Apache running on Linux, the Relay Server may have unnecessarily failed the client's (or Outbound Enabler's) HTTPS requests. This has been fixed.
605413 If the server attempted to open a database file concurrently with antivirus software, the database could have failed to start, or the server could have failed with an assertion error. This has been fixed by adding a retry for sharing violations on a file open.
605414 On very rare occasions, if the number of allowed connections was exceeded, the HTTPS server may have sent the "Service temporarily unavailable" 503 response in plaintext. This has been fixed.
605417 The QAManagerFactory.getInstance() method of the QAnywhere .NET client would have thrown the exception System.DllNotFoundException when the native library qany9.dll or qany10.dll was missing. This exception may have been unexpected by a QAnywhere application, and has now been fixed. A QAException is now thrown in this situation, with ErrorCode 1000 (QAException.COMMON_INIT_ERROR) and Message containing the System.DllNotFoundException.
605433 If an application attempted to execute an UPDATE statement that updated a local table, but had a subquery in the SET clause that accessed a proxy table, then the server would have crashed. This problem has now been fixed.
605645 On rare occasions, the execution of a VALIDATE DATABASE statement could have reported spurious orphaned page errors. This has been fixed.
605651 The MobiLink server would have thrown the exception IllegalCastException when assigning the null reference to the Value property of an IDataParameter when using the MobiLink Direct Row API to download data. This has been fixed.

A work around is to assign DBNull.Value instead.

605653 If a REORGANIZE TABLE statement failed due to the table having been locked, then subsequent attempts to execute a REORGANIZE TABLE syatement would have also failed. The error would have been that a reorgorganize was already in progress. This has been fixed.
605668 If an application that was connected via jConnect or Open Client attempted to insert or retrieve a datetime or time value, then the date portion of the value was limited to January 1, 1753 or later, and the time portion was restricted a precision of 1/300th of a second. Now, if an application uses newer versions of jConnect and Open Client, then the date portion of datetime values will span the full range from 0001-01-01 to 9999-12-31, and the time portion will now be handled in microsecond precision.
605675 For a MySQL synchronization model, any events with comments would have had the comments lost when deploying the model directly to a MySQL consolidated database. Thus the special "--{ml_ignore}" comment to ignore a script, would have been lost. This has been fixed.

A workaround is to deploy to a file, and then run the deployed file.

605792 If an internal connection was the cause of a diagnostic message, it might have been identified with the phrase 'another user'. A more descriptive string identifying the connection will now be used. For example, one might now get a diagnostic message such as: User 'Cleaner' has the row in 'x' locked (SQLCODE: -210; SQLSTATE: 42W18)
605803 When uploading data into a SQL Anywhere database from Microsoft SQL Server using the Linked Server mechanism, SQL Server could have reported that it had received inconsistent metadata information and failed the upload. This was due to the SQL Anywhere OLE DB provider returning inconsistent column lengths for VARCHAR and NVARCHAR columns when using the UTF8 character set collation. For example, an NVARCHAR(100) column length would have been reported as 400, which is the octet length for this column using the UTF8 collation, but the "ulColumnSize" field of the DBCOLUMNINFO structure should contain the maximum length in characters for DBTYPE_STR and DBTYPE_WSTR columns, not the maximum length in bytes. This problem has been corrected.
605818 The Relay Server Outbound Enabler (RSOE) may not have issued timely liveness packet on the down channel when the backend server was loaded. This may have caused a down channel read timeout on the Relay Server. Also, the Relay Server may not have issued timely liveness packets on the up channel when the it was loaded, This may have caused an up channel read timeout on the RSOE. Both of these problems are now fixed.
605823 For an IBM DB2 synchronization model, any events with comments would have had the comments lost when deploying the model directly to a DB2 consolidated database. Thus the special "--{ml_ignore}" comment to ignore a script, would have been lost. This has been fixed. A workaround is to deploy to file and run the deployed file.
605843 When non-persistent http was used, and there was a significant latency for the backend server to close the socket after writing all response bytes and before the next request of the same session come into the Relay Server Outbound Enabler (RSOE), the RSOE may have mistakenly failed the new request when the Relay Server timed out waiting for the close of the previous request. This has been fixed.
605873 Two minor problems have been corrected:

1) The logging of unilitialized session indexes has been fixed

2) Reword logging of backend socket closing activities to "DoneReceive EOF" instead of "disconnecting" or "socket close"

605874 When the Relay Server Outbound Enabler (RSOE) timed out an up channel connection, the RSOE would have recovered the connection, but it may have resulted in an invalid opcode being received in error from the Relay Server, and then cause the RSOE to disconnect both the up and down channels and restart. This is now fixed so that the RSOE will handle the reconnect properly without causing a more substaintial restart before restoring the service.
606014 When the script sqlanydb.py was run, it would not have propagated some fetch-related errors to the application. This has been fixed.

Support has been added for Connection and Cursor .messages and .errorhandler attributes as outlined in PEP 249. Support has been added for SPARC 64 (and other platforms where sizeof(c_void_p) != sizeof(c_int)).

606024 A logic bug in the server may have caused database indexes to become corrupt under certain circumstances. The corruption would typically have manifest itself by generating SQLCODE -189 when deleting from an indexed column, followed by raising assertion 106200 - "Unable to undo index changes during rollback". The possibility of corruption was greater when using large page sizes with non-unique indexes over a small number of short columns. This problem has now been fixed. The corruption can be eliminated by dropping the affected index and recreating it with a server with this fix.
606038 If an application attempted to create a proxy table to a Micosoft SQL Server table that contained a varchar(max) or nvarchar(max) column, then the server would have incorrectly mapped the varchar(max) columns to varchar(1) and the nvarchar(max) columns to nvarchar(1). This problem has now been fixed and the server now correctly maps varchar(max) columns to long varchar and nvarchar(max) columns to long nvarchar.
606227 When running running on HPUX, Solaris or AIX systems, it was possible for the server to

crash while receiving IPv6 traffic. This has been fixed.

606229 When using the SQL Anywhere OLE DB provider, a memory leak cpuld have occurred when fetching data LONG VARCHAR or long VARBINARY columns. This problem has been fixed.
606247 When unloading VARCHAR or LONG VARCHAR data, the special characters "(double quote) and `(apostrophe) were not replaced by their escaped counterparts " and ' in XML. This may have caused the unloaded XML file to be invalid.

In addition the characters \r(carriage return), \n(line break) and \t(tab) were not replaced by the character references and . As a result the these characters were being treated exactly the same as empty spaces in the unloaded XML file.

These problems have now been fixed.

606273 When the SQL statement ALTER TABLE ADD FOREIGN KEY was executed, the system table sysfkcol did not contain the foreign columns for the new foreign key. This meant that the foreign key relation would have been corrupt once the database reboots. This has been fixed.
606440 If a DSN was created using the Data Source utility (dbdsn), attempting to modified the userid or password of the DSN using the ODBC Administrator would have reported no errors, but it would have failed to change either of these fields. This has been fixed.
606445 When setting up a download subset in a synchronization model, either by Mobilink user or remote id, the list for choosing a column to match included columns with incompatible types. This has been corrected so now columns with incompatible types are not listed.
606464 Queries with null-supplying derived tables, which have constants in the select list, may have failed with "Run time SQL error -- *** ERROR *** Assertion failed: 106105". This has been fixed.
606465 If the "kerberos" connection parameter, or its short form "krb", was given on the command line, the Interactive SQL utility would not have connected to the database unless a userid was also given. This has been fixed.
606626 When using the Interactive SQL utility (dbisqlc) to connect, and attempting to use integrated logins or kerberos, (i.e. dbisqlc -c "integrated=yes" or dbisqlc -c "kerberos=yes"), it would have displayed the connection dialog without first attempting to connect. Similarly, the the statements CONNECT USING 'integrated=yes' and CONNECT USING 'kerberos=yes' with dbisqlc, would also have displayed the connection dialog without first attempting to connect.

This has been fixed so that a connection with be attempted in these cases and if the connection attempt is successful, the connection dialog will not be displayed.

606629 When the XML input to ULjLoad contained one of the two following scenarios, ULjLoad would have rejected the file, even when it should have accepted it.

1. If a foreign key constraint comes before the definition of the primary table;

2. If the order of the tables in the data part does not follow the order of the tables in the schema part;

These problems have been fixed, but rearranging the schema definition or the data in the XML will workaround these problems..

606642 If a division by zero error occurred in a result set, the SQL Anywhere OLE DB provider would have returned DB_S_ENDOFROWSET instead of 0x800a000b (divide by zero). For example, the following SELECT statement will result in a division by zero error if the column value for "num" is 3:

SELECT num/(num-3) FROM divisionby0

This problem has been fixed. ADO will now set the correct error number (11) and description (Division by zero) from the error code returned by OLE DB.

606651 The creation of a proxy procedure for a procedure on a remote server may have caused a server crash, or failed assertion 201503, if a proxy procedure with the same name had been dropped as part of the execution of a DROP REMOTE SERVER statement. This has now been fixed.

A work around for the problem is to drop all proxy procedures belonging to a remote server before executing the DROP REMOTE SERVER statement.

606658 When shuting down the Relay Server for Apache on Linux, one persistent System V semaphore for IPC was being leaked between Relay Server components. This has been fixed.
606660 When working with clients that don't support communication liveness, such as MobiLink 9.x clients, the Relay Server will timeout a client after being idle for 8 minutes, if the web server has not timed out the client earlier. Increasing the web server liveness timeout will not resolve the situation. The solution is to use the IAS-RS-App-Timeout-Minute header in the http request. For example, to set a 20 minute timeout for a big download with a MobiLink version 9.x client, simply add custom_header=IAS-RS-App-Timeout-Minute:20 to the HTTinkP synchronization communication option. This timeout header is an existing but undocumented feature in all released version of the Relay Server. There is no software change involved.
606678 If a database contained BINARY type data that ended with one or more bytes of 0's, the 0's would have be truncated by ULjUnload when written to the output. This has been fixed.
606683 The build number on policy.11.0.iAnywhere.Data.SQLAnywhere.dll is incorrect. This has been corrected.
606726 If the Table editor or the Column property sheet was used to change a column's data type and its unique setting to 'not unique', then the change from 'unique' to 'not unique' would have been ignored. This has been fixed.
606823 The date at the beginning of the connection attempt information generated by the LogFile connection parameter was not necessarily in the locale format. This also affected the information in the Show Details dialog when using the ODBC Administrator's Test Connection feature. This has been fixed so these dates are now in the locale format.
606826 An incomplete startup of the Relay Server on Linux due to resource limitations, may have left many persistent System V semaphores behind. This would have caused a permanent semaphore resource drain to the system until they were either manually deleted, or the system was rebooted. This issue has now been fixed.
606828 When creating a Synchronization Model with a Sybase ASE consolidated database, the following error may have occurred when installing the MobiLink system setup:

[Sybase][ODBC Driver][ASE] Foreign key table qualifier must be name of current database

This has been fixed.

606833 Malformed or unexpected HTTP and HTTPS requests would sometimes have been closed by the MobiLink server without issuing a response. This has been corrected so that the MobiLink server now issues an HTTP or HTTPS error prior to closing the socket.
606835 The reason reported by the server for failing to start a database may have been incorrect. When attempting to open a file, the server will retry on certain errors. If it retries too many times it just reports 'database not found'. This behaviour was much more likely with the changes for Engineering case 605413, as sharing violations were now retried. This behaviour has now been changed so that the server reports the last OS error when it fails to open the database file.
606840 When running on Windows Vista or Windows 7 systems, menu items that toggle a property on or off would not always have shown the check mark next to the menu item's text. Similarly, menu items that choose a value from a mutually exclusive set of values would not always have shown a sphere next to the currently selected value. Both of these problems have been fixed.
606841 When using the Table wizard to create a new table, if the F5 key was pressed before saving the table, and answering 'No' to the "Do you want to save changes" dialog, would either have caused Sybase Central to crash or have caused the dialog to have been displayed repeatedly. This has been fixed.
606848 Executing a REORGANIZE TABLE statement on a table having an IMMEDIATE text index would have caused the index size to double. Additionally, under some rare circumstances, incorrect results could have been returned for subsequent full text queries. This has been fixed.

Note, if there exists a text index in a database affected by this problem, it should be dropped and recreated to reclaim the space and avoid possible wrong results for full text queries.

606858 A possible, but unlikely, security hole involving secure communications on MacOS systems has been fixed.
606882 When the MobiLink client's startup/options dialog was used to enter options, such as the publication or MobiLink password, it was possible that the synchronization would complete successfully, but the client would then crash when shutting down. This has been fixed.
606888 When redeploying a synchronization model to a SQL Anywhere remote database using the wizard initialized with the last settings, the extended options for the SQL Anywhere client could have been corrupted. This has been fixed.
606991 Starting a database, which had been backed up on a Windows CE device, could have caused "Assertion Failed: 201129 (version.build) File is shorter than expected". This problem was introduced in Engineering case 576669. This has now been fixed.
607048 When using the Table Editor for SQL Anywhere or UltraLite, or when using the Table Mapping Editor for MobiLink, a check box would sometimes have required two single clicks to change its value. This has been corrected so that only a single click is sufficient.
607061 The DBTools function DBCreatedVersion() was not able to handle databases that used strong encryption. This has been fixed.
607117 Use of the WEEKS() and DAYS() functions could have erroneously thrown an OVERFLOW exception. This has now been corrected.
607234 The SQL Anywhere Python database interface, now works with Python 3.x.
607303 If F5 was pressed, or View -> Refresh Folder was selected, while creating a new table in the Table Editor and Yes was answered when prompted to save the table, right-clicking to display a popup menu would have failed. This has been fixed.
607330 The SQL Anywhere C API was fetching the TINYINT data type as a signed value. This has been fixed.
607425 The number of nullable columns in a table is limited. This limitation is based on the page size of the database. For 4K pages, the limit is approximately 32000 columns. Attempting to add too many nullable columns to a table using ALTER TABLE would have resulted in a failed assertion, rather than an error message. This has been fixed.
607636 Under virtually all circumstances, the Database Information utility (ULjInfo) would have terminated abnormally when opening a valid database file. The error message would have been "getOrdinal(string) not supported". This has been corrected.
607651 In extremely rare circumstances, fetching a string from a table could have caused the server to hang. This would only have occurred if the string was longer than the prefix size of the column, but less than the page size of the database, and a string manipulation function such as TRIM() was being used, and another connection was attempting to update the string at the same time. This has been fixed.
607874 The SQL Anywhere C API version of DBD::SQLAnywhere perl driver did not fetch floating point/double values correctly (incorrect values would have been returned). This problem has been fixed.
607881 The MobiLink server would have reported error -10152 if a Java class loaded for scripting contained overloaded methods, and would have failed with an AmbiguousMatchException if a .NET class contained overloaded methods. This restriction has been lifted. This is most useful for the authenticate_parameters script, as now remotes can send different numbers of authentication parameters and the MobiLink server will choose the method that most closely matches those parameters.

For example, suppose a class Test exists:

public class Test {

public static String auth( InOutInteger status,

String user_name,

String p1,

String p2 )

{

return "insert into j_authparm_T2 (pk, c1, c2, c3) values (?,?,?,?)";

}

public static String auth( InOutInteger status,

String user_name,

String p1,

String p2,

String p3 )

{

return "insert into j_authparm_T2 (pk, c1, c2, c3, c4) values (?,?,?,?,?)";

}

}

Then the auth method can be registered as the script for the authenticate_parameters event:

call ml_add_java_connection_script( 'the version', 'authenticate_parameters', 'Test.auth' )

and invoking dbmlsync with different -ap switches will give different behaviour:

"-ap parm1,parm2" will call the first 'auth' overload

"-ap parm1,parm2,parm3" will call the second 'auth' overload

"-ap parm1" will print the error, "[-10362] No overload matching 'auth(ianywhere.ml.script.MLInOutInteger, java.lang.String, java.lang.String)' was found in class 'Test'", because there are not enough parameters to call any of the overloads

"-ap parm1,parm2,parm3,parm4" will invoke the second 'auth' overload, but the returned SQL will cause error "[-10094] Expecting 3 authentication parameter(s) from client, but received 4 for script insert into j_authparm_T2 (pk, c1, c2, c3, c4) values (?,?,?,?,?)" because the MobiLink server will accept a Java or .NET authentication_parameters script if it has the same number of parameters or fewer, but SQL authentication_parameters scripts must match the exact number of parameters. Some future version of the server may place that restriction on Java and .NET authentication_parameters scripts as well.

607934 The system functions DAYS() and WEEKS(), when called with a single argument under J2ME, could have generated incorrect results that were off by one. This was now been corrected.
607936 When a nullable column had a column default specified, and a row with that column set to null was inserted, the null value is ignored and the column default value was inserted instead. This behaviour was incompatible with UltraLite and SQL Anywhere. More seriously, when a nullable column had a column default specified, and the table with that column was altered by an ALTER TABLE statements, all the rows with null values in that column would have been replaced by the column defaults. The following SQL statements were affected. In all these cases, null values would have been replaced by column defaults.

1. INSERT () VALUES ();

2. INSERT () select-statement;

3. ALTER TABLE ADD column-definition;

4. ALTER TABLE DROP column-name;

5. ALTER TABLE ALTER column-definition.

This has been corrected. Now all the null values are preserved in these scenarios.

608095 When continually making ODBC connections/disconnections, using SQLConnect()/SQLDisconnect(), a memory leak would have occurred in the application. The process heap would continue to grow as the application looped. This has been fixed.
608101 When processing a synchronization download, rows with VARCHAR columns that had the total size exceeding the database page size would still have been downloaded and processed. Following the synchronization, if these rows were deleted, the database would have been in an error state. For example, if the page size is 256, then the maximum size of VARCHAR columns is 243, due to page overhead. However, UltraLiteJ would have accepted a VARCHAR of 244 bytes long during download. This has been fixed. Now UltraLiteJ will properly reject rows that are too big due to VARCHAR columns' sizes, which means the synchronization will fail.
608106 If an application called ResultSet.getObject() on a tinyint column, and the column value ranged from 128 to 255, then the JDBC driver would have incorrectly thrown a SQLException with a conversion error. This problem has now been fixed.
608314 When the Application Profiling wizard was run on an encrypted database, it would have failed with the error: "This database does not support encrypted tables." This has now been fixed.
608321 A host variable used by itsself as an item in an IN list could have caused a crash (Null pointer exception). This has now been corrected.
608332 When executing a SQL statement that lead to an internal conversion between Numeric types, the source Numeric value may have been corrupted by the conversion. For example, if a value 5.12 in a Numeric(5,2) column was converted to a Numeric(5,1) column, the source value would have been changed to 5.10 after the conversion. This has been fixed.
608339 On 11.0.1, builds 2309 through 2312 inclusive contained the fix for Engineering case 588740; however, builds 2313 through 2354 inclusive accidentally reverted back to the old behaviour. This regression has been fixed.

Note, testing has shown that the new correct behaviour can cause a significant performance degradation for server running databases without a transaction log (where every commit becomes a checkpoint). The amount of degradation will depend on the application, and on the hardware in use.

608342 A server participating in a mirroring system may, on rare occasions, have crashed if an

outgoing connection to another server participating in the mirroring system failed. This has now been fixed.

608354 The use of a host variable as the right operand of a LIKE operator, could have given incorrect results when an index was used to optimize the search condition. This was corrected.
608552 In rare cases, the executing the ATTACH TRACING statement could have caused the server to crash. This has been fixed.
608728 If a connection string was made up of parameters coming from different sources (i.e. the connection string itself, DSNs or file DSNs, SQLCONNECT environment variable), and the UID and PWD/ENP parameters were not specified in the same source, the PWD/ENP would have been ignored. For example, if DSN "foo" contained a UID but no PWD, then the connection string "DSN=foo;PWD=secret" would ignore the PWD field. This has been fixed.
608737 When utilities or applications attempt to connect to a database with 10000 or more rows and 5 or more indexes, the exception 'java.lang.OutOfMemoryError: Java heap space exception' could have occurred if lazy index loading was disabled. This has been fixed. The handling of large numbers of indexes has been improved and utilities now use lazy loading, but it is possible for this exception to still occurr for large databases.

A work around is to increase the heap space in the java starting line by adding the VM option -Xmx256m. This also applies to the batch file that starts uljunload, uljload and uljinfo.

608742 The following statements were added e added in version 11.0.1:

CREATE ENCRYPTED [TABLE] DATABASE newfile FROM oldfile

KEY newkey [ALGORITHM alg] [OLD KEY oldkey]

CREATE DECRYPTED DATABASE newfile FROM oldfile KEY oldkey

Execution of either of these statements in the Interactive SQL utility would have left the values of "oldKey" or "newKey" in plain text in the command history. This has been corrected so that these values are now obfuscated.

608743 When installing an MSI created by the Deployment wizard which contained Sybase Central and one or more plugins, on Windows Vista or Windows 7, it would have failed with the error: "The exception unknown software exception (0xc000000d) occurred in the application at location 0x10001d3d." The install would have completed, but the plugins were not correctly registered. This has been fixed.
608747 The Relay Server Outbound Enabler may have reported session mismatch errors when an Afaria client disconnect their POST channel. This has been fixed.
608750 If an application called ResultSet.getObject() on an unsigned smallint, int or bigint column, then the JDBC driver may have given a conversion error. This problem has now been fixed such that calling ResultSet.getObject() on an unsigned column will now promote the datatype. Hence, calling ResultSet.getObject() on an unsigned smallint column will now return an int; similarly, an unsigned int column will now return a long, and an unsigned bigint column will now return a BigDecimal. It should be noted that most applications prefer to have full control on the column object so it is always better to use one of the getShort(), getInt(), getLong() and getBigDecimal() methods explicitly rather than using an implicit method like getObject().
608751 If an application called IBlob.getBytes() with a position value <= 0, or a length value < 0, then the getBytes() method would have incorrectly returned NULL. The JDBC driver now correctly throws a SQLException for these cases.
608904 Additional drive flushing was added to improve recoverability (see Engineering case 588740); however, this flushing could have made the server significantly slower when no transaction log was present due to every commit causing a checkpoint. This performance issue has been addressed by reverting to the old flushing behaviour when no transaction log is being used.
609049 Some server, database, or connection properties may have shown values that were too large, or that have rolled over. This would only have happened on single core machines running the Personal server (dbeng11) on Unix platforms (but not Linux). This has been fixed.
609050 Query execution strategies that required the materialization of intermediate results (e.g. DISTINCT) may have used excessive memory when strings or blobs longer than the PREFIX length, but shorter than a page size, were involved in the query. This may have caused the query execution engine to switch to a low-memory strategy causing poor performance. This has been fixed.

Note, using compressed columns will avoid the bad-code path and is a suitable work-around for this problem.

609062 The MobiLink client (dbmlsync) was leaving a small fixed amount of memory unfreed on shutdown. This should not have been visible to users, and has now been fixed.
609096 Rows containing non-ascii7 characters in VARCHAR() columns (but not LONG VARCHAR columns) would have resulted in strings padded at the end with '\u0000' characters.

For example (using SQL escape sequences) the string 'Ann\u00E9e' would have downloaded as 'Ann\u00E9e\u0000' the and string 'Enqu\u00EAte qualit\uooE9 deux' would have downloaded as 'Enqu\u00EAte qualit\uooE9 deux\u0000\u0000'.

This has been fixed.

609310 The fix for Engineering case 570493, in very rare cases, could have caused the server to hang with one CPU at 100% usage when shutting down a database with many events. This has been fixed.
609449 FIPS 140-2 certified encryption is now supported by the MobiLink server on 64-bit (x64) Windows.

If the "FIPS-approved Strong Encryption" feature is not already installed, proceed as follows after applying the EBF:

- From Add & Remove Programs, select SQL Anywhere 11 and click the Change button.

- Select the Add option and enter the Add-on Registration Key and click Next.

- In the dialog, ensure that the "FIPS-approved Strong Encryption" feature is selected and proceed.

If the "FIPS-approved Strong Encryption" feature is already installed, proceed as follows after applying the EBF:

- From Add & Remove Programs, select SQL Anywhere 11 and click the Change button.

- Select the Modify option and de-select the "FIPS-approved Strong Encryption" feature, to temporarily remove it, and proceed.

- Again from Add & Remove Programs, select SQL Anywhere 11 and click the Change button.

- Select the Modify option and select the "FIPS-approved Strong Encryption" feature and proceed.

609454 When trying to bind null values for string or blob columns, the SQL Anywhere C API would have crashed in the call to sqlany_execute(). This has been fixed.

Also, when binding null values, dbcapi required a valid type to be specified. This is no longer required.

609701 The sample ECC certificate eccroot.crt shipped with versions 9.x and 10.x expired on November 17, 2009. As a result, the sample server certificate sample.crt has also expired, since it was signed by eccroot.crt. These have been replaced by new sample ECC certificates. The new server certificate is called eccserver.crt, and its password is "test". The file name for the signing certificate is still eccroot.crt but the certificate itself is different.
609704 When calling the SQL Anywhere C API function sqlany_clear_error() the resulting SQLSTATE value would have been set to the empty string instead of "00000". This has been fixed.
609706 When running, the database cleaner could have interfered wth transactions by causing locking attempts to fail. This has been fixed by having the requesting transaction wait for the cleaner.
609707 When running the MobiLink server in a server farm, it was possible for the MobiLink server to have printed errors to the MobiLink log that dealt with problems on operations to the ml_active_remote_id table. These errors are now suppressed, and more meaningful warnings or errors are printed to the MobiLink log.
609708 When using the SQL Anywhere C API and binding parameters for prepared statements and calling sqlany_execute() multiple times, the second and subsequent calls to sqlany_execute() would have failed with the error "Cursor already open". The problem was introduced as part of the changes for Engineering case 560351. This has now been fixed.
609736 If an application had a connection that was holding on to table locks, and the same application had other connections that were blocked in the server waiting for the table locks to be released, then there was a chance the application would have hung if the connection holding on to the table locks subsequently called Connection.createStatement(). This problem has now been fixed.
609739 When an application retrieved a Blob object by calling ResultSet.getBlob(), and the application subsequently retrieved the Blob's InputStream by calling Blob.getBinaryStream(), the applications performance would have been severely impacted if the application called InputStream.read( byte[] ) or InputStream.read( byte[], int, int ) on the Blob InputStream. This problem has now been fixed.

Note that a workaround is to use Blob.getBytes() directly, instead of using the Blob InputStream.

609944 When running the Relay Server Outbound Enabler (ROSE) and the backend server on slow machines, the RSOE may have failed to notify the Relay Server (RS) that the backend connection for a non-persistent http request had been closed, which would have caused the RS to hold on to resources for an extended period of time, making the RS less scalable. This problem has been fixed.
609953 The HTTP server may have crashed due to certain circumstances. This has been fixed.
610115 The database server was vulnerable to a particular type of denial-of-service attack. This has been fixed.
610118 When using the UltraLiteJ Database Transfer desktop application for USB transfer, the utility may have crashed with the error "A fatal error has been detected by the Java Runtime Environment". This would have been seen when the desktop application started ("Start" is pressed in the GUI) before the BlackBerry application was started("Next" is pressed on the final screen). This problem occurs with BlackBerry Desktop Manager 5.0.1, but it could have occurred in other versions as well. In order to function properly, the BlackBerry application must start before the desktop application. This has been resolved. The BlackBerry application's on-screen instruction of the correct order of starting the two pieces has been updated.
610141 When the Relay Server State Manager was run on Linux with the -os command line option, it would have generated many small archive output log files once the archiving process had started. The logger's size counter wasn't being reset after successfully generating the first output archive file. This has now been fixed.
610279 The use of a host variable in the left operand of a LIKE operator could have given incorrect results. This was corrected.
610505 Attempting to renaming an index (or text index) to an invalid name, would have resulted in unexpected behaviour of following statements related to the index. This has been fixed.
610520 The STRING() SQL function would have returned NULL when any of the parameters were null.

This has been corrected so that if any parameters passed to the STRING() function are non-NULL, then any NULL parameters are treated as empty strings. This now conforms with the SQL Anywhere server.

610533 If an application retrieved a ResultSet via a DatabaseMetaData call, and the application subsequently retrieved the underlying Statement object of that ResultSet by calling ResultSet.getStatement(), then attempting to close that DatabaseMetaData Statement object could have crashed the application. The problem with closing DatabaseMetaData Statement objects has now been fixed.

Note that in general, applications do not explicitly need to close DatabaseMetaData Statement objects; hence the chances of an application crashing due to this problem are rare. Closing the ResultSet of a DatabaseMetaData call is not uncommon and not affected by this.

610718 If an application executed an UPDATE statement, and the UPDATE statement involved proxy tables, then the server may have crashed when the UPDATE statement could not be handled in full passthrough mode. This problem has now been fixed, and a proper error message is returned.
610723 If the Data Source utility (dbdsn) was used to create an ODBC data source, but the -c

option was not specified, a data source would have been created containing "LINKS=ShMem,TCPIP". This has been fixed, the -c option is now required when -w is used.

610724 Problems with an LDAP server could have caused a SQL Anywhere server, or a client application using it, to hang. Calls to the LDAP library were synchronous, so if the LDAP server was hung and did not respond, the SA server would have waited forever for a response. This has been fixed by making the LDAP library calls asynchronous and adding a timeout.
610948 Attempting to execute an ALTER TABLE statement that added a primary or foreign key would have returned a Runtime SQL error (SQLCODE -300) if the option row_counts had been turned on. The workaround is to temporarily turn the option off. This has been fixed.
610974 If a REFRESH MATERIALIZED VIEW staement was executed with the WITH ISOLATION LEVEL SNAPSHOT clause, and database recovered was later attempted using the transaction log, recovery would have failed when attempting to access the view. This has been fixed.
610982 When installing SQL Anywhere on a Windows system that used a multibyte character set as the ANSI code page, the SQL Anywhere performance monitor counters may not have been registered correctly and no error message would have been displayed. At startup, the server would have displayed the message "Unable to initialize NT performance monitor data area; server startup continuing". This problem has now been fixed.
611017 When the OLE DB provider's GetNextRows method was called, the next row would not have been read if the previous row had NULL column values. This problem was introduced by the changes for Engineering case 605058, and has now been fixed.
611168 ODBC drivers support standard escape sequences in bound data as a driver-independent way to specify date and time literals, outer joins and procedure calls. The SQL Anywhere driver was failing to recognize these escape sequences when embedded in a bound parameter that contained a Unicode string. This has been fixed.
611184 Attempting to convert a string to a UUID when the string included braces as the first and last characters, would have resulted in a conversion error. This has been fixed.
611227 The MESSAGE statement did not allow specifying the EVENT, SYSTEM LOG and DEBUG ONLY clauses at the same time. This has now been corrected.
611262 Customer try to setup Mobilink Server with Consolidate Database ASE Cluster Edition using

the SDK15 ODBC driver. According to SDK document, the SDK ODBC Driver "libsybdrvodb.so"

require third party Driver Manager.

With the ODBC DSN, Mobilink Server try to load the ODBC driver when the client sync. request, then Mobilink Server will crash.

611350 The server may have hung while generating a cache dump. This has been fixed.
611361 Using Sybase Central to cancel a system message that resided in a QAnywhere Client database would have resulted in an unhandled Null Pointer Exception. This has been fixed
611368 The Interactive SQL utility (dbisql) was using only the "sqlconnect" environment variable when connecting from the command line, where it should have been using "SQLCONNECT", as it did in version 10 and earlier. Now, dbisql will look for "SQLCONNECT", and if that variable is not set, it will look for "sqlconnect". This is the same algorithm used by the non-graphical command line tools (e.g. dbping).

Note, the "ULSQLCONNECT" environment variable is now treated the same way.

This change only affects machines running non-Windows operating systems.

611373 The MobiLink server could have occasionally given the following error:

A downloaded value for table 'table_name' (column #column_number) was either

too big or invalid for the remote schema type

and then aborted the synchronization, when a client was trying to download data from a table that contained NCHAR, NVARCHAR or LONG NVARCHAR columns, even when NCHAR, NVARCHAR or LONG NVARCHAR data was uploaded in a previous synchronization. This problem has now been fixed.

611414 When using the iAS Oracle ODBC driver, attempting to execute an INSERT, UPDATE, or DELETE statement with SQLExecDirect immediately after executing a SELECT statement with the same statement handle, would have failed with the following error message:

ORA-24333: zero iteration count

This problem is fixed now.

611611 If an application executed a query similar to the following:

select * from T where price * (1 - discount) > 500

and the table T was a remote table, then it was possible the query would have returned the wrong result. This was due to fact that the Remote Data Access layer sometimes failed to include the parenthesis when generating queries to be executed on remote servers. This problem has now been fixed.

611877 The Listener utility (dblsn) was failing to recognize the operating system when run on Windows 6.x systems, which may have resulted in crashes. This has been fixed.

Note, the Listener utility now tracks the following new Windows 6.x versions:

Windows Server 2008

Windows Vista

Windows 7

Windows Server 2008R2

Future versions will be tracked as "Unrecognized Windows NT ?.?"

611985 Software installs that were built using merge modules (MSM files) created by the SQL Anywhere Deployment Wizard would have failed to generate the .jpr files needed to register plugins for Sybase Central. Consequently, the following error would have occurred:

Error - EXCEPTION: java.io.FileNotFoundException: C:\Program Files\SQL Anywhere 11\java\SQLAnywhere.jpr (the System cannot find the file specified).

A similar error message would also have appeared for the file Mobilink.jpr

This has been fixed, so that MSMs now work correctly as well.

Note, MSI installs built with the Deployment Wizard did not exhibit this behavior.

--EOF--

  • 本文链接地址:http://www.sybrepair.com/sap-asa-cr-number-5.htm
  • 本文为dbainfo个人原创,请在尊重作者劳动成果的前提下进行转载;
  • 转载务必注明原始出处 : Sybase数据库技术,数据库恢复专家
  • 对《SAP SQL Anywhere的所有已知BUG列表(5)》有何疑问或见解,请在本文下方发表;
  • 对网站还有其他问题或建议,请提交在留言板,谢谢!
  • 目前还没有任何评论.
    :wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)