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

随着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
665116 The UltraLite Unload utility (ulunload) would not have unloaded an empty Synchronization Profile, such as:

CREATE SYNCHRONIZATION PROFILE "sp" ''

The query used to obtain the profile string for a specified Synchronization Profile returned null. This would have resulted in the profile being skipped during the unload. This has been fixed.

665140 For MobiLink clients that support ECC TLS, support has now been added for RFC 4492 and 256-bit AES ECC cipher suites as well, in addition to the Draft 3 128-bit AES ECC cipher suite they previously supported.
665158 For servers that support ECC TLS, support has now been added for RFC 4492 and 256-bit AES ECC cipher suites as well, in addition to the Draft 3 128-bit AES ECC cipher suite they previously supported.
665176 The NEXTVAL operation on sequences did not return an error when executed in a read-only database. This has been corrected. The operation should return an error because the sequence value cannot be updated in the catalog table.
665184 The server would have incorrectly returned the error "XPath parser error: syntax error at or before character 0 <--" if a stored procedure contained a SELECT statement with an openxml clause that used a variable for the xpath string. This has been fixed.
665195 If a column or variable name was misspelled in a function that was inlined, and the scope into which inlining was performed contained an object with a matching name, incorrect results, or an incorrect error, could have been returned. This has been fixed.

Example:

CREATE FUNCTION func1( @a integer)

RETURNS INTEGER

BEGIN

DECLARE @ret INTEGER;

SET @ret = ( a + 10 ) / 100;

RETURN @ret;

END;

SELECT a, func1( b + c ) as ret

FROM tab;

Expected error is 慍olumn 揳� not found�.

665200 The redirector for Apache could have crashed during a synchronization. This has been fixed.
665212 Statements using user-defined functions eligible for inlining could have failed unexpectedly. This problem could have affected databases created with earlier versions and reloaded to a version 12 database if such databases contained views referencing inlinable user-defined functions. Such databases could have failed to be reloaded. This has now been fixed.
665325 When validating a database using the VALIDATE statement or the Validation utility (dbvalid), the operation could not have been cancelled. This has been fixed.
665522 The attachment specified by the attachname parameter of the system procedure xp_sendmail() may not have been received properly by the recipient's mail client. This has been fixed.
665524 An exclusive table lock on a non-transactional global shared temporary table could have caused the server to crash on subsequent INSERT, UPDATE or DELETE statements. This has been fixed.

All conditions must have been met (non-transactional, shared global temp table,

and LOCK TABLE WITH EXCLUSIVE) for the crash to have occurred. If any of these three can be relaxed, the crash will be avoided.

665535 When exporting to a database in the MobiLink Monitor, the values exported to the per-table details table (called mlm_by_table by default) were the per-sync values instead of the per-table values. This has been fixed.
665538 ZLIB compression has been added to UltraLiteJ for the Android. This is accomplished with the following addition methods:

setZlibCompression( boolean )

setZlibDownloadWindowSize( int )

setZlibUploadWindowSize( int )

zlibCompressionEnabled()

665630 Upgrading a database that had been created with the -dba switch (to set the DBA username and password) could have failed. This has been fixed.
665657 The problems described here affect Windows CE 5.x kernels only. Note that Windows Mobile 6 platforms use the Windows CE 5.x kernel.

With version 11.x, the server was not able to create a cache larger than 32MB. Attempting to do so would have caused the error "Not enough memory".

With version 12.x, the server would have automatically and erroneously restricted the cache size to a size smaller than 32MB.

The default maximum cache size was erroneously restricted to a value less than 32MB.

The "percentage" notation for cache sizes (eg, "-c 50p") erroneously based the percentage on a value that was less than 32MB, rather than the total system memory as documented.

These problems have been corrected.

665665 The server could have crashed when increasing the CurrentMultiProgrammingLevel using the system procedure sa_server_option() if there wasn't enough memory available. This has been fixed.
665670 The execution tree in the Plan Viewer window could have partially obscured the bottom part of the tree drawing if a display option for the plan was changed to make it larger (by turning on "Show percent cost", for example). This has been fixed.
665673 If the Interactive SQL utility was launched from a program using the Apache Portable Runtime, and standard output and/or standard error file handles were redirected, an internal error could have been reported. This has been fixed.
665684 If an application attempted to establish a Remote Data Access connection to an ASE server, and that connection request failed over to a different ASE server, then the Remote Data Access connection request would have failed. This problem has now been fixed.
665710 When executing a SELECT statement such as "(select 1)" that begins with open parenthesis, the dbisqlc utility would have reported a syntax error. This problem has been fixed.
665799 On Windows systems, a minidump might not have been generated under certain circumstances. This has been fixed.
665837 The changes for Engineering case 661112 introduced a bug where the MobiLink client could have crashed, or the check of the certificate_name, certificate_company, or certificate_unit could have failed, if any of the certificate fields were encoded as Unicode in the server's certificate. This has been fixed.
665884 The UltraLite Load utility (ulload) would have crashed if the input XML contained a synchronization profile, but no tables. This has been fixed.
665966 A query whose execution used a parallel HashGroupBy operator, may have returned an incorrect result if the MIN or MAX aggregate function was used, or may have caused the server to crash if an aggregate function was used on a numeric or string expression. This has been fixed. A workaround for the problem is to set the database option max_query_tasks to 1.
665980 The Index Consultant could have failed if the tables involved had text indexes. This has been fixed.
665981 The Index Consultant will no longer print debugging messages to the console window.
666011 When a root server was committing and sending log pages to a copy node, the root server could have experienced poor performance. Root servers which had frequent commits, and copy nodes running on slow computers or connected through high latency connections, would have shown the most noticeable poor performance. This has been fixed so that the performance of the copy node latency will have a smaller affect on the root node by using the equivalent of asynchronous log page synchronization.

When using the "SET MIRROR OPTION synchronization_mode = '<value>'" statement, where <value> was asynchronous or asyncfullpage, the server was incorrectly treating this as a synchronous synchronization. This has been fixed as well.

666013 Using Sybase Central's searching capabilities to search for a single backslash would have caused Sybase Central to crash. This has been fixed.
666024 Using Sybase Central's searching capabilities to search in a Version 11.0 or earlier database would have caused Sybase Central to crash. This has been fixed.
666123 The server did not respond to a cancel during execution of a REGEXP or LIKE predicate if the first operand was a very long constant expression. This has been fixed.
666132 In some cases, expressions could have been evaluated with incorrect domain information. The affected information included:

- precision and scale for NUMERIC values

- length for string values

- differences between string types (e.g., char/varchar/long varchar or binary/varbinary/long binary)

For example, the following statement would have incorrectly returned:

a a_string

1.0000 "1.0000"

select case when dummy_col=0 then 1 else cast(2 as numeric(10,4) ) end case a

, cast( a as varchar ) a_string

from sys.dummy

However, the following statement would have incorrectly returned:

a a_string

1 "1"

select case when 0=0 then 1 else cast(2 as numeric(10,4) ) end case a

, cast( a as varchar ) a_string

from sys.dummy

The incorrect behaviour affected expressions that were partly or fully evaluated at query open time or in procedural code, and affected IF, CASE, NULLIF, ARGN, COALESCE and some other related expression types. This problem has now been fixed.

666182 An HTTP request over a persistent keep-alive connection to a SQL Anywhere HTTP server may have failed if a previous request on that connection had sent an unexpected body. This has been fixed.

For HTTP methods other than POST, the body may be retrieved using HTTP_VARIABLE('TEXT') or HTTP_VARIABLE('BODY') as dictated by the Content-Type. An HTTP POST method is assumed to have a Content-Type of application/x-www-form-urlencoded unless otherwise specified (as with any other HTTP method, alternate Content-Types may be accessed using HTTP_VARIABLE('TEXT') or HTTP_VARIABLE('BODY')).

666232 The "Go To Table" and "Go To Foreign Key" menu items for the ER Diagram tab did not always work. The "Go To Table" menu item did nothing if the database tree node was collapsed. The "Go To Foreign Key" menu item did not work at all. These have now been fixed.
666434 When using output redirection for a READ statement that referenced a file containing another READ statement, the dbisqlc utility would have reported an error such as "invalid file number". This problem has been corrected.

Example: "READ file1.sql >& output.txt"

file1.sql:

read file2.sql

go

SELECT ...

file2.sql:

SELECT ...

666566 After performing an unload of a resource database, the SQL Anywhere Monitor server console would have shown 'Permission denied' errors for serveral system procedures. Graphing the metrics for "free disk space" would have displayed incorrect values (a horizontal line as if nothing changed). This is caused by the server policy to preserve permissions granted or revoked on objects owned by dbo user that are created in a newly initialized database.

The following describe the steps required to correct this whenever an unload of a database is performed:

1. log in to SQL Anywhere Monitor Web UI as the user 'administrator'.

2. click Administrator on the left pane to open an Administrator dialog

3. under Resource tab, select the resource that had been dbunloaded

4. click Stop button to stop monitoring the resource

5. click Repair... and enter DBA uid/pwd to repair the resource database

6. after done, click Start to start monitoring the DB

After the above steps, the resource should function correctly.

666639 The detection of processor geometry (number of physical processors, cores and threads) was incorrect for certain Intel x86/x64 processors, including the Intel Xeon E5405. The server would have detected all cores and threads as belonging to a single physical processor. This problem has been corrected.
666731 Under rare circumstances, the server could have hung when values for WHERE or SUBSCRIBE

BY clauses were being changed in a table with an article. This has been fixed. This fix covers additional cases that were not covered by Engineering case 654952.

666801 The Redirector for Apache on Windows now supports Apache 2.2.15. This newer webserver offers enhanced security.
666845 The Relay Server admin and monitor extensions may have slowly leaked memory. Eventually, admin or monitoring requests would have failed without any trace in the HTTP error log, IIS access log, or in the Relay Server log. This problem has been fixed so that recycling is no longer necessary. To workaround this problem, users may setup application pool recycling for the admin and monitoring extension.
666960 When connected to an ASE database, the "Help" menu could have contained redundant separators. This has been fixed.
667001 If a stored procedure or a user defined function with the hidden definition appeared on the stack when an error occurred, subsequent call to the TRACEBACK function could have returned the statements from the hidden definition. This has been fixed so that the output of the TRACEBACK function now contains the string '<hidden>' instead of the statements from the hidden procedures or user defined functions.
667109 If SQL remote (dbremote) was running in continuous mode, it was possible for it to have have reported "Execution Complete", but no errors or warnings would have been printed to the dbremote log indicating why the process had stopped. This has been fixed.
667115 The language for the SQL Monitor UI was always set to the browser's language no matter what the user's preferred language was. This has been fixed. The UI language is now set as the user's language when they login, or when the current user changes the language in the user settings dialog.
667142 In very rare timing dependent cases, the server could have crashed when a database was stopping. Also in rare cases, it was possible for an automatically started database to not automatically stop when there where no longer any connections to it. Both of these problems have now been fixed.
667152 Some internal optimization algorithms have been generalized and improved. This may change plans for queries.
667179 The Start Server in Background utility (dbspawn), when used with -p option to specify the OS process id, was reporting a process id for the started server of 0 on Windows Vista, Windows 7 and Windows 2008. Windows XP, Windows 2003 and Unix were not affected. This has been fixed so that the process id of the started server is reported correctly.
667314 If more than one connection attempted to install or remove Java external environment objects at the same time, then there was a chance the server would have crashed or failed assertions. This problem has now been fixed.
667316 When unloading a database, the server would have incorrectly output a "dynamic result sets" clause for non-external environment procedures in the reload.sql file. This problem has now been fixed and the "dynamic result sets" clause is now only output for external environment procedures.

There are a few points of note:

1) this problem would only have occurred with stored procedures that were created using an older SA 12.0.1 server

2) this fix will only affect new procedures that are created

3) the existence of the "dynamic result sets" clause for non-external environment procedures is in fact a no-op and does not affect performance or behaviour of the non-external environment procedure.

667441 Misleading error messages would have been returned to the client when opening a connection using an invalid DSN. This problem has been fixed.
667518 When merging recent data distribution information into a table's histogram, the server could have allocated up to one database page worth of data outside of the database cache and then failed to free the memory. The leak could eventually have caused the server to fail due to a lack of memory on 32-bit platforms, or due to lack of swap space on 32-bit or 64-bit platforms. This has now been corrected.
667519 The following get-by-name APIs were missing from ResultSet for UltraLiteJ for Android and have now been added:

java.io.InputStream getBlobInputStream( String name )

boolean getBoolean( String name )

byte[] getBytes( String name )

java.io.Reader getClobReader( String name )

java.util.Date getDate( String name )

DecimalNumber getDecimalNumber( String name )

double getDouble( String name )

float getFloat( String name )

long getLong( String name )

int getSize( String name )

String getString( String name )

UUIDValue getUUIDValue( String name )

boolean isNull( String name )

667520 A new command line option 'uninstallall' (or 'ua') has been added to SetupVSPackage.exe. When specified, the 'uninstallall' option will cause SetupVSPackage to remove all versions of SQL Anywhere assemblies from the Global Assembly Cache.

For example:

SetupVSPackage.exe /ua

667668 The following two extensions have been made to the -xa option:

1) The dbn= value can be "*", which means any database can use this server as an arbiter.

2) The auth= value can be:

a) omitted, which means no validation of the authentication string provided by a mirror server is done.

b) a single value, which means all databases must use the same authentication string.

c) a list of values with the same number of entries as specified by dbn= (i.e. previous behavior)

667672 The Entity Framework function 'DiffDays' was not mapped to the SQL Anywhere function 'Days'.

For example:

Entities db = new Entities();

var query = db.SalesOrders.Select( x => x ).Where( x => EntityFunctions.DiffDays( x.OrderDate, DateTime.Now ) > 100 );

string trace = ( ( ObjectQuery ) query ).ToTraceString();

This problem has been fixed.

667675 After the Database Documentation Wizard completed, a prompt asked whether to view the generated documentation. If "Yes" was clicked, a browser window was supposed to open to show the documentation, but the browser failed to open if the path to the generated files contained a space. This has now been fixed.
667686 If an application attempted to cancel or drop a connection that was in the process of making a connection-scoped external environment call, then there was a very small chance the server would have crashed. This problem has now been fixed.
667716 A new name type ul_name_type_qualified has been added to ul_column_name_type in tjhe header ulcpp.h. When this new name type is used in conjunction with the GetColumnName function in the ULResultSetSchema class, a qualified name for the associated column in the ResultSet can be obtained, if possible. If the column represents a correlated table, then that qualified name is used; if the column represents a table column, then that qualified name is used; if the column has an alias name, then that name is used. Otherwise, an empty string is returned.
667720 The following methods have been implemented in ResultSetMetadata for UltraLiteJ for Android:

String getAliasName( int column_no )

String getDomainName( int column_no )

String getCorrelationName( int column_no )

String getQualifiedName( int column_no )

String getTableColumnName( int column_no )

String getTableName( int column_no )

String getWrittenName( int column_no )

Previously, they returned the value "N.Y.I.". They now return values that closely approximate those returned by the UltraLiteJ runtime for Blackberry.

667762 SetupVSPackage.exe would have failed to add some dlls to the Global Assembly Cache on 64 bit Windows systems. This problem has been fixed.

Also, a new command line option 'salocation' (or 'sal') has been added to SetupVSPackage to allow specifying the SQL Anywhere install location. If 'salocation' is specified, SetupVSPackage will use it to locate the necessary dlls. If 'salocation' is not specified, SetupVSPackage will use SQL Anywhere registry keys to locate the dlls.

667900 If the Transact-SQL ROWCOUNT option was used to limit the number of rows returned by a cursor, the cursor may have skipped the first row in the result set in some cases. This incorrect behaviour only occurred for queries in which optimization was bypassed, and the plan contained a SortTopN operator, rather than a RowLimit operator. This incorrect behaviour was introduced as part of the fix for Engineer case 653706, and has now been fixed.
667901 If an application connected via jConnect and then subsequently attempted to use the {} JDBC escape sequence when making a stored procedure call, then there was a chance the server would have returned an incorrect "variable @p0 not found" error at the time the stored procedure statement or result set was closed. This problem has now been fixed.
667902 SQL Anywhere EBF installs would have failed to update the SQL Anywhere Monitor (Developer) database (samonitor.db) if the SQL Anywhere Monitor had been used after the EBF build date. This has now been fixed.
667907 When creating a server message store for QAnywhere in Sybase Central, the process could have failed with the error message "Can't find MobiLink setup scripts". It has now been fixed.

Note, this problem occurred only on Linux systems.

667927 The SQL Anywhere .NET Provider, running in 64-bit mode, might have inadvertently attempted to load a 32-bit language resource DLL (e.g., dblgen12.dll) and failed with an error. This problem has been corrected.
667930 In rare situations, the server could have crashed when generating or updating a histogram for a string column. This problem has been corrected.
667932 For a table with no foreign keys, SQLForeignKeys would have returned a single row with NULLs in most columns. This problem could have resulted in a java.lang.NullPointerException in the Interactive SQL utility's Query Editor. This has been fixed so that when the table has no foreign keys, no rows will be returned.
667934 The attempt to add a second primary key was not diagnosed in an ALTER TABLE statement. This has been corrected.
668109 Attempting to start two High Availability partner servers without state files (for example, starting them for the first time) could have, in rare timing dependent cases, failed to have one server start as the primary. If this occurred, one partner started as the mirror, and the other partner server looped indefinitely attempting to determine which role it should take. This has been fixed.

Also, if a mirror server was in the middle of taking over as the primary when it was shutdown, the database shutdown could have hung until any remaining connections were disconnected. This has been fixed.

668136 An SQL Anywhere resource may have generated an alert for "No Recent Backup Recorded", even though a client-side backup had recently been done. This has been corrected so that the alert now clearly indicates that it pertains to server-side backups only.
668141 Calling the method SATcpOptionsBuilder.ClientPort could have caused the exception InvalidCastException to have been thrown.

For example:

SATcpOptionsBuilder options = new SATcpOptionsBuilder( "localonly=yes;port=6873" );

string cport = options.ClientPort;

This problem has been fixed.

668396 Join queries with predicates in the WHERE or ON clauses that involved columns not in indexes have now been improved.
668397 The SQL Passthrough feature was removed in version 12 and three associated tables (sync_passthrough_progress, sync_passthrough_script, and sync_passthrough_status) were dropped. The Unload utility did not properly handle the case where a pre-version 12 database contained these tables and they were not empty. This has been fixed.
668425 The MobiLink client now prints information about the operating system and machine architecture on which it is running to the log. It also prints the platform for which the executable was compiled. This is similar to what the MobiLink server and the database server already do.
668603 In rare cases, an application could have failed to connect because of a TCP/IP communication link failure. No specific reason for the failure would have been logged to the file specified by the LOGFILE connection parameter. This has been fixed.

Note, this problem affected the .Net provider, the ODBC, JDBC and OLEDB drivers as well.

668612 The MobiLink Replay utility (mlreplay) could have crashed when synchronizing unsigned big integers using the Replay API. This has been fixed.
668716 In rare circumstances, a database with snapshot isolation enabled could have triggered

an assertion while updating values indexed by an immediate text index. This problem required high contention on the base table. This has been fixed.

668757 SQL Remote for SQL Anywhere (dbremote) now supports HTTP and HTTPS as a message type for SQL Remote messages for remote databases. Users wishing to use the HTTP or HTTPS message type from a remote database will configure the remote database using the SET REMOTE OPTION command, in the same way that the FILE, FTP and SMTP message type is configured. The HTTP/HTTPS message type uses the following control parameters that are set by the SET REMOTE OPTION statement:

� url : Specify the server name or IP address and optionally the port number of the HTTP server being used, separated by a semi-colon. If requests are being passed through the Relay Server, you can optionally add an URL suffix to indicate which server farm the request should be passed to. url=抯erver-name[:port-number][url_suffix]�

� https : Specify whether to use HTTPS (https=YES) or HTTP (https=NO).

� certificate : To make a secure (HTTPS) request, a client must have access to the certificate used by the HTTPS server. The necessary information is specified in a string of semicolon-separated key/value pairs. You can use the file key to specify the file name of the certificate, or you can use the certificate key to specify the server certificate in a string. You cannot specify a file and certificate key together. The following keys are available:

file : The file name of the certificate.

certificate : The certificate itself.

company : The company specified in the certificate.

unit : The company unit specified in the certificate.

name : The common name specified in the certificate.

Certificates are required only for requests that are either directed to an HTTPS server, or can be redirected from a non-secure to a secure server. Only PEM formatted certificates are supported.

certificate=択ey=value[:key=value]'

� user : The HTTP server user ID. Authenticates to third-party HTTP server and gateways using RFC 267 Basic Authentication. user=抲serid�

� password : The HTTP server password. Authenticates to third-party HTTP server and gateways using RFC 267 Basic Authentication. password=抪assword�

� debug : When set to YES, all HTTP commands and response are displayed in the output log. This information can be used for troubleshooting HTTP support problems. The default is NO.

� proxy : Specifies the URI of a proxy server. For use when SQL Remote must access the network through a proxy server. Indicates that SQL Remote is to connect to the proxy server and send the request to the message server through it. proxy=抙ttp://proxy-server[:port-number]�

� client_port : Identifies the port number on which SQL Remote communicates using HTTP. It is provided for and recommended only for connections through firewalls that filter "outgoing" TCP/IP connections. You can specify a single port number, ranges of port numbers, or a combination of both. Specifying a low number of client ports could result in SQL Remote being unable to send and receive messages if the operating system has not released the ports in a timely manner after SQL Remote closes the port on a previous run. client_port=抧nnn[-mmmm]�

Unlike the FTP or SMTP message type, which relies on a third-party FTP or E-mail server, the HTTP message type makes use of the web services functionality that exists in the SQL Anywhere database engine to act as

the HTTP server, which we refer to as a "message server". In order to setup the message server, you only need to run the sr_add_message_server on the consolidated database, and ensure that the database server has

been started with the -xs http[s] switch. If starting the HTTP[S] listener on a database server hosting the consolidated database is a performance or security concern, then you can use a separate database server, as long as the database you run sr_add_message_server on has identical SQL Remote definitions to your consolidated database. For more information on how to setup a consolidated database to be a message server, how to setup a separate message server, or how to use the Relay Server to forward HTTP requests from remote database to the message server, please read the tutorials and full documentation.

The SQL Remote documentation has been updated to include information about the new message type. In the SQL Anywhere installation directory, see:

documentation/en/pdf/sqlremote1201.pdf

668765 When running the Deployment Wizard, clearing the default MSI name in the Destination Path page of the wizard and clicking the Next button would have caused an unhandled exception. This occurred due to the fact that the filename was not valid. This has been corrected by graying out the Next button if the filename is left blank.
668766 When creating a 64-bit Deployment wizard MSI install, containing both 64-bit and 32-bit software, only one set of Sybase Central plugins would have been registered when installing on a 64-bit system. This has been corrected so that both 32-bit and 64-bit plugins are now registered.
668768 After uninstalling a Deployment wizard .MSI install made with default contents, several .JPR files would have been left behind in the SQL Anywhere 12\java directory.

This has been fixed so that these files are now correctly uninstalled.

668771 When building a Deployment wizard install MSI, and select Chinese (ZH) as the deployment language. progress messages would have been displayed in English. This has been corrected so that they are now displayed in Chinese.
668791 When the Relay Server Outbound Enabler failed a backend connection test, it may have crashed, or have been unable to recover even after the backend became available again. This has been fixed.
668820 Calling the method DatabaseManager.release() would have caused the error: "No implementation found for native Lcom/ianywhere/ultralitejni12/implementation/JniDbMgr;.release ()V". This has been corrected by implementing the method DatabaseManager.release().

Note that prior to this fix, UltraLiteJ for Android would have done the equivalent of DatabaseManager.release() when the UltraLiteJ application terminated. Now it is possible for the application to execute DatabaseManager.release() at a specific point in time.

668832 The dblsn command line option -qi prevents the tray icon or window from being displayed. This behaviour is identical to the -qi option of the database server. The option has existed since 11.0.1, but was not referenced in the usage text or the documentation. The usage text has been corrected
668833 The dbmlsyc command line option -qi prevents the tray icon or window from being displayed. This behaviour is identical to the -qi option of the database server. The option has existed since 11.0.1, but was not referenced in the usage text or the documentation. The usage text has been corrected
668855 Attempting to start Sybase Central on Linux systems would have failed with the error message:

"The library /opt/sqlanywhere11/lib32/libulhltool11_r.so could not be loaded. This may be because the provider is being re-loaded (in which case you need to restart the viewer) or because the library could not be found in the SQL Anywhere installation. Service management will not be available."

This has been corrected.

668989 In rare timing dependent cases, a transaction which was successfully committed on a primary server could have been lost. In order for there to have been a chance of this occurring, all of the following needed to be true:

- the application was connected to a primary server that lost quorum (the server lost the connection to both the mirror and arbiter servers)

- the application stayed connected to this server (the old primary server) even though the network connection to other servers dropped

- the application was in the middle of committing a transaction between the time that the old primary server lost its connection to the mirror and arbiter server, and when the old primary server restarted as the new mirror server because it lost quorum

- the old mirror server took over as the new primary (the mirror server must have been able to connect to the arbiter server for this to occur)

This has been fixed so that the application may now receive the new error for this situation, "The transaction may not be committed because the primary server lost quorum."

669009 When upgrading from 12.0.0 to 12.0.1, if the 12.0.0 samples had been installed to a non-default location, the upgrade to 12.0.1 installed any new or reorganized samples to the default sample location. This has now been fixed.

Note that 12.0.1 EBFs can be now applied directly to 12.0.0 installations - effectively performing an upgrade. Therefore if a 12.0.0 installation has not yet been upgraded to 12.0.1, use of a 12.0.1 EBF with this fix will avoid this problem. If a 12.0.0 installation had been upgraded with a build without this fix, uninstalling the product will not remove all the sample files. Those files will need to be removed manually.

669032 When starting the 64-bit Linux server with the GTK GUI, and neither the server name nor the database file is specified (e.g. using the icon), a dialog is presented to enter server startup information. When this dialog closed, the server may have crashed. This has now been fixed.
669218 Using an encrypted command file did not work on big endian computers (typically running Solaris or AIX). The symptom was an error message "Could not decrypt command file." This has been fixed.
669227 On systems running Windows Vista or later, when using the Visual Studio Add Connection wizard the SQL Anywhere .NET provider listed USER DSNs only in the ODBC Data Sources drop-down list. The SYSTEM DSNs are omitted. This problem has been corrected. The SetupVSPackage tool must be run to install this fix.

It should be noted that on 64-bit Windows, only the 64-bit SYSTEM DSNs are listed (after this correction). Any 32-bit SYSTEM DSNs are not displayed. In Visual Studio 2008's design environment (which is 32-bit on 64-bit platforms), the Test Connection button will attempt to establish a connection using the 32-bit equivalent of the 64-bit DSN. If the 32-bit DSN does not exist, the test will fail.

669235 When starting the QAnywhere Agent (qaagent) with the command line option "-qi", the MobiLink Listener and the MobiLink Client processes were not also launched with "-qi" options, resulting in system tray icons on Windows Mobile devices. This has been corrected.
669242 An ArrayIndexOutOfBoundsException could have been thrown during a COMMIT. This has been fixed.
669407 When uninstalling on Solaris, it was possible to see an error like:

find: stat() error /opt/sybase/sqlanywhere12/sun/jre160/lib: no such file or directory

This has been fixed. It should be noted that despite the error, the uninstaller would have completed successfully.

669408 On Unix, if SQL Anywhere was installed into the default location as user A, logging in as user B and checking for updates would have failed with an error like, "Could not check for updates." The installed.ini file only had read and write permissions for the current user and group. This has been fixed by giving broader permissions on the file so it could be used by "other" users.
669411 When run on some Linux distributions, the Interactive SQL utility (or any of the graphical administration tools) may not have displayed Chinese characters correctly. This has been fixed.

Workaround:

1. Shut down any graphical administration tools (Sybase Central, Interactive SQL (dbisql), the MobiLink Monitor, SQL Anywhere Monitor, or SQL Anywhere Console utility (dbconsole) that are running.

2. Run the following commands:

mkdir $SQLANY12/sun/jre160_x86/lib/fonts/fallback

ln -s /usr/share/fonts/truetype/arphic/*.ttc $SQLANY12/sun/jre160_x86/lib/fonts/fallback

ln -s /usr/share/fonts/truetype/wqy/*.ttc $SQLANY12/sun/jre160_x86/lib/fonts/fallback

669412 When run on Linux systems, the Service utility (dbsvc) requires the LSB init-functions. Some Linux distributions do not installed by default so the must be installed manually in order to use dbsvc

For example, on Fedora, run the following command:

yum install redhat-lsb redhat-lsb.i686

669431 When attempting to cancel a Remote Data Access request to an ODBC based remote server, there was a very small chance that the server would have become unresponsive if all three of the following was true:

- the local server was running on a Windows based system

- the local server had a restricted (or small) number of CPUs or cores (either due to the limitations of the server machine or VM, or as a result of using the -gt or -gtc command line option)

- the remote server was not defined to utilize the new "driver=SQL Anywhere Native" feature

This problem has now been fixed.

669435 On Unix systems, when using the Service utility (dbsvc) to create a service for the MobiLink client (dbmlsync), the following error would have been reported:

svc_t_dbmlsync: No such file or directory

This was due to the file svc_t_dbmlsync not having been installed in the bin32/dbsvc_scripts directory. This has been corrected.

669448 When performing a backward index scan (a rare occurrence) while there were heavy concurrent updates to the index, there was a small chance that the server could have made a comparison to a random value with unpredictable results. This has been fixed.
669465 The MobiLink server could have crashed when handling restartable downloads and the restartable download cache was too small to hold all possible restartable downloads at one time. This has been fixed.
669572 If the Service utility (dbsvc) was used to shut down a service, and the service took a long time to shut down, dbsvc may have reported that an error occurred. For example, if checkpointing one of the databases took longer than 3 seconds. The server would still have shut down eventually. This has been fixed.
669581 If an application attempted to perform a wide or batched insert, and the application did not bind or set enough parameters to match the number of parameters within the prepared INSERT statement, and the wide insert or batch insert size was greater than 1, then the application would have crashed. This problem has now been fixed.
669633 The SQL Anywhere Server provides a system procedure sa_refresh_materialized_views() that can be used to refresh all currently stale materialized views. Invoking the procedure with an argument value of 0 would have caused an error to be reported if at least one of the materialized views failed to be refreshed. This procedure is invoked by the reload script generated by the Unload utility when executed with the "-g" command line switch. This problem has now been resolved.
669738 The memory used by the Java process spawned by the SQL Anywhere Monitor could have grown without bound if there were MobiLink collectors. It would have grown faster when the MobiLink servers were consistently unreachable. This has been fixed.
669747 On Linux systems, when installing the SQL Anywhere Monitor EBF, the installer would have removed the old copy from the samonitor_oldXX directory after migrating samonitor.db. This behavior was different from 12.0.0 EBFs which would always have left the old copy in the samonitor_oldXX directory. This has been fixed.
669783 The Update Checker could have informed that there were updates, even when it had been asked not to. Specifically, if there had been a new documentation release (in a new language, say), and the Uupdate Checker had been configured to not show informational messages, you would still have been notified. This has been fixed.
669965 A database server using web services could have crashed in very rare situations when an HTTP connection was shutdown. This has been fixed.
670020 The Support utility (dbsupport) may have silently failed to submit diagnostic information if it was a first-time submission. This has been fixed.
670185 If a client was attempting to connect over TCP/IP to a server that had just shut down, it is possible that the connection would have returned a SQLE_CONNECTION_ERROR error rather than a SQLE_SERVER_NOT_FOUND. This has been fixed.
670202 In rare timing dependent cases, a primary, mirror or copy node server could have crashed or hung.

Also in rare timing dependent cases, partner servers starting for the first time could have fail to have chosen a primary after the changes for Engineering case 663964.

These problems have been fixed.

670360 The SQL Anywhere synchronization/replication components, including the MobiLink client (dbmlsync) and SQL Remote (dbremote), could have given the error 'No off-line transaction log file found and on-line transaction log starts at offset XXXXX'. This would have occurred:

1) if no transaction-logs-directory was given on its command line; and

2) if the length of the transaction log name including its absolute path was greater than 128 bytes.

This problem is now fixed and the length of the transaction log name plus its absolute path has been extended to 1024 bytes.

670403 When a database was shut down (for example, as part of server shutdown) and the database was a high availability mirror or a read-only scale-out copy node, the server could have hung in rare timing dependent cases. If the server was hung due to this problem, there would have been messages like the following in the server console:

A write failed with error code: (6), The handle is invalid.

Fatal error: disk full when writing to "???"

This has been fixed.

670470 If the server received an OS error for a disk write to the database file, transaction log file or temporary file, and the written size was zero, then it may have incorrectly reported a disk full error. This has been fixed. As well, disk write error messages will now print the file name and the OS error code.
670486 In exceptionally rare cases, the server could have crashed when executing a non-parallel query that contains a hash join. The crash would only have occurred if all of the following conditions were true:

- the probe input of the hash join had already consumed a lot of memory for hash tables

- a child of the hash join returned an error

- a hash based parent query node of the hash join needed to allocate memory for the hash table and is restricted by the memory governor, so that it had to acquire memory from other hash based query nodes.

This problem has been fixed.

670521 Attempting to modify NCHAR, NVARCHAR or LONG NVARCHAR values, using the scrolling table in the "Results" panel, would have silently failed if the value was loaded from a file. This has been fixed.
670838 In rare timing dependent cases, if a High Availability mirror server was in the process of taking over as the primary, it could have failed. The 201120 assertion failure could have been logged to the console log. This problem could only have affected servers containing the fix for Engineering issue 663964. This has been fixed.
670866 The following query would have incorrectly returned a 1 indicating the date string was acceptable:

select isdate('1234+')

While the following query failed with a runtime error indicating the date string was not acceptable:

select date('1234+')

This problem has been fixed. The "isdate" query now returns 0. At a minimum, the timezone indicator (+) must be followed by hours. For example, '2011+5' is acceptable.

Also, if a date string contained a timezone offset of "+" or "-" and was followed by the Z (Zulu) timezone indicator (e.g., '1234-12-31+Z'), no error was diagnosed. This has been corrected.

670896 An "HTTP 404 Not Found" error could have occurred from a web service, if the database that contained that web service was not started at the same time the server was started. This could have happened if the database was started via an ODBC DSN, or with the "START DATABASE" statement. The problem did not occur when the name of the database file was specified on the command line when starting the server. It also would not occur if the database name was specified when calling the web service. This has been fixed.
670990 If the number(*) function was used in the VALUES clause of an INSERT statement, then the server would have returned a non-fatal assertion error 106103. This has been fixed so that the correct error is now returned.
671017 In a certain virtual machine implementation, CPU topology detection (which is performed at server startup) could spin consuming 100% of a single logical CPU. The VM software had bugs which reported CPU information to the guest operating system in a manner that does not meet Intel's specifications. Changes have now been made so that SQL Anywhere can tolerate the bugs in the VM software without affecting correct CPU detection in other nvironments.
671099 When the ODBC driver ware loaded, part of its initialization involved loading and initializing the system TCP/IP libraries, even in cases where TCP/IP would not be used (eg. creating or viewing a DSN through the Data Source utility). This could have caused delays or problems with some firewall software. This has been fixed so that the TCP/IP libraries are now only loaded and initialized when they will be used.

Note, this change also affect the other SQL Anywhere client libraries as well, i.e. DBLib, OLEDB, ADO.NET, etc.

671397 The following Entity Framework datetime functions were not mapped to SQL Anywhere functions:

AddDays, AddHours, AddMicroseconds, AddMilliseconds, AddMinutes, AddMonths, AddSeconds, AddYears, DiffHours, DiffMicroseconds, DiffMilliseconds, DiffMinutes, DiffMonths, DiffSeconds, DiffYears.

For example:

Entities db = new Entities();

var query = db.SalesOrders.Select( x => x ).Where( x => EntityFunctions.DiffDays( x.OrderDate, DateTime.Now ) > 100 );

string trace = ( ( ObjectQuery ) query ).ToTraceString();

This problem has been corrected by adding new function handlers for mapping Entity Framework datetime functions to the SQL Anywhere functions 'DATEADD' and 'DATEDIFF'.

671711 The changes for Engineering case 624047 could have caused a server running high availability mirroring, or a read-only scale-out copy node, to fail assertion 200131. The failure was timing dependent, and required accessing an empty table with an index from a read-only connection. This has been fixed.
671906 When processing an UPDATE statement, the server could have constructed erroneous values for the OLD table that would have been created for AFTER ROW or AFTER STATEMENT triggers. This could have lead to incorrect results if the AFTER trigger referenced these values, or could have resulted in the statement failing with an SQL error. The problem would have occurred if and only if the following conditions hold:

1) The UPDATE statement modifies a table that had a primary key, UNIQUE constraint, or unique index.

2) The UPDATE statement modified a column included in the primary key, UNIQUE constraint, or unique index, such that the new value matched a value already existing in the index.

3) The modified table had an AFTER ROW or AFTER STATEMENT trigger

This problem has been corrected.

671911 The system function OPENSTRING allows a text file to be parsed and interpreted as a relational table. The schema for OPENSTRING can be explicitly specified or can be provided by means of an existing database table. If a remote (IQ or other proxy) table was used to specify the OPENSTRING schema then the server can behave erratically, including crashing. This problem has now been resolved.
671955 The new property "ianywhere.qa.server.disableDeleteRules" has been added to the QAnywhere server properties that can be specified in the configuration file that can appear after the -m option of the MobiLink command. When set to True (default is False), this property disables the message delete rules and archiving processes that automatically run while the server is running. This property would normally not be used, but it is useful, along with the property "ianywhere.qa.server.disableNotifications", in the scenario where more than one MobiLink server is running on a given consolidated database, and the servers are not in a server farm configuration. In this case, the MobiLink servers must be configured such that only one of the servers is running message delete rules and the QAnywhere notifier.
671957 The server may have returned an incorrect result set when a query had a grouped subquery in the null-supplying side of an outer join, and all the following conditions were true:

- all group by expressions in the subquery were constants

- the subquery had a COUNT aggregate

- the subquery did not affect any table rows

- the outer join condition referenced a constant grouping column of the subquery

For example: If table T1 has no row with a1 < 44 then the query does not return rows in any circumstances.

select *

from T2 left outer join

( select 111 c1, count(*) c2 from T1 where a1 < 44 ) V on T2.a2 = V.c1

This has been fixed.

671994 Doing an FETCH ABSOLUTE instead of a FETCH RELATIVE could have caused the cursor to move to an incorrect row if the query contained a subquery. This could have resulted in a -197 error code when trying to get column values. The GetRowCount() method does an absolute fetch internally, so the problem could have occurred when invoking this method. This has now been fixed.
672076 When inserting a string literal value into a time or timestamp column of a proxy table, if the string literal contained more than 3 digits of precision within the fractional seconds portion of the time/timestamp value, then the fractional seconds would have been truncated to 3 digits of precision. This problem has now been fixed.

Note that this fix only applies to ODBC based Remote Data Access servers. The fractional seconds precision will still be truncated to 3 digits of precision for JDBC based Remote Data Access servers.

672077 Executing a query that joined two or more External Environment result sets could have caused the server to crash if the join resulted in a very large result set. This problem has now been fixed.
672080 The following new entry point has been added to the dbtools library:

DBLogFileInfo function

Obtains the log file and mirror log file information of a non-running database.

Prototype

short DBLogFileInfo ( const a_log_file_info * );

Parameters

A pointer to a structure. See a_log_file_info structure

.

Return value

A return code, as listed in Software component exit codes

.

Remarks

The DBLogFileInfo function returns the log file and mirror log file paths of a non-running database file. Note that this entry point will only work for databases that have been created with SQL Anywhere 10.0.0 and up.

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

Here is the necessary information for the new a_log_file_info structure:

typedef struct a_log_file_info {

unsigned short version; // set this to DB_TOOLS_VERSION_NUMBER

MSG_CALLBACK errorrtn;

const char * dbname; // database file name spec

const char * encryption_key; // database file encryption key

char * logname; // buffer for returning log file name

size_t logname_size; // size of the logname buffer

char * mirrorname; // buffer for returning mirror log file name

size_t mirrorname_size; // size of the mirrorname buffer

void * reserved; // reserved for internal use, must set to NULL

} a_log_file_info;

672088 The Extraction utility could have incorrectly extracted an event from a consolidated database for a user that would be not be created in the remote database. This has now been corrected.
672094 Renaming a table that was marked as no-sync or all-sync would have changed it to a normal synchronizing table if the new name didn't have the "_nosync" or "_allsync" suffix. This has been fixed. The table will now retain its old sync type unless the previous name did have one of the special suffixes ("_nosync", "_allsync", and "_download_only") and the new name does not since a change to the sync type is implied by the removal of the special suffix.
672184 If an application attempted to perform a wide insert using the SQL Anywhere ODBC driver, or a batched insert using the SQL Anywhere JDBC driver, then there was a very small chance the application would crash if the system was low on memory or under stress. This problem has now been fixed.
672207 When attempting to use the IS [NOT] DISTINCT FROM predicate in a query that involved proxy tables the server would have failed the query with a strange "unknown node type" error. This problem has now been fixed and the IS [NOT] DISTINCT FROM predicate can now be used with proxy tables.
672208 The changes for Engineering case 655157 introduced a problem such that when multiple consecutive pinging messages appeared in the incoming message box, SQL

Remote would have generated the warning message:

Deleting duplicate message from ...

and then deleted the duplicate pinging messages.

This problem is fixed so that all the duplicate pinging messages are now processed without complaint.

672213 The Relay Server may have become unrecoverable due to continuous errors from the shared memory manager when one of the backend servers had been serving more that four types of clients. This has been fixed so that a hard limit of 1600 client types is in effect. When the new limit is reached, a graceful error will be reported without affecting the rest of the requests.
672372 Execution of an ALTER DATABASE SCHEMA FROM FILE statement may have failed with a SQLE_SCRIPT_MISSING_DELIMITER error when using a SQL file generated from ulunload or ulinit. This has been fixed.
672430 In very rare situations, the server may have hang on shutdown, if while in the process of shutting down the option MaxMultiProgrammingLevel was increased. This has been fixed.
672447 Under very rare circumstances, frequent transaction log renames may have left small portions of logs that overlapped. This has been fixed.
672573 Using either mixed case or upper case when specifying the ".dll" portion of the assembly name in a CLR external environment procedure, could have caused the external environment to fail to run the specified method within the assembly. For example, an external name clause like:

external name 'MyTest.DLL::MyNameSpace.MyTestClass.MyMethod() int'

would have failed to execute MyNameSpace.MyTestClass.MyMethod, but an external name clause like:

external name 'MyTest.dll::MyNameSpace.MyTestClass.MyMethod() int'

would successfully find and execute MyMethod. This problem has been fixed.

Note that a workaround is to simply lower case the ".dll" portion of the assembly name.

672577 If the PATH environment variable placed earlier versions of SQL Anywhere before version 12.0 in the path, then newdemo.bat would have launched earlier versions of SQL Anywhere utilityes, but used the version 12 Scripts folder. This may have resulted errors if the earlier version did not support the same SQL language that was used by the scripts in the Scripts folder. This problem has been fixed. The newdemo.bat file will now reference the tools explicitly by their path.

Note, the newdemo.bat file is referenced by the SQL Anywhere documentation whenever it is desirable to start with a newly initialised version of the demonstration database.

672633 When the MobiLink server was running on an OS with a multi-byte character set, and a synchronization request from an Android UltraLiteJ application caused a synchronization error at the server, the UltraLiteJ runtime could have caused an application crash. This has been fixed.
672731 After installing the SQL Anywhere Monitor on a machine with little free contiguous memory, it could not be run. This has been fixed.
672739 A number of edits have been made to the SQL Anywhere server, the MobiLink server and UltraLite error messages to improve readability and to make the wording more consistent with the SQL Anywhere documentation. These changes include minor grammatical corrections, and changes to enforce consistency with hyphens and capitalization. No changes were made to SQLCODE, SQLSTATE, or ODBC error states for any of these messages.
672749 If the two partner databases in a mirroring configuration were both starting up at the same time, while the servers that were hosting them were attempting to shut down, both servers could have hung. This problem has been fixed.
672858 The server could have crashed if a table was being dropped at the same time as a proxy table was being created. This has been fixed.
672870 The SQL Reference defines one possible form of the CASE expression as:

CASE expression-1 WHEN expression-2 THEN expression-3, ... [ ELSE expression-4 ] { END | END CASE }.

It was not possible to use a subquery as expression-1. This has now been fixed.

672879 If a High Availability partner or copy node encountered a problem (such as the log file being inconsistent compared to the partner or parent), it would have shutdown the problem database. If the same server was also running one other database (other than the database that was mirrored or a participating in read-only scale-out) the server may have also incorrectly shutdown. This has been fixed so that the mirror server or copy node server will only shutdown the server if the only database running is the problem database.
673014 When a SQL Anywhere ROOT service processes a request and queries its HTTPServiceName connection property, its name "root" is appended to the first path element (if one is present). This has been fixed. The HTTPServiceName for a ROOT service is always "root".
673024 The message "Number of tables that are never synchronized:" would have returned the number of tables that were synchronized instead of the number that were never synchronized. This has been fixed.

Also, the message "Number of tables that will always be uploaded:" was incorrect and misleading and the number displayed was invalid. This message has been changed to "Number of tables that are in publications:" and the output has been corrected.

673051 It was not possible to use ZLib data compression with HTTP synchronization as the methods to enable compression appeared in StreamHTTPSParms, rather than StreamHTTPParms. This has been fixed by moving the methods from StreamHTTPSParms to StreamHTTPParms. Existing applications will continue to run because StreamHTTPSParms is a subclass of StreamHTTPParms.
673173 The fix for Engineering case 661622 missed the situation where a subselect that referenced two tables from the main query block, and was equated to a constant, could also have caused the server to fail an assertion or crash .

For example:

Select *

from T1, T2

where 10 = (select e1 from R where p(R,T1, T2) ) and ..

This has now been fixed.

673210 The NodeType connection parameter is used by read-only scale-out to possibly redirect a connection to a different server. Previously, NodeType supported the values DIRECT, PRIMARY and COPY. Support has now been added for MIRROR and READONLY values.

MIRROR - When the NodeType connection parameter is set to MIRROR, and you have connected to a copy node or the primary server, the connection is redirected to the mirror server.

READONLY - When the NodeType connection parameter is set to READONLY, and you have connected to a copy node or the primary server, the connection is redirected to the copy node in its branch with the lowest load. If there are no copy nodes, the connection is redirected to the mirror server. If you have connected to the mirror node the connection is accepted since the mirror server does not know the status of the copy nodes. READONLY is used to connect to any read-only server, either a copy node or the mirror.

673212 1) If one TCP/IP address for one partner server in the partner/mirror/primary server connection string in the MIRROR SERVER or -xp configuration was correct, but the TCP/IP address for the other mirror partner server was incorrect, it was possible for the primary server to have skipped performing checkpoints indefinitely. This could only occur with the incorrect TCP/IP address configuration and if the mirror servers contained the fix for Engineering issue 660851. This has been fixed so that the primary server checkpoints normally.

2) If a High Availability or read-only scale-out server failed to connect to another server, there may not have been any indication of the failed connect. This has been fixed by logging a message to the console for each failed connection.

3) A High Availability or read-only scale-out server may have displayed the message "... recovery n% complete" where n was a number less than zero or much greater than 100. This has been fixed.

673483 When the method Connection.emergencyShutdown() was called, existing connections on the database did not have their states changed to NOT_CONNECTED. This has been fixed.

Also, the method DatabaseManager.connect() now returns SQLE_INVALID_PARAMETER if passed a NULL configuration.

673561 The changes for Engineering case 623303 caused additional debug integrity checks to be accidentally turned on. Row pages were being checked on every INSERT and DELETE. This has now been fixed.
673641 Renaming of a member of a destination alias would have caused an error message saying that there was a problem saving the "deletion rule". Destination alias members can now be successfully renamed without getting an error message. When deleting the members of a destination alias, the exception generated is now explicitly ignored if the client being deleted doesn't actually exist.
673646 It was possible to check both the "Task runs on a schedule" and "High priority" boxes in the Remote Task Properties window. These options are mutually exclusive, so this should have been disallowed. This has been fixed.
673678 If more than one instance of dbmlsync was running on the same machine and they both attempted to create a restartable download file at the same time then it is possible for the file to become corrupted. This will result in errors being reported when another instance of dbmlsync attempts to restart the download.
673704 In very rare circumstances, the histogram cleaner could have caused the server to crash. This has now been fixed.
673844 The server may have crashed while attempting to log a deadlock error between connections. For this to have happened, the Log_deadlocks option needed to have been set to 'on', and at least one of the connections that was participating in the deadlock needed to be executing a query that had a parallel plan.

There are two possible workarounds:

1) Turn off intra-query parallelism by setting the Max_query_tasks option to 1, or

2) Set the Log_deadlocks option to 'off'

This problem has been fixed.

673852 With both 32 bit and 64 bit versions of SQL Anywhere installed on a 64 bit Windows system, using the Deployment wizard to create a 32 bit install would have displayed the 64-bit UltraLite feature. Attempting to install the MSI that was created in this way on a 32-bit Windows system would have caused the following error:

Module C:\Program Files\SQL Anywhere 12\BIN64\ulodbc12.dll failed to register. HRESULT -2147024703. Contact your support personnel.

This has been fixed.

673856 Sometimes the TLS internal communication error (220) was reported without a useful system error code (e.g. Certicom error code) for further analysis. This has been corrected.
674024 The toolbar buttons in the Interactive SQL utility were not enabled if a stored procedure was executed from Sybase Central and the procedure completed with errors. This has been corrected so that the toolbar buttons are now enabled correctly.
674027 When using read-only scale-out and the NodeType=COPY parameter, the connection may have been incorrectly redirected to a parent node or a node which had a higher load than the current node. Also, in very rare timing depending cases with concurrent clients connecting with NodeType=COPY, the server could have crashed. These problems have now been fixed.
674032 A database's in-memory state may have become corrupt if it had many indexes on large tables and small row limits. This would have resulted in an ArrayIndexOutOfBounds exception. The database itself was not actually corrupted and could have been used after disconnecting and reconnecting. This has been fixed.
674063 When typing a single-line SQL comment, the Text Completer could have opened while typing. This has been corrected so that the Text Completer remains hidden unless it is explicitly opened.
674120 A web server worker may have crashed when logging lengthy debug messages that had not been localized. This has been fixed.
674187 A web server worker thread may have crashed when it failed to load the localized language resource (e.g dblge12.dll). The reasons for the failure may have included the file not being found due to path and registry info, or the account associated with the worker did not have permission to read the resource. The symptom was a truncated log line with a missing end-of-line. This has been fixed so that the crash will no longer occur and an unlocalized error message is displayed regarding the loading error.
674206 The DatabaseManager.release() method is designed to be used only once to release all resources associated with the UltraLiteJ runtime. However, some DatabaseManager methods (eg. connect) did not return an error, but silently failed when called after the call to release(). This has been fixed. Now, a ULjException is thrown with the error code SQLE_NOT_CONNECTED if a connect() or createDatabase() is called after the call to release().
674243 The text completer in the Interactive SQL utility and Sybase Central usually suggests SQL statements (e.g. DELETE,INSERT,SELECT) when starting to typing a statement. There was a problem that prevented statements from being suggested when typing a new statement if there was already a statement on a later line, and there was no command delimiter (i.e. a semicolon) between the new statement and the existing one. In this case, only matching SQL keywords and database object names would be suggested. This has been fixed.
674250 When the MobiLink Server ran against a consolidated database running on Microsoft SQL Server, the MobiLink server could have reported the following error message:

[-10002] Consolidated database server or ODBC error: ODBC: [Microsoft][SQL Server Native Client 10.0][SQL Server]

Cannot drop the table '#elbat_yraropmet_ymmud_a_si_siht', because it does not exist or you do not have permission.

(ODBC State = 42S02, Native error code = 3701)

This error would have occurred in one of the following situations:

1) a deadlock was detected during upload;

2) an error occurred in a trigger that was defined on an upload table; or

3) the 'XAXT_ABORT' option was set to 'ON' in one of the user-defined scripts.

This problem is fixed now.

674262 When 64 bit versions of SQL Anywhere, MobiLink or the Relay Server were installed, and none of the corresponding 32-bit features were installed (which is the default feature selection), the Start menu shortcuts to dblang.exe ("Change language to <language>") would not have worked. This has been fixed.
674320 After a MANUAL or AUTO REFRESH text index was renamed, it may not have been found by subsequent statements. This has been fixed.

Note that restarting the database server eliminates the problem

674389 On Windows desktop platforms, the Winsock version 1 library has been replaced by the Winsock version 2 library. As a result, Wsock32.lib has been replaced by Ws2_32.lib. A few applications (MobiLink, Relay Server) that need Microsoft additional functionality, such as TransferFile, also include Mswsock.lib. The result is the elimination of the Wsock32 DLL and a smaller execution time footprint (36K less).

Note, this change also affects the ADO .NET provider, the OLE DB provider, MobiLink server, Relay Server Outbound Enabler, database server, all SA software requiring TCPIP running on Windows.

674441 Applications with small row limits (due to tables with a lot of columns), many indexes, or large downloads, may have experienced an ArrayIndexOutOfBounds exception while committing the download or while another thread was committing a change parallel to a synchronization. This has been fixed.
674467 Queries that contained a predicate where an expression was 'greater than or equal to' or less than or equal to' the minimum value for a column, would have returned a result set that included rows where that column was null (if rows with null exist in the table). Moreover, the HASH SIZE for the indexed column must have been large enough to fully hash the indexed value.

For example, if x is of type signed integer and there are rows in T where x is NULL, and there is an index on x with max hash size 4, then the following statement would have returned a result set that included rows where X is NULL:

SELECT * FROM T WHERE x >= -2147483648

This has now been fixed.

674537 Simple INSERT statements referencing a table with an article defined with a non-empty WHERE and/or SUBSCRIBE BY clause could have occasionally failed with a "Column not found" error for the column referenced in either WHERE or SUBSCRIBE BY clause. Re-execution of the same INSERT would, in most cases, have succeeded with no error. This has been fixed.
674545 If a function that can be inlined was invoked with an argument that was an expression with restrictions on where in the query it can appear (for example, an aggregate function), a syntax error could have beeen returned. This has been fixed.
674549 The server may have failed assertions 111706, 111707, 106808, or 201200, if the recursive subquery of a recursive common table expression returned a larger select-list item value than its corresponding select-list item in the initial subquery. The problem only happened if the recursive subquery performed a join operation to rows added during previous iterations. This has been fixed so that the server now returns the error

"Recursive column %1: conversion from '%2' to '%3' loses precision ".

674550 Calling the system function WRITE_CLIENT_FILE could have incorrectly resulted in the error "Client library reported a permissions error accessing object ('<FILENAME>') during transfer" if there were multiple READ_CLIENT_FILE or WRITE_CLIENT_FILE calls in a batch, procedure, or function referring to the same client file name. This could have happened if the client executed a batch or procedure, which in turn called other functions or procedures which ended up doing multiple READ_CLIENT_FILE or WRITE_CLIENT_FILE calls during the execution of the batch or procedure that was executed by the client. This has been fixed by explicitly closing the file at the end of the function call. The file was previously closed at the end of the request.
674559 1) In a read-only scale out environment, if a copy node was automatically added (no CREATE MIRROR SERVER statement was executed), but the database server was restarted and used a different TCP/IP address or port, it would have failed to connect properly to other mirror servers. This has been fixed so that copy node servers and primary servers that have this fix will automatically continue to be able to connect if the copy node's TCP/IP address or port changes the first time the copy node connects.

2) If an ALTER MIRROR SERVER statement was executed to adjust a copy node's connection string, that copy node may have temporarily failed to connect properly to other servers. This has also been fixed.

674582 The server would have crashed when inserting several values lower then MIN_DBL (about 1e-306, which is the smallest double which can be stored in normalised format) which still can be stored using denormalized double values. This was fixes by forcing all of the denormal double values to be rounded down to zero.
674702 Assertion failure messages now include a database name where available.
674704 If a directory access server was queried, and one of the files was owned by a user that did not exist on the system where the server was running, then the server would have crashed. This problem has now been fixed.
674740 Applications with small row limits (due to tables with a lot of columns), several indexes and many open cursors (more than 8) on one table may have experienced an ArrayIndexOutOfBounds exception while committing an update. This has been fixed.
674748 Attempting to unload and reload a SQL Anywhere database from version 10.0.0 and later could have failed if the database contained a large number of integrated logins, and several of the integrated logins had comments associated with them. This problem has now been fixed.
674753 In rare, timing depending cases, a primary, mirror or copy node server could have hung while shutting down. This has been fixed.
674782 If a server involved in a high availability mirroring system had active TLS connections, the server may have hung indefinitely due to a thread deadlock. This has been fixed.
674898 Multi-threading access to an UltraLiteJ database may have resulted in a null pointer or other exception. This problem would have occured if another thread was accessing many rows in a single operation (i.e. updating a table with a large number of rows and indexes with small row limiting values). This has been fixed.
674917 Under rare conditions, the server could have crashed when processing queries with intra-query parallelism. This has been fixed.

The crash can be worked around by disabling intra-query parallelism by setting the database option MAX_QUERY_TASKS=1.

674931 The 32-bit versions of Sybase Central, the Interactive SQL utility, the Console utility, and the MobiLink Monitor, could have failed to start on 32-bit Windows systems under "low" memory conditions. The point at which memory becomes low is difficult to quantify, and depends heavily on the number of other programs running on the machine, and their locations in memory. This has been fixed.

As part of this change, the message that is displayed when the Java Virtual Machine can't start has been improved to include the actual JVM error.

675048 An application attempting to update a blob column on a result set by calling ULResultSet::AppendByteChunk (ULResultSet.AppendBytes in .NET) would have crashed. The crash wouldn't have occurred when updating a blob column using an UPDATE statement or a ULTable object. In .NET, this problem would have appearred as a System.AccessViolationException. This has been fixed.

Also, when attempting to update a blob column that was NULL using a ULTable object, the column value would have remained NULL. This has also been fixed.

675119 If the Microsoft Firewall Client (FwcWsp.dll) was installed on a Windows systems, applications would see a 20-second delay when the SQL Anywhere ODBC driver was unloaded.

For example, if "Test Connection" was used when configuring a Datasource Name (DSN), using the ODBC Datasource Administrator on a system with Microsoft Firewall Client installed then a 20-second delay occurs after the OK button is clicked.

A work-around has been developed for this problem. If the Firewall Client DLL is present when the SQL Anywhere ODBC driver is unloaded, the Windows Socket libraries are not unloaded by the driver. This avoids the 20-second delay. In this case, the Windows Socket libraries are unloaded when the client application terminates.

675147 The Interactive SQl utility's Import wizard usually remembers the names of recently-imported files and presents them in the combo-boxes where a file can be selected to import. A bug was preventing the list of file names from being remembered. This has been fixed.
675293 If an initial connection was made to a blank-padded database, and the connection was redirected because of the NodeType connection parameter, the connection would have incorrectly failed with the error "Database cannot be started -- ???". If the LogFile connection parameter was used to get more information, the generated file would have contained the line "Communication function i_cs_ProtocolErrorP code 0". This has been fixed.
675317 Under extreme load conditions, the Relay Server may log errors on shared memory operations. This logging operation may have crashed the web server worker process. Also, for 12.x Relay Servers, the line label for such logging has the format of <pricessId.threadId.ShmDebug>. The threadId could have been wrong. Both of these problem have now been fixed.
675326 When run on a Windows Mobile device, the server could have crashed if the "Authentication parameters" field in an existing "SYNCHRONIZATION PROFILE" was modified. This has now been fixed.
675363 A null pointer exception was possible when a host variable occurred in the HAVING clause This was corrected.
675496 Explicitly opening the Text Completer when the "SQL Statements" field contained only matching parentheses would have caused the Interactive SQL utility to crash. This has been fixed.
675642 Database corruption was possible when the UltraLiteJ Runtime was under row limitation stress (when the maximum and minimum row limitation values are close together). This has now been corrected.
675686 The server may have failed assertion 101412 - "Page number on pages does not match page requested", if the database/connection option 'chained' was set to 'off'. This has been fixed.
675738 Some statements, like CREATE TEXT INDEX and CREATE MATERIALIZED VIEW, record the current database option values that exist at the time the statement was executed in the transaction log. The server would have returned the assertion failure error 100904 - "Invalid option '<option-name>' -- no PUBLIC setting exists", if there was not public setting for one of

these options during startup recovery, or when applying changes on a mirror server. This has been fixed.

675805 It is possible, although rare, for the machine.config file to contain multiple registered SQL Anywhere ADO.NET providers. When unregistering, the SetupVSPackage.exe utility only removed one SQL Anywhere ADO.NET provider from the machine.config file. This problem has been fixed so that SetupVSPackage.exe now looks for all registered SQL Anywhere ADO.NET providers.
675894 In Sybase Central, you can generate HTML documentation for a database to which you are connected. That documentation includes cross-reference information for stored procedures -- a list of procedures a given procedure calls, and a list of the procedures which call the given procedure. This cross-reference information was not being generated for those stored procedures which used the Transact SQL dialect. Cross-reference information for procedures which used the SQL Anywhere dialect were generated fine. This has been fixed so that cross-reference information is generated for stored procedures that are written using either dialect.
676007 The server would have failed to rename the request log correctly if the option RequestLogNumFiles was set to 1. This has been fixed.
676015 Queries involving spatial predicates over an indexed geometry column may have failed to select a plan that used the spatial index if the table was very large (several gigabytes at least). This has been fixed.
676033 When a statement cannot be executed by the Interactive SQL utility, the error is displayed in an error window. That window contains a "Help" button which, which clicked, can display a menu of relevant help topics (for the error message and for the type of statement being executed). Opening this error window could have taken a non-trivial amount of time if the online documentation for SQL Anywhere was not installed. In those cases, the software had to check with the DocComment Exchange (DCX) server to see if help was available for the statement in question. While the Interactive SQL utility is doing this check, it could be unresponsive. The problem was most acute on machines that were not connected to the internet at all. This has been fixed so that the error dialog opens without delay, and Interactive SQL remains responsive at all times.
676069 The UltraLiteJ Database Unload utility (uljunload) did not allow specifying the page size on a new databases. A new flag -z has been added to uljunload to specify the page size in bytes.
676092 During download deletes, index pages were not being flushed. This has been fixed.

Other changes have been made as well to reuse Java objects and reduce the creation of temporary objects during the download.

These changes were made to improve memory useage during synchronization.

676102 Inserting Unicode strings into a database using an MBCS/ANSI encoding (that is, not UTF-8) could have resulted in corruption of the strings and possibly unbounded store growth. Unicode strings are inserted using the wchar methods in the C++ API, or using .NET. The Unicode conversion routines to and from wchar were not correct and have been fixed.
676210 Execution of a SET REMOTE OPTION would have failed if the value of the setting was larger then 256 bytes. This was due to the schema of the ISYSREMOTEOPTION table which has a 255 byte limit on the length of the settings column. The server has been changed to provide a more appropriate error message.
676224 If a database had a publication defined using the "download only" or "scripted upload" clauses, but had not defined any synchronization users or synchronization subscriptions, then when a dbunload was run on the database, the "download only" or "scripted upload" clauses of the publication would not have been maintained. This problem has been fixed.

A workaround to this issue would be to add any synchronization user or synchronization subscriptions to the database. For example, if a publication "p1" was defined for download only, execute "CREATE SYNCHRONIZATION SUBSCRIPTION TO p1 TYPE 'tcpip'". This would define TCP/IP as the default communication type when synchronizing the publication, which is the default that would be chosen anyway.

676332 UPDATE statements with complex table expressions may have caused a server crash. At least the following conditions must have been true:

1. The UPDATE statement is using the syntax:

UPDATE [ row-limitation ] table-expression [, ...] ]

SET set-item[, ...]

[ WHERE search-condition ]

[ ORDER BY expression [ ASC | DESC ] , ...]

[ OPTION( query-hint, ... ) ]

2. The statement must have had at least two query blocks (e.g., a derived table, subselect, subqueries).

3. The 'table expression' contained a Left Outer Join at the root of the tree

4. The Left Outer Join was a redundant join. Removing the Left Outer Join from the original statement generates an equivalent statement.

This has been fixed.

For example:

update LP join PR on PR.PR1 = LP.LP1

join LS on LS.LS2 = PR.PR2

join SC on SC.SC1 = LS.LS2

left outer join PC on PC.PC1 = LS.LS1

set LP.LP2 = LS.LS1

where

PR.PR3 = 10 and

LS.LS3 = 20 and

SC.SC2 = 30

and SC.SC2 = (select max(id) from product )

676340 The database server could have taken longer than expected to perform a backup. During such a backup other database requests may have appeared to stall, and connections to the server may also have been impacted. This should only have occurred if the total size of database files was larger than 5 GB. This has been fixed.
676363 When attempting to use Sybase Central to create a proxy table for an Access database, and the remote server used the 'MSACCESSODBC' server class, the following error would have been displayed:

[Sybase][ODBC Driver][Adaptive Server Anywhere]Server '<server-name>': [Microsoft][ODBC Driver Manager] Driver does not support this function (-660)

A call was being made to SQLPrimaryKeys() to determine which columns in the table belong to the primary key. Access does not support this function, so this error is now ignored for the 'MSACCESSODBC' server class.

676364 The version of zlib used by the SQL Anywhere and MobiLink clients and servers contained security vulnerabilities documented under US CERT Vulnerability notes VU#680620 and VU#238678. These are fixed in zlib version 1.2.3. SQL Anywhere and MobiLink clients and servers now use zlib version 1.2.5.

Links:

http://www.kb.cert.org/vuls/id/680620

http://www.kb.cert.org/vuls/id/238678

676495 1. A copy node can now act as an arbiter for the database it is copying in a high-availability system with mirroring. The arbiter and both partners must be running the updated software to take advantage of this change. As before, a partner cannot act as arbiter for its own database. When defining the arbiter to refer to a copy node, use an arbitrary mirror server name for the arbiter that does not match the server name of any of the database servers in the HA system. The name of the arbiter mirror server isn't actually used for connecting. For example:

CREATE MIRROR SERVER "scaleout_child" AS COPY connection_string = 'server=scaleout_child;host=winxp-2:6878';

CREATE MIRROR SERVER "TheArbiter" AS ARBITER connection_string = 'server=scaleout_child;host=winxp-2:6878';

Note that there is no database server in the HA system that is running with the server name "TheArbiter": it is just being used as a placeholder in the mirror server definitions to hold the connection string for the arbiter.

2. Copy nodes could have reported a log mismatch error in certain cases involving a failure of both the primary server and the arbiter. This problem has been fixed.

3. There was a race condition that could have allowed an arbiter server to create two separate internal states for the same mirroring system. This problem has been fixed.

676505 Under rare, timing dependent conditions, the Relay Server may have reported a fatal error "RSF11016: Freeing already freed memory block in shared memory". The Relay Server's shared memory manager would have protected itself from this illegal operation and continued to operate normally. This error may have occurred right after RSE2000, RSE3008 or Relay Server shutdown. This has been fixed by eliminating the redundant freeing.
676664 After the changes for Engineering case 661663, passing an invalid certificate to a web procedure (i.e. CREATE FUNCTION ... URL '...' CERTIFICATE '...') may have caused the server to crash when the procedure was executed. This has been fixed.
676668 Values in long binary and long varchar columns may have become corrupted when used in temporary tables. This may have manifested itself as incorrect values read, or ArrayIndexOutOfBounds exceptions, when values were read or when rows containing these values are deleted or updated. This has been fixed.
676727 When editing a TIMESTAMP column value in the "Results" panel, the editor did not distinguish between AM and PM, always assuming AM. This has been corrected so that the editor now distinguishes between the two.
676844 Attempting to perform an unload with reload of a database, using the Unload utility or the dbtools DBUnload function, may have failed with a "Cannot find index named ...' error if the index had a comment. This problem has now been fixed.
676996 The database server, running a database in read-only mode, could have crashed during database validation. This would only have occurred in very rare circumstances. This has been fixed.
677104 Current login policy allowed putting a restriction over the number of failed login attempts a user can make before the user's account is locked. However, this restriction did not apply to users with DBA authority. Regardless of the number of failed login attempts, a DBA user was always allowed to login if correct credentials are provided. This made DBA accounts vulnerable to brute force attacks. This has been changed with the new option, max_failed_login_attempts. The value of this option is also applied to users with DBA authority. However, to prevent complete database lock down, an automatic unlock time of 1 minute is also applied. At the time of database restart, a DBA user will also be allowed to make one failed login attempt, regardless of the number of failed login attempts stored in the catalog.
677165 In specific circumstances, it was possible for the server to fail assertion 101519. This has been fixed.
677251 If an embedded SQL application or a stored procedure first opened a READ ONLY cursor on a simple SELECT query qualifying for optimizer bypass, and later opened an UPDATE cursor for the same query, a positioned update to the second cursor could have failed with SQLCODE -192 ("Update operation attempted on non-updatable query"). This has been fixed.

For the error to occur in version 11, the first cursor would need to be explicitly declared FOR READ ONLY, because FOR UPDATE is the default (c.f. documentation for DECLARE CURSOR statement). In version 12.0.0 and later, cursor updatability depends upon cursor type (c.f. documentation for SELECT and PREPARE statements) but defaults to FOR READ ONLY for ESQL.

677327 In some cases, SQL Anywhere HTTP procedures and the HTTP server would have failed to process received chunked mode transfer encoded data when the chunk length meta-data contained leading zeros. This has been fixed.
677430 In extremely rare cases, inserting data into a compressed column that had a blob index may have resulted in the blob index becoming corrupt. This could have resulted in assertion failures if the data was accessed randomly (i.e. using substr(), right(), or similar), and would also have resulted in validation failures. This has been fixed.

Note: existing corrupted blob indexes must be dropped and recreated after the fix is applied. This can be done using:

alter table <table> alter <column> no index

alter table <table> alter <column> index

677515 Running REORGANIZE TABLE on a table with foreign key indexes when the database was under heavy update/delete load, had a chance of corrupting the table. Specifically, the indexes on the table would have contained more values then the table itself. This has been fixed.
677803 If an invalid certificate was encountered by the server running on the Mac, the error reported may have been "Error parsing certificate file, error code 0". This has been fixed, the error code should have been non-zero if an error occurred.

Note, this problem also affected SQL Anywhere clients running on the Mac.

677867 Null values retrieved with ResultSet.getString( col_no ) were returned as an empty string. This has been fixed. Now, null values are retrieved as null with this method.
677962 When a database was shut down (for example, as part of server shutdown) and the database was a high availability mirror or a read-only scale-out copy node, the server could have hung in rare timing dependent cases. If the server was hung due to this problem, there would have been messages like the following in the server console:

A write failed with error code: (6), The handle is invalid.

Fatal error: disk full when writing to "???"

This has been fixed.

677966 Applications with small row limits (due to tables with a lot of columns), many indexes, or large downloads, may have experienced an ArrayIndexOutOfBounds or ULjException with error code SQLE_ERROR. This has been fixed.
678117 Under rare circumstances, the database server could have crashed or failed an assertion while running diagnostic tracing on a database where a large number of procedures, user-defined functions, triggers or events are being invoked. This has been fixed.
678144 A high availability partner server that was under heavy load could have hang when a thread deadlock occurred. This has been fixed so that a request will now receive the error: "All threads are blocked".
678259 A SQL Anywhere http procedure call may, on rare occasions, have caused the server to crash. This has been fixed.
678597 When running in a continuous mode, SQL Remote would have leaked about 10 kilobytes of memory in every attempt of sending messages to its subscribers. This problem has now been fixed.
678600 When downloading rows with multiple LONG BINARY or LONG VARCHAR columns, they may have been corrupted when earlier clob/blob columns were null. This could have then resulted in a variety of errors including reading random values.

For example, if a table was defined as:

CREATE TABLE t(

c1 INT PRIMARY KEY,

c2 LONG VARCHAR,

c3 LONG VARCHAR )

and the row[ 1, null, 'b' ] was downloaded, reading c3 would have failed. Rows [2, 'a', 'b'], [3, 'a', null ] and [4, null, null ] would have been okay.

This has been fixed.

678780 Under heavy row limiting (i.e. large tables, many indexes, or many columns), complex queries involving temp tables may have resulted in a NullPointer Exception. This has been fixed.
678806 The ENCRYPTED KEY '<key>' clause is now supported in the openstring OPTIONS clause. This is useful for reading in files created using UNLOAD with the ENCRYPTED clause.
678817 A canceled SQL Anywhere HTTP client procedure may, on rare occasions, hang the server. This has been fixed.
678942 There was a small chance that some statistics could have been reported incorrectly if parallel plans were used. Statistics affected include lock count, and the various io counts. This has been fixed.
678983 The MobiLink server could have crashed when synchronizing using HTTP. This has been fixed.
679160 Invoking the SQLDIALECT function can cause server failure under specific, and unlikely, situations. The problem has now been resolved.
679296 With UltraLiteJ for Android, synchronization with HTTP and E2EE was not possible because the methods setE2eePublicKey() and getE2eePublicKey() were members of the class StreamHTTPSParms. This has been fixed by moving the methods to the base class, StreamHTTPParms.
679356 When the Relay Server state manager was started with the -os command line option, and the Relay Server extension was published using a user account without write permission of the folder that contained the log file, then auto truncation of the log when the size limit was reached may have failed on IIS7.x with a RSF11013 error where the underlying reason was system error 5 (Access is denied). This issue has been fixed.
679370 If an application had a proxy procedure defined with an INOUT or OUT parameter of type [n][var]char(m), then calling that proxy procedure would have caused a server crash if the remote returned a value for that parameter that was the full m characters long. This problem has now been fixed.
679403 Calling ResultSet.getString(i) when column i was of type INT, SMALLINT, UNSIGNED SMALLINT, BIGINT, NUMERIC, REAL or DOUBLE, would have thrown a ULjException with code SQLE_VALUE_IS_NULL when the column value was NULL. This has been fixed so that ResultSet.getString() now returns null in this case.
679408 If a connection exists on the mirror server (ie, not the primary) when a failover occurs, that connection will persist while that partner becomes the primary. Database operations then performed by that connection (including certain temp-table operations which are valid from read-only connections) could have caused errors or crashes on other servers in the mirroring / HA system. This problem has been fixed.
679415 Reloading a database that contained a table that referenced a sequence could have failed. This has been fixed.

As a work around, the "Create sequences" section could be manually moved to before the "Create tables" section in the reload.sql file.

679436 After returning false from the SyncProgressed method, or calling CancelSynchronize to cancel a synchronization, it was possible that the Synchronize or EndSynchronize call would have hung. This has been fixed.

Also, the ULSyncProgressData.FLAG_IS_BLOCKING flag could have been set erroneously when the state was ULSyncProgressData.STATE_CANCELLED. This too has been fixed.

679580 The server could have crashed if a table was being dropped at the same time as a virtual table was being created. This has been fixed.
679605 When a geometry had multiple polygons configured in a particular way, the Union of that geometry with another polygon, which was also configured in a particular way, would have caused a 'ring not closed' error.

A simple example of a query that demonstrates this error is:

select ST_Geometry::ST_GeomFromText( 'MultiPolygon( ( ( -10 -10, -11 -10, -11 -11, -10 -11, -10 -10 ) ), ( ( 2 2, 2.5 1, 1 1, 1 2, 0 2, 0 0, 3 0, 3 2, 2 2 ) ) )' ).ST_Union( ST_Geometry::ST_GeomFromText( 'Polygon( ( 1 1, 2.5 1, 2 2, 1 2, 1 1 ) )' ) )

The only work around is to break up the MultiPolygon and perform the unions in a different order.

This has been fixed.

679803 SQL Remote would have generated the following error message:

"The address given is invalid. The address must be a directory name with no path separators."

and then aborted the message receiving thread when it was able to retrieve all the names of the message files in the given directory from a FTP server, but for some reasons (such as network problems) was not able to retrieve the contents of a file from the server. This problem is fixed so that the error message is now:

"Unable to retrieve message file 'xxxx' from the FTP server."

680025 If a database had one or more ODBC based remote servers that used the new "driver=SQL Anywhere Native" feature, and if more than one connection attempted to establish a remote connection using these remote server definitions, and if no other connection had previously established a remote server definition using one of these remote server definitions, then there was a very small chance that the server would have crashed on exit. This problem has now been fixed.
680034 In a heavy indexing environment (many rows * many cursors with small row limiting values, and small cache size relative to number of index pages in the database), after a synchronization with several open cursors and containing download deletes, subsequent deletes or updates may have resulted in SQLE_ERRORs or NullPointerExceptions. These have been fixed.
680036 In a heavy indexing environment (many rows * many cursors with small row limiting values and small cache size relative to number of index pages in the database), a synchronization of many download deletes may have become stuck while committing the download. Sometimes, on the BlackBerry OS it would have caused a system wide ForcedStackTrace exception. These have been fixed.
680039 A memory leak could have occurred when using the SQL Anywhere ODBC driver in such a way that the driver was repeatedly loaded and unloaded by the Microsoft ODBC Driver Manager on Windows Vista and Windows 7. This could have occurred when repeatedly creating and subsequently freeing the ODBC Environment as part of calling the SQL Anywhere ODBC driver. This problem occurs under Windows Vista and Windows 7 only as a result of a bug in Microsoft's SHELL32.DLL for these two operating systems. An Activation Context object is leaked on each load of the DLL. A workaround has been developed to avoid the problem.

Another way to avoid the problem is to create and destroy the ODBC Environment only once in an application and connect/disconnect as often as desired.

SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv );

SQLSetEnvAttr( henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0 );

loop

connect/disconnect many times

endloop

SQLFreeHandle( SQL_HANDLE_ENV, henv );

Note, Microsoft has published http://support.microsoft.com/kb/2624911, which describes the problem with Windows Vista and Windows 7.

680180 Conversions between Date and Time datatypes during direct computation would fail in versions 11.0 and earlier, but in version 12.0, this conversion did not fail. This has been fixed so conversions between dates and times in version 12.0 will now also fail, as these conversions are invalid.
680183 In rare timing-dependent cases, a multi-threaded client application that made simultaneous connection attempts from different threads may have crashed. This has been fixed.
680196 An application that connected using jConnect version 7 would have found that certain DatabaseMetaData calls returned incorrect results or unexpected errors. These metadata problems have now been corrected.

Note that a database upgrade is needed in order to get this fix.

680218 Calling ULConnection.SetSyncListener would have internally launched a thread that would never terminate. This could have prevented Windows Mobile applications from completely shutting down. This has been fixed.
680231 Databases which are accessed with row limiting enabled (see ConfigPersistent.setRowMinimumThreshold and setRowMaximumThreshold) will now always lazy load indexes.
680242 Procedures with a SELECT statement that called another procedure may have become slower over time. This happened when the SELECT statement generating the result of the inner procedure qualified for a certain type of caching. This has now been fixed.

A workaround is to ensure that the SELECT statement inside the inner procedure is not subject to simple query caching. If this slowdown is observed, the workaround can be implemented by adding a predicate that is not a tautology, but which is always known to be true for the data, to the inner select. For example, if a certain column is always greater than zero, adding the predicate col >= 0 is sufficient to avoid the problem. Note that simple predicates such as 1=1 will be detected as data-independent tautologies and removed.

680348 When the Text Completer completes a table, view, or procedure name, the owner name is now added if the name would be ambiguous without it. Previously, the owner name could have been added when it wasn't necessary. This has been fixed.
680569 When run on Unix systems, the system procedure xp_startsmtp(), which Starts an email session under SMTP, would have hung when called with a non-null "trusted_certificates" argument. This has been fixed.
680578 If a table had many rows with the same index value (all columns for a given index were the same), updates and deletes could have been slow. The performance decreased as the number of non-unique indexes with poor value distribution on a given table increased. This has been fixed.
680726 If a server identity file with an unencrypted private key was provided to the server, the server would have refused to use it, reporting "Error parsing certificate file, error code 4113". This has been fixed.

Note that this problem would not be seen on Mac OS X systems.

680755 Sybase Central could have crashed when selecting a global temporary table in the tree, then selecting the Data tab in the right-pane and attempting to insert a row into the table. The crash would only have occurred if the table's commit action was DELETE ROWS. This has been fixed so that the Data tab is no longer shown for a GLOBAL TEMPORARY table unless its data is SHARE BY ALL.
680760 When viewing extended options for a synchronization profile, publication, MobiLink user, or synchronization subscription, the values for the MobiLinkPwd and NewMobiLinkPwd extended options could have been seen in plain text from their tooltips. Now, no tooltips are shown for these values.
680766 Execution of a CREATE OR REPLACE SEQUENCE statement would have failed with the error "Sequence <sequence name> already exists" if the sequence already existed. This has been fixed.

The workaround is to manually drop the sequence before issuing the CREATE statement.

680767 When unloading a database, incorrect CREATE TEXT CONFIGURATION of external term breakers and prefilters were being generated in the reload,sql file. This has been fixed.
680769 When unloading a database, SEQUENCE generator comments were not included in the reload.sql file. This has been fixed.
680770 When unloading a database, GRANT INTEGRATED/KERBEROS statements containing square brackets were written in the reload.sql file. These statements would have would have generated an 'unexpected statement' error when executed. This has been fixed by always putting double quotes rather than square brackets around the user identifier.
680779 When unloading a database, the ALTER TABLE statement to generate unique constraints in the reload.sql file did not include the CLUSTERED keyword for clustered unique constraints. This has now been corrected.
680917 Interactive SQL contains a number of menu items for selecting the current, previous, and next statements. These menu items could hale selected more than just the statement text, or could have selected nothing at all if the statement being selected included the text "IF NOT EXISTS".

For example:

CREATE TABLE IF NOT EXISTS t ( c INT PRIMARY KEY )

This has been fixed. Now, statements are selected properly.

This same problem also affected the behavior of the "Single Step" menu item which also relies on being able to select the next statement.

680920 The ISS Application Pool Process (w3wp.exe) may have crashed some time later after handling a request with a URL ending with the Relay Server extension.
681055 When setting the MobiLink client network protocol options for an Agent, it was not possible to specificy a certificate file name if that name contained any of the following characters: "!@#%^&()+-_". Attempting to do so would have resulted in an error message saying there was a syntax error in the protocol options. This message was incorrectly being display, and is now not shown.
681059 The usage text for the Relay Server Outbound Enabler was incorrectly listing 'identity_name' as a value for the -cr option. The value 'identity_name' has now been removed .
681078 TLS and HTTPS synchronization would have failed when the client attempted to use a client-side identity with an unencrypted private key. The error reported would have been: "Unable to read the private key". This has now been fixed.
681081 The connection string an agent uses to connect to a given remote database can be changed by selecting the agent, then selecting a database on the "Managed Remote Databases" panel and clicking the "Set Connection String" menu. If the "Cancel" button was clicked on the resulting window, the changes were made permanent, as if "OK" had been clicked instead. This has been corrected so that the changes in the dialog are discarded when "Cancel" is clicked.
681082 If deployment of a synchronization model to a consolidated database stopped progressing because another database connection was blocking it, clicking Cancel would have caused Sybase Central to become unresponsive, even after the blocking from the other connection ended. This has been fixed.
681088 Memory usage for large downloads containing both deletes and/or updates has been improved, particularly in respect to the number of object handles used on BlackBerry devices. Downloads that delete or update tables with many columns will benefit most from this new algorithm.

Note, row limiting is required to make use of this improvement.

681396 If an Unix machine had many network interfaces (hard to say how many), starting the server may have failed. The only error message displayed was "TCPIP communication link not started". This has been fixed.
681398 The server could have crashed while using the UNLOAD statement to unload data with 'APPEND ON' to a file if that file was also being deleted by some other process. This has been fixed
681404 A MobiLink client doing an HTTPS synchronization could have crashed if the connection was lost. This has been fixed.
681419 Multi-threaded OLEDB applications could have experienced an access violation when a rowset was released. This problem was introduced by the changes made for Engineering case 662896 and has now been fixed.
681424 On Windows Mobile devices, calling GetStringLength(), on a ULValue returned from any of the schema methods in ulcpp11.cpp, could have returned 0 even if it was a valid non-zero length string. This has been fixed.
681545 If a client's character set was a multi-byte character set, the following operations could have resulted in CHAR or NCHAR sizes larger than they should have been:

- the columns in a table created by the SELECT ... INTO [ LOCAL TEMPORARY TABLE ] table-name

- the columns in a view

- sa_describe_query and sa_describe_cursor domain_name_with_size and widths

- the EXPRTYPE returned data type length

These operations have been fixed to return the correct lengths.

681551 In rare cases, the server may have hang while trying to flush histogram statistics. This has been fixed.
681571 If an application attempted to drop a connection that had a cursor on a proxy table open, then there was a chance the server would have crashed. This problem has now been fixed.
681578 In rare timing dependent cases, a copy node or async mirror could have failed assertion 100927 ("Transaction log page number ... from parent or partner is not expected page number ... "). This problem could have occurred soon after the copy node started, or soon after the copy node reconnected to a parent. This has been fixed.
681579 For certain queries containing the built-in function ARGN(), the ARGN() expression may either have returned an incorrect value due to incorrectly matching an earlier case in the expression, or caused the server to crash. The probability of either failure was very small, and depended on both the database page size and the query text; however, the failure was deterministic for a given database and query text. This has been fixed.
681612 In a read-only scale-out configuration, the use of CREATE OR REPLACE MIRROR SERVER parent-server (where parent-server is the parent to any copy node) could have resulted in incorrect behaviour. The incorrect behaviour included servers and/or databases stopping, or the copy node not being able to connect. This has been fixed.
681616 The 'asyncfullpage' mirror synchronization_mode performance has been improved to be significantly better than the 'async' synchronization_mode for workloads that can take advantage of it. Note the 'synchronous' synchronization_mode is recommended since both the 'async' and 'asyncfullpage' modes can result in lost transactions if the primary server fails.

After changing the synchronization_mode while the mirror server was connected, the mirror could have failed to take over as primary (including if the synchronization_mode was changed from 'async' or 'asyncfullpage' to 'synchronous'). This has been fixed. A side effect of this fix is the database on the mirror server automatically stops and restarts if the synchronization_mode is changed between an asynchronous mode and 'synchronous'.

If the mirror database stopped and immediately restarted, in rare timing dependent cases, it was possible that the mirror would fail to take over as the primary if the primary failed. This has been fixed.

681620 If the MobiLink server was started with an identity file containing an unencrypted private key, it would have fail to start with error "Unable to read the private key.". This has been corrected.
681621 In a Relay Server farm environment, likely with non-sticky loadbalancer, it was possible for the Outbound Enabler to leak memory in the rare case of failing to locate the proper channel where the client request originally came from. This has now been fixed.
681739 In extremely rare situations, the primary server in a mirroring system could have become deadlocked while attempting to send log pages to the mirror partner. For the problem to have occurred, all request tasks on the primary server must have been blocked and the connection from the primary to the mirror must have been severed while the log pages were being sent to the mirror. This problem has been fixed.
681743 In rare, timing dependent cases a server which was a copy node and its parent could both have hung for several minutes and then the parent report the following message in the console "Mirroring request timed out: dropping mirroring connection" and both server continue normally. If this did occur, after the message was logged, the copy node would have reconnected and both servers continue normally. In order for this situation to occur, there needed to be requests from the copy node server to the parent server (such as mirroring requests for another database or remote data access requests).

This has been fixed so that servers that have less than about 20 committed transactions per second will no longer hang. There may also be slightly improved performance when using copy nodes.

681749 Support has been added to the SQL Anywhere Perl DBI driver which permits access to multiple result sets. The more_results() method which is not part of the standard default DBI template has been added as an extension.

For example:

$sth = $dbh->prepare("BEGIN SELECT * FROM Departments ORDER BY DepartmentID;SELECT TOP 10 * FROM SalesOrders ORDER BY ID;END");

$sth->execute();

do {

while (my $data = $sth->fetch) {

print "@$data\n";

}

print "---end of data---\n";

} while (defined $sth->more_results());

681755 In a high availability setup, if both partners accessed the arbiter at the same time, the arbiter could have crashed or behaved incorrectly. This has been fixed.
681758 In a mirroring setup, copy node server console messages often said "mirror" or "partner", causing confusion about the actual role of the server and which server was its parent server. This has ben corrected so that the server console messages for a copy node will now refer to the copy node itself as "copy node", and its parent as "parent".
681759 The database property 'PartnerState', as returned by db_property, would have returned inaccurate results for databases that had no mirroring definitions, but were running with mirroring enabled. This has been fixed. Now, db_property('PartnerState') will return "null" if no partner has been defined.
681765 One or more high availability or read-only scale-out servers could have hung in rare timing dependent cases. This has been fixed.
681788 Version information was missing from mlnotif.jar, so an ianywhere.ml.notifier.BuildNum class with a static main method that prints the version with build number to System.out, has been added.
681789 Version information was missing from rstool.jar, so an ianywhere.ml.rs.BuildNum class with a static main method that prints the version with build number to System.out, has been added.
681791 On Windows systems, a standalone Relay Server Outbound Enabler (RSOE) may have mistakenly identified a backend server as down or not accepting requests during the backend ping cycle on startup. This error could have happened if the Winsock DLL startup failed. This has now been fixed. Instead, the RSOE will print the error message "Backend ping socket startup failed", and backend ping attempts will stop.
681796 In a High Availability system, if the primary was processing changes faster than the mirror could apply them, it was possible that the primary could have hung. This has been fixed.
681805 In a mirroring system, if a procedure was in use on a mirror or copynode and DDL to ALTER or DROP the procedure was applied on the primary server, the mirror or copynode using the procedure may have given an assertion and shut down. This has been fixed. Now, any connections using the procedure will be dropped, and the following message will be printed to the server console: "Dropping connections that are preventing the transaction log from being applied."

In a mirroring system, if an event was in use on a mirror or copynode, and DDL to alter or drop the event was applied on the primary server, the mirror or copynode using the event may have given an assertion and shut down. This has been fixed. Now, if the event is running on the mirror or copynode, the connection the event is running on will be dropped, causing the event to be cancelled, and the following message will be printed to the server console: "Dropping connections that are preventing the transaction log from being applied."

681813 The system procedure sa_mirror_server_status() would have returned incorrect results when run on a copy node server, or a mirror server in a mirroring setup. The procedure was returning results for the server's parent or partner, and could have returned an incorrect status for a server that had been involved in a failover. This has been fixed. The procedure will now return the correct status for the queried server and its children.
681837 Doing a large number of download deletes when under extreme row limiting conditions may have resulted in an ArrayIndexOutOfBounds exception. This has been fixed.
681915 A client application could have failed with an AccessViolationException, instead of a normal communication error, when a connection was dropped. This problem has been fixed.
681921 If an application had an insert trigger on a local table that referenced a proxy table, then the trigger could have failed if the remote query involved the new row values for the trigger. This problem has now been fixed.
681928 A command can be added to a remote task by selecting the task, then clicking the "Add Command" toolbar button or menu item. If a command is then selected in the "Commands" tab, the new command appears on the row following the selected row. This command was not actually added to the task at that position, instead, it was always added to the end of the command list. This has been fixed so that the new command actually follows the selected command.

This problem could have made it appear as if the order of commands changed when a remote task was deployed, if the remote task was deployed shortly after adding a command. In fact, the ordering of the commands was incorrect immediately after the command was added. If Sybase Central was started and the task was viewed without deploying it, the added command would have been at the end of the command list.

681931 When looking at the commands in a deployed task, the "On failure" setting for each command was displayed as "Abort task", even for those commands with different "On failure" settings. This has been fixed. The correct "On failure" setting is now shown for each command.
681956 Calling the ULConnection methods SetSyncInfo() or ULSetSynchInfo() with a ul_sync_info, where both the auth_parms and additional_parms were non-null, would have created a sync profile where one of the additional_parms had been made into an auth_parm. This has been fixed.
681963 If a statement similar to the statement below was used in a stored procedure, function, or trigger, a syntax error may have been incorrectly returned. The statement must have containeds both MATCH and DELETE or INSERT clauses. This has been fixed.

For example:

create or replace PROCEDURE test1( )

BEGIN

ALTER TABLE ixddl6 ADD CONSTRAINT FK_primary

FOREIGN KEY (x)

REFERENCES ixddl5(pk)

match unique simple on delete set null

END

682234 The text editor used to display SQL commands in a remote task can be resized. Refreshing or restarting Sybase Central would have reset the size of the editor to the default. Now, the editor size is persisted.
682246 If an application attempted to cancel a query that involved one or more proxy tables, then the cancel request would have, in some rare cases, been ignored. This problem has now been fixed.
682250 In a database mirroring setup using asynchronous mode, the mirror was not responding to pages sent by the primary as quickly as it should, affecting performance. This has been fixed and performance should be improved.
682512 If a high availability partner was shutdown while it was the primary, its partner took over as primary, and then the partner that was shutdown was restarted, it could have failed to start with the errors:

"database is not compatible with primary; files must be replaced" and

"Database server shutdown due to incompatible files for database mirroring."

This has been fixed.

682530 When unloading a database, the DESC clause was not being added to statements in the reload.sql file when creating Primary and Foreign Keys with a descending sequence. This has been fixed.
682532 In version 12 of the Table Mappings editor for synchronization models, if the mapping to direction was changed to "Not synchronized" it was not possible to use the same menu to change it back. As a work around, either use Edit > Undo, or save the model and re-add the table mapping. This has been fixed. Now the table mapping direction menus remain enabled after changing the mapping direction to "Not synchronized".
682561 The fix for Engineering case 660995 had caused an issue where client requests that were not assigned to a backend server may have caused the IIS worker to crash in rs_client.dll. The client request may not have been assigned for various reasons. For example, when the Relay Server Outbound Enabler of the backend server was not connected, or the farm was disabled. If that happened and there were also I/O error while reading the request for discarding, a crash could have occurred when the Relay Server tried to report the I/O error. The crash has been fixed.
682621 Remote Relay Server administration operations can be initiated from Sybase Central's Relay Server plugin, or via the Relay Server administration API. Remote administration operations, such as Relay Server reconfiguration or log archiving, could have caused the Linux Apache Relay Server to crash. This has been fixed.
682648 When using the local Relay Server reconfiguration utility on Linux Apache to change the Relay Server configuration, or to archive the Relay Server log, the utility would not exit once complete. This has been fixed.
682662 A small amount of memory was leaked when an application using the ADO.NET interface executed a distributed transaction. This has now been fixed.
682755 Multithreaded client applications (e,g., ODBC, OLEDB, ADO.NET applications) could have crashed with a memory access violation, or leaked memory, when attempting simultaneous connections to a server. This problem has been fixed.
682756 If operations on a mirror server created a cycle by committing operations on the primary server (via, for example, an OMNI connection), the primary and mirror servers could have deadlocked on each other and appear to hang. The problem was most likely to have been seen when the mirror server was also attempting to shut down. This problem has been fixed.
682762 Changes forn Engineering case 674559 introduced a bug which could have caused a crash on the primary server of a mirroring system when auto-adding a copy node. This problem has been fixed.
682773 EF 4.1 is the latest release of Microsoft Entity Framework. The major new feature of EF 4.1 is "Code First". Support has now been added for Code First.

Code First enables a different development workflow: defining data model objects by simply writing C# or VB.NET classes mapping to database objects without ever having to open a designer or define an XML mapping file. Optionally, additional configuration can be performed by using data annotations or the Fluent API. Model can be used to generate a database schema or map to an existing database.

Here's an example which creates new database objects using the model:

using System;

using System.Collections.Generic;

using System.ComponentModel.DataAnnotations;

using System.Data.Entity;

using System.Data.Entity.Infrastructure;

using System.Linq;

using iAnywhere.Data.SQLAnywhere;

namespace CodeFirstExample

{

[Table( "EdmCategories", Schema = "DBA" )]

public class Category

{

public string CategoryId { get; set; }

[MaxLength( 64 )]

public string Name { get; set; }

public virtual ICollection<Product> Products { get; set; }

}

[Table( "EdmProducts", Schema = "DBA" )]

public class Product

{

public int ProductId { get; set; }

[MaxLength( 64 )]

public string Name { get; set; }

public string CategoryId { get; set; }

public virtual Category Category { get; set; }

}

[Table( "EdmSuppliers", Schema = "DBA" )]

public class Supplier

{

[Key]

public string SupplierCode { get; set; }

[MaxLength( 64 )]

public string Name { get; set; }

}

public class Context : DbContext

{

public Context() : base() { }

public Context( string connStr ) : base( connStr ) { }

public DbSet<Category> Categories { get; set; }

public DbSet<Product> Products { get; set; }

public DbSet<Supplier> Suppliers { get; set; }

protected override void OnModelCreating( DbModelBuilder modelBuilder )

{

modelBuilder.Entity<Supplier>().Property( s => s.Name ).IsRequired();

}

}

class Program

{

static void Main( string[] args )

{

Database.DefaultConnectionFactory = new SAConnectionFactory();

Database.SetInitializer<Context>( new DropCreateDatabaseAlways<Context>() );

using ( var db = new Context( "DSN=SQL Anywhere 12 Demo" ) )

{

var query = db.Products.ToList();

}

}

}

}

Here's another example which maps to an existing database:

using System;

using System.Collections.Generic;

using System.ComponentModel.DataAnnotations;

using System.Data.Entity;

using System.Data.Entity.Infrastructure;

using System.Linq;

using iAnywhere.Data.SQLAnywhere;

namespace CodeFirstExample

{

[Table( "Customers", Schema = "GROUPO" )]

public class Customer

{

[Key()]

public int ID { get; set; }

public string SurName { get; set; }

public string GivenName { get; set; }

public string Street { get; set; }

public string City { get; set; }

public string State { get; set; }

public string Country { get; set; }

public string PostalCode { get; set; }

public string Phone { get; set; }

public string CompanyName { get; set; }

public virtual ICollection<Contact> Contacts { get; set; }

}

[Table( "Contacts", Schema = "GROUPO" )]

public class Contact

{

[Key()]

public int ID { get; set; }

public string SurName { get; set; }

public string GivenName { get; set; }

public string Title { get; set; }

public string Street { get; set; }

public string City { get; set; }

public string State { get; set; }

public string Country { get; set; }

public string PostalCode { get; set; }

public string Phone { get; set; }

public string Fax { get; set; }

[ForeignKey( "Customer" )]

public int CustomerId { get; set; }

public virtual Customer Customer { get; set; }

}

public class Context : DbContext

{

public Context() : base() { }

public Context( string connStr ) : base( connStr ) { }

public DbSet<Contact> Contacts { get; set; }

public DbSet<Customer> Customers { get; set; }

}

class Program

{

static void Main( string[] args )

{

Database.DefaultConnectionFactory = new SAConnectionFactory();

Database.SetInitializer<Context>( null );

using ( var db = new Context( "DSN=SQL Anywhere 12 Demo" ) )

{

foreach ( var customer in db.Customers.ToList() )

{

Console.WriteLine( "Customer - " + string.Format( "{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}",

customer.ID, customer.SurName, customer.GivenName, customer.Street, customer.City,

customer.State, customer.Country, customer.PostalCode, customer.Phone, customer.CompanyName ) );

foreach ( var contact in customer.Contacts )

{

Console.WriteLine( " Contact - " + string.Format( "{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}",

contact.ID, contact.SurName, contact.GivenName, contact.Title, contact.Street, contact.City,

contact.State, contact.Country, contact.PostalCode, contact.Phone, contact.Fax ) );

}

}

}

}

}

}

Additional assembly references need to be add to run these examples: EntityFramework, iAnywhere.Data.SQLAnywhere.v4.0, System.ComponentModel.DataAnnotations, System.Data.Entity.

682889 Changes made using the Interactive SQL utility might not have been automatically committed when it was closed, if it was opened from a new MobiLink project. This problem only affected newly created MobiLink projects. If Sybase Central was restarted after creating the project, the problem did not happen. It also only occurred when connect to the consolidated database using only an ODBC data source. If explicit connection parameters were provided, the problem did not happen. This has been fixed.
683025 If the connection making an http or https request was closed while the request was still executing, and that request was in turn making a request to a mirror server (for high availability or read-only scale-out), or making a request to a diagnostic server, the server could have hung or fail in some other way. This has been fixed.

In high availability or read-only scale-out, if the connection to the primary or parent server was dropped just after the mirror or copy node had determined its role, the mirror or copy node could have failed to start with the errors:

"database is not compatible with primary; files must be replaced" and

"Database server shutdown due to incompatible files for database mirroring."

This has been fixed. Note that attempting to restart the mirror or copy node after receiving this error should succeed in this case.

683143 The IIS Relay Server is no longer multi-process. Shared memory for IPC and the Relay Server State Manager utility have been removed. The shared_mem property in the Relay Server configuration is now ignored. Users no longer need to setup a RSHost service. The Relay Server will start up on demand when the Web Service is running. Shutting down the web service also shuts down the Relay Server.

New and simplified configuration and logging conventions:

- Configuration file: <physical directory of the rs.dll>/rs.config

- Relay Server log file location: <physical directory of rs.dll>/Log/rs.log

The removal of the use of shared memory improves security and simplifies flow control signals, as there is one less resource to monitor. The new IIS Relay Server must be set up with a single application pool with web garden size = 1.

683159 When SQL Remote was running in continuous mode, if the max_retries message system parameter had been set, and a message was generated because the maximum size of the message had been reached before the next send phase, then SQL Remote would have incorrectly believed that an error had occurred when sending the message. SQL Remote would then have paused for the number of seconds specified by the pause_after_failure message system parameter. This problem has now been fixed.
683161 A multithreaded application using the SQL Anywhere oledb driver could have crashed with an access violation when a rowset was released. This problem was introduced by the changes for Engineering case 662986, and has now been fixed.
683170 When using a CREATE OR REPLACE MIRROR SERVER server_name AS COPY USING AUTO PARENT statement to convert a mirror server from a partner to a copy node, server_name would have been given an invalid parent and the alternate parent would be lost. This problem has been fixed.
683177 The Interactive SQL utility would have crashed if the "Show progress messages" option was modified in the "Options" window while not connected to a database. This has been fixed.
683240 A forced termination of the web server worker process, may have caused the Relay Server Outbound Enabler (RSOE)connection to become unrecoverable until the rshost process was restarted. The RSOE will receive authentication error continuously upon every recovery attempt, and the Relay Server log will continuously report RSE3003 accordingly. The forced termination could have been caused by killing the w3wp processes, crashes, worker process recycling or IIS configuration update timeout waiting for outstanding requests to complete. This problem has now been corrected so that the recovery should succeed two minutes after the forced termination, without requiring the rshost process to be restarted.

The workaround is to restart the rshost process. This has been fixed

683384 Additional changes have been made for Engineering case 678817. Outbound HTTP worker threads could have hung indefinitely because the server was not broadcasting a notification.
683385 If an application that was connected using Open Client or jConnect executed a Transact SQL batch that contained an undefined host variable, then there was a chance the server would have crashed. This has now been fixed so that batch will fail with a "not enough values for host variables" error.
683394 When UltraLIteJ was run on Android devices, the method DatabaseInfo.getPageSize() could have returned an incorrect value. This has been fixed.

Also, the method Connection.getDatabaseProperty() was exposed for UltraLiteJ Android; and the method DatabaseInfo.getRelease() was modified to return the full software release, including the build number.

683410 A server in a mirroring system could have crashed when another server with many IP addresses was connected. This has been fixed.

Note, if a server that does not have this fix, and has many IP addresses, connects to a server with this fix, the fixed server will give a protocol error.

683425 Additional changes were required for Engineering case 681396, where the server may not start on HP-UX machines if there were many network interfaces. The description for case 681396 mentioned Unix systems, but this problem was actually limited to HP-UX only. A border case, as well as IPv6, were corrected as well.
683525 If a partner in a mirroring environment setup that is mirroring more than one database, it is possible to specify more than one mirror state file. If multiple databases were started and configured on the same server without restarting the server after configuration, this could have resulted in the server not being able to get quorum when its partner shut down. This has been fixed.
683552 If an UltraLite application was suddenly terminated (application crash, device reset, etc.) while a transaction was in progress, and the partial transaction was flushed to the database file by another commit or checkpoint, rows were not properly rolled back on subsequent restart. This has now been corrected.
683555 The UltraLite Database Unload utility (ulunload) would not have preserved the download-only table attribute when unloading a database. This has been corrected.
683700 With UltraLiteJ, committing a SQL statement that had updated a table containing a large BLOB or CLOB could have caused a StackOverflowError exception. This has been fixed.
683704 Whenever the Server Licensing utility (dblic) was used with the -k option (to specify a new registration key), the registration key was being written to the license file. This should not have been done for add-on keys such as the High Availability option, and has now been corrected.
683707 When a copy node was promoted to replace its parent via "ALTER MIRROR SERVER ... ALTER PARENT FROM ...", or internally because a copy node was not responding, siblings of the promoted node did not notice that their parent had changed and would continue trying to reach their original parent. This has been fixed.
683717 When performing a database upgrade (either via the Upgrade utility (dbupgrad) or via the ALTER DATABASE UPGRADE statement) on a database containing spatial data, the server would have terminated with a the following error:

SQL error (-1474) -- SRID 0 is referenced by column ... of table ...

This has been fixed.

683720 If a schema change was done using the START/STOP SYNCHRONIZATION SCHEMA CHANGE functionality, and authentication parameters were passed during synchronization, it was possible that the authentication parameters would not have been sent for the first synchronization after the schema change commands had been processed. This would likely have resulted in a failed synchronization. The next synchronization though would have been successful, and no data loss would have occurred. This problem has now been fixed, and authentication parameters are no longer missed.
683721 When the password provided by the identity_password option for an encrypted private key for a client side certificate was incorrect, the error STREAM_ERROR_INTERNAL was reported. Now the correct error STREAM_ERROR_BAD_PRIVATE_KEY_PASSWORD is reported.
683728 In some situations, the server may have crashed while executing an ALTER SYNCHRONIZATION PROFILE statement with the MERGE clause. The maximum size of the new profile string was being calculated incorrectly. This has been fixed.
683774 With UltraLiteJ, an UPDATE statement for table T with a subquery in the WHERE clause that referenced T, could have failed with a -144 error ("Column ... found in more than one table or it is used more than once in the SELECT list -- it needs a correlation name") at statement preparation time. This has been fixed.
683813 The methods Connection.getNewUUID() and ULPodUUID.toString() were removed in version 12.0 as a result of the introduction of equivalent SQL functions. These methods have been reintroduced. As a workaround the system functions newid() and uuidtostr() can be used.

Documentation:

Connection::getNewUUID method

Returns a new UUID value.

Syntax

UUID getNewUUID()

example:

uuid = conn.getNewUUID();

SQLType.toString method

Returns the string name of the specified SQL column type constant or BAD_SQL_TYPE if not a recognized type.

Syntax

String toString(UInt16 code)

Parameters

code The SQL column type constant.

example:

uuid_str = conn.getNewUUID().toString();

683830 There were two problems in the MobiLink server remote ID locking logic that have now been corrected:

1) When the consolidated database was running on a MySQL server, the MobiLink server could have immediately failed a status-check request when the server was not able to lock the remote ID;

2) When the consolidated database was running on a SQL Anywhere server, if the remote ID could not be locked in the upload transaction, the server would have shown the following warning message:

"Retrying the upload after deadlock in the consolidated database"

and then retried the upload transaction one more time.

683947 In very rare cases, when a server shutdown was requested via the server console, the server would have shutdown successfully, but the server console would have stayed up. This would only have occurred on Windows machines with multiple processors. This has been fixed.
683999 When calling the method SADataReader.GetSchemaTable, the SQL Anywhere provider creates two prepared statements which were not dropped immediately in some situations. Actually, the statements are dropped either when the SACommand objects (created in SADataReader.GetSchema Method as local variables) are garbage collected, or when creating a new command and the number of prepared statements has exceeded the 'max_statement_count' option. Still, the SADataReader.GetSchema method has now been modified to dispose of the commands within the SADataReader.GetSchema method. This will drop the prepared statements immediately.
684000 The usage message for the UltraLiteJ Database Load utility (uljload -?) would have output a "null" for the new -z parameter (specify the page size in bytes). An untranslated usage message for -z has been added for all languages.
684096 In timing dependent cases, a read-only scale-out copy node could have crashed or hung. This was more likely if the server was loaded and requests needed to be queued because there were no idle workers (more concurrent tasks than the current multiprogramming level). This has been fixed.
684166 Do we support load a table using USING CLIENT FILE, in the Perl driver?

If so, please document the prototype for Perl for db_register_a_callback function.

684277 Accessing result set or table columns, via streaming methods like ULResultSet::GetStringChunk in C++, could have returned unexpected values when the actual value was null, so checking explicitly to see if the value is null (ULResultSet::IsNull) was essential. This issue has been addressed by ensuring empty strings are now returned in this case. Proper handling of null values still requires an explicit check to differentiate between null and empty strings though.
684335 An explicit or implicit cursor describe that should have failed could have caused the server to crash. An example of a describe cursor that is expected to fail is if the describe is cancelled. This has been fixed so that server no longer crashes.
684340 When certain fatal errors occurred (particularly "dynamic memory exhausted"), the version 11.0 server attempts to create a cache.dmp file to describe the contents of cache at the time of the failure. When using an AWE cache, the server could have crashed while generating this dump file. The server had already encountered a fatal error and would need to be restarted anyway, but the crash prevented generating the dump file that would have allowed analysis of the allocation problem. This has been fixed so that the server no longer crashes when creating the cache.dmp file.

Note, SQL Anywhere version 12.0 does not attempt to generate a cache.dmp file.

684361 The MobiLink Replay utility (mlreplay) could have read and sent row data in the wrong order. This could have caused a crash in mlreplay, and caused the MobiLink server to read incorrect/invalid row data resulting in a -10308 error. This has been fixed.
684479 If a partner in a mirroring system was shutdown while it was the primary, its partner took over as primary, and then the partner that was shutdown was restarted, it could have failed to start with the errors:

"database is not compatible with primary; files must be replaced" and

"Database server shutdown due to incompatible files for database mirroring."

This has been fixed.

684569 If an error occurred in the second or subsequent result set of a stored procedure that produces multiple result sets, the error was not reported correctly by the Perl More_Results function. This problem has been fixed.
684575 Unlike other 'set' methods on Configuration objects, ConfigPersistent.setEncryption() would not have thrown an exception when the configuration object was in use by an open connection. The use of setEncryption() while in use could have potentially corrupted a database. This has been fixed by throwing an exception when attempting to change encryption.
684608 ODBC/JDBC escape syntax incorrectly required uppercase keywords like IN or FROM in scalar functions like POSITION and EXTRACT.

For example:

select {fn extract(month from '2011-05-07')}, {fn position('b' in 'abc')}

would have failed with syntax errors. If an uppercase keyword was used, the query would have succeeded:

select {fn extract(month FROM '2011-05-07')}, {fn position('b' IN 'abc')}

This problem has been fixed.

Note: In Interactive SQL, the braces { and } must be doubled-up (i.e. {{ and }} ).

684721 The rs_client.dll may have crashed when parsing a malformed response header. This has been fixed so that the Relay Server will response with an http 400 instead of crashing.
684769 In very rare cases the server may have crashed when upgrading a pre-version 12 database to version 12, if the database did not use a transaction log file. This has been fixed.
684808 When a back-end server aborted reading a request, for example due to some early detectable protocol error, the Outbound Enabler may have caused further protocol errors later on for other requests. This has been fixed.
684881 When using "Alter Mirror Server ..." to convert a copy node to a partner, a state file may have been neglected. This prevented the converted partner from knowing the current mirror state of the database, which could have caused both servers to start up as a primary server. This has been fixed. Now, only one server will be able to start as primary.
684891 If a query plan used multiple nested-loops outer joins then a cursor positioning using FETCH RELATIVE 0 may have returned the next row in the forward direction, instead of refetching the current row. This has been fixed.

A possible work-around for the problem is to use an insensitive or keyset-driven cursor type.

685083 If a partner in a mirroring environment was started with an invalid state file provided, it may have started the database in a bad state. This has been fixed. The partner will now give an error saying "unable to start database", and shut down.
685149 When execution of a stored procedure or user defined function was cancelled by the user

and an error handler within the stored procedure was invoked, an incorrect SQLCODE (0 or

the error code of a different error that occurred prior to the cancel) could have been reported. An incorrect error message could also have been reported by the ERRORMSG() function. This has been fixed.

685156 The server may have crashed if a procedure debugger connection disconnected before a debuggee connection was able to get attached to the debugger. This has been fixed.
685163 For version 12.0, the methods ResultSet.getString() and ULTable.getString() would have returned an empty string for columns that were null. Earlier versions would have correctly returned a 'null'. These methods have been corrected so that they now return results consistent with the prior versions.
685205 When unloading a database, comments for unique constraints were not included in the reload.sql file. This has been fixed.
685284 If a synchronization failed during the upload, subsequent changes to the database would not have been uploaded in the next synchronization, but in the synchronization after that. This has been fixed.
685289 When performing an archive backup via an external backup provider, the database server provided incorrect min_iosize & max_iosize parameters to the provider when calling the syb_defineapi() function. Generally, the min_iosize was set to what is actually the server's maximum IO size and max_iosize was set to 512K. Usually, the min_iosize was larger than the max_iosize. This problem has been fixed by setting the min_iosize to 2K and the max_iosize to the server's actual max buffer size.
685299 The "Overview" panel for a database shows the HTTP and HTTPS ports which its server is using. If both HTTP and HTTPS were used, and the server's -xs command line option was sufficiently complex, the reported port numbers would have been incorrect. Typically, they were more than 6 digits long. Now, the correct port numbers are displayed.
685318 The values returned in the table_page_cached and ext_page_cached columns of the result set returned by the system procedure sa_table_stats() could have been smaller than the number of pages that were actually cached by the server. This problem has been corrected.
685323 If the server's ports (-x) or web protocols command line option (-xs) contained certain multibyte characters, the server could have failed to start up and would have displayed the server's usage message or window. This problem has been fixed.
685559 If a non-recurring event was run on a read-only database, or had the "FOR ALL" clause, indicating it could run on a mirror or copy node, the server could have hung with 1 CPU at 100% after the event ran. Non-recurring events are events with a SCHEDULE clause that does not specify EVERY or ON. This has been fixed.
685566 When a mirror or diagnostics connection to another server was attempted the "Using broadcast address of: ..." message was logged to the console when it should not have been. This has been fixed so that this message is only logged if the -z server option is used.
685574 When unloading a database, ALTER INDEX ... RENAME statements were not being added to the reload.sql file when an index or unique constraint had been renamed. This has been fixed.
685733 The server could have unnecessarily consumed 100% of one CPU in certain circumstances as described below. These problems have been fixed.

- In certain cases when a copy node lost its connection to its parent and then encountered a log mismatch with the parent after it reconnected, a single CPU would remain at 100% utilization indefinitely.

- When cancelling a CREATE EVENT statement while processing a procedure profile (sa_procedure_profile, sa_procedure_profile_summary), a single CPU would have remained at 100% utilization until no connections were processing profile information

- While waiting for connections to drop when yielding to a mirroring partner, a CPU would have remained at 100% utilization until all connections were dropped.

685746 With UltraLiteJ for Android, the method DatabaseInfo.getNumberRowsToUpload() always returned 0. This has been fixed so that it now works as documented.
685857 When inserting a value into a FLOAT column, an error would have been given if the absolute value of the number was too big, or too close to zero. This has been fixed. Now, an error will only be given if the absolute value of the number is too big. If the number is too close to zero, it will be set to zero and inserted without an error.
685873 When using the Service utility (dbsvc) for Windows to delete a service that was currently running, the following messages were displayed:

The specified service is running. The service will be deleted when it is stopped.

Service "<svc name>" was deleted successfully.

This has been fixed. If the service is running, only the first message is displayed, otherwise only the second is displayed.

685894 When running at a verbosity higher than 0, the Relay Server Outbound Enabler was not obscuring the security token and passwords in the log file. This has been fixed so that their values are now hidden by ******, regardless of verbosity level.
685973 If a user's path contained a large number of directories and/or contained directories located on mapped network drives, the first connection attempt made by an application could have been slow. This has been fixed. A workaround is to create an empty file called saldap.ini (assuming the LDAP feature is not being used) in the installation bin32/bin64 directory.
685982 Updating the remote schema in a synchronization model from an UltraLite database may have subsequently caused errors, including NullPointerException, if a user was not specified when connecting to the UltraLite database. This would have changed the remote tables to have no owner, but the table mappings may still have referred to remote tables using owners. Such invalid mappings were not detected by the program when opening a synchronization model. This has been fixed. Owner mismatches for table mappings are now detected when the remote table in either the remote schema or the table mapping has no owner

.A workaround is to specify a user when connecting to the UltraLite database to update the remote schema.

The error message displayed when a table in a table mapping can't be found in the corresponding schema has also been fixed. The message now correctly includes the table name that could not be found, instead of displaying '{0}' for the table name.

Another problem is also addressed with this change. Previously if you changed the remote table for a table mapping, some options could change to their defaults, such as the direction changing to bidirectional. Now the synchronization direction and other synchronization options are maintained.

686009 Under some circumstances SQL Anywhere HTTP logs would have contained an empty URI for the @U log-format place holder. This may have occurred for the following reasons:

- HTTP METHOD was not supported,

- request URL was malformed,

- the HTTP listener specifies that the DBN was required but the database name was not within the URL path.

This has been corrected. Now if a request has faulted due to any of the above reasons, the HTTP method (@M) and version (@V) will emit the string "???". The given request line is pre-pended with a ">>>" and emitted for the (@U) format place holder.

For example:

A request of the form:

BLAH /sample/test HTTP/1.0

will emit the following for LogFormat="@M @U @V"

"??? >>> BLAH /sample/test HTTP/1.0 ???"

686036 Attempting to make a Remote Data Access connection to an Oracle database, using an ODBC driver other than the iAnywhere Oracle ODBC driver, could have caused the server to crash when running on a Unix system. This problem has now been fixed.
686039 After sending the upload and applying the download, UltraLiteJ sends a message to the server telling it the synch is complete. If there was a network error while sending this message, it would have been reported to the application, implying the sync had failed even though the download was applied correctly. This has been fixed and now the application no longer gets an error if the sync otherwise succeeded.
686040 UltraLiteJ could have caused the MobiLink server to report spurious protocol errors in the MobiLink server log. This has been fixed.
686041 The MobiLink server would have reported an unnecessary protocol error when the first command of a request was a NOOP. This has been corrected.
686057 An optional ias-rs-status-refresh-sec query parameter has been added to the status url for controlling the auto refresh rate of the status page. A refresh interval of 0 means auto refresh is not wanted and users are expected to use the refresh button on the browser to refresh the status. The following information was also added to the status page:

- Service start time in UTC.

- Status capture time in UTC.

- Status refresh interval, or indication that manual refresh is expected.

686183 If an application using the UTF8 character set connected via jConnect or Open Client to a blank padded non-UTF8 database and fetched a non-nullable char(n) value, then the returned value would have been blank padded to n*3 bytes. This problem has now been fixed.
686202 For recurring scheduled events, there were several errors in how end times were computed:

1. If an end-time was specified (i.e., "BETWEEN start-time AND end-time"), then:

a. Seconds were being ignored. For example, an end-time of '23:59:59' was being interpreted as '23:59:00'.

b. The end-time was tested as an exclusive endpoint rather than an inclusive endpoint, contrary to the documentation of the BETWEEN ... AND clause. For example, the schedule "BETWEEN '9:00' AND '17:00' EVERY 60 MINUTES" would cause the event to fire last at 16:00, rather than 17:00.

2. If an end-time was not specified (i.e., "START TIME start-time"), the end-time for each day was implicitly being treated as '23:59:00' exclusive, instead of '23:59:59' inclusive.

The combined effect of these error were that no scheduled events would fire in the minute from 23:59:00 until midnight. This has been fixed.

686203 Cancelling an external environment call call immediately after making the external call, could in very rare cases have caused the server to crash. This problem has now been fixed.
686204 Cancelling an external environment call that was in the process of returning a large result set, could in very rare cases have caused the server to crash. This problem has now been fixed.
686237 Relay Server web server extensions may have crashed if the URL contained redundant leading forward slashes. This has been fixed.
686304 When SQL Anywhere components were running in the isolated session 0 (ie, the services session) of Vista and later Windows operating systems, but were not actually running as services, the components could have attempted to display GUI elements. Due to session 0 isolation, these GUI elements were not accessible to users. To execute as a non-service within session 0, the program was likely to have been launched as a child of a service. On Vista and later versions of Windows, SQL Anywhere components now suppress GUI components when running in session 0 rather than just when running as a service.
686407 In rare cases where a primary server lost its connections to both the mirror and the arbiter servers as a checkpoint was performed, the next time the primary and mirror servers were connected and attempted to synchronize, the mirror server may have reported the error: 'Database "<name>" mirroring: database is not compatible with primary; files must be replaced' and then stop with the message: 'Database server shutdown due to incompatible files for database mirroring'. This has been fixed so as to reduce the possibility of this occurring. In rare cases this could still occur and the database running on the current primary must be manually copied or backed up to the mirror server so that the server can successfully synchronize again.

Note, this extends the changes made by Engineering case 660851.

686409 If an IPv6 address that included a port number was specified in square brackets, rather than parenthesis, the server or client libraries would not have parsed it correctly. For example, if a connection string included ";HOST=[<ipv6_addr>]:<port>", the error "No IP address found for [<ipv6_addr>]:port." This has been fixed.

Note, this applies to addresses in connection strings (using the LINKS or HOST parameters), the -x and -xs switches on the server, and URLs in web service procedures.

686415 Relay Server shutdown may have taken unnecessarily long, or even crashed. This would have occurred if the shutdown was requested when a new client session was waiting for backend server assignment while all Outbound Enablers of the backend farm had been disconnected. This has been fixed.
686428 In a mirroring system, it was possible for multiple servers to deadlock, waiting for responses from each other. This has been fixed.
686501 Debug logging level 3 or higher would have produced logging of OE_UPCHANNEL_CONNECT packets with the oei field equal to "older than 12.0". This is misleading and the packet doesn't contain such a field. The misleading information has been removed.
686519 Calling PreparedStatement.setBytesParameter would have truncated a byte array with more than 32k elements. This has been fixed.

Note, it is recommended that large binary parameters be set using PreparedStatement.appendBytesParameter().

686524 The SQL Anywhere Monitor was incorrectly reporting the total disk space as the current Relay Server log's file size. This has been fixed.
686561 If any of the following occurred while starting a database, the server could have crashed, although it would only occur in very rare situations:

1. An error was encountered while starting the database

2. Logs were being applied to a database at startup with -a, -ad or -ar but the -as switch was not used

3. The engine was requested to stop while the database was starting.

This has now been fixed.

686575 Very complex disjuncts in the WHERE clause were not able to be used for index scans. Now, IN predicates are generated if at all possible. These new IN predicates can then be used to drive an index scan improving the execution times for this type of query.
686586 A lengthy Relay Server alert may have been corrupted by having extra non-break space tokens ( ) broken up by exclamation marks. This has been fixed.
686790 When the server was starting a database, statistics collection may be performed on the database tables even though the statistics are not updated. This has been corrected so that statistics collection is now disabled on a database that is being started.
686791 In a mirroring system, if the primary server made changes faster than the mirror server could apply them, and if the connection between the two servers was dropped, in rare timing dependent cases, the mirror server could have hung with 1 CPU at 100%. Stopping the server or the database during the 100% CPU hang would have succeeded. This has now been fixed.
686822 If an ALTER PUBLICATION or a DROP PUBLICATION command was executed by the MobiLink client inside the sp_hook_dbmlsync_schema_upgrade hook, it was possible for the command to have thrown an 100904 assertion ("Failed to redo a database operation ...") if the database server had to replay the operation during recovery. This has now been fixed.
686869 When a database page was reused, the unused portion of the page was not always set to zeros, possibly resulting in exposure of decrypted data when that page was written out. This has now been corrected.
687157 Upload rows sent by clients might not have been applied to the consolidated database on a SQL Anywhere or Sybase IQ database server if a redundant synchronization request was received by the MobiLink server, and the MobiLink server aborted the request with the following error:

User 'a_ml_user_name' has the row in 'ml_database' locked (ODBC State = 40001, Native error code = -210)

The new synchronization must also have contained an upload that included upload rows for multiple synchronization tables, and reused the database connection that was used for processing the redundant synchronization. This problem is fixed now.

Note, all connections used by a MobiLink server are shown in the MobiLink server logging file with a prefix SPID when a minimal verbosity is specified in the MobiLink command line.

687162 When using a trigger to maintain a timestamp column in a synchronized table in a synchronization model, the generated update trigger would have fired when any column except the timestamp column was updated. If the table included a computed column, this would have caused an error when creating the trigger, even if one disabled synchronization for the computed column (as suggested in the "Limitations of synchronization models" documentation). This has been fixed. Now the generated update trigger only fires if a synchronized column or delete tracking column (if using logical deletes) is modified. A workaround is to deploy to a SQL file and edit the trigger definition.
687264 The server's http log did not display the query component of the request URI. This has been fixed.
687273 The HTTPS parameter was not mentioned in the usage text description of the Relay Server Outbound Enabler's -cs option, nor do any cert parameters mention that it is required. This is also the case for the usage for the -cr option, where HTTPS was not mentioned anywhere. Descriptions have now been added to the usage text for these options, as well as a mention that HTTPS=1 is required for any of the cert parameters. Also the -cs https=1 default port was set to 80, this has now been changed to 443 instead.
687277 The Relay Server Outbound Enabler (RSOE) didn't complain about typos in the -cs and -cr command line options. For example, if trusted_certificates was entered as trusted_certificate, RSOE would not stopped with an error right at start-up. Also, when HTTPS related parameters were specified and HTTPS=1 was not set, RSOE would also silently attempt to make an HTTP connection. These problem have been fixed so that RSOE will detect these problem, report an error, and abort.
687393 Under very rare circumstances, a server could have crashed during backup if many connections are committing transactions at the same time. Live backups were the most likely to suffer from this problem. This has been fixed. No workaround is known.
687411 When an ALTER DATABASE UPGRADE statement is executed, events are suspended in order to avoid having active connections while upgrading. Once upgrading is done, events are re-enabled. Running simultaneous ALTER DATABASE UPGRADE statements could have left events permanently suspended on the server. No events on any database would have been executed. This problem has been fixed. Also, when upgrading a single database, the server suspended events for all databases that爓ere running. This was unnecessary and the server now only suspend events in the database that is being upgraded.
687447 In rare, timing dependent cases the server could have had incorrect behaviour when a connection had at least 20 prepared statements with cached prepared statements, or at least 20 cursors open. The incorrect behaviour could have varied, and the only known symptom was incorrectly returning the error "Resource governor for 'prepared statements' exceeded", but it may also have been possible for server crashes or assertions to have occurred. This has now been fixed.
687567 The SQL Anywhere Monitor may have missed counting some uncommon Relay Server errors. These errors were:

FARM_CHANNEL_CONNECT_WITH_INVALID_SERVER_IDX 2006

SERVER_DISCONNECT_EARLY 3014

FARM_FAIL_ACCESS 12000

SERVER_FAIL_NEWING_CLIENT_STATISTIC 13011

This has been fixed.

687570 A .NET Policy DLL and the associated iAnywhere.MobiLink.Client.config file are now installed and configured. The .NET Policy DLL will allow .NET applications compiled against any build of v12.x of the iAnywhere.MobiLink.Client assembly to automatically re-direct to the most recent build of the assembly installed on the machine, if the desired build of the assembly could not be located on the machine. Before these files were installed and configured, an application.config file or machine.config file could have been used to get the same functionality.
687571 If Relay Server State Manager failed to initialize on startup during creating the shared memory step, it did not output a detailed message with the system error code and message. This has been corrected.
687578 Applications using the .Net provider could have crashed after running for some time. In rare occasions, the provider could have attempted to drop a prepared statement twice. This has now been fixed.
687596 When shutting down a server that was running as a Windows service, the server could have crashed. Although the problem was only seen when shutting down an interactive service on Windows XP by using the 'Shutdown' button on the server window, the problem was a timing issue and could have occurred when the server was shut down in other ways. The problem has been corrected.
687604 INSERT performance was 25-35% slower than version 11.0. The problem has been fixed.
687747 If the server was shutdown while a mirrored database was in the process of starting on the server, the server could have crashed. This has been fixed.
687749 A query using aggregate functions may have caused a server crash if its select list contained a derived table with an outer reference to the query, and the outer reference did not appear in the queries group by list. At least one of the following conditions must also have been trun:

1) The derived table contained a procedure call in its FROM clause and the procedure argument expression contained the outer reference.

2) The derived table contained a OPENSTRING clause in its FROM clause and its value expression contained the outer reference.

3) The derived table contained another derived table and the outer reference was inside this other derived table.

The below query shows an example of condition 3).

select ( select V0.e from (

select T3.e from T3 where T3.e = T2.c ) V0

) c1,

max(T1.b) as c2

from T1 join T2 on T1.a = T2.c

This problem has been fixed. The engine will now correctly return the error SQLE_INVALID_GROUP_SELECT, since the outer reference column has to be specified in the GROUP BY clause. Specifying the outer reference column in the GROUP BY clause (in the above example: group by T2.c) is also the work around to this problem.

687761 The dbisqlc utility would have reported a syntax error whenever it tried to execute a 'STOP SERVER' statement. This problem has been fixed. The statement used to be 'STOP ENGINE ...' and dbisqlc did support (and continues to support) that variant; however, it was never updated when the statement was changed to 'STOP SERVER'.
687769 In some circumstances, the Long.MIN_VALUE (-2^63) was incorrectly stored internally as a NUMERIC value. This resulted in incorrect values during expession evaluation. This has been fixed.
687773 In extremely rare cases, the server could have crashed when request level logging was enabled. The problem has now been corrected.
687776 The changes for Engineering case 686057 made have caused the server to crash when using URL query parameters. This has been fixed.
687786 An interactive quick setup feature has been added to help users with deploying Relay Server components to Microsoft IIS 6.0 on Windows Server 2003. This is being provided as an alternative to the manual procedure documented in the Relay Server Guide.

Setup is automated but also interactive. It creates a demo application and a Quick Reference Guide to assist in subsequent Relay Server server maintenance. The Quick Reference is launched automatically as part of the setup.

Setup is comprised of the following major steps:

1. Introduction

2. Customization

3. Create a Backup

4. Deploy and Start the Relay Service

5. Generate and Launch the Quick Reference

6. Launch the Relay Server Status Page

7. Launch the SimpleTestApp Client

8. Shut down

To deploy the Relay Server components to Microsoft IIS 6.0 on Windows Server 2003, run rs-setup.bat from the SQLANY12%/RelayServer/IIS/quicksetup_iis6 directory

687796 If an application using the SQL Anywhere JDBC driver attempted to exit, then there was a very small chance the client would crash on non-MacOS systems; however, on MacOS systems, the crash would have occurred every time. This problem has now been fixed. Note that the original problem was introduced with the fix for Engineering case 680183.
687835 If an MSI install was built using the Deployment wizard, and Sybase Central was selected but Interactive SQL was deselected, the subsequent install of Sybase Central would have failed on exit. The error:

Interactive SQL could not be launched.

Please change the plug-in properties and

add the isql.jar file to its path.

was due to Sybase Central expecting ISQL.jar to be installed. This has been corrected by adding a dependency on ISQL.jar when an install of Sybace Central is created.

687837 If an Overview color in the Options dialog was changed, the Overview display would have been erased. This has been corrected. A workaround is to disable, then re-enable, the Overview or change, then change back, the option to keep the Overview window attached to the main window.
687840 The initial primary mirror server could have crashed or not correctly processed requests in rare timing dependent cases after executing the "ALTER DATABASE SET PARTNER FAILOVER" statement. This problem could have also occurred when a preferred partner server became available after being disconnected. This has been fixed.
687973 Calling the system procedures sp_remote_tables or sp_remote_columns for an ASE or MS SQL Server remote server would have failed if the catalog argument was specified as NULL. This problem was introduced in 12.0.1 GA and has now been fixed.
687980 UltraLite is now supported on the Pocket PC 2003 platform. Support for TLS and HTTPS sync encryption, however, is not available for this platform.
687998 While extremely rare, the server may have crashed while executing a query that referenced proxy tables. The problem has now been fixed.
687999 In rare timing dependent cases, a transaction which was successfully committed on a primary server could have been lost. In order for there to have been a chance of this occurring, all of the following needed to be true:

- the application was connected to a primary server that lost quorum (the server lost the connection to both the mirror and arbiter servers)

- the application stayed connected to this server (the old primary server) even though the network connection to other servers dropped

- the application was in the middle of committing a transaction between the time that the old primary server lost its connection to the mirror and arbiter server, and when the old primary server restarted as the new mirror server because it lost quorum

- the old mirror server took over as the new primary (the mirror server must have been able to connect to the arbiter server for this to occur)

This problem has now been fixed.

688019 When connected to the utility database (utility_db), if a statement that was not supported was prepared, the PREPARE may not have generated an error when it should have. This has been fixed so that the unsupported prepare now returns the error "Permission denied: you do not have permission to execute a statement of this type."
688116 Support has now been added to the Relay Server to allow it to extract identity information from client certificate and then forward them in HTTP headers that SAP Gateway or Web Dispatcher understands. To turn on the feature for a backend farm, set the following new backend farm property in the Relay Server configuration file:

forward_x509_identity = yes

In the case were there is a chain of SAP intermediaries, the client identity headers may already present in the request. However not all clients may be granted a permission to act as such forwarder. So the default behavior is to replace the existing headers with the identity of the forwarder. To grant permission for a forwarder to forward its client identity without being overwritten by its identity, the following new pair of backend farm properties may be in the Relay Server configuration file:

forwarder_certificate_subject = <match-string>

forwarder_certificate_issuer = <match-string>

The <match-string> is used to check against a serialized form of the corresponding compound name field in the certificate. A '?' can be used to match any character and a '*' can be used to match any string. A '\' can be used as the leading escape character for '?', '*' or '\' of they need to be matched literally.

For example:

forwarder_certificate_subject = 'CN = mySapWD??.my.com, OU = Sybase, O = SAP, *'

forwarder_certificate_issuer = 'CN = quicksigner, OU = security department, O = my coop, L = my city, S = my state, C = my country'

To obtain the subject or issuer string of a forwarder, simply perform a forwarding without setting up the match requirement. The following error messages in the Relay Server log will reveal the full subject or issuer which fails the default empty match-string:

Forwarder certificate subject '<full-subject-string>' does not match pattern '' required in farm '<farm>'

Forwarder certificate issuer '<full-issuer-string>' does not match pattern '' required in farm '<farm>'

688149 New OUTPUT command options to control column names.
688272 If an INSERT or an UPDATE failed, due to a unique constraint violation for example, a row may have been left behind in the store. This would have resulted it unrecoverable database growth. This has been fixed.
688435 An IS [NOT] DISTINCT FROM predicate may have been incorrectly evaluated for some data types, such as string datatypes. The incorrect evaluation would have been observed if the predicate was not used in a Hash Join, Merge Join, or as a sargable predicate for a partial index scan. This has been fixed.
688459 Queries that use temporary tables could have produced incorrect results when UltraLiteJ was configured with row limitations (i.e. using ConfigPersistent.setRowScoreMaximum or ConfigPersistent.setRowScoreFlushSize). This has been fixed.
688468 The UltraLite runtime library for iPhone would have failed to build with recent Xcode/SDKs (Xcode 4.2 with iOS 5.0 SDK, for example), as gcc-4.2 was no longer being shipped (the command wais not found while trying to run build.sh). This has been fixed by having the UltraLite runtime makefile now simply use 'gcc'.

This problem can be worked-around by creating a symlink for gcc-4.2 -> gcc in the /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin and similar Simulator directories, or by modifying the makefile or build.sh used by UltraLite.

688573 An interactive quick setup feature has been added to help users with deploying Relay Server components to Microsoft IIS 7.0 or 7.5 on Windows Server 2008/Windows Server 2008 R2. This is being provided as an alternative to the manual procedure documented in the Relay Server Guide.

Setup is automated but also interactive. It installs IIS7, turns on required IIS7 features, configures IIS7 for Relay Server, creates a demo application and a Quick Reference Guide to assist in subsequent Relay Server server maintenance. The Quick Reference is launched automatically as part of the setup.

Setup is comprised of the following major steps:

1. Introduction

2. Customization

3. Install IIS7 and Required Features

4. Create a Backup

5. Deploy and Start the Relay Service

6. Generate and Launch the Quick Reference

7. Launch the Relay Server Status Page

8. Launch the SimpleTestApp Client

9. Shut down

To deploy the Relay Server components to Microsoft IIS 7.0 or 7.5 on Windows Server 2008/Windows Server 2008 R2, run rs-setup.bat from the SQLANY12%/RelayServer/IIS/quicksetup_iis7 directory.

688581 In a read-only scale-out system, if the non-primary server (say S) in the read-only scale-out tree had more than ten direct or indirect children, then S's parent could have hung, in rare timing dependent cases. This problem was introduced by changes made for Engineering case 681813, and has now been fixed.
688720 UltraLite could have returned fewer rows than expected for queries utilizing an index scan with conditions on multiple columns in the index. This has now been fixed.
688788 In rare timing dependent cases, if a mirror server was using all available workers, it was possible for the server to hang, or for a mirror database to not restart after loss of quorum. The maximum number of workers is defined by -gnh (in version 12) or by -gn (in version 11). This has been fixed.
688888 The ENCRYPTED KEY option of the OPENSTRING clause can now specify a variable name rather than a string.

For example:

create variable mykey varchar(50);

set mykey='TheActualEncryptionKey';

select * from openstring(...) with (...) option (encrypted key mykey);

688891 It is now possible to disable the fast launcher feature of the Interactive SQL utility using the oem.ini file. To disable the fast launcher add the line "fastLauncherEnabled=false" to the "dbisql" section of the OEM.INI file. This option disables the fast launcher but does not prevent a user from re-enabling it using the options dialog. To prevent users from re-enabling fast launching add "fastLauncherEnabled" to the value of the "lockedPreferences" option in the OEM.INI file. So, with both options set you OEM.INI would look something like this:

[dbisql]

lockedPreferences=fastLauncherEnabled

fastLauncherEnabled=false

688892 When running mlgenreplayapi with a non-existent recorded protocol file, and/or using the -d switch with a non-existent directory, no error messages was displayed at the console. However, if the -o or -ot switch was used, the errors were logged in the log file. Now, if no -o or -ot options are specified for mlreplay and mlgenreplayapi, all output goes to stdout.

As well, mlgenreplayapi will now create the directory specified by the -d option (the directory in which to put the generated code) when it does not exist.

688896 If an application crashed during synchronization it was possible that subsequent sync attempts would have failed with server errors. The MobiLink server would have reported a progress mismatch and the log could have shown multiple instances of the same publications. This has been fixed.
689047 An HTTP or HTTPS synchronization through the Relay Server could have failed with stream error STREAM_ERROR_HTTP_HEADER_PARSE_ERROR. This has been fixed.
689167 After using the "Find" button to find a network server, the message "You cannot use the Host connection parameter and advanced network parameters at the same time." could have been returned, even though nothing was specified on the "Network" tab. For this problem to have occurred, the "Action" field had to have been set initially to "Connect to a running database on nother computer". The problem would not have occurred if the "Action" value had been changed prior to clicking the "Connect" button. This has been fixed.

In a related issue, the above error message should have been displayed, but was not, in a number of other cases. This has also been fixed.

689174 The Relay Server was sensitive to the networking environment and how quickly the web server detected read errors (RSE3004) caused by network problems on the down channel between the Outbound Enabler and the Relay Server. If there was enough delay so that the Outbound Enabler had already recovered the channels before the detection occur, the Relay Server would have failed subsequent client requests targeting this back-end server and reported the following warning:

W. 2011-10-28 21:23:36. <5608.2420.F5fcB0S456bR0> Server response NOT completed. Remaining 0 of 0 bytes.

Restarting the Outbound Enabler would have resolved the issue. This has now been fixed so that client requests will not be affected by the delay and restarting Outbound Enabler is no longer required.

689193 The changes for Engineering case 682512 introduced a problem where stopping a high availability primary server while it was connected to its partner (mirror) server could have resulted in the database not being able to start. Specifically, in timing dependent cases, attempting to restart the primary mirror server could fail with the "Database cannot be started -- <database name> not expecting any operations in transaction log". This has been fixed.
689194 When synchronizing with a SQL Anywhere remote using the MobiLink client running on a non-English operating system, it was possible for the following message to be generated by the MobiLink server:

Gtk-CRITICAL **:gtk_text_buffer_emit_insert:assertion 'g_utf8_validate (text, len, NULL)' faild

This problem has been fixed. As a consequence, the message output in the MobiLink server log when a synchronization request is received from a SA remote will change from:

Request from "Dbmlsync Version 16.0.0.3940" for: remote ID: ...

to:

Request from "Dbmlsync 16.0.0.3940" for: remote ID: ...

689233 Opening a procedure in a new window, deleting the procedure from the main Sybase Central window, and then attempting to save the procedure from the new window, would have caused Sybase Central to crash. The same problem occurred for views, functions, triggers and events. These issues have been fixed.
689315 When connected via jConnect or Open Client to a blank padded UTF8 database and a non-nullable char(n) value was fetchesd, the client may have experienced protocol errors if n was less than 3. This problem was introduced by the fix for Engineering case 686183 and has now been fixed.
689451 If the server was forcibly shut down while an encrypted database was in the process of starting or stopping, the server could have crashed. This has been fixed.
689464 The Property() function would have displayed negative values for the server properties 'HttpPorts' and 'HttpsPorts' when the port numbers were above 32768. This has been fixed.
689511 In some extremely rare cases, the transaction log may not have been committed to disk when a COMMIT operation was performed.

Also, if a transaction only modified temporary tables, it was possible that the transaction log would have been committed to disk although it didn't need to be.

These problems have been fixed.

689614 In rare cases in a mirroring system, where a mirror server lagged far behind the primary in applying changes, it was possible for the primary and mirror server to hang. This has been fixed.
689657 Three new properties have been added:

LastCommitRedoPos: This property is available at both the connection-level and the database-level. The value returned is the redo log position after the last COMMIT operation was written to the transaction log by the connection or database.

LastWrittenRedoPos: This is a database-level property only. The value returned is the last redo position for which a write was issued to disk. The write is not necessarily synced to the physical medium as it may still be cached by the OS, disk controller or disk drive.

LastSyncedRedoPos: This is a database-level property only. The value returned is the last redo position for which a write was issued to disk and the data was synched to the physical medium. Data prior to this position is expected to be present on disk even in the event of a power failure.

689696 In exceptionally rare circumstances, the server may have failed with assertion errors 200130, 200131, 200106, 108701, or others, on index pages. The problem was seen on multi-core machines under very high index contention, that included index updates and deletes. This has been fixed.
689764 The assembly names of version 3.5 and 4.0 providers in the policy config file were not correct. This meant that version 3.5 and 4.0 policy files did not redirect old versions to a newer version. This has been corrected
689781 The ADO .Net provider now supports Microsoft Entity Framework 4.2. To use the new Entity Framework 4.2, it must be added to Visual Studio projects using the Visual Studio tool NuGet.
689792 Requests to 12.0 MobiLink servers from MobiLink clients without the changes made for Engineering case 471582, where the MobiLink client included version and build number in each synchronization, could have ended with an "Unknown request completed" in the MobiLink server log. Also, error "[-10344] The remote database identified by remote ID '89d85096-0006-11e1-8000-8a42a227c45d' is already synchronizing: orphaned UltraLite synchronization" could have been reported for requests from MobiLink clients without this change as well. These issues have been fixed.
689907 The Interactive SQL utility would not have reported an error if an unknown encoding name was used in the READ statement's ENCODING clause. This has been corrected so that now it does.
689910 Extra rows were returned when executing a query using UNION where the subqueries contained joins with ON conditions. This has now been fixed.
689943 With UltraLiteJ, committing a SQL statement that updated a table containing a large BLOB or CLOB could have caused an ArrayIndexOutOfBoundsException. This has been fixed.
689954 An ODBC application could have crashed when attempting to connect if a thread was unable to be started. This has been fixed.
690075 Events run on temporary connections, but those connections did not always have the correct locale information. In particular, functions such as errormsg() would have returned strings encoded in the OS character set rather than in the database character set. This problem has been fixed.
690114 Recovery could have failed if an operation in the transaction log required access to a feature that was secured on the command line via the -sf option. The operation could have entered the log, either by having the operation performed on a server where the feature was not secured, or if security was permitted, on the given connection via the -sk server option and setting the secure_feature_key option to match. The failure would have been displayed as assertion number 100904 "Failed to redo a database operation". This has now been fixed.

Note, not all secured features add entries to the transaction log. For example, the READ_FILE secured feature blocks access to xp_read_file which would not get logged; however, the REMOTE_DATA_ACCESS secured feature blocks access to statements such as CREATE SERVER does get logged.

690133 When connected via jConnect or Open Client, retrieving the metadata of a long nvarchar or ntext column may have incorrectly indicated that the column was a long binary value. This problem has now been fixed.
690224 The database properties CurrIO, MaxIO, CurrRead, MaxRead, CurrWrite, and MaxWrite, in some cases were not be maintained correctly. This has been fixed.
690250 The UltraLiteJ runtime now supports restartable HTTP synchronizations. With restartable HTTP enabled, UltraLiteJ applications can tolerate network interruptions, so synchronizations will fail less often on unreliable networks. Restartable HTTP is disabled by default. To enable, use the following new methods on the StreamHTTPParms class:

/**

* Enables or disables restartable HTTP. With restartable HTTP enabled,

* UltraLiteJ can tolerate network interruptions, so synchronizations will fail

* less often on unreliable networks.

* <p>

* To use restartable HTTP, both UltraLiteJ and the MobiLink server must have

* applied CR#690250.

*

* @param isRestartable Pass true to enable restartable HTTP, and false to

* disable. The default is false.

* @see #isRestartable()

*/

public void setRestartable( boolean isRestartable );

/**

* Returns true if restartable HTTP will be used, and false otherwise.

*

* @return Whether restartable HTTP will be used.

* @see #setRestartable(boolean)

*/

public boolean isRestartable();

To use this change, both remotes and servers must be upgraded. It is safe to upgrade only one of the remote or the server, as long as setRestartable is not called on the remote.

690254 When request logging is enabled with ALL or PLAN, the server may have crashed if the following sequence occurred:

- Connection A opened a cursor that included fetching rows from a procedure

- Connection B dropped the procedure used by connection A

- Connection A then closed its cursor

This problem has been fixed.

690291 An UltraLiteJ database that was created from a file using the method DatabaseManager.importDatabaseFile() could have been invalid in rare circumstances. The circumstances in which this was more likely were when the page size of the database was small (1 KB or less). This has been fixed.
690295 An IIS web server application could have crashed after running for a few days. This has now been fixed.
690373 Statements with virtual tables referencing user-defined functions, and stored procedures which qualify for in-lining, may crashed the server or returned incorrect results. This has been fixed.
690393 The changes for Engineering cases 673184 and 673184 may have caused non-lazy loading databases to encounter SQLE_ERROR and ArrayIndexOutOfBounds. This has been fixed.
690627 If a stored procedure is called from the Interactive SQL utility, and that procedure performed a client-side file operation, the user is asked whether the operation should be allowed or not. Previously, if dbisql was run with the -q command line option, the prompt was not displayed, and "Allow" was assumed. Now, the prompt is displayed even if the -q option is used, and the initially selected option has been changed from "Allow" as default, to "Disallow".
690734 The MIN and MAX aggregate functions would have returned an error when using an argument of type "timestamp with time zone" or "xml":

Cannot convert timestamp with time zone to a numeric

or

Cannot convert xml to a numeric

Further, using an "numeric" before computing the aggregate. This has been fixed. The MIN and MAX aggregates no longer attempt to cast these types to "numeric".

690768 In order to prevent the possibility of having two primary servers running at the same time when there was no connection between the two partners, the arbiter would have refused a role switch from "mirror" to "primary" if it had a connection to the current primary. If a mirroring partner server was unable to connect to its partner server after the connection dropped, it was possible for the server to be unable to decide whether to take the role of primary or mirror server. A work around for this problem was to use the syntax "ALTER DATABASE <mymirroreddb> FORCE START" to force the database to start up as primary, and should only have been used if there was no other primary server running. This problem has been fixed, and the server should now be able to decide to take a role of either "primary" or "mirror" server.
691036 When using the -sf server option to disable certain features other than "database", the CREATE DATABASE statement could have failed. This has been fixed.
691040 When fetchingd a string value containing trailing blanks from a proxy table, the trailing blanks would have been stripped. This problem has now been fixed and the string value will be exactly as returned by the underlying driver.
691106 The Relay Server Outbound Enabler's down channel would have responded slowly to new requests when there were on-going heavy downloads. This has been fixed by internal tuning of the Outbound Enabler's down channel. In testing, two concurrent 1G reponses were making the Outbound Enabler take 18 sec to satisfy another pair of clients waiting for 10x10k responses. After tuning, it took only 0.5 sec to satisfy the lighter responses without jeopardizing the aggregated download throughput.
691167 The request timing counters record the number of times, and the duration, a connection blocks waiting for various resources (disk accesses, locks, etc.). These counters were normally only available when the server was run with the -zt option, or when enabled with sa_server_option('RequestTiming', 'on'). As of this change, the ReqTimeBlockIO and ReqCountBlockIO properties are always available, regardless of the -zt setting. These properties are cheap to maintain, relative to the others, because the time required to wait for a disk access is much larger than that required to update the property.
691168 Load table operations were not permitted on temporary tables in a read-only database, even though other DML operations (INSERT/UPDATE/DELETE/TRUNCATE) were. This has been fixed.

Note, as expected no data is logged to the transaction log in this case.

691178 Attempting to make a Kerberos connection with a large Kerberos ticket could have failed with the error "Kerberos login failed". This would have occurred with a Kerberos ticket size approaching 8K, which was possible if the ticket was part of a large number of Active Directory groups. This has been fixed.
691204 In a high availability mirroring configuration, it is possible to drop the mirror server definition for a partner server currently acting as a mirror. If the dropped server later tried to connect to the primary server as a copy node, the primary server would still have thought the server was its partner, rather than a copy node. This has been fixed.

Also, in a read-only scale out mirroring configuration, it is possible to drop the mirror server definition for a copy node. If that copy node was connected to the primary server at the time of the drop, the mirror server definition would not have been removed from the system tables. This to has been fixed.

691207 An ArrayIndexOutOfBoundsException could have occurred when reconnecting to an UltraLiteJ database if a previous connection had used a large amount of storage for temporary tables. This has been fixed.
691215 Different system catalog views, DESCRIBE, and the dbunload schema information, showed different base type names for the domain Signed Integer. The base type names shown were "int" or "integer". This has been fixed. Now the base type name "integer" is consistently returned.
691304 The changes for Engineering case 686407 introduced a problem for shared memory connections where calling connection_property( 'LastReqTime' ) could have reported an inaccurate value. This has been fixed.
691322 The ENCRYPTED KEY option of the OPENSTRING statement was recently extended to permit the encryption key to be specified as a variable (see Engineering case 688888). In certain scenarios this feature could have caused either a crash, or an inappropriate error - SQLCODE -851 "Decryption error: Missing encryption key". This has been fixed.
691327 If the Notifier had encountered an unexpected error (such as a deadlock) when executing one of the Notifier events, subsequent attempts to execute the same Notifier Event would have resulted in an "Invalid Cursor State" error. This has been corrected so that the Notifier no longer reports the "Invalid Cursor State" error on subsequent attempts. Stopping and starting the MobiLink Server would also have resolved the issue.
691453 The functions Upper(), UCase(), Lower(), and LCase() could have incorrectly described the length of the output based on the length of the input if input collation was UCA. This has been fixed. Output is now described as LONG (N)VARCHAR.
691589 1. ALTER TABLE would have allowed the addition of a UNIQUE constraint with nullable columns. This would have resulted in corruption of row store for the table, and would have lead to ArrayIndexOutOfBounds exceptions or corrupt data being read.

2. ALTER TABLE ADD constraint would not have added existing table rows to the new index. SELECT with ORDER BY using the new constraint would have returned less rows, and it was possible to INSERT rows that violated the constraint.

3. ALTER TABLE ALTER column would not have properly modified the column definition.

4. ALTER TABLE ADD column, DROP column or ALTER column, would have corrupted the in-memory state when lazy loading, resulting in SQLE_ERROR in subsequent operations on a given table.

All the above issues have been corrected.

691654 MobiLink clients that output localized error messages, now output a more detailed error message for connection failures on Windows desktop and devices, in addition to doing so for network read and write errors as they did before.
691657 When using the Deployment Wizard, a temporary list of files is generated to pass over to makecab.exe based on the temporary directory path (%TMP%); e.g. makecab.exe /F C:\DOCUME~1\user\Local Settings\Temp\1\sql6.tmp. If the %TMP% variable contained a space, this would not work correctly, although the MSI file would still have been generated, but it would not have contained the necessary files. This has been fixed.
691662 DELETE query blocks (e.g. a main query block in a DELETE statement or a query block of a DML DELETE derived table) were restricted from flattening subqueries defined in the WHERE clause. An exception was that subquery flattening was done if and only if the cardinality of the DELETE query block was not affected. The restriction has now been removed, which may significantly improve the performance of some DELETE statments. With this change, any subquery which qualifies for flattening is flattened similar with SELECT/UPDATE query blocks.
691732 The database server now accepts the -gta command line option to control which logical processors the database server is permitted to use. The argument to -gta is a comma-separated list of processor numbers and/or ranges.

For example:

-gta 3,5-7

allows the database server to run on processors 3, 5, 6 and 7.

The lower endpoint of a range may be omitted in which case it is assumed to be zero. The upper endpoint of a range may be omitted in which case it is assumed to be the highest cpu known to the OS. The database server will only use logical processors specified by -gta but it may not use all of them if the license does not allow it, or if one or more of the specified logical processors does not exist or is offline. If the set of processors specified by -gta exceeds the license limits, the server will use the lowest-numbered logical processors specified by -gta up to but not exceeding the license limits. In particular, the server does not choose logical processors in the order listed by -gta and it does not attempt to maximize concurrency within the license limit and the specified

-gta option. If the set of processors specified by -gta does not match any online processors, the server acts as if -gta was not specified and uses up to the licensed number of processors starting at processor 0.

Note that -gta cannot be used at the same time as -gt or -gtc. A usage message will be

displayed when -gta is used with either -gt or -gtc.

691736 When connected to a version 11 or earlier database, clicking the database's Overview panel would have displayed a "Table 'sysmirrorserver' not found" error. This has been fixed. A check of database version has now been added before querying the SYS.SYSMIRRORSERVER table.
691739 The detailed Relay Server status page, via the rs_admin.dll and rs_monitor.dll, were showing a heading and an empty list of fully available farms when there were no fully available farms. This has now been changed to not show the heading when the list is empty. The issue with partially available farms and unavailable farms has also been fixed.
691879 If an IPv6 address was used in the HOST or LINKS parameters of a connection string, on a machine that did not support IPv6, the client would have displayed the message "No IP address found for <IPv6 address>". This has been fixed. The error message will now read "No valid host names or addresses given". If the LOG= parameter is also used, the message "Ignoring IPv6 address <IPv6 address>" is written to the log for each IPv6 address found.
691891 If all the consolidated tables were already mapped in a synchronization, and the New Table Mappings menu or toolbar button was used, the user would have been incorrectly prompted to update the remote schema instead of the consolidated schema. Also, unchecking the option to add a table to the remote schema when adding a table mapping, would have resulted in the new table mapping having no remote table. These problems have now been fixed.
691893 When installing an MSI file created by the Deployment wizard, the install would have partially completed and then failed, rolling back the install. This has been fixed.
691976 Aggregated download throughput, using one or more Outbound Enablers, has been improved significantly across all kinds of loads when there is bandwidth left in the link to the Relay Server.

Running multiple OEs still remains an option to further improve throughput over a single OE. In our test environment, it now takes about 12 OEs in order to become network bound. Previously, even with 64 OEs with network bounding client load (i.e. RS/OE slows down the traffic to the point that it is no longer network bound) it was not possible to max-out the link.

When the load is not sufficient to cause a network bounding situation, the Relay Server can now achieve close to 90% of the direct throughput where the clients are directly accessing the backend server.

691979 The SQL Anywhere JDBC 4 Driver (sajdbc4.jar) now contains the proper manifest information to allow it to be loaded as an OSGI bundle.
692013 If a copy node in a read-only scale out setup was converted to be a partner mirror server, the primary mirror server could not have been restarted. This has been fixed.
692127 A new database server property, 'ProcessID', has been added. This proberty returns the PID of the server process.
692216 A problem with TDS secure logins has been corrected.
692243 The [NOT|AUTO] COMPRESSED option is now supported in the OPTIONS list of the OPENSTRING clause. This is useful for reading in files created using UNLOAD with the COMPRESSED option.
692249 On Mac OS X 10.7 Lion, the Java administration tools (Sybase Central, Interactive SQL, etc) would have silently failed if Java was not installed. Previous versions of Mac OS X included a Java runtime, but on Lion it is a separately installed component.

Use the following method to initiate the Java runtime installation or confirm it is currently installed:

1.Go to Applications > Utilities > Java Preferences.

2.Open the Java Preferences.

3.If Java is not installed, you receive the following message:

揟o open 揓ava Preferences," you need a Java runtime. Would you like to install one now?�

4.Click Install and follow the prompts. The Java runtime is downloaded and installed.

692307 In blank padded and case insensitive databases using INSERT ON EXISTING UPDATE when updating a value which was logically equivalent but physically different could have failed due to constrain violations. This has been fixed. The server now does constraint checking using logical representations.
692340 Machine and OS information have now been added to the Relay Server Outbound Enabler log. As well, timezone offset information has been added to the Relay Server and the Outbound Enabler logs.
692342 Attempting to start the Relay Server Outbound Enabler with the command line option "-cs status_url" would have failed. This has been fixed and a usage text for -cs status_url, which was missing, has been added."
692346 The Relay Server Outbound Enabler would have crashed after showing the usage text due to an invalid parameter. This has been fixed.
692376 After the changes for Engineering case 666434 ("dbisqlc could report errors when using output redirection for nested READ statements"), dbisqlc did not always correctly close all files opened for READ statements. If enough files were opened for READ statements during a session, dbisqlc could have reported "too many open files". This problem has been fixed.
692504 Entity Famework queries could have returned incorrect result when using parameters. This has been fixed.
692583 In some rare cases, the server would have hung when a connection queried another

connection's LastStatement property. This has been fixed.

The work-around is to not use the -zl command line option, or to turn off the

RememberLastStatement server option.

692598 An HTTPS synchronization could have failed on 64-bit Windows with STREAM_ERROR_SECURE_HANDSHAKE, depending on what trusted certificates were provided. This failure would have been more likely to occur when using the OS's CA certificate store. Certicom has provided updated libraries which correct this problem.
692604 The server could have run out of memory after processing many HTTP requests. This has been fixed.
692617 When the dbisqlc OUTPUT_FORMAT option 'ASCII' was renamed to 'TEXT' in version 11.0.0, the ability to generate the old format that dbisqlc called 'TEXT', which was fixed-width with column headers, was lost. Now, setting the OUTPUT_FORMAT to 'COLUMNS' will generate the old TEXT format.
692867 The changes for Engineering case 677962 introduced a situation where, in rare timing dependent cases, a server could have hung when it was shutting down a database which was a high availability mirror or a copy node. This has been fixed.
692899 The changes for Engineering case 691204 introduced a problem where, in rare timing dependent cases, a high availability server or a copy node server could have crashed when shutting down, or when a DROP MIRROR SERVER statement was executed for a connected copy node.
692981 Within stored procedure code, ARGN and some other builtins, IF expressions, conjunction or disjunction of predicates, could have eagerly evaluated all of the subselects in subexpressions. For example, expression

ARGN( 1, (select 1/max(v) from t1), (select 1/min(k) from t2), (select 1/0 from dummy) )

would have evaluated all of the subselects (and returned an error) before noting that only the first of the subselects needed to be evaluated, and no error returned. This has been fixed.

NOTE: The evaluation of subselects in procedural expressions now matches the evaluation in queries. For disjunctions and conjunctions, the order of evaluation of predicates is not guaranteed.

693005 If a JDBC application was launched, and no language resource DLL or shared object was located, the application would have gone into a loop consuming virtual memory until an "out-of-memory" error occurred. This problem has been fixed.
693111 On Windows Mobile / CE, database files were not always properly flushed when necessary. The file metadata was the most likely data not to have been flushed, and assertion failure 201129 (File shorter than expected) was the most likely corruption to be seen in the event of a full power outage (eg if the CE device battery runs out). This problem has been fixed.

Also, the server's '-u' (use buffered IO) command line switch was ignored on Unix platforms that supported direct IO. This problem has also been fixed.

693135 On Mac OS X, servers or client applications that made many TCP/IP connections requiring broadcasts to other servers could have sent many more UDP broadcast packets than required. In extreme cases, this could have flooded the network with UDP packets, affected an entire subnet's performance. Connection strings such as links=tcpip (with no broadcast=) or host=hostname (with no port) use broadcasting to other servers and could have had this problem. This has been fixed.
693255 If the publisher's address for a database contained a UNC path, or if the address for a remote user contained a UNC path, the Unload and Extraction utilities would have failed to escape the string properly, resulting in an address in the new database with missing backslash characters. This has now been fixed.
693319 The sql functions set_bit() and get_bit() incorrectly accepted the value 0 for the bit-position parameter. This has been fixed. Now these functions return an error.
693325 The MobiLink replay utility (mlreplay) could have crashed when the version of the recorded protocol was incompatible with the version of the replay utility replaying it. This has now been fixed.
693344 The MobiLink server and clients now support certificates signed using SHA-2. Previously, only MD5 and SHA-1 were supported.

Also, the Certificate Viewer utility (viewcert) will now also correctly display the signature algorithm for certificates signed using SHA-2.

693418 A partner mirror server could have hung when stopping the mirrored database in rare timing dependent cases after executing an ALTER MIRROR SERVER for the arbiter server. This problem was introduced by the changes made for Engineering case 688291 and has now been fixed.
693422 The default value specified in a CREATE [ OR REPLACE ] VARIABLE statement within a procedure, function, or trigger would have been ignored.

Example:

create or replace procedure foo ()

begin

create or replace variable @v int = 123;

end;

call foo();

select @v; -- should return 123 but would have returned NULL

This has been fixed. As a workaround set the default or initial value for the variable in a separate statement after the variable has been created.

693539 The changes for Engineering case 635466 introduced a problem where, on machines under heavy load, TCP connection attempts could have failed with an incorrect error code. On certain operating systems, the connection attempt could have hung. This has been fixed.
693560 Under very rare circumstances, a server could hang if it had a large number of processors and was executing a query with a parallel hash join. This was more likely on systems with large numbers of cores (more than 8). This has been fixed.

A workaround is to disable intra-query parallelism by setting option MAX_QUERY_TASKS=1. (This only needs to be done for the statement or connection experiencing the problem, if it can be isolated.)

693569 When the 'Names' sample was loaded into Xcode 4.2, several warnings would have been reported. Even after this change, there will still be a prompt to remove the obsolete 'PREBINDING' build setting. It is recommended that this build setting be removed. The other warnings have been addressed. The most significant change is that the project format has been upgraded to Xcode 3.2-compatible format. Some other minor enhancements have also been made to the sample, such as specifying the UltraLite temp_dir. See the DataAccess class' openConnection method for more details.
693579 When using the "Export to Database" functionality of the MobiLink Monitor on a 64-bit Linux systems, a dialog with an exception like the following would have been displayed:

Error! The DBLIB library could not be loaded.

This can happen if your SQL Anywhere installation has been corrupted. You will not be able to search for database servers.

/opt/sqlanywhere12/lib32/libdblib12_r.so.1: /opt/sqlanywhere12/lib32/libdblib12_r.so.1: wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch)

Dismissing the dialog would allow the Monitor to continue, but the "Find" button would not have been available to search for SQL Anywhere database servers.

Workaround:

. /opt/sqlanywhere12/bin64/sa_config.sh

export LD_LIBRARY_PATH=/opt/sqlanywhere12/lib64:$LD_LIBRARY_PATH

/opt/sqlanywhere12/bin64/mlmon

693670 When a copy node server in a mirroring setup was not running an arbiter or partner server for another database, any connections from a server running mirroring to the copy node would have consistently dropped and reconnected for no apparent reason. This has been fixed.
693690 When the 'CustDB' sample was loaded into Xcode 4.2, several warnings would have been reported. Even after this change, there will still be a prompt to remove the obsolete 'PREBINDING' build setting. It is recommended that this build setting be removed. The other warnings have been addressed. The most significant change is that the project format has been upgraded to Xcode 3.2-compatible format. Some other minor enhancements have also been made to the sample, such as specifying the UltraLite temp_dir. See the DataAccess class' openConnection method for more details.
693819 When the server was running with the -fips command line option (Requires that only FIPS-approved algorithms should be used for strong database and communication encryption), it was still able to start simple-encrypted databases. This has been fixed, such databases will now fail to start.
693900 The SQL Anywhere Monitor database gathers monitoring data over time, and this data is reduced according to the maintenance settings. If data reduction settings allowed more data to be gathered than the default settings, when the maintenance plan did run it may not have been able to successfully prune the gathered data. This has been fixed.
693917 If a copy node in a mirroring setup became unresponsive, it was possible for its parent to hang. This has been fixed.
693928 When the StartServer method in the dbmlsync API is used to start a dbmlsync server, the dbmlsync commandline is now obfuscated making it harder for someone with access to the machine to discover the dbmlsync commandline.
693938 In very rare circumstances, the server could have become deadlocked or hung. In some cases , database mirroring would have been involved and very specific timing was required; however, the problem could have occurred in other situations and would also have required very specific timing. This problem has now been fixed.
693964 A user that did not have DBA authority was able to alter a SQL procedure that they owned into an external or external environment stored procedure. This problem has now been fixed.
693999 When using the Unload utility (dbunload), if an APPINFO connection parameter was specified for the source database (-c option), the APPINFO value was ignored and a warning message printed stating such. This bahaviour has now been changed, the APPINFO value is now passed to the source database and a warning message is printed stating that the rebuild may fail if the source database has an older file format (version 9.0 or older). Connections to the target database (-ac option) are unaffected by this change. Both the previous and new behaviour is to pass the APPINFO value to the target database.
694002 In extremely rare timing dependent cases, the server could have hung when the db_property function was called. The only known case of this occurring involved mirror servers, but this problem may have affected servers not involved in mirroring. This has now been fixed.
694022 In UltraLiteJ for Android, the API StreamHTTPParms.setExtraParameters( String ) has now been added.

The classes StreamHTTPParms/StreamHTTPSParms contain a number of methods to set MobiLink client network protocol options as properties, eg. setHost( String ). However, there were no methods to cover all possible MobiLink client network protocol options. This API can now be used to specify a semi-colon-delimted list of options that are appended to the options that are generated by the property settings for the class. The meaning of the option list for this API is as specified in the documentation of MobiLink client network protocol options.

694137 There were two problems with attempting to encrypt a table using the ALTER TABLE <table_name> ENCRYPTED statement:

1. Executing the ALTER TABLE statement incorrectly succeeded on a database that did not support encrypted tables (i.e. one that is not encrypted or fully encrypted).

2. If a database was created with version 10 to support encrypted databases, but was being executed on a version 11 or later server, the same ALTER TABLE statement would have fail with error -1047 "This database does not support encrypted tables".

These problems have now been fixed. In the first case, the ALTER statement will now

return error -1047, and in the second case, the ALTER statement will succeed.

694143 When using the CREATE ENCRYPTED TABLE DATABASE statement on a fully encrypted database, the resulting database had all table and index pages encrypted, rather than only the pages for

encrypted system tables. This has been fixed.

694165 An interactive quick setup feature has been added to help users running on an Apache web server to configure the web server for Relay Server, create a demo application, and generate a Quick Reference guide.

This quick setup is divided into two main steps:

1- Configure the Apache web server for Relay Server

Run ap-setup.sh script, which consists of the following sections:

1. Introduction

2. Validation

3. Create Backup

4. Deploy the Relay Server

5. Deploy the SimpleTestApp page and Quick Reference

6. Introduction to test setup script (part two)

2- Create and start Relay Server test services

Run rs-test-setup.sh script, which consists of the following sections:

1. Introduction

2. Create and deploy Relay Server and Outbound Enabler test services

3. Start the Apache web server and the test services

4. Launch the SimpleTestApp

5. Launch the Relay Server status page

6. Generate and launch the Quick Reference guide

7. Shut down

694466 The Compare Databases window could have reported syntactically-distinct, yet semantically-equivalent, differences between the two databases. The differences were limited to the ordering of the following:

1. Authorities for a user or group

2. Option name-value pairs for a login policy

3. Tables for a publication

4. Columns for an article

5. Option name-value pairs for a mirror server

In all of the above cases, the ordering was irrelevant; however, the tool could have reported differences because the comparison could have generated random orderings.

For example:

GRANT CONNECT,DBA,RESOURCE TO "DBA" IDENTIFIED BY ...

vs:

GRANT CONNECT,RESOURCE,DBA TO "DBA" IDENTIFIED BY ...

These have been fixed. The comparison now provides a consistent ordering as follows:

1. User and group authorities are ordered by authority name.

2. Login policy options are ordered by option name.

3. Publication tables are ordered first by user name, then by table name.

4. Article columns are ordered by column id.

5. Mirror server options are ordered by option name.

694468 Attempting to compare a tenant database with another database would have caused Sybase Central to crash. This has been fixed.
694479 Attempting to use a server or the Java-based administration tools with large amounts of memory on a Linux system with kernel versions between 3.0 and 3.3 may have resulted in improper system memory calculation. This problem could have manifest itself in many ways. The server may have reported insufficient memory, or may have reported a very low value for its cache size, even when a large amount of system memory is available, e.g.:

8192K of memory used for caching

Minimum cache size: 8192K, maximum cache size: 8192K

The Java-based administration tools may also report the following error:

Invalid maximum heap size: -Xmx0m

This has been fixed.

694480 Selecting a tenant database's Login Mappings folder in the tree would have caused an error. This has been fixed.
694489 If a connect to a cloud tenant database was made in the Interactive SQL utility, or Sybase Central, by selecting an action of "Connect to a running database in a cloud" in the "Connect" dialog, and then the connection was disconnected, opening the "Connect" dialog again would not have had the "Action" box initially set to "Connect to a running database in a cloud". This has been corrected so that now it is.
694491 If the server's main heap was extremely large and fragmented, and/or an extremely large number of SQL objects had been referenced (ie a large number of table names, column names, etc), checkpoints could have been slower than necessary by using more CPU than necessary. Even in extreme cases, the delay might have been only a few seconds and might generally go unnoticed for normal checkpoints; however, execution of a long sequence of DDL statements that performed implicit checkpoints would have been observed as extremely slow. The problem was caused by some in-memory cleanup that must be performed by the server periodically and was performed on every checkpoint; however, this cleanup doesn't need to be performed when checkpoints are executed in quick succession. Now, SQL Anywhere will perform the cleanup during checkpoint at most once every twenty minutes.
694574 The SQL Anywhere Ruby/DBI Driver(1.0.0) now supports the latest Ruby version(1.9.3-p194) and the dbi gem version(0.4.5). The DBI test suites for Ruby/DBI Driver(DBD) are verified and the following problems have been fixed.

- dbh.convert_types = false did not return the String value properly.

- incorrect value of "precision" and "scale" of the column_info for integer data type.

- incorrect value of the number for the affected rows.

Also rakefile is changed to use rdoc/task instead of rake/rdoctask(deprecated).

New Ruby gem and source are posted under:

https://rubygems.org/gems/dbd-sqlanywhere

https://github.com/sqlanywhere

694591 When the search condition in an IF expression evaluates to UNKNOWN, the IF expression should return NULL (not the "else" branch). For example, the following statement returns (NULL,NULL)

select a

, if a=1 then 1 else 0 end if as b

from openstring(value ',')

with( a int ) D

If an IF expression was used as an argument to a CASE expression where the predicate is known at open time, then the IF expression was incorrectly evaluated so that UNKNOWN was treated as FALSE, leading to the ELSE branch being returned instead of NULL. For example, the following statement incorrectly returned (NULL,0,0) instead of (NULL,NULL,NULL)

select a

, if a=1 then 1 else 0 end if as b

, case when 1=1 then b end case c

from openstring(value ',')

with( a int ) D

A similar problem could occur with an IF expression used as an argument to NULLIF.

This problem has been corrected.

694592 Evaluating particular forms of expressions in procedural code could have caused a server crash. This has been fixed.
694593 When evaluating the DATENAME() builtin function, it was possible that the server could have crashed. This potential problem has not been observed, and it is now fixed.
694594 In some cases, statements that included a DML statement in the FROM clause could have missed some checking that is normally done on statements. This has been fixed.
694605 SUP's Sybase Control Center (SCC) may have reported a false positive Relay Server Outbound Enabler (RSOE) status when the up channel or down channel failed to make direct connection to individual Relay Servers in the farm for a sustained period of time when RSOE debug logging is turned on. This was due to RSOE suppressing reporting repeated errors while SCC was scanning only the tail of the RSOE log to determine status. The RSOE has now been changed to not suppress repeated errors for this issue.
694658 If a double-precision floating-point object (SQLDOUBLE) was not aligned on an 8-byte boundary on a Windows Mobile ARM-based device, the SQL Anywhere ODBC driver would have incorrectly issued the following error message when an attempt was made to reference the object (for example, using SQLGetData()):

[Sybase][ODBC Driver]Invalid string or buffer length

On the ARM hardware platform, a double-precision value consists of two 32-bit words and, when held in memory, the two words must appear consecutively and must both be word-aligned (i.e., a multiple of 4). The ODBC driver has now been corrected to check for an alignment that is a multiple of 4, not 8.

694933 Execution of a statement could have crashed the server, or returned incorrect results, if the statement contained derived tables with INSERT, DELETE, UPDATE, MERGE query blocks, and either the updated object was a simple updatable view, or the statement was used inside stored procedures, function, triggers, views, or batch statement. This has been fixed.
695079 When connected via jConnect, the procedure used to query the primary key metadata of a table would have returned too many rows if the table had a primary key column that was also a foreign key reference to another table. This problem has now been fixed.

Note, an ALTER DATABASE UPGRADE will need to be performed on existing databases in order to get the new jConnect metadata procedures.

695082 Execution of a query with a query block with a FROM clause that was empty, or contained only the DUMMY table, could have crashed the server if the WHERE clause of this query block contained an EXISTS() predicate which could have been flattened. This has been fixed.
695084 Execution of a CREATE PROCEDURE statement with a number a parameters that exceeded the limit would not have failed. Now, execution of such a statement will fail with the error: SYNTACTIC_LIMIT 54W01 -890.

Note, the maximum number of parameters allowed is a function of the database page size. For example, for a page size of 4k, the limit is ~3620096 parameters.

695095 When executing a REORGANIZE TABLE statement, the server could have unnecessarily allocated an amount of memory that was proportional to the number of rows in the table. These allocations could have affect performance, and could have caused the cache to grow or, if the cache grew to its limit, could have caused a 'dynamic memory exhausted' failure. This problem has been fixed.
695119 The MobiLink server would not have accepted any status-check requests sent by clients who had lost the last synchronization status. When a status-check request was received, the MobiLink server would have repoprted the error:

[Sybase][ODBC Driver][SQL Anywhere]Authentication violation (ODBC State = 08001, Native error code = -98)

and then failed the request when all the following conditions were met:

1) The consolidated database was running on an OEM version of a SQL Anywhere server;

2) The consolidated database had been restarted since the MobiLink server was started; and

3) A client required a status-check because it did not get a full response in the last sync request that contained an upload.

These problem is fixed now. The immediate work around for this problem is to restart the MobiLink server.

695213 When running on Windows systems, the server would have returned the value of property('MachineName') truncated to 15 characters. This has been fixed so it will now return the full name.
695214 With UltraLiteJ for Android, a ULjException with code -735 (Invalid parameter) was thrown when using PreparedStatement.set() to set a String parameter with UTF-8 encoded length greater than or equal to 32 KB. This has been fixed. A workaround is to use PreparedStatement.getClobWriter() to get a Writer object, and use that to write the parameter value.
695216 If the server was started with a TLS/HTTPS identity file that required a password, but none was supplied, an unhelpful error message was given ("Error parsing certificate file, error code 20763"). This has been fixed; the error message is now "An identity password must

be specified".

695242 On some systems with multiple physical processor packages (ie multiple sockets) using certain Intel x86/x64 processors, including Intel Xeon E5630, the detection of processor geometry could have been incorrect. Too few packages would have been detected but the correct number of logical processors would still have been detected (with some assigned to the incorrect package). This problem was similar to, but different from, Engineer case 666639, and has now been fixed.
695258 A new connection-level property 'NumLocalTempTables' has been added that returns the number of local temporary tables in use by the connection. Note that even when a local temporary table is dropped or falls out of scope, it is still considered to be "in use" until the next commit.
695370 The MobiLink server could have crashed when using the DBRowReader or DBCommand interfaces in the MobiLink .NET-ODBC bridge, if varchar or binary columns longer than a few KB were used. This has been fixed.
695495 When connected to an older 10.x database, creating a remote server and then attempting to utilize the remote server would likely have caused an incorrectly foreign key violation error. This problem has now been fixed.
695497 Only the status page via the rs_admin.dll and rs_mionitor.dll provides full breakdown of status of all farms and servers and the amount of info can be overwhelming for large deployment like hosting environment. The status page via rs_client.dll or rs_server.dll only provides a single Relay Server wide status summary, and the user cannot pinpoint their query to a specific farm for backend server. This change introduces the following two new query parameters for all status pages.

ias-rs-farm=<backend-farm-id>

ias-rs-server=<backend-server-id>

Use of ias-rs-server requires ias-rs-farm to be specified as well. The comparison of the value of these parameters are case sensitive but the name of these parameters are case insensitive. These new parameter can be applied to the status page url via all of the 4 existing extensions and they can co-exist with the ias-rs-refresh-sec parameter.

Example status page url:

http:\\my.com\rs\admin\rs_admin.dll?ias-rs-farm=myfarm&ias-rs-server=myserver

http:\\my.com\rs\client\rs_client.dll?ias-rs-farm=myfarm&ias-rs-status-refresh-sec=20

When addressing rs_client.dll or rs_server.dll while IAS-RS-SERVER is not specified, individual server status will still be reported but the server name are hidden by label of this format: "_#<enumeration>_". In the cases of farm or server not found. The status page will still response with basic RS server information together with an error reporting what was not found. In those cases, no status information of any kind are reported but the viewer can still verify if they have a successful access to the extension of their choice.

The pin-pointed status url shares the pre-existing refresh control and it can be used as a basic service monitor in a browser.

695549 When the ias-rs-status-refresh-sec url query parameter was specified on a status page url, the Relay Server would have returned the error: HTTP 404 "Not Found". This has been fixed.
695633 Physical plan operators, such as base table sequential scans and joins, could not have be parallelized if an IN filter predicate belonged to that operator. This potentially could have caused performance degradation from earlier version where such operators could have been parallelized. This problem did not prevent the rest of the plan from being parallelized. For example, for a query with four tables and an IN predicate referencing only one of the tables, only the table referenced in the IN predicate could not have been parallelized, while the two joins joining the rest of the three tables could have been parallel joins. This has been fixed.
695762 The ALTER SERVER server CONNECTION CLOSE statement was a DDL statement that could not be executed in a read-only database. This has been fixed so that the statement is now executable in a read-only database, and no longer does an automatic commit.
695772 When creating a custom MSI install using the deployment wizard, two properties were not being set correctly: UpgradeCode and ProductVersion. This has been fixed so that they are now set correctly.
695774 Attempting to execute a grouped query with a complex ORDER BY expression could have failed with the error: "Assertion failed: 106105 Unexpected expression type ..". This would have occurred if the complex ORDER BY expression referenced a base table column from the GROUP BY clause - such as "T.X +1", where T.X is a base table column in the GROUP BY clause; and the base table column T.X was eliminated from the GROUP BY clause based on functional dependencies. This has now been corrected.
695788 In rare, timing dependent cases, the server may have failed fatal assertion 101412 - "Page number on page does not match page requested". This has now been fixed.
695832 Reversing the direction of fetches on a cursor would have incorrectly returned the previous row fetched for 慻roup-by� query plans. This has been fixed.
695909 Attempting to upgrade a version 10.x database using a version 11.0.0 or later server would likely have failed with the error: "Item 'SYSCAPABILITYNAME' already exists" error. This problem has now been fixed.
696064 A new collation '1252BIN' has been added that is based on the windows-1252 character set but has a binary sort ordering. As with the other binary collations, ordering isn't quite binary when it is used in a case-insensitive database. For case-insensitve 1252BIN collations, upper case letters A-Z sort as if they were lower case (ie, greater than the backquote '`' character).
696240 With UltraLiteJ for Android, the MobiLink file transfer APIs, similar to those for UltraLiteJ for J2SE and BlackBerry, are now supported. Specifically, the method DatabaseManager.createFileTransfer( String fileName, int streamType, String userName, String version ) is supported, as are the interfaces FileTransfer, FileTransferProgressData, and FileTransferProgressListener.
696272 With UltraLiteJ for Android, calling SyncParms.setLivenessTimeout(n) had no effect. This has been fixed. Now the liveness timeout value for the synchronization connection is set to n seconds.

Note, the default liveness timeout for synchronization and file transfer connections is 100 seconds for BlackBerry, J2SE and J2ME platforms, and 240 seconds (the default for UltraLite/MobiLink) for Android platforms.

696323 Localized server resources for the French language have now been enabled on Linux systems.
696394 Execution of a procedure with a very large argument list may have crashed the server. The crash would have occurred if statement needed to be copied (e.g. a remote server statement or a SELECT INTO statement), and a server worker thread ran out of stack. This has been fixed.
696467 In very rare circumstances, the database server could have consumed 100% of 1 CPU when shutting down, or when stopping a database. This problem has now been fixed.
696469 Executing an UNLOAD ... TO FILE or UNLOAD ... INTO CLIENT FILE statement with the APPEND ON BYTE ORDER MARK option, would have written a byte order mark even if the unload file already existed with a size greater than zero bytes. This has now been fixed.
696617 If the database option PUBLIC.Java_vm_options was set to contain only spaces, then the server would have crashed when the JAVA external environment was started. This problem has now been fixed.
696631 Attempting to create a maintenance plan, or test the email settings for a maintenance plan, would have failed when running on a French machine. This has been fixed.
696638 Using an ALTER TABLE statement to change the length of a string column (char, [long] varchar, [long] binary) that used default INLINE/PREFIX values, would also have explicitly set the INLINE/PREFIX values for that column if there was data in the table. This has been fixed.
696640 Attempting to create a maintenance plan with a single quote in its name would have failed. The plan's name is used in a generated SQL statement. If the name contained a single quote, then the generated statement would not have executed. Any single quotes in the name are now doubled-up before including it in the generated statement.
696647 A new NetworkData class has been added to the Java and .NET scripting APIs to give access to HTTP headers and client-side certificates used in a request. A NetworkData object can be obtained by calling the getNetworkData method, or getting the NetworkData property of the DBConnectionContex class in Java or .NET, respectively. Collection of the network data must be explicitly enabled by adding "collect_network_data=1" to your -x options. To collect client-side certificates, trusted_certificates=<certificate file> must be added to -x options. The client-side certificates are not yet available for MacOS, but that will be added in a future EBF.

The class documentation for the Java class follows:

/**

* Contains information about the network streams for a synchronization.

* This is useful if you wish to authenticate against some other server in

* the enterprise using the client-side certificate and HTTP headers.

*

* To enable collection of network stream data, add collect_network_data=1 to

* your -x switches. This adds additional per sync memory overhead to store

* the data. If using TLS or HTTPS with client-side certificates, add

* trusted_certificates=<certificate file> to have the server ask the client to send

* a certificate during the TLS handshake, incurring a time and network cost.

*

* You can obtain a NetworkData object by invoking the getNetworkData method

* of the DBConnectionContext class. When using HTTP or HTTPS, it will contain

* the header data for the last HTTP request received by the server before the

* authenticate scripts are invoked.

*

* @see DBConnectionContext

*

* @examples

* The following example shows how to get a NetworkData object from the

* DBConnectionContext, and prints the data it contains to the log.

*

* <pre>

* public class OrderProcessor {

* DBConnectionContext _cc;

*

* public OrderProcessor( DBConnectionContext cc ) {

* _cc = cc;

* }

*

* // The method used for the authenticate_user event.

* public void AuthUser() {

* NetworkData nd = _cc.getNetworkData();

* if( nd != null ) {

* if( nd.isHTTP() ) {

* System.out.println( "http" );

* String user_agent = nd.getHTTPHeaderValue( "user-agent" );

* System.out.println( " user-agent: " + user_agent.substring( 0, user_agent.indexOf( '/' ) ) );

* } else {

* System.out.println( "no http" );

* }

* if( nd.isTLS() ) {

* System.out.println( "tls" );

* CertPath certs = nd.getCertificateChain();

* if( certs != null ) {

* System.out.println( " client-side cert:" );

* int n = 1;

* for( Certificate c : certs.getCertificates() ) {

* System.out.println( " cert " + n++ );

* X509Certificate c509 = (X509Certificate) c;

* System.out.println( " Subject: " + c509.getSubjectX500Principal().getName() );

* System.out.println( " Issuer: " + c509.getIssuerX500Principal().getName() );

* }

* } else {

* System.out.println( " no client cert" );

* }

* } else {

* System.out.println( "no tls" );

* }

* if( nd.isEndToEndEncrypted() ) {

* System.out.println( "e2ee" );

* } else {

* System.out.println( "no e2ee" );

* }

* } else {

* System.out.println( "NULL networkdata" );

* }

* }

* }

*

* </pre>

*/

public interface NetworkData

{

/**

* Returns true if this sync is using HTTP or HTTPS, and false otherwise.

*

* @return True if this sync is using HTTP or HTTPS, and false otherwise.

*/

public boolean isHTTP();

/**

* Returns the value of the last header received by the server with the supplied

* name.

*

* @param the header name to the return the value for

*

* @return the last header value associated with the supplied header-name

*

* @see NetworkData#getHTTPHeaderValues

* @see NetworkData#getHTTPHeaders

*/

public String getHTTPHeaderValue( String name );

/**

* Returns all the header values received by the server associated

* with the supplied name.

*

* @param the header name to the return the values for

*

* @return the header values associated with the supplied header-name

*

* @see NetworkData#getHTTPHeaderValue

* @see NetworkData#getHTTPHeaders

*/

public List<String> getHTTPHeaderValues( String name );

/**

* Returns a Map that maps header names to a List of header-values.

*

* @return a Map containing all the headers received by the server.

*

* @see NetworkData#getHTTPHeaderValue

* @see NetworkData#getHTTPHeaderValues

*/

public Map<String, List<String> > getHTTPHeaders();

/**

* Returns true if this sync is using TLS, and false otherwise.

*

* @return True if this sync is using TLS, and false otherwise.

*/

public boolean isTLS();

/**

* Returns a java.security.cert.CertPath containing any certificates

* sent by the client. The certificates are all

* java.security.cert.X509Certificate objects.

*

* This function will return a non-null value only if isTLS() is true,

* the client supplies a certificate using the "identity" stream

* parameter, and the trusted_certificates option is set on the server.

* A non-null CertPath will contain the certificates in order,

* from the self-signed certificate to the peer certificate.

*

* @return A CertPath containing the X509 certificates that identify the

* client, or null if no such certificates were provided.

*/

public java.security.cert.CertPath getCertificateChain();

/**

* Returns true if this sync is end-to-end encrypted, and false otherwise.

*

* @return True if this sync is end-to-end encrypted, and false otherwise.

*/

public boolean isEndToEndEncrypted();

}

This method was added to the Java DBConnectionContext class:

/**

* Returns information about the network streams for a synchronization.

* This is useful if you wish to authenticate against some other server in

* the enterprise using the client-side certificate and HTTP headers.

*

* To enable collection of network stream data, add collect_network_data=1 to

* your -x switches. This adds additional per sync memory overhead to store

* the data.

*

* @return information about the network streams used for the request, or

* null if collection has not been enabled.

* @see NetworkData

*/

NetworkData getNetworkData();

The .NET class documentation follows:

namespace iAnywhere.MobiLink.Script

{

/// <summary>

/// Contains information about the network streams for a synchronization.

/// </summary>

/// <remarks>

/// This is useful if you wish to authenticate against some other server in

/// the enterprise using the client-side certificate and HTTP headers.

///

/// To enable collection of network stream data, add collect_network_data=1 to

/// your -x switches. This adds additional per sync memory overhead to store

/// the data. If using TLS or HTTPS with client-side certificates, add

/// trusted_certificates=<certificate file> to have the server ask the client to send

/// a certificate during the TLS handshake, incurring a time and network cost.

/// You can obtain a NetworkData object by invoking the getNetworkData method

/// of the DBConnectionContext class. When using HTTP or HTTPS, it will contain

/// the header data for the last HTTP request received by the server before the

/// authenticate scripts are invoked.

///

/// </remarks>

/// <example>

/// The following example shows how to get a NetworkData object from the

/// DBConnectionContext, and prints the data it contains to the log.

/// <code>

/// using iAnywhere.MobiLink.Script;

/// using System.Collections.Generic;

/// using System.Security.Cryptography.X509Certificates;

///

/// public class OrderProcessor {

/// DBConnectionContext _cc;

///

/// public OrderProcessor( DBConnectionContext cc ) {

/// _cc = cc;

/// }

///

/// public void AuthUser() {

/// NetworkData nd = _cc.NetworkData;

/// if( nd != null ) {

/// if( nd.IsHTTP ) {

/// PrintLn( "http" );

/// string user_agent = nd.GetHTTPHeaderValue( "user-agent" );

/// PrintLn( " user-agent: " + user_agent.Substring( 0, user_agent.IndexOf( '/' ) ) );

/// } else {

/// PrintLn( "no http" );

/// }

/// if( nd.IsTLS ) {

/// PrintLn( "tls" );

/// X509Certificate2Collection certs = nd.ClientCertificates;

/// if( certs != null ) {

/// PrintLn( " client-side cert:" );

/// int n = 1;

/// foreach( X509Certificate2 x509 in certs ) {

/// PrintLn( " cert " + n++ );

/// PrintLn( " Subject: " + x509.SubjectName.Name );

/// PrintLn( " Issuer: " + x509.IssuerName.Name );

/// }

/// } else {

/// PrintLn( " no client cert" );

/// }

/// } else {

/// PrintLn( "no tls" );

/// }

/// if( nd.IsEndToEndEncrypted ) {

/// PrintLn( "e2ee" );

/// } else {

/// PrintLn( "no e2ee" );

/// }

/// } else {

/// PrintLn( "NULL networkdata" );

/// }

/// }

/// }

/// </code>

/// </example>

public interface NetworkData

{

/// <summary>

/// Returns true if this sync is using HTTP or HTTPS, and false otherwise.

/// </summary>

/// <returns>

/// True if this sync is using HTTP or HTTPS, and false otherwise.

/// </returns>

bool IsHTTP {

get;

}

/// <summary>

/// Returns true if this sync is using TLS or HTTPS, and false otherwise.

/// </summary>

/// <returns>

/// True if this sync is using TLS or HTTPS, and false otherwise.

/// </returns>

bool IsTLS {

get;

}

/// <summary>

/// Returns the existing connection to the MobiLink consolidated database.

/// </summary>

bool IsEndToEndEncrypted {

get;

}

/// <summary>

/// Returns the value of the last header received by the server with the supplied

/// name.

/// </summary>

/// <param name="name"> the header name to the return the value for </param>

/// <return>

/// The last header value associated with the supplied header-name.

/// </return>

///

/// <seealso cref="GetHTTPHeaderValues"/>

/// <seealso cref="HTTPHeaders"/>

///

string GetHTTPHeaderValue( string name );

/// <summary>

/// Returns all the header values received by the server associated with

/// the supplied name.

/// </summary>

/// <param name="name"> the header name to the return the values for </param>

/// <return>

/// The header values associated with the supplied header-name.

/// </return>

///

/// <seealso cref="GetHTTPHeaderValue"/>

/// <seealso cref="HTTPHeaders"/>

///

IList<string> GetHTTPHeaderValues( string name );

/// <summary>

/// Returns a dictionary that maps header names to a list of header-values.

/// </summary>

/// <return>

/// A dictionary of header name-value pairs.

/// </return>

///

/// <seealso cref="GetHTTPHeaderValue"/>

/// <seealso cref="GetHTTPHeaderValues"/>

///

IDictionary<string, IList<string> > HTTPHeaders {

get;

}

/// <summary>

/// Returns an X509Certificate2Collection containing any certificates

/// sent by the client.

/// </summary>

/// <remarks>

/// This function will return a non-null value only if isTLS() is true,

/// the client supplies a certificate using the "identity" stream

/// parameter, and the trusted_certificates option is set on the server.

/// A non-null CertPath will contain the certificates in order,

/// from the self-signed certificate to the peer certificate.

/// </remarks>

/// <return>

/// An X509Certificate2Collection containing the X509 certificates that identify

/// the client, or null if no such certificates were provided.

/// </return>

X509Certificate2Collection ClientCertificates {

get;

}

}

}

The following property was added to the .NET DBConnectionContext:

/// <summary>

/// Returns information about the network streams for a synchronization.

/// </summary>

/// <remarks>

/// This is useful if you wish to authenticate against some other server in

/// the enterprise using the client-side certificate and HTTP headers.

///

/// To enable collection of network stream data, add collect_network_data=1 to

/// your -x switches. This adds additional per sync memory overhead to store

/// the data.

/// </remarks>

///

/// <returns> information about the network streams used for the request, or

/// null if collection has not been enabled.

/// </returns>

///

/// <seealso cref="NetworkData"/>

NetworkData NetworkData {

get;

}

696667 Upgrading an UltraLite database schema by executing "ALTER DATABASE SCHEMA FROM FILE", could have resulted in corrupt indexes. This has been fixed.
696753 Under rare circumstances, executing a CREATE TEMPORARY PROCEDURE statement could have crashed the server. This has now been fixed.
696816 Transaction log corruption could have occurred at the mirror or copy nodes of a high availability or read-only scale-out system if the following sequence of events took place:

1) The transaction log was renamed (and a new one started) at the end of a backup of the primary

2) The mirror or copy node caught up and applies some operations from new transaction log

3) The mirror or copy node lost connection with its partner or parent

4) The mirror or copy node reestablished connection with its partner or parent

Note that if the mirror or copy node restarted prior to reconnecting, corruption would not have occurred. If corruption did occur, an 'invalid transaction log' assertion failure on the mirror or copy node was the most likely outcome. This problem has been fixed.

Also, if a copy node (call it CN) has a parent that was not the primary (call it NP), it was possible for CN to stop applying transactions altogether. CN would have remained running as a read-only node but it would not have applied transactions until the database was manually restarted. For CN to enter this state, the following sequence of events must have occurred:

1) CN and NP become disconnected or CN just wasn't running yet

2) NP renamed the transaction log and started a new one (which happens as a result of copying actions performed at the primary)

3) CN and NP reconnect (or CN was started)

In this case, CN will now display a "Recovery complete" message in the console log.

696917 With the QAnywhere .NET client, the elapsed time to queue messages was substantially slower than that of version 9.0.2. Several performance optimizations have been made, bringing the timings closer to those for version 9.0.2.

Note that the SQL client API is no longer supported by default. If the SQL client API is needed, the QAnywhere message store must be initialized using qaagent -si with the new option -sqlapi.

697020 Parameters for the Certificate Viewer utility (viewcert) can now be put into a response data file and viewcert can be called as: viewcert @data.
697061 The sample certificates in rsaroot.crt and rsaserver.id have been regenerated using SHA1 and 2048-bit RSA keys. The original certificates used MD5 and 1024-bit keys.
697188 When starting the database server, an error is reported (by displaying the usage text) if a non-numeric parameter is passed where a numeric parameter is expected. For example:

dbeng12 -n jcs -c nonsense

However, if the argument to -c started with the a character associated with memory units (k, m, g), no usage text was displayed. For example:

dbeng12 -n jcs -c garbage

dbeng12 -n jcs -c magic

dbeng12 -n jcs -c k

This has been corrected so that the usage text is now displayed.

697189 The MobiLink replay utility (mlreplay) can unpack blobs incorrectly (i.e. using the wrong type) when determining the number of inserts, updates, and deletes in the recorded protocol file. This has been fixed.
697235 The changes for Engineering case 695216 introduced problems with certificate files (for example, supplying an ECC certificate when an RSA certificate was expected) which would have yielded the error message "An identity password must be specified", even if a password was specified. This has been fixed. In this example, the correct error message is now "An ECC certificate was supplied where an RSA certificate was expected.".
697289 When the Relay Server extension name in the URL was specified with some uppercase characters, the Relay Server extension may have crashed. The Relay Server would have recovered, but active requests involved in the crashing process would have failed. This has been fixed so that uppercase character are now acceptable.

Note: The farm name and server id in the URL remain case sensitive.

697349 The SQL Anywhere HTTP server may have crashed due to rare error condition. This has been fixed.
697439 On rare occasions a time-out of a SQL Anywhere web client procedure may have caused the server to crash. This has been fixed.
697440 The server may have hung on shutdown if an HTTP client procedure was still active. This has been fixed.
697450 The Relay Server Outbound Enabler may have crashed in a Relay Server farm environment. This has been fixed.
697464 A synchronization using end-to-end encryption could have crashed on the iPhone. This has been fixed.
697491 In Windows applications, some out-of-memory conditions that occurred in SQL Anywhere libraries would have resulted in Windows MessageBox pop-ups to diagnose the condition. After the requisite user interaction (clicking OK), the application would terminate. This was problematic for applications that were written as services where no user console was present. Usually, an out-of-memory condition is a sign of a problem in the application's logic, for example, some resource is not being freed. This behavior has been revised so that when an out-of-memory condition occurs, an entry is now logged to the System Event Log and execution will continue. It is up to the libraries and the application to handle the out-of-memory condition. An application written as a service may terminate unexpectedly when an out-of-memory condition occurs, but this is preferable to entering a suspended state where there is no indication of a problem.
697593 If a row was inserted while a REORGANIZE TABLE process was running, and the inserted row's primary key was greater than the highest primary key at the time the REORGANIZE started, the server could have possibly entered into an infinite loop and consumed 100% of 1 CPU without terminating. The operation could, however, be cancelled. This problem has been fixed.
697611 The Relay Server Outbound Enabler (RSOE) did not log command line arguments on startup and before detecting the availability of a backend server. The command line arguments were only printed after detecting that a backend server was up and while connecting to the Relay Server. This has now been fixed so that command line arguments are printed immediately on startup so that RSOE configurations are visible as early as possible.
697637 The MobiLink Replay utility (mlreplay) could have crashed when using the replay API to customize uploads of tables that had no nullable, signed number, or bit columns. This has been fixed.
697638 With UltraLiteJ for Android, it was not possible to retrieve the SQLCODE of the last executed SQL statement if it was a warning (ie. SQLCODE was greater than 0). This has been fixed. The method Connection.getLastWarning() has been added for Android only. This method returns a SQLInfo object, from which can be obtained the SQL code and a localized message. If the last SQL statement resulted in a SQL error code, a ULjException is thrown, as before.
697900 Attempting to execute a long SQL statement to create a stored procedure could have failed with a "parse stack overflow" error (SQLCODE -131). This problem may also have occurred when parsing a long and nested SQL statement. This has been fixed.
697936 A statement could have failed with an error (Assertion 106104 failed) if the statement contained an aggregate function AGG( agg_arg ) where:

- agg_arg was a complex expression

- a complex sub-expression of the agg_arg was used in the WHERE (or in an ON condition)

- the optimizer selected an execution strategy involving "distinct-by-rowids" (for example, there was an EXISTS subquery)

This problem has been fixed.

For example, the following query could have caused the SELECT statement to fail with the assertion failure error:

create table T_DBR_1( x int );

create table T_DBR_2( x int );

insert into T_DBR_1 select row_num from sa_rowgenerator(1,10);

insert into T_DBR_2 select row_num from sa_rowgenerator(1,100);

commit;

select count(*), sum( complex_expr1+2 )

from (

select case R1.x*10 when 11 then R1.x end case complex_expr1

, 99+R2.x as complex_expr2

from T_DBR_1 R1 left join T_DBR_2 R2 on R1.x = R2.x

where exists ( select * from dbo.rowgenerator R3 where R3.row_num+1 = R1.x )

) D

where complex_expr1 <> 12

or complex_expr2+2 <> 11

698048 When using Xcode 4.2 and running armv6 code (i.e., after enabling armv6 and running on 'iPhone 3G' or earlier), UltraLite may have corrupted double (floating point) values stored in the database. This has been fixed. As this seemed to be a compiler issue, it may be better to use an older version of Xcode when targeting these older armv6 devices. Note that switching between Clang and LLVM-GCC will not resolve this issue.

A workaround has been implemented to avoid the problem with double values, but the above note still applies.

698075 The MobiLink server could have crashed while shutting down when it was using an integrated Outbound Enabler. This has been fixed.
698076 The Relay Server Outbound Enabler could have reported a SYS64 error ("SYS64: The specified network name is no longer available...") with no ill effect to the client. This would have happened when a backend server timed out the connection, and would often have happened when the HTTP response had been completely received by the Outbound Enabler and the connection remained idle for an extended period of time. Receiving a SYS64 error in that case was false alarm. This has been fixed so that this error is now suppressed and verbosity 4 debug logging will now log this situation as "DoneReceive EOF SYS64..." instead of "DoneReceive EOF", which is for the normal disconnect situation. For the cases where the SYS64 happen prematurely before the entire HTTP response has been received by the Outbound Enabler, the Relay Server will detect the problem and report and error.
698082 An attempt by the Relay Server to notify the Outbound Enabler to disconnect the associated backend connection may have been mis-routed and discarded. This would have caused a delay in closing the backend connection, together with a SYS64 error, when the backend server eventually timed out the connection. The conditions for this problem were:

- TCP load balancer without stickiness was used in front of a Relay Server farm of size greater than 1; and

- an application session had more than one HTTP request; and

- the session had crossed over to a Relay Sever different from the one where the session started and an I/O error or timeout occurred with the client connection.

The problem was that the Outbound Enabler was misinforming the Relay Server for a change in upward packet destination, when a session was migrated from one Relay Server to another, on a clear request-response boundary. This has now been fixed so that the Outbound Enable is stopped from misinforming the Relay Server.

698198 The -x option of the MobiLink Server now supports the trusted_certificates option when encryption is in effect. The option is comparable to and symmetric with the client-side option of the same name (see Engineering case 696697).

The usage is:

mlsrvXX ... -x tls(...;trusted_certificates=certificate_file) ...

mlsrvXX ... -x https(...;trusted_certificates=certificate_file) ...

Used in the simplest way, the trusted_certificates option provides validation of clients, but without other capabilities like certificate revocation lists. To implement a certificate revocation list and otherwise integrate with your enterprise certificate infrastructure, you'll need to make use of the NetworkData.ClientCertificates API, described in the email forwarded below.

The simplest example to illustrate this is:

client --> ML server --> Enterprise certificate infrastructure

Use the trusted_certificates option to ensure the client certificate is valid, then use the NetworkData.ClientCertificates API to further authenticate the certificate in the authenticate_user script (written in Java or .NET).

698201 The Server could have been unresponsive for a long period of time when a backup was starting. This has now been corrected.
698218 An attempt by the Relay Server to notify the Outbound Enabler to disconnect the associated backend connection may have been mis-routed and discarded. This would have caused a delay in closing the backend connection, together with a SYS64 error, when the backend server eventually timed out the connection. The conditions for this problem were:

- TCP load balancer without stickiness was used in front of a Relay Server farm of size greater than 1; and

- an application session had more than one HTTP request; and

- the session had crossed over to a Relay Sever different from the one where the session started and an I/O error or timeout occurred with the client connection.

The problem was that the Outbound Enabler was misinforming the Relay Server for a change in upward packet destination, when a session was migrated from one Relay Server to another, on a clear request-response boundary. This has now been fixed so that the Relay Server is protected from being misinformed by Outbound Enablers older than 12.0.1.3574.

698219 In very rare timing dependent cases, a copy node could have failed to connect to its alternate parent or the root if its parent was unavailable. Additionally, in order for this to have occurred, the copy node's connection to its parent would have had to disconnect for some reason shortly after it connected. This has been fixed.
698236 The drive_model property could have returned a random string of characters if the OS did not make the corresponding property available. This has now been corrected.
698386 The Server could have hung in very rare cases if a connection made a Remote Data Access request that required a remote connection to be established. This problem has now been fixed.
698526 Windows 7 and Windows 2008R2 support systems with more than 64 logical processors; however, it does so by partitioning them into "groups" with no more than 64 processors in each group. Unless an application takes additional measures to take advantage of multiple processor groups, the application will execute only within one processor group and be unaware that other processors are available. Previously, SQL Anywhere would only recognize and utilize the processors in the group to which it was assigned by the OS at startup, but now SQL Anywhere recognizes and supports all processors on Windows 7, Windows 2008R2.

For more information on Windows processor groups, see the following:

http://blogs.msdn.com/b/saponsqlserver/archive/2010/09/28/windows-2008-r2-groups-processors-sockets-cores-threads-numa-nodes-what-is-all-this.aspx

http://msdn.microsoft.com/en-us/library/windows/desktop/dd405503

In addition to supporting more than 64 processors on Windows, SQL Anywhere now uses the hardware topology as reported by Windows for license enforcement on all supported versions of Windows except Windows 2003 and Windows XP 64-bit edition where the operating system is known to misrepresent the actual topology. Previously, SQL Anywhere relied solely on its own hardware detection on x86 and x64 Windows platforms. By relying on the topology reported by Windows, SQL Anywhere will have a more consistent view of the topology when running in a VM.

These processor topology changes include fixes on other platforms too. On Solaris prior to this change, if the standalone engine was run within a processor set it would bind itself to a single random processor in the set. Now if the standalone engine is run within a processor set, it binds to the lowest numbered processor in the set. Outside of a processor set, the behaviour has not changed: we bind to the lowest processor that is not bound to any set.

Also on Solaris, the database server considered processors that were online but non-interruptible as offline. SQL Anywhere would not bind to such a processor. This problem has also been fixed.

SQL Anywhere now properly avoids processors that are offline when the server starts; however, no attempt is made to adapt to processors that are taken offline or brought online during runtime.

699007 Calls to ODBC functions SQLGetDiagRec(with HandleType == SQL_HANDLE_ENV) or SQLGetDiagField(with HandleType == SQL_HANDLE_ENV and DiagIdentifier==SQL_DIAG_MESSAGE_TEXT) in the SQL Anywhere ODBC driver may caused a crash under certain circumstances. This problem has been fixed.
699022 If a server was started with the "remote_data_access" secure feature turned on (see -sf command line option), and an application attempted to use the secure feature and subsequently received an error indicating that Remote Data Access was disabled, then any subsequent remote calls would incorrectly have returned a 'cursor already open' error. This problem has now been fixed.
699214 In a mirroring setup of servers running on multiple host machines, it was possible for the system procdure sa_mirror_server_status() to return incorrect information if the hosts did not have the exact same time. In particular, it was possible for it to appear that some servers were not receiving log pages, even if they were up to date. This has been fixed. The "last_updated" column in the table will always report the time relative to the server named in the "server_name" column.
699241 Using the SQL Anywhere ADO .NET Data Provider, the continuous closing and reopening of a pooled connection was slower than it was under version 9.0.2. This problem has been corrected.

SAConnection conn = new SAConnection( connectString );

conn.Open();

.

.

.

conn.Close();

699351 When connecting to an SQL Anywhere database from Sybase Central or the Interactive SQL utility, a standard connection dialog is displayed to gather connection options. On the Identification page of that dialog there is a drop-down named "Authentication". When "Windows Integrated Login" was chosen in the drop-down the choice was ignored and the value "Database" was used instead. This has been fixed.
699355 Finer selectable items in Deployment wizard to get smaller MSI files
699387 If a server, or one of the SA client utilities, attempted to launch a secondary application (like an external environment), then the secondary application may have failed to start properly when the command line for the secondary application contained characters that were not 7-bit ASCII. This problem has now been fixed.
699393 With UltraLiteJ for Android, closing a PreparedStatement after its Connection object had been released caused the application to crash. The same was true for a ResultSet object. This has been fixed so that a ULjException with error code -908 "Invalid operation on a closed object" is now thrown.
699537 If several Open Client or jConnect applications attempted to connect to a server using the extended encrypted password protocol, then there was a very small chance the server would crash if all of the extended encrypted password connection requests were made at the same time. This problem has now been fixed.
699667 If an application made a Java external environment call that returned a SQLException on a JDBC statement, then the next call to the Java external environment would have returned with a NullPointerException if there are no other Java calls in between. This has been fixed.
699687 The UltraLite runtime now supports RSA TLS and HTTPS on Pocket PC 2003 devices. There is no support for ECC or FIPS.
699703 In a mirroring setup, it may have been possible for the sa_mirror_server_status() system procedure to report that the primary server had a higher log offset than the mirror or copy nodes, and it could have remained this way until the server received further transactions. This has been fixed. The log offset reported for the primary server will now report the offset that has been pushed to any mirrored servers.

Note that this was not a problem with the mechanism that pushes log pages to copy nodes and mirror, but with the way the offset was reported.

699839 A hashing algorithm used to speed the access to rows with indexes involving timestamp with time zone columns, in rare conditions, could have performed slightly worse than optimal. This has been fixed.
699971 The index hash for Timestamp with Time Zone columns was not properly incorporating the offset component. This could have lead to an incorrect ordering of timestamp values that had

varying timezone offsets. This has been fixed.

699988 When Sybase Central attempted to execute SQL that used a secured feature, an error would have been reported immediately. Now, a prompt is displayed, allowing the server's secure feature key to be specified, after which the original SQL statement is re-executed.

Note that the server must be started with a secure feature key (-sk) to make use of this feature.

700008 Under rare circumstances, the server may have failed assertion 101413 - "Unable to allocate a multi-page block of memory". This was more likely when many (~5 or more) databases were running within a server, and when the server was running with a small cache (less than 100M per database); and was more likely to be seen when starting a new database after the server has been running for some time. This has been fixed. A workaround is to start the server with several extra databases, and then stop them as soon as the server is started.
700113 Given a nullable column, or set of columns, in a nullable index with both zero (or empty string/binary, etc) and null values inserted, the following may have occurred:

- searching for the zero or null value (or empty string/binary, etc) would have resulted in an incorrect result set

-) rows with zero or null values may have been intermixed order-wise when scanning the index (i.e. select * from mytable order by col_in_bad_index)

This has been fixed.

Note, primary keys, unique keys (constraints) and not null indexes are not affected by this problem.

700123 If two connections made external calls that in turn attempted to access rows that the other connection already had a lock on, then the server would incorrectly hang the two connections rather than returning a deadlock error to one of the connections involved. This problem has now been fixed.
700132 The Certificate Creation utility (createcert) would have fail to create a certificate with the error "Error occurred encoding object" when run on a leap day, and the expiry for the certificate was not a leap year. This has corrected.
700276 The MobiLink server now supports the Oracle XMLTYPE data type. This Oracle data type can be mapped to the SA/UL XML data type. However, the Oracle database server does actually validate the data before storing it into a XMLTYPE column and SA/UL does not. Therefore, users must make sure the upload XML data are valid XML documents.

Small XML documents with a length less than or equal to 32 KB can be uploaded into and downloaded from an Oracle database with Oracle PL/SQL statements. However, when the length of XML documents is great than 32 KB, the upload XML documents may need to be uploaded into a (global) temporary table by the upload_insert and upload_update scripts and the upload data can then be converted and stored into the actual sync table in the end_upload_rows or end_upload script.

The following section gives sample upload and download scripts to upload and download XMLTYPE objects between an Oracle consolidated and SQLAnywhere remote databases. Here we assume our upload table is defined as

create table test (pk int not null primary key, c1 XMLTYPE)

in the Oracle consolidated database and

create table test (pk int not null primary key, c1 XML)

in the SA remote database. Then the upload and download scripts for the test table could be defined below:

1) All XML documents are less than or equal to 32KB long:

The upload and download scripts can be written as

a) upload_insert:

declare v_pk integer; v_c1 clob; x_c1 xmltype;

begin

v_pk := {ml r.pk};

v_c1 := {ml r.c1};

x_c1 := XMLTYPE.createXML( v_c1 );

insert into test values( v_pk, x_c1 );

end;

b) download_cursor:

select pk, XMLSERIALIZE( content c1 ) from test

This upload_insert script works well, when the XML data length is less than or equal to 32 KB. However, if the XML data length is greater than 32 KB, the Oracle server could complain with the following error:

ORA-01460: unimplemented or unreasonable conversion requested

when the MobiLink server was trying to execute the upload_insert script with the upload data.

2) Some of the XML documents are greater than 32KB long:

If there are any XML documents greater than 32 KB long, we are not able to use Oracle PL/SQL to upload data into the Oracle XMLTYPE columns. To work-around this problem, the upload XML data needs to be uploaded in a global temporary table:

a) upload_insert:

The upload_insert script will upload the XML documents into a global temporary table in the Oracle consolidated database and the global temporary table is defined as

create global temporary table tmp_test (pk int, c1 CLOB)

then the upload_insert script can written as

insert into tmp_test values( {ml r.pk}, {ml r.c1} )

Please note, the c1 column in the temporary table must have the CLOB data type.

b) end_uoload_rows:

The end_upload_rows script first retrieves the XML documents from the global temporary table, converts it to XML documents, and then stores the XML data into the test table. Here is the end_upload_rows script:

insert into test (pk, c1) (select pk, XMLTYPE.createXML(c1) from tmp_test

700287 A security issue with Remote Data Access has been fixed.
700309 If there was an apostrophe in a user name or table name, a verbose unload (dbunload -v or an unload in Sybase Central) would have failed, and would have reported a syntax error similar to the following:

***** SQL error: Syntax error near 'xxx' on line 1

Also, during reload, extra apostrophes would be displayed in progress messages containing table, index, view, procedure or trigger names. This problem has been fixed.

700315 The MobiLink Replay utility could have crashed if the GetNumRecordedInserts, GetNumRecordedUpdates, or GetNumRecordedDeletes callbacks were called from the replay DLL with values not explicitly given by MLReplay when calling the GetUploadTransaction callback. This has been fixed.
700426 If files were opened concurrently by two threads of the same process on Windows Mobile / Windows CE devices, the two threads could have been assigned the same POSIX file handle number and IO could then have been directed to the wrong file. This problem, given the nature of Windows Mobile devices, was very unlikely to occur and has been fixed.

Also, a structure used to query the OS version on Windows Mobile / Windows CE devices was not initialized correctly; however, it is not believed ever to have caused a problem. This problem has also been fixed.

700458 Support has now been added to the SQL Anywhere ADO.NET provider for latest release of Microsoft Entity Framework - EF 4.3. The major new feature of EF 4.3 is migration tools which enable the user to keep track of the data model changes.
700715 Downloads of small requests while the Relay Server Outbound Enabler down channel was under low load situation, may have suffered 200ms TCP Nagling latency. This has been fixed by inserting a pad of Ethernet MTU size in order to defeat the Nagling latency at the end of foreseeable download data.
700759 Some wording in the Relay Server quick setup script has been corrected. The software is not affected by this change.
700788 Affinity cookies assigned by the Relay Server could have become invalid to the Outbound Enabler over time when the Relay Server was being removed from a Relay Server farm. An Outbound Enabler receiving such a request will trigger an unnecessary internal restart that drops other innocent requests. This has been fixed so that the Outbound Enabler will report an OE_SESSION_ERROR to the Relay Server without affecting other ongoing requests.
700803 Client software is expected to have full control of Relay Server affinity using standard HTTP cookie reflection, or proprietary Relay Server affinity header reflection. However, as the Relay Serve usage evolved to cover many kinds of clients, some client software behaves unreasonable in the sense that it was stubbornly reusing the same invalid cookie repeatedly after an error. The expected behavior was either the client software would have discarded the cookie after error, or add an IAS-RS-AF=new URL query parameter to restart a new application session with a new cookie. The Relay Server cookie can become invalid for various reasons including application timeout, Relay Server farm member removal, communication error between OE and the backend server, and others. If the client software doesn't conform to the expectation, the application could have been stuck with an invalid cookie until it was deleted manually. This fix is to have the Relay Server explicitly instruct the client software to expire the cookie immediately when the Relay Server knows the affinity has became invalid. Again, not all stubborn client software can benefit from this, but those that support expires cookie attribute (pre-RFC Netscape draft spec for cookies) should.
700882 If a high availability mirror, or read-only scale-out copy node, needed to restart its database, it could in rare timing dependent cases caused the server to crash. This has been fixed.
700903 In a read-only scale-out setup, it was possible for adding a copy node using "CREATE/ALTER MIRROR SERVER ... USING AUTO PARENT" to fail with the error "Cannot assign automatic mirror server parent", if there were no connected servers that had available spaces in its fan-out. For example, if the root server had ten children and had a fan out of ten, all of which were disconnected, adding another server would fail. This has been fixed. Under these circumstances, the new server will be added as a child of the auto add server.

Auto-parenting uses sa_mirror_server_status() to determine what servers are connected. In a read-only scale-out setup, it was possible for sa_mirror_server_status() to report a copy node as connected when it was actually shut down. This would have happened when the copy node and its parent were shut down in quick succession. This has been fixed. Now, the copy node will appear as connected for up to two minutes, at which point the server will be marked as disconnected.

700928 The Entity Framework migration tools could have thrown an exception if the schema name of an entity set was not specified.

For example:

public class BlogContext : DbContext

{

public DbSet<Blog> Blogs { get; set; }

}

[Table( "Blogs" )] // [Table( "Blogs", Schema = "GROUPO" )]

public class Blog

{

public int BlogId { get; set; }

public string Name { get; set; }

public string Url { get; set; }

public int Rating { get; set; }

}

This has now been fixed.

700997 On Windows systems, the error "R6025 - pure virtual function call" would have caused a dialog box to be opened, even if the executable should not interact with the desktop. This has been fixed so that no dialog box is now opened.
701061 Uploading small requests while the Relay Server Outbound Enabler up-channel was under a low load situation may suffered 200ms TCP Nagling latency. This has been fixed by inserting a pad of Ethernet MTU size in order to defeat the Nagling latency at the end of foreseeable upload data. This change introduced a new up_pad_size property in the [option] section of the Relay Server config file. The default value is 1460 which is suitable for Ethernet. This change can be turned off by setting up_pad_size to 0. Online pad size adjustment is supported but it will take effect only after the Outbound Enabler reconnects the up-channel.
701151 Read-only connections on an OEM server were not able to drop local temporary database objects. This has been fixed.
701170 In rare timing dependant cases, dropping the mirror server definition for an arbiter in a mirroring configuration could have caused the primary server to hang. This has been fixed.
701212 The Relay Server responded with an HTTP 401 status code when the client accessing the backend farm didn't fulfill the client security requirement specified by the client_security property in the backend_farm section in the Relay Server configuration. The message had a typo that has now been corrected to:

"The backend farm rejected this client security"

701327 If an application attempted to fetch data from an ADS proxy table using a 64-bit server, then there was a very good chance the server would have crashed. This problem has now been fixed.
701339 The server may have crashed when using a cached query plan if the plan useed a row column variable in a Distinct Hash strategy and the row column variable was of type string or numeric. Row column variables are column names that are used with a REFERENCING table alias name from the CREATE TRIGGER. This has been fixed.
701342 The following remote types were not supported by the MobiLink Java and .NET direct row APIs:

NCHAR

NVARCHAR

LONG NVARCHAR

VARBIT

LONG VARBIT

XML

This has been fixed.

701343 Unnecessary cast exceptions could have occurred when using the MobiLink .NET direct row API with SMALLINT and TINYINT columns. This has been fixed.
701344 A security issue with the MobiLink direct row API has been corrected.
701347 The varchar(max) and varbinary(max) types in Microsoft SQL Server did not work when using the MobiLink .NET-ODBC bridge. This has been fixed.
701348 Exceptions were not thrown when strings containing invalid timestamps were assigned to TIMESTAMP WITH TIME ZONE columns in the MobiLink Java and .NET direct row APIs. This has been fixed.
701349 It was possible to call PreparedStatement.setTime for columns that were not times or dates in the MobiLink direct row API. This has been corrected.
701364 Queries with derived tables or views using UNION, EXCEPT, INTERSECT orRECURSIVE constructs may have returned incorrect results. For this problem to have occurred at least one child of the derived table or view would have had a LIMIT, window function, or DISTINCT clause, and there was a predicate referring only to the columns of the derived table or the view in the main query block. This has been fixed.
701382 The Relay Server and the Outbound Enabled log files contained an error in the UTC time zone offset log line. This has been fixed. The correct log line now reads: "Time zone offset from UTC in minutes:"
701470 The Certificate Viewer utility (viewcert) now accepts the -q parameter, which will suppress all output from the command, including error messages.
701477 A SQL Anywhere server may have hang on shutdown with 100 percent CPU usage if HTTP requests were concurrently in process. This has been fixed.
701635 Creation of a SAMonitor resource to monitor Relay Server farms via HTTPS may have failed, while HTTP worked. This would have happened when the Relay Server address specified in the Relay Server configuration file was missing the domain suffix. Even when the load balancer address given to the SAMonitor was a FQDN, the resource creation may have failed. This has now been fixed by making the monitor attempt its best effort to apply the domain suffix of the load balancer to the Relay Server address when it is missing while HTTPS is in use. If any of the Relay Server addresses, or the load balancer address, are specified in IPv6 or IPv4 numeric notation, then this fix will not kicks in and authentication will continue to fail. Use of FQDNs is required by the SAMonitor when HTTPS is used.
701648 Procedure profiling results would have shown an invalid execution time if the total execution time of the request exceeded 4,294,967,295 microseconds. This has been fixed.
701651 Relay Server Outbound Enabler up channel packet header logging is enabled by setting the verbosity level (-v) to 3 or higher. The logs are useful for the analysis of certain issues. Two of the packet headers were carrying incomplete information:

<UpChannel-0000> 499 RS_CLI_SESSION_BEGIN(snum=0000 sfp=995770b6 ridx=0)

<UpChannel-0000> 557 RS_CLI_REQUEST_BEGIN(oidx=0 snum=0000 sfp=995770b6 ridx=0 sidx=0)

This has been fixed to complete the logging like the following:

<UpChannel-0000> 499 RS_CLI_SESSION_BEGIN(snum=0000 sfp=7329322a ridx=0 appt=2 per=1)

<UpChannel-0000> 557 RS_CLI_REQUEST_BEGIN(oidx=0 snum=0000 sfp=7329322a ridx=0 sidx=0 appt=2 per=0)

701652 When shutting down a database server on a Windows machine with a SQL Anywhere Volume Shadow Service (VSS) writer service active, the database server could have logged the message "Registered with the SQL Anywhere Volume Shadow Copy Service writer." many times to the console log. This problem has been fixed.
701654 With UltraLiteJ for Android, the validateDatabase method has been added to the Connection class:

public void validateDatabase(

int flags,

ValidateDatabaseProgressListener listener,

String tableName )

The interfaces ValidateDatabaseProgressData, and ValidateDatabaseProgressListener have also been added.

701661 Using the Certificate Creation utility with the -c option ("Read the signer's certificate from the specified file") could have caused it to crash. This has been fixed.

A workaround is to use the interactive prompt instead.

701776 Support has now been added for Visual Studio 2012. The utility SetupVSPackage will now create the proper registry keys for Visual Studio 2012.
701779 For the UltraLite C++ API, methods using wide characters (UTF-16/UCS-2) are generally only supported for Win32. This change adds wide character support for the character data streaming methods, on iOS. The affected methods are:

ULPreparedStatement::AppendParameterStringChunk

ULResultSet::GetStringChunk

ULResultSet::AppendStringChunk

701922 Use of some of the HTTP samples verbatim in a production system could have caused exposure to Cross Site Scripting (XSS) issues. This has been fixed.

Note that it is highly recommended that application developers and DBAs always review their web application code for possible security vulnerabilities before they are put into production. The Open Web Application Security Project (https://www.owasp.org) contains more information on how to secure your web application.

702006 Indexes in UltraLiteJ now support index hashing using the "WITH MAX HASH SIZE x " SQL clause. Index hashing improves inserts, updates, deletes and searches when the columns being indexed have a good distribution of values (for example strings that do not have a common prefix) at the cost of bigger index structures. Hashed indexes locate rows first using the hash, then direct row comparison to differentiate rows with the same hash value. If the hash size is sufficiently big, the hash will uniquely identify a row without needing to read and compare the row. However, if the hash size is too big and the page size small, the index may need too many database pages whose maintenance costs offset the benefits of hashing. Columns of type REAL, DOUBLE, GEOMETRY, LONG BINARY and LONG VARCHAR are not hashed (LONG columns cannot be indexed in UltraLiteJ). If the SQL statement creating an index does not specify a hash size, the value of the Connection.OPTION_MAX_HASH_SIZE option is used as the default.

In addition to hashing support, performance improvements were made to indexing to reduce the number of pages written when committing inserts, updates and deletes.

702086 If a new IP address was added to a machine running a SQL Anywhere server, the server may have failed to recognize the new IP address. This would only have occurred when the server was running on a portable device (eg. laptop), or if the -xm switch was specified. This has been fixed.
702184 If an application had a Java stored procedure defined with SQL SECURITY INVOKER, and the application subsequently called the stored procedure with two different effective userids from the same database connection, then the server would have incorrectly given a "table ExtEnvMethodArgs not found" error. This problem has now been fixed.
702214 If an application called an external environment procedure that was defined with SQL SECURITY INVOKER and then subsequently made a stored procedure call using the server side connection, then there was a chance the call would have incorrectly fail with a permission denied error. This problem has now been fixed.
702274 A potential security problem with the server has been corrected.
702296 When generating a reload.sql script, the server did not double-up single quotes and backslash characters in constant strings for dbspace file names in the CREATE DBSPACE statement, directory server paths in the CREATE SERVER statement, or AT location clauses of the CREATE EXISTING TABLE statement. As a result running the reload script would have failed and the generated objects would not have worked. This has been fixed.
702423 While a copy node server was shutting down or restarting a mirrored database, the database may have made connections to the copy node's parent. This has been fixed. The copy node will no longer make connections to its parent while the database is shutting down or restarting.
702506 The LOCATE function may have returned an incorrect result if the search string contained multi-byte characters. This has now been fixed.
702528 The SQL Anywhere Monitor for Relay Server was the only means to observe the breakdown of time costs in different phases of a request, response processing. There were two issues with this:

1. The numbers rendered through the browser were aggregated and averaged across all requests going to the same backend server. So individual request tracing was not viewable.

2. The Monitor was not included in any rebundling of the Relay Server.

The verbose logging (-v 4) of the Relay Server Outbound Enabler (RSOE) of the DoneReceive event has now been enhanced to include a Since Last Sent (sls) number. The sls measures number of millisecond elapsed since the completion time of the last send that occurred on the same socket that had just completed a receive operation. This can be used as a measure of the backend server processing time, which includes the communication cost of sending the last packet (as the OS can declare completion before the packet is actually flushed) between the RSOE and the backend server (which normally should be minimal when they are local to each other). Here is a sample log line:

<Backend-0000> DoneReceive: sidx=0 ridx=0 socket=01227b58 sfp=f6c1ee75 len=65514 usage=8192 (12%) sls=0

If the backend server also reports a value for the overall request-response processing time, the associated sls value can be used to verify the qualify of the measurement without need to insert third party sniffing tools, which may, in some cases, change the network topology and invalidate the study.

702731 In rare, timing dependent cases when using High Availability or Read-Only Scale Out, it may have been possible for the server to crash, hang, behave in unexpected ways, or have an incorrect state. This has been fixed.
702732 Starting the engine with many databases and not stopping each of them after validating, could cause memory exhausted error.
702733 This change extends the fix for Engineering case 693560. In this case, the parallel hash filter could deadlock if a runtime error occurred while it was fetching. This has now been fixed.
702738 The server could have become deadlocked when updating blobs in a table with articles or triggers. This has now been corrected.
702761 Synchronizations would have failed if the length of the parameter string for a sync profile was larger than 64K. The error reported could have varied, but SQLE_SYNC_INFO_INVALID would have been most likely. This error could have occurred with the .NET API if the application set sync authentication parameters whose total length approached or exceeded 64K. This problem has now been corrected.
702774 When connected to a database which was mirrored, the server name displayed in the Interactive SQL title bar and the server name printed by the DESCRIBE CONNECTION statement, was inadvertently the alternate server name, rather than the main server name. The alternate server names tend to be long and end in a long sequence of letters and numbers. This has been corrected so that the main server name is now always used.
702818 If a client with an old cookie accessed a blacked out backend service, the subsequent requests when the backend server comes back up will suffer load latency under low load situations. This has been fixed.
702931 In very race cases, the server would have consumed 100% CPU usage while attempting to stop a database. For this to have occurred, the database being stopped needed to make heavy use of scheduled events. This has been fixed.
703079 If there were connections on the mirror database, or a copy node for a mirror database, that were modifying a temporary table at the same time as the transaction log was renamed, then the copy node or mirror could have failed in timing depending cases. In particular, the mirror server or copy node could have crashed or the transaction log on the mirror server or copy node could have been corrupted. This has been fixed.
703083 If the number of databases on the command line was near to or greater than the server concurrency setting (-gn), then the server could have crashed, or reported any of various assertion failures, during startup. The Personal Server was particularly susceptible since its default concurrency is only 20. This problem has been fixed.
703100 When querying the TcpipAddresses, HttpAddresses, or HttpsAddresses properties from a server running on a Unix platform, any IPv6 addresses may have included a zone indicator (eg. the "%2" in "(fd77:55d:...:6a1f%2):2638". This was not useful outside the server's machine and should not have been included in the value of this property. This has been fixed.
703102 When comparing two databases, running the generated script in Interactive SQL would have caused syntax errors to be reported if the script contained Transact-SQL statements. This has been fixed.
703104 When translating a transaction log with certain types of corruption, the Log Translation utility could have terminated silently, without reporting a problem. To the user, it would have appeared as if the translation completed successfully. This problem has been fixed.
703225 If a database had been created with a server from a version prior to 11.0.0, and it contained a proxy table with an index, then unloads of this database using a server from version 11.0.0 or later' would have generated an incorrect CREATE INDEX statement containing the IN "SYSTEM" clause. This has been fixed.
703229 Performance improvements have been made when adding rows sequentially into an index. For example, a table whose primary key consists of an autoincrement column, or an initial download with a download cursor that sorts the download by primary key. When doing single inserts, UltraLiteJ now does less page reads and writes. When doing a block of inserts, the page read and writes may remain the same but CPU work has been greatly reduced.
703234 If a parallel backup with backup option WITH CHECKPOINT LOG RECOVER had finished its write pass but had disk I/O errors during its completion pass, then, in exceptionally rare circumstances, the backup may have incorrectly been marked as valid and no SQL error was returned. Also, if a parallel backup of the database file was cancelled after its read pass then the server may have crashed. Both problems have now been fixed.
703288 When using a "managed resource only" deployment (such as Microsoft's ClickOnce) for .NET applications, delivering SQL Anywhere native dlls through this mechanism may have been a problem. A demonstration project DeploymentUtility (with source code) has been added to help with this. It adds SQL Anywhere native dlls as embedded resources, and copies them to a local drive when a .NET application is deployed.
703450 Columns containing TIME values were not properly hashed in indexes. Although values were correctly ordered, they were not as efficient. This has been fixed.
703452 If a SQL Anywhere client application exited abnormally, System V semaphores that were allocated by the SA libraries were not cleaned up. This problem affected all Unix platforms except Solaris, and has now been fixed.
703642 If a database had a user defined type based on nchar, nvarchar or long nvarchar, then attempting to fetch a value defined with that user defined type would have incorrectly returned a binary value when the connection was via jConnect or Open Client. This problem has now been fixed.

Note that fetching nchar values defined with the nchar, nvarchar or long nvarchar base datatypes is not affected by this problem.

703780 If a download for a particular table contained two rows with the same primary key value, UltraLiteJ would have thrown an exception with the warning SQLE_DUPLICATE_ROW_FOUND_IN_DOWNLOAD. This may have confused users into believing the download continued, when in fact the download had been rolled back. This has been fixed. UltraLiteJ now throws SQLE_PRIMARY_KEY_NOT_UNIQUE.
703785 With UltraLiteJ for Android, DatabaseManager.release() had undesirable effects - it may have caused erratic behaviour when the application was relaunched after it was used when the application closes after initial launch. This has been fixed.
703801 HTTPS synchronizations using iOS 5 to a Windows (or Linux) Mobilink server, could have failed with secure handshake errors. The synchronization would have worked to a Mac OS X Mobilink server. This is now fixed.
703805 The MobiLink server on Windows would have failed to load an identity created by the Certificate Creation utility (createcert) run on Mac OSX with internal error: "ssl_CreateCertList(1) returned 12394". This has been fixed.

Note, this failure could also have occurred for MobiLink clients loading a client identity. This has been fixed as well.

703812 This is a test
703815 This is a test
703816 This is a test
703817 This is a test
703819 Rows with null values in BINARY(x) or UNIQUEIDENTIFIER columns, or small binary values in BINARY(x) columns (for example a 2 byte binary value stored in a column declared BINARY(512)), would have used more memory than necessary. This has been fixed.
703837 On Solaris 11 systems, the syntax highlighting editor component used in the Interactive SQL utility and Sybase Central displayed characters incorrectly. A blank was displayed after every character, even though the blank was not part of the SQL statements being edited. Because of the blanks, the caret (insertion point) was displayed in the wrong place, and the row/column indicators were incorrect, and in general, it was very difficult to enter and edit text in the editors.

The solution to this problem is to update the Java Runtime Environment to version 1.6.0_31 or later. Instructions for doing this are contained in a white paper called "Updating the SQL Anywhere Java Runtime Environment", available from the Sybase web site here:

http://www.sybase.com/detail?id=1058536

There are no code changes for this issue.

704016 The server could have crashed if it was serving as a mirror server and became the primary, and a stored procedure referencing a catalog table was executed both before and after the transition. There is no known workaround. This has been fixed.
704057 If a database was created with 9.0.2.4029 or earlier, with any version of 10.0.0, or with 10.0.1.4072 or earlier, then upgraded (using the Upgrade utility or ALTER DATABASE UPGRADE) to a newer build of SQL Anywhere, the Unload utility could have erroneously generate SQL to re-create the jConnect-related objects "jdbc_functioncolumns" and "sp_jdbc_getfunctioncolumns" which are, after the builds indicated, included automatically in newly created databases.

Similarly, if a database was created with any version of 10.0.0, and then upgraded to any version of 10.0.1 or later, the Unload utility could erroneously have generate SQL to re-create the SQL Anywhere internal function "sa_ansi_standard_packages".

During a reload, these problems would have generated a message such as the following:

***** SQL error: Item 'jdbc_functioncolumns' already exists

These problems have been fixed.

704191 Changes have been made to Sybase Central to allow it to run with the Java 1.7 runtime.

Note, this change also relates to the Interactive SQL utility as well. Sybase Central and the Interactive SQL utility were not reviewed for compatibility.

704202 In the Sybase Central window, the following menu items may be checked or unchecked:

view\status bar

view\Toolbars\Standard Toolbars

view\Toolbars\Context Bar

view\Toolbars\Context Title

When these items were checked a blue box appeared beside the item instead of a check mark. This has been fixed.

704205 Opening the query editor in the Interactive SQL utility (dbisql), and from the Tables tab, select certain pairs of tables would have caused an an error to have been reported indicating that dbisql has encountered a problem and must close. One pair of tables that caused the problem was SysTable and SysColumn. This has not been fixed.

Note, this problem would also have occurred with the SQL Anywhere plugin for Sybase Central, which is fixed as well.

704453 Execution of the system function USER_NAME() in a login check stored procedure (which is set through the login_procedure database option) could have caused a server crash. This would have occurred when using server-side connection pooling, and has now been fixed.
704464 HTTP headers returned by the NetworkData Java and .NET classes were silently truncated. This has been fixed.

Also, a bound has been placed on the total amount of header data that can be sent in an HTTP request. If a request exceeds the bound, the server will return an HTTP error code and abort the request. This bound is controllable with the header_limit HTTP option. For example, "-x http(header_limit=200000)" will raise the limit to 200000 bytes. The default value is 64000 bytes.

704468 If deadlocks arose between connections using parallel execution plans, the deadlock may not have been detected. Additionally, another connection later contending for the same locks could have caused the server to crash. This has been fixed.

A workaround is to set the option MAX_QUERY_TASKS to 1 for transactions that are known to participate in deadlocks.

704600 In some circumstances, an index may have become corrupted after a DELETE. An index must have had Index Hashing turned on to be affected. This has been fixed.
704609 If a TLS library could not be found, or an error occurred when loading it, the resulting error message would have contained the system charset name rather than the name of the library. This has been fixed.
704611 An index on a binary column could have become corrupt if it contained binary values shorter than the hash size for the table. This has been fixed.
704622 The opcode parameter in the Relay Server error RSE4007 was not logged properly. This has been fixed.

Note: this change is fixed the English resource only.

704649 In a mirroring system, it is possible for a server to be unable to start mirroring because its log does not match the one on its parent. Previously, a message would have been printeded to the console indicating that a log mismatch had occurred, with no further information. This has been corrected so that now there is more information printed to the console of its parent that gives further details.
704654 Creation of SQL Anywhere web services is not permitted on the utility_db. An HTTP request attempting to access the utility_db may have caused the server to crash, rather than being rejected with a "404 'Not Found'" status. This has been fixed.
704775 When multiple TLS connections were made from a single client application, a small amount of memory would have been leaked for each connection beyond the first. This could also have occurred in the database server, but only when the server made outgoing TLS connections (i.e. for mirroring or to remote servers). This has been fixed.
704801 Cursors over SELECT statements referencing proxy tables could have returned errors in the presence of publications for some of the tables. The error depends of how complex the publications are. A typical error would be "assertion failed: 102604 - Error building sub-select". This has been fixed.
704963 If a predicate selectivity estimate was computed using a column histogram and the lookup value was out of bound in the histogram, an index probe was not then used for selectivity estimate. This has been fixed. This also improves the selectivity estimates for a column for which the histogram is out of date or contains incomplete data if an index on that column exists.
704967 With UltraLiteJ for Android, calling Connection.prepareStatement with a null statement parameter would have crashed the application. This has been fixed so that a ULjException with code SQLE_INVALID_PARAMETER is now thrown.
704978 Updating an entity could have returned incorrect values for computed columns.
705368 If a JDBC application using the SQL Anywhere JDBC Driver called the "autoGeneratedKeys" overload of Connection.prepareStatement(), Statement.execute() or Statement.executeUpdate() with Statement.NO_GENERATED_KEYS, then the JDBC driver would incorrectly throw a "generated keys not supported" exception. This problem has now been fixed and calling these overloads with Statement.NO_GENERATED_KEYS now simply calls the "non-autoGeneatedKeys" overload.
705529 In some cases, 64-bit servers could have crashes when executing queries using TIMESTAMP WITH TIME ZONE values. The 32-bit server was not affected. This has been fixed.

A workaround is either to use regular TIMESTAMP types, or use a 32-bit server.

705543 In a mirroring system, it may have been possible for a copy node to connect to its parent and report that it was connected, but not receive log pages. This has been fixed.

If a copy node lost its host name because of a network problem at any point, the copy node's parent would have been unable to connect to the copy node. This would have appeared in the logs like the copy node connected to the parent without any problems, but the parent would have been unable to connect back. The parent would then drop the connections and the copy node would have made the connection again, causing an infinite cycle that caused the copy node to be unable to stay connected or receive log pages. This has been fixed.

If a copy node tried to connect to its parent, but was unable to resolve the parent's host name during connection due to network problems, the copy node would have connected to the primary and never tried to connect to its parent again. This has been fixed.

705557 In rare timing dependent cases, it was possible for a server that was the parent of a scale out copy node, or the primary in a scale out system, to incorrectly fail requests with a thread deadlock error. It was also possible (but less likely) for the parent or primary to hang. The thread deadlock and hang were more likely when the scale out copy node could connect to the parent or primary, but the parent or primary could not connect back, perhaps due to an incorrect connection string for the copy node server mirror, or due to a firewall issue. This has been fixed so that the server no longer hangs and thread deadlock is much less likely.
705696 With UltraLiteJ for Android, a binary column value with a length greater than or equal to 64 KB would have been truncated when using PreparedStatement.set(int, byte[]) to set the value for an INSERT or UPDATE statement. This has been fixed.

A workaround is to use PreparedStatement.getBlobOutputStream(int) to get an OutputStream object, and use that to write the parameter value.

705697 Set-Cookie HTTP headers, and sync parameters that set a cookie value to the empty string, will now cause the cookie to be removed, preventing it from being sent to the server in subsequent HTTP requests. Previously, the client would report an error in this case.
705847 UltraLiteJ for Android now supports restartable downloads as documented for C UltraLite.

The following APIs have been added:

Connection.rollbackPartialDownload()

SyncParms.setAdditionalParms( String v )

SyncParms.getAdditionalParms()

SyncParms.setKeepPartialDownload( boolean c )

SyncParms.getKeepPartialDownload()

SyncParms.setResumePartialDownload( boolean c )

SyncParms.getResumePartialDownload()

SyncResult.getPartialDownloadRetained()

705854 With UltraLiteJ for Android, calling the PreparedStatement.set() method when the PreparedStatement had already been closed would have crashed the application. This has been fixed. Now, a ULjException with code SQLE_ULTRALITE_OBJ_CLOSED is thrown.
705863 Connections from Linux clients may not have included the EXE value in connection_property( 'AppInfo' ). In particular, this affected applications where the effective user for the application was changed. This has been fixed so that the EXE value is now included in connection_property( 'AppInfo' ) on Linux, even if the effective user is changed.
705997 The Relay Server could have deadlocked after an I/O error with a client while receiving a large http response. The Outbound Enabler would have tried to recover, but would have failed with an RSE3003 error (displayed in the Relay Server log) until the original up-channel failed with error RSE3009. After that, the Outbound Enabler up-channel retry would have resulted in the error RSF13002 being displayed in the Relay Server log over and over until the Relay Server was restarted. New sessions accessing the same backend farm would have resulted in the error RSF14001. This has been fixed by allowing the Relay Server to recover from this deadlock state without causing any Relay Server fatal errors, and the backend service should recover successfully.
706150 In rare cases, a server may have received an odd ClassNotFoundException when making a Java external environment call, even though the class had previously been successfully loaded. This problem has now been fixed.

Note that this change also greatly improves the performance of loading classes from the database.

706158 A High Availability mirror server could have crashed when starting up or restarting when it was in the "determining mirror role" phase. The primary server must also have had a read-only scale-out copy node connected to it, and a transaction log rename was being performed on the primary server. This has been fixed.
706168 The MobiLink Server could have crashed when the http network protocol option "collect_network_data" was set to 1 (i.e. -x http(collect_network_data=1) ). This has been fixed.

Note, this option was added by Engineering case 696647.

706174 If a High Availability partner server encountered a disk full condition, is was possible for both partners to hang. This has been fixed so that the partner that encounters the disk full condition stops immediately. The other server should be able to continue as the primary or take over as the primary. Taking over requires that the primary and mirror were synchronized.
706179 When a server in a mirroring system tried to start up a database as a mirror or copy node, it was possible for the server to receive a transaction log mismatch if there was a problem connecting to the primary or the copy node's parent server. This would have caused the database to shut down, and subsequently the server, if no other databases were running on the server. In this particular case, there was not actually a log mismatch, and so the database would have restarted successfully without replacing database files. The error message printed in the console was: "Transaction log does not match log on mirror partner". This has been fixed.
706183 If a DBRowReader from the MobiLink Server .NET API was used to gather binary data from a fixed length binary column in the consolidated database, then the binary data that was fetched would have had zeroes appended to the result up to the maximum size of the fixed length column. This has been corrected so that zeroes are no longer added to the result.
706371 The SQL Anywhere HTTP server may have crashed if a request was timed-out. The crash would have occurred when a request had timed-out on a host under very high CPU load (the server itself need not have been especially busy). This has been fixed.
706387 Three new flow control elements have been introduced, allowing the Relay Server to detect potential dangers proactively, and urgently signal the Outbound Enabler to throttle back on pushing data down to the Relay Server in an isolated per client manner. These new elements are:

Per client shared memory consumption

Per client virtual memory consumption

Global shared memory level

This change also introduces a new user control in the Relay Server configuration:

[backend_farm]

max_client_buffer = <memory size>

When the Relay Server consumes more than the "max_client_buffer" amount of virtual memory to buffer server response for a slow reading client, an urgent flow control signal will be sent to the Outbound Enabler to pause reading further server responses for this client. The Relay Server will signal the Outbound Enabler to resume the reading responses for the client when the client has consumed enough of the responses until only half of "max_client_buffer" worth of server responses for the client is left in the Relay Server. The default value of "max_client_buffer" is 1M. The "max_client_buffer" property can be adjusted online and the change takes effect immediately without restarting the Relay Server.

Similarly, per client shared memory is also being monitored, and isolated per client throttling was added. There is no user control for this element of the flow control system, as this element doesn't directly prevent shared memory exhaustion but it prevents deadlocking of the down-channel.

Monitoring of the global shared memory level has also been added, so that flow control can be triggered on any client even if their personal quota has not yet been reached. No new user control has been introduced for this element of the flow control system, but the behavior of the existing "shared_mem" control in the Relay configuration has changed. Previously, this value was used only for specifying the extra amount of shared memory for buffering traffic and state tracking, in addition to the amount implied by the configuration. The property had an effect of an amount equal to its size on the startup allocation. Online adjustment to the value had no effect on the total allocation until the Relay Server is restarted. Now, this property has an effect of an amount three times its value on the startup allocation of shared memory, and is broken down as follows:

- one third for buffering traffic and state tracking where user thought is enough at startup time.

- one third for future online growth of the number of tenants, and backend farm size of the tenants.

- one third as an extra blanket inside the auto calculated shared memory low water mark for triggering flow control.

The sum of these values are pooled together for all functional needs without usage partitioning. The factoring is for calculating the gross startup amount and also users to understand the new implications of online adjustment of this value. Online adjustment to this value still has no effect on the total allocation, but it does change the global shared memory low water mark for triggering flow control. Because of one third factor as a blanket inside the low water mark, users can make adjustments to the flow control behavior without restarting the Relay Server.

Here are some new usages of the shared_mem property in terms of online adjustments:

The administrator doesn't foresee growth in number of tenants and/or their size and so wants to reduce the shared memory low watermark in order to reduce triggering of unnecessary flow control. The shared_mem property can be reduced online. The change doesn't decrease allocation until restart, but it does reduce the blanket amount immediately by an amount equal to the change.

The administrator has seen some of the following after their Relay Server had been running for some time:

Substantial growth in number of tenants

Substantial growth in size of the backend farm

Substantial growth in number of clients

Growth in http response size

Addition of slower clients or slower network to the clients

Upgraded to faster network between RS and OE

and wants to increase the global shared memory low water mark so that flow control kicks sooner to protect against global shared memory exhaustion. This can be done by increasing "shared_mem" online without restarting the Relay Server. The change doesn't increase allocation until restart but it increase the blanket amount immediately by an amount equal to the change.

The "shared_mem" value to now allowed to be bigger than 4G.

This change has extended the existing protocol between the Relay Server and the Outbound Enabler so that upgrading to a new Outbound Enabler is required for this feature. The new Relay Servers and Outbound Enablers are backward compatible with older versions, but flow control cannot take place and so the Relay Server is not protected against memory exhaustion.

Before these changes, the Relay Server can run out of resource due to reaching the hard limit of shared memory or reaching the limit on virtual memory. This could have had different causes, including, but not limited to, an increase in the number of clients or backend farms/servers, http response size, and sustained slow reads from clients. Some exhaustion may have lead to deadlocks and the symptom may not have been fatal as current Relay Servers will resolve the deadlock, but the requests could still have been failed and shared resources were blacked-out during the deadlock period.

sers might experience

706510 A server would have leaked memory, and may eventually have run out of memory, if a very large number of Open Client or jConnect secure password connection requests were made. This problem has now been fixed.
706541 In a mirroring system, if the mirror or a copy node was stopped around the time the primary performed a transaction log operation that required more than one page, the next time the mirror or copy node was started it could have asserted or crashed. The most likely assertion failure error numbers were 100902, 100903 or 100904. This has been fixed.
706554 The QAnywhere Agent could have failed to start if it could not automatically upgrade the message store in some cases. This problem was introduced by the changes for Engineering case 696917. For 11.0.1.2781 until 2804, the qaagent would have failed to start with message stores created with a qaagent from 11.0.1.2780 and before. For 12.0.1.3711 until 3725, the qaagent would have failed to start with message stores created with a qaagent from 11.0.1.2781 until 2804, or with a qaagent from 12.0.1.3711 and before, or with a qaagent from 12.0.0. This has been fixed.

A workaround for this problem is to recreate the message store using qaagent -si, if that is possible.

706558 When executing a bulk update with SQLExecute, there was a chance that not all rows would have been updated. If the UPDATE statement contained a WHERE clause that did not match any rows, any subsequent rows in the batch would have been ignored. This has been fixed.
706724 The server was failing to redirect an HTTP request made to a secure web-service (requiring HTTPS protocol) when the request specified an ipv6 address. This has been fixed.
706774 If a client application that had a TLS or HTTPS connection to a server hang, the server itself could also have hung indefinitely. This has been fixed, such connections will now be closed after five minutes.
706812 The Relay Server Outbound Enabler may have crashed when it was running with a Relay Server farm, and the backend server was under heavy load or busy, then went down or became unresponsive. This problem has been corrected.
706817 The Certificate Creation and Certificate Viewer utilities (createcert and viewcert) will now encode unencrypted RSA private keys using PKCS #1 instead of PKCS #8, if provided a new '-p1' option. This is useful when creating certificates for use with Apache since it expects unencrypted RSA private keys to be encoded using PKCS #1 (SQL Anywhere software always expects private keys to be encoded with PKCS #8). Encrypted keys and ECC keys will continue to be encoded using PKCS #8 regardless of whether the '-p1' option is specified.
706828 The MobiLink server now supports bulk upload for sync tables that contain LOBs when the consolidated database is running on an Oracle server. The bulk upload feature would have previously been disabled when a sync table contained LOBs. The number of rows uploaded by each batch is controlled by -s command line option.

Note, the iAS ODBC driver for Oracle must be upgraded to the same EBF level as the MobiLink server when the consolidated database is running on an Oracle server and the synchronization tables contain CLOBs or BLOBs.

706846 The Relay Server would have had the client expire the affinity cookie for the case where the Outbound Enabler detected a request specific error and reported the error back to the Relay Server. This didn't cover other error cases where the Relay Server had enough information to also have the client to give up the Relay Server affinity cookie. This fix is to add cookie expiry for those uncovered cases as well. The Relay Server will also response to the client with cookie expiry if the backend server responds to the client with HTTP 400 or higher.

This fix also strengthens validation of the cookie format, improves HTTP status codes, and provides finer HTTP status messages for easier diagnosis.

The responses being changed are summarized in the following table:

New response New response expires cookie? Old response as a record of behavior change

500 Relay server failed creating client traffic record n 500 Relay server error

500 Relay server failed initializing server access n 500 Relay server error

500 Relay server failed writing locking request list n 500 Relay server error

500 Relay server failed creating request n 500 Relay server error

500 Relay server failed initializing request n 500 Relay server error

500 Relay server failed adding initialized request n 500 Relay server error

401 The backend farm client_security property in the

Relay Server configuration disallow this type of client transport y 401 The backend farm rejected this client security

500 Relay server failed initializing backend farm access n 500 Relay server error

400 Bad affinity query y 401 Bad affinity query

400 Bad session id y 401 Bad session id

404 Backend farm is missing from URL y 404 Not found

404 Backend farm not found y 404 Not found

503 The backend farm is currently disabled n 404 The backend farm is currently disabled

400 Backend server encoded in cookie not found y --No change --

400 Bad request with no response from backend server y --No change--

Note, the HTTP status messages will remain generic for the Relay Server for Apache, which may not follow the new status codes. This Relay Server for Apache issue will be addressed as a separate platform dependent issue which is independent to this one.

706876 A Microsoft Data Link Error could have occurred with newer versions of Microsoft software when using the SQL Anywhere OLE DB provider. When the Test Connection button was clicked, the following message would have been displayed when the error occurred:

Test connection failed because not all properties can be set.

Window Handle (BAD VALUE)

Continue with test connection?

[Yes] [No]

The message was informational only and Yes can be clicked. If the credentials and other connection information were correct, the connection succeeded. This problem has been fixed. Instead of returning a NULL window handle to the Microsoft software, the OLE DB Window Handle property is now marked as unsupported, which removes the warning message.

706878 The MobiLink server could have crashed when a TIMESTAMP column was fetched from Oracle using the .NET-ODBC bridge. This has been fixed.
706892 There are many reasons for a database, that is a partner in a High Availability system or a copy node, to be restarted. In several cases, no reason for a restart was logged to the console. This has been fixed so that a message indicating the reason for a restart is now logged to the console.
707002 The request for the graphical plan of a statement would have caused the server to crash if the statement contained an IN predicate and the list consisted of only host variables and an In List algorithm was chosen for it. This has been fixed.
707006 -
707009 -
707010 In the table of query results, cell values, entire rows, and entire columns, can be copied to the clipboard. When copying a column or multiple cells, the values were always separated by a comma rather than the ISQL field separator string. This has been corrected so that the field separator is now used.

Note that the field separator was already being used when copying entire rows of values.

707019 When the database server was running a database whose page size was smaller than the cache's page size, dynamic cache sizing could have chosen a cache size that was too small, which could have resulted in a performance penalty. This problem has been fixed.
707033 When a property was repeated in a section of the Relay Server configuration file, or when a section header separating two sections of the same type of object was missing, the Relay Server would have started without complaints, silently overriding repeated properties. This behaviour has now been corrected to abort the startup with an error.
707037 In rare timing dependent cases, a high availability partner or copy node server could have crashed. Additionally, in rare cases, the arbiter could have reported the following message to the console: "arbiter already has two connections". These problems could have occurred when a partner detected loss of quorum, when a copy node was attempting to connect back to its original parent after being connection to an alternate parent or the root server, or if a connection between mirror servers failed. This has been fixed.
707039 Synchronizations could have hung when using HTTP if an error occurred on the server side. This has been fixed.
707061 The MobiLink server could have crashed if it had an HTTPS listening port. This has been fixed.
707064 When starting the Network Server on Windows, or calculating the 'IsPortableDevice' server property, the server may have taken longer than necessary to obtain information about the computer. This has been fixed, althought the difference in the delay is not likely to be noticeable.
707078 When a Relay Server received a request with cookie pointing to a backend that was no longer connected, the Relay Server would have done unnecessary processing and reported twice the request to be aborted with verbosity level 2 or higher. This extra processing has now been removed.
707124 Mixing different versions of Relay Server components together on a single server is not supported and may have lead to crashes in some combinations. Now, the SQL Anywhere version and build number are used to detect conflicts. Any conflicts are reported via the following HTTP response status:

500 Abort due to version of this Relay Server extension conflicts with the version of the running rshost

Note, this change also fixes some error responses that didn't terminate the header list with \r\n.

707201 In rare low-memory situations, a client application could have crashed on startup if TCP/IP was being used. This has now been fixed.
707362 On BlackBerry devices, and the simulator, when using HTTPS UltraLiteJ would have done an extra HTTPS POST request at the beginning of a synchronization to verify the contents of a certificate. This extra POST was not needed when the StreamHTTPSParms used in the synchronization had null CertificateCompany, CertificateName and CertificateUnit (all three null). This has been fixed. UltraLiteJ now will only do the extra POST if one or more of CertificateCompany, CertificateName and/or CertificateUnit are not null.
707529 If the primary server failed in some timing dependent cases, the mirror server could have failed to take over as primary. When this problem occurred, the mirror database would have restarted and be attempting to determine its role until the primary was restarted, or the ALTER DATABASE ... FORCE START statement was executed on the mirror server. This has been fixed.
707534 The Relay Server is designed to overload the up-channel liveness for notifing the Outbound Enabler in the case the down-channel is not connected. This gives the Outbound Enabler a chance to increase down-channel puncture data, as the web server can be be set up to buffer the request to a certain amount before passing to the extension for handling and takeover the rest of the reading of the request. This issue was introduced in 12.0.1 when HTTP authentication support was added to the Outbound Enabler, where the test request will fool the Relay Server into thinking the down-channel connection was successful. This fix is to change the Relay Server to deal with the Outbound Enabler behavior change.
707541 Unnecessary HTTP headers were being sent in HTTP CONNECT requests. This has been fixed.
707553 In rare cases, the first time a mirror server or copy node connected to a high availability primary or a read-only scale-out parent, the primary or parent could have crashed. This has been fixed.
707554 The following improvements have been made to the interactive quick setup feature for the Relay Server running on an Apache web server:

- Improved script interaction, especially questions with (Y/n) choices. Defaults have been added to speed up progress.

- Output log is now flushed timely to give complete log if script is stopped at any time.

- Removed the option of keeping test services running to overcome a hanging problem.

- Wording has been improved in several places.

707729 The Relay Server may have exhibited undefined response behavior in some error cases. This has been corrected.
707781 The iAS ODBC driver for Oracle could have crashed in the OCI library when a query contained results from a proxy server if the size of the result set was greater than the "Array size" given by the DSN. This problem has now been fixed.
707904 If the root database restarted soon after a copy node connected to it, the copy node could have, in rare timing dependent cases, crashed or failed assertions. This has been fixed.
707910 A query with many nested UNION query blocks may have taken a very long time before query execution began. This has been fixed.
707918 In rare cases, a query using a parallel NestedLloopsJoin could have caused the server to crash. This has been fixed.

A workaround is to disable intra-query parallelism for the affected query.

707922 UPDATE statements generated by the Entity Framework could have failed with a syntax error if the table being updated had a uniqueidentifier key column. This problem has been fixed.
707952 When using a version 10.0, 11.0 or 12.0 of ADO.NET provider with a version 9.0 server, the .NET string parameters are incorrect mapped to nvarchar. This problem has been fixed.
707971 The Compare Databases window would have reported ALTER LOGIN POLICY as an unrecognized statement. This has been corrected.
708057 When fetching from a directory access table with a query of the form:

select ... from directory_access_table where ... file_name like 'abc%' ...

the server would have returned a syntax error. This problem only existed if the comparison value (i.e. 'abc%') had no directory separators. For example, a query of the form:

select ... from directory_access_table where ... file_name like 'abc\def%' ...

would have worked just fine. This problem has now been fixed.

708087 When using the VALIDATE TABLE or VALIDATE INDEX statements, the server could have reported that there was an 'orphaned blob' (ie. a blob that is in the database but not referenced by any row) when there were, in fact, no orphaned blobs. To encounter this problem, there must have been deleted rows in the database that contained unique blobs (not shared by any other row) and either the deletes were uncommitted, or they had been left for the database cleaner to remove at a later time. Rows not cleaned by the cleaner were more likely to be seen on a read-only database, as the database cleaner is disabled for read-only databases. This problem has been fixed.

Also when using the VALIDATE TABLE or VALIDATE INDEX statements, the server could fail to report orphaned blobs when they did, in fact, exist. Whether or not this problem occurred depended on random contents of memory as well as the number of DML operations applied to the table prior to validation. This problem has been fixed.

When reporting a validation problem, the server returns an error to the client but also displays additional information in the server console. For orphaned blobs, a blank message was erroneously displayed in the console. This problem has been fixed.

708177 If an invalid operation was specified for an SQL sequence, then the server would have incorrectly returned the error SQLSTATE_CORRELATION_NAME_NOT_FOUND, instead of SQLSTATE_INVALID_SEQUENCE_OPERATION. This has been fixed.
708199 The server would have returned a syntax error when trying to specify "client" as a secure feature to be enabled or disabled (-sf command line option). This has been fixed.
708252 The LOAD TABLE statement may insert invalid data values into columns of type NUMERIC. For type NUMERIC the server may insert values that exceeded the precision and scale

of the column type definition. This has been fixed. Now values for NUMERIC columns will be cast to the column data type if needed.

708422 If a user owned one or more tables, views, procedures or sequence generators, and permissions on these objects were assigned to another user, then deleting the first user could have caused Sybase Central to crash. This has been fixed.
708426 In rare timing dependent cases, a mirror server or copy node could have crashed while it, or the mirrored database, was shutting down. In order for the crash to have occurred, a copy node child must have begun to request log pages from the stopping server. This has now been fixed.
708518 Mirroring copy nodes could have hung on shutdown with one core at 100% utilization.
708547 The following behaviors In the "Change Server Version" wizard have been fixed:

1. The wizard would have installed the cloud software on all hosts which did not already have it, even if the hosts were not running the servers selected. Now, software is installed only on the servers selected.

2. The wizard would have reported that it was installing software even if it was only checking whether software needed to be installed. Now, the wizard reportss it is installing only if it really is installing software.

3. When cloud software was downloaded for both Windows and Linux, the wizard did not prevent attempting to use the software on a server which was running the wrong operating system. Now it does.

708565 When logged in as a user who did not have the privileges needed to extract a database, attempting to extract a database from the cloud's "Databases" panel would have caused the Cloud Console to report an internal error. This has been fixed.
708575 UltraLitej for BlackBerry and J2SE now support custom HTTP headers. New methods have been added to StreamHTTPParms:

/** Adds a message header to each HTTP request. If addCustomHTTPHeader is called

* more than once with the same name parameter, the values are concatenated together

* into a comma-seperated list.

* <p>

* The following standard headers are set by ULj and cannot be changed using

* addCustomHTTPHeader: Connection, Content-Length, User-Agent, Content-Type, and

* Content-Length. Other headers may also be modified by the Java VM.

* <p>

* Not available on Android. On Android, specify a custom_header parameter using

* setExtraParameters

*

* @param name The name of the header

* @param value The value of the header

*/

public void addCustomHTTPHeader( String name, String value );

/** Returns a Hashtable containing the HTTP headers specified using addCustomHTTPHeader

*

* @return Returns a Hashtable containing the HTTP

* headers specified using addCustomHTTPHeader

*/

public java.util.Hashtable getCustomHTTPHeaders();

Custom cookies can be specified by calling addCustomHTTPHeader with "Cookie" as the header name.

708576 UltraLitej for BlackBerry and J2SE now support basic HTTP authentication. New methods have been added to StreamHTTPParms:

/**

* Sets the userid and password used for Basic HTTP authentication as

* described in RFC 2617.

* <p>

* With Basic authentication, passwords are included in HTTP headers in

* clear text; however, you can use HTTPS to encrypt the headers and

* protect this password.

*

* @param userid The userid to use

* @param password The password to use

*/

public void setHTTPUserIDAndPassword( String userid, String password );

/**

* Returns the userid previously set by setHTTPUserIDAndPassword.

*

* @returns The userid previously set by setHTTPUserIDAndPassword

*/

public String getHTTPUserID();

/**

* Returns the password previously set by setHTTPUserIDAndPassword.

*

* @returns The password previously set by setHTTPUserIDAndPassword

*/

public String getHTTPPassword();

708578 UltrLitej for BlackBerry and J2SE now support zlib stream compression. Some methods that were previously Android-only are now available for other platforms:

/** Enables or disables ZLIB compression.

* <p>

* By default, ZLIB compression is disabled

* <p>

* Only available for Android and BlackBerry

* <p>

* Corresponds to MobiLink client network protocol option "compression=zlib".

*

* @param enable Set to true to enable ZLIB compression, or false to disable

* ZLIB compression.

*/

public void setZlibCompression( boolean enable );

/** Sets the download window size for ZLIB compression.

* <p>

* Only available for Android and BlackBerry

* <p>

* Corresponds to MobiLink client network protocol option "zlib_download_window_size".

*

* @param size The compression window size specification, inclusively

* ranging from 9 to 15. This parameter is the base two

* logarithm of the window size. (the size of the history

* buffer)

*/

public void setZlibDownloadWindowSize( int size );

/** Sets the upload window size for ZLIB compression.

* <p>

* Only available for Android and BlackBerry

* <p>

* Corresponds to MobiLink client network protocol option "zlib_upload_window_size".

*

* @param size The compression window size specification, inclusively

* ranging from 9 to 15 for Android and 10 to 15 for BlackBerry.

* This parameter is the base two

* logarithm of the window size. (the size of the history

* buffer)

*/

public void setZlibUploadWindowSize( int size );

708638 UltraLitej for BlackBerry now supports end-to-end stream encryption. Some methods that were previously Android-only are now available for other platforms:

/** Sets the name of the file containing the end-to-end public key.

* <p>

* By default, this value is null, indicating that end-to-end encryption is

* not used.

* <p>

* Corresponds to MobiLink client network protocol option "e2ee_public_key".

*

* @param public_key The name of RSA public key file used in the encryption.

*/

public void setE2eePublicKey( String public_key );

/** Get the name of the file containing the end-to-end public key.

*

* @return the name of the file containing the end-to-end public key.

*/

public String getE2eePublicKey();

And there are also BlackBerry-specific methods to change the encryption type. ECC end-to-end encryption is available only for BlackBerry.

/**

* Pass this to setE2eeType to use RSA-based end-to-end encryption

*/

public final short E2EE_RSA = 0;

/**

* Pass this to setE2eeType to use ECC-based end-to-end encryption

*/

public final short E2EE_ECC = 1;

/**

* Set the type of end-to-end encryption to use. Pass one of StreamHTTPParms.E2EE_RSA or

* StreamHTTPParms.E2EE_ECC. The default is StreamHTTPParms.E2EE_RSA.

* <p>

* Only available on BlackBerry. ECC encryption is not supported on other platforms.

*

* @see StreamHTTPParms.E2EE_RSA

* @see StreamHTTPParms.E2EE_ECC

* @param type One of E2EE_RSA or E2EE_ECC

*/

public void setE2eeType( short type );

/**

* Returns the end-to-end encryption type being used.

* <p>

* Only available on BlackBerry. ECC encryption is not supported on other platforms.

* @return the end-to-end encryption type being used

*/

public short getE2eeType();

The public key used must be DER encoded.

The public key needed for end-to-end encryption can either be stored on an SD card or the device object store. When using an SD card, the parameter to setPublicKey should have the form "sdcard://<path>" where "<path>" is the absolute path to the file on the card. e.g. "file:///SDCard/ulj/public_key.der". When using the object store, use the file transfer utility built into ULj to download the file from the MobiLink server. To use file transfer to transfer a key it must have an extension of ".der".

708644 The Schedule tab in the Properties dialog for a scheduled task in a German cloud had an unneeded horizontal scroll-bar. This has been fixed.
708660 If a URL suffix had a leading '/', the URL formed would have been [http|https]://host-name:port-number//url-suffix. This could result in an synchronization error. This differs from UltraLite which ensures that the '/' is not added when there is an leading '.' in the URL suffix. This has been fixed, the leading character of the url_suffix is checked and a '/' is appended only if needed
708672 Selecting annotated cloud software in the Create Server wizard would not have resulted in the server using annotated software. This has been fixed.
708777 The UltraLiteJ method DatabaseInfo.getNumberRowsToUpload() could have returned a value that exceeded the actual number of rows that would have been actually uploaded during the next sync. For example, a sequence of operations such as an INSERT, UPDATE, and DELETE of a row should return 0, but would have returned a value that was larger. This has now been fixed.
708790 Attempting to set the server version to use a non-annotated cloud software version using the server's property sheet did not work if the annotated software and the new software had the same version number. This has been fixed.

In a related problem, if a server was using an annotated build, and the host also had an unannotated version of the software installed (with the same version number), the initial "Version" value in the property sheet was incorrect. This has also been fixed.

708812 When setting up mirroring for a tenant database, the "Add Database Mirror" wizard would have incorrectly recommended the server that had been selected for the mirror when browsing for the arbiter. Similarly, the list of recommended servers for the mirror could have included the server that had been selected for the arbiter. This has been fixed.
708826 In rare, timing dependant cases a copy node in a mirroring read-only-scale-out setup may have crashed. This has been fixed.
709024 When the Schedule Task wizard was canceled after clicking its Finish button, it was possible for the Console to report an internal error if the task had already been scheduled by the time the Cancel button was clicked. This has been fixed.
709189 The approximate CPU time for a tenant database could have initially shown 'NaN seconds'. This has been fixed.
709203 If a jConnect or Open Client connection prepared a statement and called a stored procedure with a set of host variables, then the server could have crashed, or returned an odd "variable already exists" error, if the stored procedure had a parameter or variable named @p0. This problem has now been fixed.
709208 If an INI file was used with the Windows launchers for the Interactive SQL utility, Sybase Central, MobiLink Monitor, the Console utility, or SQL Anywhere Monitor, and the VM arguments exceeded 260 chars, the launcher would have fail. This has been fixed.
709219 When starting the Outbound Enabler, if the machine where the Relay Server was installed was running, but the Relay Server was not available, the Outbound Enabler would have started, failed to gather a Relay Server peer list, and then done nothing until it was manually shut down. This has been corrected so that the Outbound Enabler will now loop and continue to try and gather the Relay Server peer list until it is successful, or it is told to shut down.
709351 Previously, if you tried to restore multiple databases where at least one database name contained a '.', the restore backup wizard failed. This has been fixed.
709375 In rare circumstances, mirror server definitions for a database copy could have been deleted. This has been fixed.
709497 The following dialogs contained scrollbars due to long text for the German and/or French locales:

Server Properties

Create Rule

Edit Event Subscription

Fixed by minor sizing adjustments to these dialogs.

709506 The IIS Quick Setup script has had the following enhancements:

1) When the Relay Server is loaded with a high volume of requests and payload, transfer rate per client may thin out to a point that it cannot satisfy a preset requirement of IIS. The result is a dropping of connections and a Timer_MinBytesPerSecond event in the HTTPERR log. A change has been made in section 5b of the setup script to disable this minimum transfer rate requirement.

2) The Relay Server uses a default application timeout of 8 minutes. A change has been made in section 5b of the setup script to configure the connection timeout value of the web server to be 1 minute higher than the default application timeout. The client application can lower the timeout on a per request basis. The purpose of this change is to remove timeout issue due to mismatch timeout settings along the chain.

709509 The Cloud Initialization utility (dbcloudinit) may be used to re-initialize a cloud on a computer where a cloud was previously running. To re-initialize a cloud, all hosts must be deleted, except for the last cloud partner, and the cloud stopped. When re-initializing a cloud, dbcloudinit will attempt to re-use settings from the previous cloud. In this case on Linux, if running the cloud from the root user account had previously been chosen, and when re-initializing a different account was used, the default port presented for the HTTPS port setting may have been outside the normal default range, for example 40843. This has been fixed.
709513 The Rules panel would not have aligned the checkboxes vertically to the top of the grid row. These have been fixed.
709633 W@hen clicking the column heading of the Current, Average or Maximum columns on the Performance Monitor tab, the corresponding values would have been sorted as strings, not as numeric values. Now the values are sorted numerically. In addition, the values are now right-aligned.
709639 On Solaris 11 systems, the default quitting time suggested by the Console utility is one hour later than the current time if daylight savings time is in effect. The solution to this problem is to update the Java Runtime Environment to version 1.6.0_31 or later. Instructions for doing this are contained in a white paper called "Updating the SQL Anywhere Java Runtime Environment", available from the Sybase web site:

http://www.sybase.com/detail?id=1058536

There are no code changes for this issue. Note, that this problem does not occur with Solaris 10.

709640 The Relay Server Outbound Enabler uses GET requests to monitor backend server status when the -cs command line option is used. The GET request was using an incorrect host header that always pointed to localhost:80. This has been fixed to respect the host and port implied by the -cs option.
709644 The Unload Database wizard did not prohibit reloading a subset of a database's tables into a new database when one or more of the selected tables contained a column with a domain data type, even though attempting to do so would always fail. Now, the wizard prohibits this and provides a list of alternatives.
709648 When selecting a procedure or function and then selecting File->Execute in the Interactive SQL utility, the parameter editor table would have included "(Default)" entries for all parameters. Now "(Default)" is included only if the parameter has a default value.
709761 When attempting to open a log file using the MobiLink Server Log File Viewer, if the file could not be opened for any reason, an error message saying that the file cannot be opened was displayed and then Sybase Central would have reported an internal error. The problem which caused the internal error has been fixed.
709898 UltraLiteJ for Android now supports changing the database encryption key as documented for UltraLite.

The following API was added:

Connection.changeEncryptionKey( String newKey )

For consistency the following APIs were added, which are equivalent to setDatabaseKey and getDatabaseKey respectively:

ConfigPersistent.setEncryptionKey( String key )

String ConfigPersistent.getEncryptionKey()

709909 In rare, timing depending cases, the server could have crashed. This was more likely to have occurred when multiple database events could start and stop concurrently on multi-core computers. This has been fixed.
709935 When the MobiLink client cache was large, there could have been a long pause after the last synchronization before MobiLink client shut down. This has been fixed.

Following are examples of situations that cause the cache to grow large:

- a large upload

- an upload with with many blob values

- using the -cl option to force the cache to be large

- running on a machine with a large amount of memory

710072 Under certain rare circumstances, calling the system procedure sa_locks() could have caused the server to fail a fatal assertion. This has now been fixed.
710078 When a cookie used by the Relay Server is not encoded properly, it should result in a RSE1003 error, but sometime the error RSE2003 was raised instead. This has been fixed.
710111 The Relay Server Outbound Enabler report would have reported session errors without parameters to Relay Server, but subsequent errors may have caused a crash. This has been fixed.
710112 The Relay Server may have crashed when it received a session error with parameters from the Outbound Enabler. This has been fixed.
710285 Under rare circumstances, a server may have crashed while opening the result set cursor of a batch or stored procedure when the cursor's query was a cached simple SELECT. This has been fixed. A workaround is to turn plan caching off (option Max_plans_cached = 0).
710432 The MobiLink server could have crashed if a failed download using HTTP was restarted. This has been fixed.
710978 If there were fewer SQLFreeHandle( SQL_HANDLE_ENV,... ) than SQLAllocHandle( SQL_HANDLE_ENV,... ) calls, and at least one TCP/IP connection had been made, unloading the ODBC driver dll, usually when the application exits, could have taken much longer than it should have. This could also have occurred if there were fewer SQLDisconnect calls than successful SQLConnect calls. This has now been fixed.
711000 If an invalid value was given for a network protocol option on the Interactive SQL command line, the program could have reported an internal error. This would have happened only for those options which take a set of specific values. For example, running the following command would have crashed as "bogus" is not an allowable value for the "DoBroadcast" option.

dbisql -c "links=tcpip(DoBroadcast=bogus)"

This problem has been fixed.

711034 The START DATABASE statement includes the following optional clause:

CHECKSUM { ON | OFF }

Attempting to execute a START DATABASE statement in the Interactive SQL utility with this clause would have resulted in an inappropriate error message which complained of an unexpected keyword. This has been fixed.

Engineering Description:

The CHECKSUM clause was added in 12.0.0. I'm not sure how this got missed. I noticed the omission when I started to look at adding support for the new MIRROR ON clause of START DATABASE.

Behaviour Changes:

n/a

Admin Tools, Installers and Other Affected Software:

n/a

Documentation Changes:

n/a

Testing Requirements:

A test was added to the ISQL grammar test suite.

711129 In rare timing dependent cases, the server could have crashed if one or more connections were using the blocking_others_timeout temporary option. This has been fixed.
711139 Under exceptionally rare conditions, the server may have crashed while accepting a new shared memory connection, if the client application exited during connect request processing. This has been fixed.
711141 The ODBC driver could have crashed when executing a block insert statement using data-at-execution time parameters. The problem would only have occurred when mixing data-at-execution time parameters with regular parameters. This has been fixed.
711146 The Interactive SQL utility has an option to control which result sets from a query to display; just the first one, or all of them. If "Show all result sets" was selected, the widths of columns in the table on the "Results" panels were not automatically sized to show the data. If "Show only the first result set" was selected (which is the default), the columns were automatically sized correctly. This has been corrected.
711219 Some occurances of Relay Server error messages had the backend farm and server names in the wrong order. Errors affected were: RSF13000, RSF13001, RSF13007, RSF14000, RSF14001, RSF14002, RSF14003. This has now been corrected.
711258 Some shared memory sizes and other memory usage were logged using a format that cannot display value greater than 4 Gbytes. This has been corrected.
711260 In a mirrored database configuration on Windows, when the SQL Anywhere service encountered a fatal error, it may have failed to stop and the only way to stop it was to kill the dbsrv1x.exe process. This has been fixed.
711375 If the Remote Server name was longer than 64 characters, the system procedure sp_servercaps() would have returned a "right truncation of string data" error.

Example:

CREATE SERVER ABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJ

CLASS 'SAODBC'

USING 'SQL Anywhere 12 CustDB';

CALL sp_remote_tables('ABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJ');

CALL sp_remote_columns ('ABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJ', 'ULCustomer');

CALL sp_servercaps ('ABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJ');

The first two calls succeed. The sp_servercaps() call would have failed as the argument was limited to 64 characters, which is too short.

This problem has been fixed. The sp_servercaps() now accepts up to 128 characters.

711377 The text completer for the UltraLite function ML_GET_SERVER_NOTIFICATION would have completed the text as ML_GET_SERVIER_NOTIFICATION (note the extra "I" in "SERVER"). This has been fixed.
711380 In the SQL Anywhere Monitor, the sparkline for a metric was usually drawn empty. This has now been fixed.
711393 When a non-sticky load balancer was used in front of a Relay Server farm, concurrently requesting larger responses could have resulted in an RSE4003 error. This has been fixed. The workaround is to turn HTTP stickiness on for the load balancer, or to disable Relay Servers until only one remains enabled.
711401 Under rare circumstances, snapshot transactions could have caused the server to fail assertions 200505, 200610, 201501, or 201503. This was more likely to have occurred when other connections had rollbacks of large transactions underway. This has been fixed.
711499 If Sybase Central encountered an internal error, and the user elected to send a report to Sybase, they would get a message saying that the report could not be sent, even if it was. This problem also occurred with the Interactive SQL utility, the Console utility, or the MobiLink Monitor, and has been fixed.
711656 When fetching an unsigned int value from an sajdbc, iqjdbc or asejdbc remote server, the returned value would always have been NULL. This problem has now been fixed.

Note that this problem does not affect ODBC based remote servers.

711685 The Relay Server was buffering the entire HTTP chunk in server response for validation before relaying to the client at once. Some backend servers produce large chunks, as big as many megabytes. The buffering was consuming memory, and so reducing scalability. The large write also affected timeliness of the flow control evaluation done interleaving on the same line of execution. This has now been fixed by replacing the handling with streaming packets of size no bigger than 64k regardless of chunk boundary. The validation is still performed but now done with state tracking on the go.
711705 After creating a directory access server that used the new for 12.0.1 "{varname}" syntax in the USING clause, Sybase Central could have crashed when attempting to open the Directory Access Servers folder. This has been fixed.
711791 Recursive queries can not contain aggregate functions. When written using a window (OVER clause), aggregates were improperly allowed. In some cases this could have lead to the server crashing under certain system conditions. This has been fixed, queries with windowed aggregate functions now correctly give an error.
711803 If the encrypt() or decrypt() functions were called with a non-null string but a null encryption key, the functions returned null. This has been fixed. An encryption key is required, so these functions will now raise an error if the encryption key is null.
711977 The help screen for several SQL Anywhere utilities (viewcert, createcert, dbcloudadd, dbcloudextract, and dbcloudcmd) tried to format the output for terminal display by splitting at 80 characters. When multi-byte characters were used, the splitting could have happened in the middle of a character, causing that character to display incorrectly. This also affected general output from the dbcloudcmd. This has now been corrected.
712087 While using blocking timeout options in the presence of other connections accessing referenced tables, ALTER TABLE ... DROP FOREIGN KEY statements could have caused the server to fail assertion 102813. This has been fixed. Now the alter table statement fails, properly displaying a locking error.
712095 The Log Translation utility (dbtran) could have crashed if the transaction log ended in an incomplete checkpoint. This problem has been fixed
712099 Errors included in connection string parameters to the cloud command

line utilities were not reported to the user. This has been fixed.

712102 If an application called CallableStatement/PreparedStatement/Statement.executeQuery() and then subsequently called CallableStatement/PreparedStatement/Statement.getResultSet() to retrieve the same result set that was generated by calling executeQuery(), then the JDBC driver would have leaked the memory. This problem has now been fixed.

Note, there are two workarounds for this problem, both of which are considered better JDBC programming practices. The first is to use the ResultSet returned by calling executeQuery() directly and thereby avoid the second unnecessary call to getResultSet(). The other approach is to call execute() instead of executeQuery(), followed by a call to getResultSet().

712115 When providing named parameters to tasks through the Cloud Command utility (dbcloudcmd), the parameter name was only recognized if the case matched exactly. This has now been corrected.
712128 In rare cases, the server could have hung while trying to shut down a database if there were open connections that subsequently had open Remote Data Access connections. This problem has now been fixed.
712421 When sorting backups for a host by clicking on the Database column, it did not sort properly. This has been fixed.
712446 Under rare circumstances, the ConvertServerToCloudPartner task could have hung. This has been fixed.
712453 A link from a copy database in the Databases panel for a Host would have failed when the database contained accented characters. This has been fixed.
712456 When using the DBRowReader class, it was possible for all the values in a long column to be erroneously returned as NULL. This has been fixed.
712457 On Linux systems, the RepairServer task was not able to kill a server process during the repair steps. This has been fixed.
712459 In very rare timing dependent cases, a copy node that was both a parent and a child could have crashed, or failed with an assertion, while the transaction log was being renamed. This has been fixed.
712618 Setting the isql_allow_read_client_file or isql_allow_write_client_file options in the Interactive SQL utility to 'on' or 'off' had no effect. Interactive SQL would always behave as if the option was 'prompt'. This has been fixed.
712710 If a hostname was specified in a maintenance plan, full backups created through that maintenance plan may not have been stored on the specified host. This has been fixed.
712720 If an incremental backup succeeded but validation failed, and another incremental backup was executed on the same database, the resulting incremental backup could have been unusable for recovery. This has been fixed, if an incremental backup is startedn and the most recent full backup (or any backup since) is not marked as "successful", a full backup is done instead.
712721 If an incremental backup succeeded, but validation failed, attempting to validate that backup would have validated the associated full backup plus all incremental backups up to but not including the one specified. If the validation succeeded, the backup would then have been marked as valid, even if the files created by the backup were corrupted. This has been fixed.
712722 Under rare circumstances, rollback of a DML statement that affected a table with at least one immediate text index defined could have caused production assertion failure 200112. This has been fixed.
712851 A cloud partner could have hung upon losing quorum. This problem has now been fixed.
712884 In very rare timing dependent cases, if a mirroring primary failed over and then failed back, one partner could have received a log mismatch error and shutdown, and transactions that had been submitted could have been lost. Specifically, in order for this to have occurred with partners S1 and S2:

- S1 must initially have been the primary, failed or otherwise have shutdown, causing a failover to S2

- S2 took over as primary

- while S1 was restarting, S2 must have lost quorum and have been shutting down

In which case it was possible for S1 to have become primary again, even though it was missing the transactions from when S2 was primary.

This has been fixed to ensure that S1 will not be primary in this case, and S2 will continue to be primary once it restarts.

712964 The server could have crashed in very rare cases while attempting to close a connection that had previously made an external environment call if the external environment call subsequently made a server side request that obtained table locks which were still being held when the connection was closed. This problem has now been fixed.
713024 The Apache setup script now generates <LocationMatch> tags instead of <Location> tags when setting up Apache for RelayServer use. The use of <LocationMatch> allows for a wider range of regular expressions for URL matching, hence, reducing errors resulting from URL-mismatching. This fix also includes changes to the location of generated rs.config and oe.config files (used by the simple test app). The rs.config file is now generated in the RelayServer binaries directory (containing Apache modules and rshost), and the oe.config file is now generated in the same setup scripts directory.
713098 When the Relay Server was restarted, new persistent HTTP requests from persisting client cookies from a previous instance of the Relay Server could have caused truncated responses on new requests from new sessions by the time the backend server could have timed out the persistent connection of the old session. This has been fixed. A workaround is to have clients clear their cookie cache. The Relay Server affinity cookie is implemented as a non-persistent cookie, standard http client implementation shouldn't persist the RS affinity cookie across restart of the http client agent.
713113 In rare timing dependent cases, a mirror or copy node could have crashed or failed assertions (the most likely assertion was 100927). This could have occurred when very frequent transactions were committed on the primary and the mirror or copy node was not applying the operations as fast as it was writing them (i.e. db_property( 'LastWrittenRedoPos' ) is significantly more than db_property( 'CurrentRedoPos' )). This has been fixed.
713129 The Change Server Version wizard would have complained about an invalid search after clicking on 'Next'. This has been fixed.
713374 If a maintenance plan contained a host ID, incremental backups done through that maintenance plan would not have considered that host and would do the incremental backup to the host of the most recent full backup for each database. This has been fixed, if an incremental backup would be done to a host other than the one in the maintenance plan, a full backup to to the maintenance plan's host is done instead.
713388 Support for the latest release of .NET Framework, .NET 4.5, has now been added. The following features are new in the .NET Framework 4.5 RC:

1. Asynchronous Programming

The new asynchronous programming feature provides a simple technique to make code asynchronous.

Asynchronous code can make the user interface of client applications more responsive, it can also make server applications more scalable. Writing asynchronous code has traditionally involved installing a callback (also called continuation) to express the logic that occurs after the asynchronous operation finishes. This complicates the structure of asynchronous code as compared with synchronous code.

.NET 4.5 allows call into asynchronous methods without using callbacks, and without splitting code across multiple methods or lambda expressions.

The 'async' modifier specifies that a method is asynchronous. When calling an async method, a task is returned. When calling an 'await' statement against the task, the current method exits immediately. When the task finishes, execution resumes in the same method.

Calling an async method does not allocate any additional threads. It may use the existing I/O completion thread briefly at the end.

The following methods were added in SQL Anywhere ADO.NET provider to support asynchronous programming:

SAConnection.OpenAsync

SACommand.ExecuteDbDataReaderAsync

SACommand.ExecuteNonQueryAsync

SACommand.ExecuteReaderAsync

SACommand.ExecuteScalarAsync

SADataReader.GetFieldValueAsync

SADataReader.IsDBNullAsync

SADataReader.NextResultAsync

SADataReader.ReadAsync

SABulkCopy.WriteToServerAsync

Here are some examples:

internal async Task Execute()

{

using (SAConnection conn = new SAConnection("DSN=SQL Anywhere 16 Demo"))

{

SACommand command = new SACommand("select 1", conn);

int result = MethodAsync(conn, command).Result;

command = new SACommand("select top 10 * from SalesOrders", conn);

using (DbDataReader reader = await command.ExecuteReaderAsync())

{

while (await reader.ReadAsync())

Console.WriteLine(String.Format("{0}", reader[0]));

}

}

}

private async Task<int> MethodAsync(SAConnection conn, SACommand cmd)

{

await conn.OpenAsync();

await cmd.ExecuteNonQueryAsync();

return 1;

}

private async Task ExecuteSqlTransaction()

{

using (SAConnection connection = new SAConnection("DSN=SQL Anywhere 16 Demo"))

{

await connection.OpenAsync();

SACommand command = connection.CreateCommand();

SATransaction transaction = await Task.Run<SATransaction>(() => connection.BeginTransaction());

command.Connection = connection;

command.Transaction = transaction;

command.CommandText = "Delete From Departments Where (DepartmentID = 777 OR DepartmentID = 888)";

await command.ExecuteNonQueryAsync();

command.CommandText = "Insert into Departments(DepartmentID, DepartmentName) VALUES (777, 'HR')";

await command.ExecuteNonQueryAsync();

command.CommandText = "Insert into Departments(DepartmentID, DepartmentName) VALUES (888, 'Supporting')";

await command.ExecuteNonQueryAsync();

await Task.Run(() => transaction.Commit());

Console.WriteLine("Both records are written to database.");

}

}

private async Task AsyncSqlBulkCopy()

{

using (SAConnection conn = new SAConnection("DSN=SQL Anywhere 16 Demo"))

{

await conn.OpenAsync();

DataTable dt = new DataTable();

using (SACommand cmd = new SACommand(selStmt, conn))

{

SADataAdapter adapter = new SADataAdapter(cmd);

adapter.Fill(dt);

using (SABulkCopy bcp = new SABulkCopy(conn))

{

bcp.DestinationTableName = destTable;

await bcp.WriteToServerAsync(dt);

}

}

}

}

2. SACredential class.

A new class SACredential has been added for setting the credentials outside of the connection string via the new Credential property of SAConnection. Now the developer can create a SACredential object with a UserId and a SecureString Password to hold the credential values of a connection. This helps mitigate the memory dump vulnerability of keeping the User Name and Password in the connection string.

Here's an example:

private void OpenConnection()

{

SecureString password = new SecureString(); // txtPassword.SecurePassword;

password.MakeReadOnly();

SACredential credential = new SACredential( "dba", password );

using ( SAConnection conn = new SAConnection( "DSN=SQL Anywhere 16 Demo", credential ) )

{

conn.Open();

}

}

713390 In some circumstances, such as a transient connection error to the database server, the MobiLink Client process (dbmlsync) that was launched by the QAnywhere agent could have terminated prematurely. When this occurred, the QAnywhere agent could not perform any message transmission, and the only remedy was to restart the QAnywhere agent. This has been fixed by adding the capability to the QAnywhere agent to restart dbmlsync if it detects that the dbmlsync process has terminated.
713455 Support has been added to the MobiLink Server for consolidated databases running on Microsoft SQL Server 2012 servers with the Microsoft native ODBC driver named SQL Server Native Client 11.0, version 2011.110.xxx.xx. This support is limited to Microsoft Windows only.
713458 The Outbound Enabler was not logging requests at verbosity 1, but the Relay Server does. This has been corrected by lowering the minimum log verbosity level of RS_CLI_SESSION_BEGIN and RS_CLI_REQUEST_BEGIN packets in order to have them logged at verbosity level 1 instead of 3 in the Outbound Enabler. There will now be one log event per HTTP request at log level 1 like the Relay Server does.
713499 If a connection had multiple uncommitted operations (INSERT, UPDATE, DELETE), and another connection executed a COMMIT, an ArrayIndexOutOfBounds or a cast exception may have occurred. This has been fixed.
713542 The internal procedure dbcloud_compute_unload_key() was testing for the secure feature READFILE twice instead of READFILE and WRITEFILE. This has been corrected. It did not pose any security risk, as the procedure itself does not write any files and the check of the WRITEFILE secure feature is performed again later in the cloud unload/reload code that calls the procedure dbcloud_compute_unload_key().
713557 Some events and tasks took longer than expected to execute. This has been fixed.
713565 Sorting a column in any of the details panels did not preserve the setting the next time the panel was visited. This has been fixed.
713566 The cloud software panel may not have always refreshed the installed cloud software list. This has been fixed.
713568 Mini-dump files generated by SQL Anywhere software on Linux system could have been unusable. This problem was most likely to occur if the process being dumped was using a large number of threads (> 480). This has now been fixed.
713671 Attempting to applying a maintenance plan to multiple databases where one or more had accented characters in the name would have failed. This has been fixed.
713681 If the server was displaying the usage window, or was very early in the start-up process, and the Windows machine the server was running on was suspended, the server could have crashed when the machine was restarted. This has been fixed.
713695 The fault tolerant HTTP processing in UltraLiteJ for Java 2 Platform Standard Edition (J2SE) did not work correctly. This has been fixed.
713785 In some cases, errors relating to deadlocks or failures due to concurrent operations could have ocurred more often than necessary. These appeared in the diagnostics log, and would have been associated with a slight performance degradation. This has been fixed, Although these errors do continue to appear in properly functioning clouds.
713897 For tenant databases that were very active, validating a backup could have been cancelled before it was complete. If the validation was done as part of a backup, the backup could have been marked as "validation failed". This has been fixed.
713899 A query with a reverse index scan on the left hand side of a join may have resulted in a null pointer exception.

For example:

CREATE TABLE t1( a1 INT PRIMARY KEY )

CREATE TABLE t2( a2 INT PRIMARY KEY )

SELECT t1.a1, t2.a2 FROM t1, t2 ORDER BY t1.a1 DESC

Also, a query with a reverse index scan on the right hand side of a cross join may not have returned any rows.

For example:

SELECT t1.a1, dt.a FROM t1, (SELECT a2 FROM t2 ORDER BY a2 DESC) AS dt( a ) ORDER BY t1.a1 ASC

Both these issues have now been fixed.

713914 For a pooled CmdSeq connection or HTTP connection, connection_property( 'ApproximateCPUTime' ) incorrectly included CPU time from before the connection was reused, and connection_property( 'LoginTime' ) was not reset when a pooled connection was reused. This has been fixed, so that 'ApproximateCPUTime' now only includes time from when the application connected, and 'LoginTime' is set to the time when the application connected.
713922 If a query contained two predicates on the same column T.A, of the form 'T.A > constant' and 'T.A = R.A' , and an index on the column T.A exists, the cardinality of the index scan

with the predicate 'T.A = R.A' was incorrectly computed always using the predicate 'T.A > constant'. This may have affected the quality of the best plans for such queries. This has been fixed.

714093 The Event Trace Data File Management utility (dbmanageetd) would have shown an incorrect start time and/or end time when the show summary switch (-s) was used. This has been fixed.
714440 In a high availability system, a forced or preferred server fail-over could have failed to restart the database on the primary server if all of the following conditions held:

- the database character set was different from the operating system character set

- the database name (or alias) contained characters other than 7-bit ASCII characters

- an "ALTER DATABASE SET PARTNER FAILOVER" statement was executed, or a preferred partner was defined and the current primary was the non-preferred partner.

This has been fixed.

714525 A mirrored tenant database may have been left in an invalid state if the arbiter of the tenant database was dropped by the task DropServer or DropHost. Checking for the arbiter should have been done prior to dropping the arbiter so that the arbiter can be dropped under the proper condition. This has been fixed.
714642 If SQL Remote had failed to find a publisher for the database it was connected to, it would have continued to run and could have generated a large number of duplicate messages for a single remote user. This has been corrected so that SQL Remote will now shut down when it determines there is no publisher.
714654 If a cloud database became unavailable, and it was being monitored by the SQL Anywhere Monitor, the alert details would have claimed the server name to be 'null'. This has been fixed.
714656 The server could have crashed when starting a database. If the server was in the process of shrinking the cache, references to memory that were no longer available were possible. This has now been fixed.
714752 Queries using text indexes with constructs of the form CONTAINS( ... 'xxx*' ... ) may have had poor performance. This has been fixed.
714776 In rare timing dependent cases, a high availability mirror or copy node could have incorrectly failed with the assertion 100927. The assertion could have occurred just after the mirror or copy node had connected to its partner or parent and had just started synchronizing. This has been fixed.
714777 In rare cases, a mirroring server could have crashed if it received an invalid request from another mirror server. This has been fixed to no longer crash.
714809 A result set could have been returned with both the pre-image and the post-image of a row that was updated while the cursor was sitting on it. This has been fixed. Result sets will now return only one copy of the row, the pre-image or the post-image, but not both, depending on the isolation level and when the update is committed.
714896 Issues with the IIS 6 and IIS& QuickSetup scripts have been corrected:

- the IIS7 auto install could not be invoked if the appcmd.exe utility was missing. This issue has been fixed so that appcmd.exe utility is not needed before triggering IIS7 [re]installation.

- the IIS7 Relay Server setup script could not handle a machine not having a domain suffix.

- the IIS6 & IIS7 Relay Server setup scripts were referencing sleep.exe which is not a standard utility on Windows. The reference has been removed.

714899 The server would have returned error code 503 when attempting a connection to an ESMTP server using xp_startsmtp. This has been fixed.
715025 A Relay Server, which doesn't produce urgent flow control packets according to protocol, could have crashed the Outbound Enabler. No Relay Server has been released with this problem, but a fix has been made so that the Outbound Enabler will give an error and not crash in such situations.
715033 The following changes have been made to the Relay Server level 4 debug log:

- The "Replaying 0 bytes ..." message was confusing and has been suppressed.

- Added "Response headers submitted for sending" message.

- Logging Content-length expectation up front.

- Enhance Content-length replay status with remaining length.

- Added user friendly response status and header logging so that users don't need to suffer level 5 payload logging which is heavier and less readable.

- Moved user friendly request header logging from log level 5 to log level 4 so that user don't need to suffer level 5 payload logging which is heavier an less readable.

715069 Sybase Central would have crashed on shutdown if the Services folder was in the process of polling, that is, if the "Enable polling" check box on the Polling tab of a service property sheet was checked. This has been fixed.
715167 The Relay Server affinity cookies were sometime not used properly by third party client software in cases where the same cookie was used concurrently on different HTTP requests. In such situation, the Relay Server behaviour was to let the latest request to take over the connection associated with the affinity cookie. An optional backend farm property called renew_overlapped_cookie has now been introduced. It has a default value of 'No', which maps to the existing behavior. When renew_overlapped_cookie is set to 'Yes', the Relay Server will detect overlap for the farm that has this property explicitly turned on and renew the overlapping cookie by creating a brand new affinity binding. The request with the renewal will still be routed to the same backend server but not the same backend connection as the on going request that it overlapped with. A new backend connection will be created instead.

Relay Server configuration example:

[backend_farm]

description = a backend server farm

id = RSTEST02.F0

renew_overlapped_cookie= yes

Online update of the of the renew_overlapped_cookie property is supported.

715218 In rare cases, SQL Remote would have started applying a multi-part message before receiving the last piece the message, and then would have ignored all the operations in the last piece of the message when it was received. This has been fixed, SQL Remote will make sure it has received all the pieces of a multi-part message before applying them.
715309 The server was incorrectly accepting the special values NaN, INF, and INFINITY for double and float data types when receiving host variable values. This has been fixed. Now the server will set the SQL error "Value NaN/INF out of range for destination".
715310 If a mirror or copy node was shutdown, and it was actively applying log operations from the primary or its parent, the server could have failed assertion 100904 - "Statement interrupted by user". This has been fixed by not failing this assertion when the server is in the process of shutting down.
715469 The interactive response of the Lookup Table Name and Lookup Procedure Name windows in the Interactive SQL utility has been improved.
715473 In extremely rare cases, the server may have crashed on shutdown on multi-CPU machines. This has been fixed.
715480 When using the Unload utility to rebuild a pre-version 10 database, if the connection string contained the server name or the source database name, then the warning 'Rebuild of database with older file format ignoring connection parameter "???"' was printed with question marks for the parameter. This has been fixed so that the parameter name is now displayed in the message.
715583 It was possible to create duplicate indexes for a table in a case-sensitive database if the only difference between the index names was case or accent. For example, both foo and Foo could have been created with same or different definitions. This has now been fixed.
715597 Performance of statements that select from a stored procedure call is slightly improved when the call results in a SQLError.
715615 Under rare circumstances, database recovery could have held locks on a new text index. This has been fixed.

Also, text index validation could have returned an error later than necessary. This has been fixed in version 12.0.1 and later.

715672 Attempting to connect Sybase Central to a database running on a version 11.0.0 or earlier server would have caused Sybase Central to crash. This has been

fixed.

715687 When the server collects information about database pages to be used for cache warming in the next database start, it also incorrectly collected information about pages that the database cleaner task reads. This has been fixed so that page recording no longer includes pages read by the cleaner since these pages are different each time.
715799 Two foreign key or unique constraints on the same table could have been created with names that represent the same identifier, but differ only in case. For example 'myFK' and 'myfk'.

This has been fixed.

715843 In rare cases, attempting to use nested procedures with nested transactions and internally generated temporary tables would have failed assertion 201501, 101412, 200505 or others. This problem has now been fixed.
715904 Installing SQL Anywhere in silent mode on Solaris systems may have resulted in an error like:

"The following option names are invalid or are not exposed by the registration key provided".

This has been fixed.

715906 The Support utility (dbsupport) may have crashed while attempting to receive a response from the error reporting site, if the error reporting site was not available. This has not been corrected.
715909 The output from the system procedure sa_locks() could have been incorrect, in that it may have missed reporting some row locks. This has now been corrected. This was a reporting problem only, and did not affect actual locking behaviour.
716036 The changes for Engineering case 702214 may have made an external environment call take significantly longer when connected to a case sensitive database. This problem has now been fixed.
716037 If the Down Channel between the Relay Server and the Outbound Enabler was healthy, the Outbound Enabler would not have checked for liveness on the Up Channel. In very rare circumstances, the Down Channel could be healthy, but an intermediary between the Relay Server and Outbound Enabler has closed the socket for the Up Channel at the Relay Server, while leaving the corresponding socket on the Outbound Enabler open. In this scenario, the Outbound Enabler would never have attempted to re-connect the Up Channel, and no communication with the backend server was possible. When the Down Channel is healthy, the Outbound Enabler now increases the time for the liveness by a factor of four instead of disabling the liveness.
716317 Under some circumstances, especially if a cached plan was used, a select from a DML statement (INSERT, DELETE, UPDATE, or MERGE) may have returned an incorrect result set. This has been fixed.
716390 N ADO .Net client application could have received a NullReferenceException when updating entities using Fixed concurrency mode. This problem has been fixed.
716529 Installing cloud software on multiple hosts with a particular name format may have failed. This has been fixed.
716537 In a multi-level read-only scale-out configuration, executing the "ALTER MIRROR SERVER ... ALTER PARENT FROM ..." statement could have resulted in read-only scale-out servers not being able to connect to their parent, even if their parent was running. This has been fixed.

Note, a work around is to stop and restart copy node servers that cannot connect to their running parent.

716538 An addition fix was required for Engineering case 714656, where the server could have crashed when auto-starting a database.
716544 Explicitly passing in NULL as the 3rd parameter (algorithm) to the encrypt or decrypt function would have resulted in the error: "The string is too long (Parameter 3)" SQLCODE -973, rather than having the encryption/decryption default to AES128. This has been fixed. Not specifying the third parameter at all would have worked properly.
716549 Generating a diagnostic log from a host 'Events & Tasks' panel may have failed. This has been fixed.
716625 In rare timing dependent cases, a transaction which was successfully committed on a primary server could have been lost. In order for there to have been a chance of this occurring, all of the following needed to be true:

- the application was connected to a primary server that lost quorum (the server lost the connection to both the mirror and arbiter servers)

- the application stayed connected to this server (the old primary server) even though the network connection to other servers dropped

- the application was in the middle of committing a transaction between the time that the old primary server lost its connection to the mirror and arbiter server, and when the old primary server restarted as the new mirror server because it lost quorum

- the old mirror server took over as the new primary (the mirror server must have been able to connect to the arbiter server for this to occur)

This has been fixed.

716746 On the Backups panel for a host, clicking a column to sort it would not have worked properly. This has now been fixed.
716907 Sometimes, connections to a cloud would not show its HA information properly on the Console's Cloud Overview panel. This has been fixed.
716908 Attempting to upgrade a database initialized with software prior to version 10, to version 10 or higher, on a computer running Linux that uses a 3.x kernel may have failed. This was most likely on systems with more than 4 GB of RAM, or with 32-bit software. This has now been fixed.
716916 The UpgradeCloudInfrastructure task could have failed during stage 1 if cloud software or hosts were recently dropped. This has been fixed.

A work around is to manually run the CleanCloud task and then run the UpgradeCloudInfrastructure task again.

Engineering Description:

716984 When viewing backups for a host in the Cloud Console and changing to a new page, selecting a new host to show its backups would remain on that page still showing the first hosts backups. This has been fixed.
717011 In the 'Backups' or 'Back Up & Restore' tabs of the Cloud Console, the backup validation result would have shown the result from the previous row if the backup had failed. This has been fixed
717014 Under rare circumstances, incremental backups could have incorrectly been assigned to full backups, and/or created on the wrong host. This has been fixed.
717024 Attempting the execute a CREATE EXISTING TABLE that referenced a remote server using IBM's NotesSQL ODBC driver version 8.5.1 would have resulted in mangled column names. The statement would likely have failed with a Syntax error (SQLCODE=-131, ODBC 3 State=42000). This problem has now been fixed.
717096 The Export Wizard in the Interactive SQL utility had the "Include column names" check box incorrectly disabled when the user elected not to escape text data. These two options are, in fact, independent. Now, the "Include column names" check box is always enabled.
717100 Unchecking the "Escape text data" box in the Export Wizard did not turn off escaping of text data. This has been corrected so that now it does.
717187 The Interactive SQL utility's OUTPUT statement can write data to a text file. Special characters in the data can be escaped, or not, as specified by the ESCAPES clause. If ESCAPES OFF was specified, special characters were not escaped, but the quote character (an apostophe, by default) was not being doubled up as it should have been. As a result, the generated text file could not be subsequently processed by the INPUT statement because the quotes were not matched. This has been fixed.
717313 Archive backups would have suspended checkpoints until the next COMMIT or ROLLBACK. This would have prevent checkpoints, and commands that implicitly issued checkpoints, from running until that point. This has been fixed.
717316 In some circumstances, the server could have crashed, failed assertions, or rarely, could have returned incorrect data, when working with tables that contained more than eight thousand columns. This has been fixed.

Note, a database with more than eight thousand columns that is run with a server that contains this fix cannot be run on an older server. Doing so will result in startup error -1007 "Unable to start specified database: '%1' is an invalid transaction log" on the older, unfixed server.

717363 The ADO.NET provider was generating inefficient queries, using CHARINDEX, for some Entity Framework functions, such as StartsWith, EndsWith, and Contains. This problem has been fixed.
717377 A query involving CASE or IF, with references to a sub-query, could have crashed UltraLite when the query was executed. This has been fixed.
717388 If there were several system servers on a host, all of which were not running, the cloud agent may not have run an agent action on that host within the timeout period of the action. This has been fixed.
717390 The Support utility (dbsupport) could have crashed if Error Reporting server was down. This has been fixed.
717474 If an owner was given on a CREATE TABLE or CREATE VIEW statement within a CREATE SCHEMA statement, and the owner did not match the current user, the object was created anyway if the current user had DBA authority. This has been fixed so that objects cannot be created using CREATE SCHEMA for a user other than the current user.
717497 A DESCRIBE of certain types of queries (eg. recursive) from an embedded SQL application could have resulted in the error -700: "SQLDA fields inconsistent for a multi-row SQLDA". This has been fixed.
717545 On Solaris systems, the setup script run by the install would have failed with the message "Bad string" when run on systems with a multi-byte charset locale. This has been fixed.
717571 If the username given in the AUTHORIZATION clause of the CREATE SCHEMA statement did not match the current user, the statement succeeded anyway and the objects created were owned by the current user. This has been fixed so as to behave as documented, the userid must match the userid of the current user, an error will occur if it does not.
717582 When running on Mac OS X and iOS systems, it is possible that writes to an UltraLite database file could have been reordered by the underlying hardware/storage device under certain circumstances, possibly resulting in a corrupt database file. This has been corrected by having UltraLite make extra calls to request the hardware complete writes in order when required.
717689 If an 11.x or 12.x database was upgraded using either the Upgrade utility, or ALTER DATABASE UPGRADE, then external environments would no longer have started. This problem has now been fixed.

Note that in order to apply this fix, the database will need to be upgraded again once this fix has been properly deployed.

717690 Certain applications often make decisions based on the set of data types returned when making a SQLGetTypeInfo() ODBC call or a DatabaseMetaData.getTypeInfo() JDBC call. An example of such an application is the "Export to ODBC Database" functionality in MS Access where the application will use the data type information returned by the SQLGetTypeInfo() call to decide what column types should be included in the subsequent CREATE TABLE statement. In some rare cases, the choices the application makes due to the existence of certain data types may not be the most appropriate and it is sometimes useful to hide the fact that the ODBC or JDBC driver supports certain data types. The new SuppressInfoForDataTypes connection option can be used for both the SQL Anywhere ODBC Driver and the SQL Anywhere JDBC Driver to instruct to the driver to not return data type information for certain data types. The set of data types to suppress should be specified as a comma separated list. For example, the application could have the following on the ODBC or JDBC connection string:

SuppressInfoForDataTypes=nvarchar,long nvarchar;varbit

The above would then instruct the driver that data type information for the nvarchar, long nvarchar and varbit data types should not be returned for this specific connection when the application makes a SQLGetTypeInfo() or DatabaseMetaData.getTypeInfo() call. It should be noted that the suppression only applies to returning data type information from the driver. The application is still free to use the data type in column declarations and when retrieving result sets.

717694 Execution times of prefetches increased when compared with previous releases. This has been fixed.
717784 On Windows 8 and Windows 2012 systems, the platform-related properties would have indicated an "unrecognized Windows version". Support for these two platforms has now been added.
717881 When viewing backups for a host or a database, a sorted column would still have shown a sort arrow when switching to a new host or database, but the column would not be sorted. This has been fixed.
717944 In rare cases, calling the system procedure sa_transactions(), may have lead to a server crash. This has been fixed.
717965 The "Backups" and "Back Up & Restore" panels did not show a column indicating the backup result. If a backup failed, a file size of 0 was the only indication. Unfortunately, a pending backup also shows a file size of 0. A 'Backup Result' column has now been added, which will show and the file size is blank unless the backup succeeds.
717966 The time to process an HTTP or HTTPS request that contained a large number of input variables may have been longer than expected. This has been fixed.
718046 When creating an ADO.NET Entity Data Model using an existing stored procedure, some of the SQL Anywhere data types were not mapped correctly. This would have been seen when clicking the "Get Column Information" button in the "Add Function Import..." dialog. This has been corrected.
718122 If a connection updated a table and subsequently left a cursor open past a COMMIT or ROLLBACK, other connections would not have been able to lock the entire table in share mode (i.e. LOCK TABLE t IN SHARE MODE) until the updating connection closed the cursors and did a COMMIT or ROLLBACK. This has been fixed.
718127 When importing or exporting to an UltraLite database using the Interactive SQL utility, LONG BINARY and LONG VARCHAR datatypes could have been truncated or an error reported. This has now been fixed.
718130 When using a Web browser to ping the MobiLink server, the "404 Not Found" response could have contained extra bytes at the end. This has been fixed.
718270 In the Create User wizard, attempting to create a user without a password and setting the login policy to something other than "root" would have caused the login policy setting to be ignored. This has been fixed.
718317 A query using sub-queries with a UNION may have returned incorrect results.

For example:

select (select 1) union select 2"

the sub-query (select 1) was not evaluated properly. This has now been fixed.

718369 Attempting to insert a string literal containing multi-byte characters into an nchar based proxy column may have actually inserted mangled data into the remote column, if the local database character set was not UTF8. This problem has now been fixed.

Note that inserting multi-byte character data using an nchar based variable or column as the source works fine. As a result, using an nchar based variable instead of a string literal is a possible work around for this problem.

718375 In rare cases, a copy node whose parent was not the primary or root could have failed assertion 100927 immediately after a log rename.

In very rare cases, a mirror or copy node that was automatically restarted immediately after a log rename could have incorrectly restarted as a non-mirrored read-write

database. The automatic restart could have occurred for a number of reasons, including rare cases of a lost connection to the parent server.

Both of these problems have now been fixed.

718489 Calling a stored procedure from any driver that uses the SQL Anywhere C API runtime library (eg. python, perl, ruby) would have returned incorrect values for the second and subsequent string (binary, varchar, long binary, or long varchar) OUT parameters. All string prameters would have been given the value of the first string parameter. This has been fixed.
718497 Creating a REMOTE SERVER definition with a USING clause that contained both "DRIVER=SQL Anywhere Native" and "DSN=..." would have resulted in the connection string used to connect to the remote SA server not containing the items in the DSN entry. This problem has now been fixed.
718525 In very rare situations, the server could crash when using the OPENSTRING clause, string concatenation, substring operation, or attempting to execute a LOAD TABLE statement. The problem was most likely to have occurred when cache pressure was very high. This problem has been fixed.
718761 SABulkCopy would have failed with an OutOfMemoryException when copying large tables using a DataReader. This problem has been fixed.
718762 The 揊unction Import� construct within the Entity Framework would have failed with a NullReferenceException for return types of "None". This problem has been fixed.
718875 In a mirroring setup, if a copynode or the mirror was still connected to its parent or partner, and was busy receiving a lot of pages from its parent, and needed to restart for some reason, the server could have waited until it wasn抰 as busy before restarting. A mirrored database may need to restart in many situations. For example, a restart is required when a copynode抯 parent has changed, or when a mirror is converted to a copy node. This has been fixed, so the server will restart much sooner after deciding it needs to restart, and will not wait until there is a break in receiving information from its parent or partner.
718970 Creating an incremental backup could have failed if the machine hosting the corresponding full backup was not currently running a server capable of running the database being backed up. This has been fixed. Now a full backup (to a different host) will be done. However, if the incremental backup is being done through a maintenance plan with a specific host name, no backup will be done.
719080 If the MibiLink client executable (dbmlsync) had been located in a directory that was specified in the PATH environment variable that contained two consecutive backslashes (for example, c:\\sa12\bin64), the Dbmlsync .NET API could have failed to start the dbmlsync process. This problem has now been fixed.

A workaround to this problem is to set the "server path" property using the SetProperty method to specify the location of the dbmlsync executable.

719089 A JDBC application that connected using the SQL Anywhere JDBC driver, and then subsequently exited with a large number of connections still open, could in rare cases crash or hang. This problem has now been fixed.
719105 In some circumstances, the primary server in a mirroring setup may not have allowed the mirror to take over as primary when an ALTER DATABASE SET PARTNER FAILOVER occurred. The server would have waited until all active transactions were committed. This has been fixed. Now, the failover will occur as soon as the servers are synchronized, and the mirror has all the committed transactions from the primary. Any transactions that have not been committed will be lost when the failover occurs.
719107 In the cloud, the FailoverToCloudPartner task could have been reported as cancelled, even if it ran successfully. This has been fixed so that the status of the FailoverToCloudPartner task should now be accurately reported.
719111 User-defined counters are implemented as UNSIGNED INTEGER, but their values could not be set or adjusted using values that were greater than 2147483647. This has been corrected so that values can now range up to 4294967295.
719112 Data conversion errors could have occurred when passing DateTimeOffset parameters to a stored procedure using the Entity Framework function import. This problem has been fixed.
719220 In rare timing dependent cases, the changes for Engineering case 713113 mau have caused a mirror or copy node to fail assertion 100927 when starting the database. The assertion text was "Transaction log page number 0x<first-hex-number> from parent or partner is not expected page number 0x<second-hex-number>", where the first-hex-number was one lower then second-hex-number. If this assertion failure occurred, restarting the mirror or copy node should succeed. This has been fixed.
719292 Attempting to connect to a database by specifying an IPv6 address would most likely have failed. This has been fixed.

Note, in the Connect window, a new IPv6 address can be entered in the Host field. If the address ends in a colon and a port number, the host portion of the address must be enclosed in square brackets. This is as documented. An IPv6 address can also be entered without a port number and without square brackets in the Host field. When entering a port number in the Port field, the square brackets will be added automatically.

719334 The cardinality estimation for an index with descending (DESC) columns may have been incorrect. This has been fixed.

The conditions for this issue to happen, for a query Q, were:

1 - The index on the table T was of the form <X1, �, Xk, �> with k > 1

2 - The first k-1 columns in the prefix of the index had predicates of the form T.Xi = constant in the query Q

3 - The column k had the predicate of the form T.Xk \theta constantk (\theta n {<, <=, >, >=}), or T.Xk between constantk and constank+1 in the query Q

4 - The column T.Xk was declared DESC in the index.

719385 The SQL Anywhere ADO.NET provider now supports Entity Framework 5. EF 5 is the latest release of Entity Framework. It comes with Visual Studio 2012, or it can be downloaded as Visual Studio 2012 NuGet package.
719397 Under rare conditions, the server or client library could have crashed when attempting an LDAP operation (eg. registering the server, searching LDAP for servers when connecting). This has been fixed.
719402 Messages generated by the iAS ODBC driver for Oracle could have contained unreadable characters at the end, if the message length was equal to or greater than 256 characters.

This problem is now fixed.

719422 UltraLiteJ for Android now supports system events for:

- Table modifications,

- Commits,

- Synchronization completion.

An UltraLiteJ application registers and waits for system events on a Connection. However, events are system-wide so that a Connection can receive notifications of the above events that are triggered from Connections on other threads.

An event is encapsulated by the following class:

public interface ULjEvent

{

// event types

final short TABLE_MODIFIED_EVENT = 1;

final short COMMIT_EVENT = 2;

final short SYNC_COMPLETE_EVENT = 3;

/**

* Returns the event type.

*/

short getType();

/**

* Returns a named parameter for the event.

*/

String getParameter( String name ) throws ULjException;

};

The following methods have been added to the Connection class:

/** Waits for an event notification.

*

* This call blocks until a notification is received or until the given

* wait period expires. To wait indefinitely, set the wait_ms parameter to

* -1. To cancel a wait, use the cancelWaitForEvent method.

*

* @param waitms The time, in milliseconds to wait (block) before returning.

* @return The event that occurred within the wait time, or null if no

* notification was received within the wait time.

*

* @see ULjEvent

* @see cancelWaitForEvent

*/

public ULjEvent waitForEvent( int wait_ms ) throws ULjException;

/** Register to receive notifications of a system event.

*

* @param event_type The type of event to register for.

* @param object_name The object to which the event applies. (for example,

* a table name).

*

* @see ULjEvent

*/

public void registerForEvent( short event_type, String object_name )

throws ULjException;

/** Unregister to receive notifications of a system event.

*

* @param event_type The type of event to unregister for.

* @param object_name The object to which the event applies. (for example,

* a table name).

*

* @see ULjEvent

*/

public void unregisterForEvent( short event_type, String object_name )

throws ULjException;

/** Cancels any waitForEvent calls on this connection.

*

* @see waitForEvent

*/

public void cancelWaitForEvent() throws ULjException;

Note that the object_name parameter of register/unregisterForEvent is only used for event type ULjEvent.TABLE_MODIFIED_EVENT. In that case the object_name is the table name for which to receive notifications of modifications, or "*" for all tables. Pass null for the object_name for the other event types.

719484 A query having a theta (subquery) predicate may have crashed the server during query optimization. One of the conditions for this issue to have occurred was that the subquery抯 select items and groupby expressions were base table columns of the same index, and the subquery was a grouped query block.

For example:

Select *

from T where T.X = (select R.X where �. Group by R.Y)

and there existed an index on R on columns <X,Y>.

This has now been fixed.

719503 The server would have failed assertion 107400 - Internal parse tree error, if a query used proxy tables and contained a common table expression in a derived table, and the derived table was flatted. This has been fixed
719505 UltraLiteJ for Android has a new method, DatabaseInfo.getNumberRowsToUpload( String pubList, int threshold ), that provides the same functionality as the UltraLiteC API ULConnection::CountUploadRows( const char * pubList, ul_u_long threshold ).
719710 Executing an ALTER TABLE statement on an empty table could have caused a server crash on a subsequent table scan of the table. This has been fixed.
719719 When using the SQL Anywhere C API, the information returned by sql_column_info would always have indicated that nulls were not allowed. This has been fixed.
719758 The .Net Provider could have incorrectly thrown an "Unknown PrimitiveTypeKind DateTimeOffset" exception. This has been fixed.
719834 The Relay Server Outbound Enabler was logging response bytes at verbosity 9, but should have been logging them at verbosity 5 or higher. This has been fixed.
719932 In a mirroring setup during a forced failover, it was possible for the new mirror to get stuck in a situation where the database would print the following error to the console log: 損rimary not available or mirror log longer than primary�, and proceed to restart. This could often be fixed by executing a transaction on the new primary after the failover was complete. This bug has been fixed, and the mirror server should now start up without difficulty.
720066 If a connection could not be made to the root or primary server from a copy node that did not already have a mirror definition, the copy node could have crashed after about max_retry_connect_time from when the copy node was started. This has been fixed.
720219 Executing a SET MIRROR OPTION option-name = NULL statement would not have correctly changed the behavior of currently running databases for the auto_failover and synchronization_mode options. Once the database was restarted on a partner server, the option value would then have been correctly interpreted as the default value for the option. This has been fixed so that the default value for the option is effective immediately after the SET MIRROR OPTION option-name = NULL statement is executed or applied.
720280 Trying to source the sa_config.csh script file (generated by the Unix installer) would have failed with the error "Missing ]". This has been fixed.
720288 The SQL Preprocesor (sqlpp) would have incorrectly reported a warning or possibly an error if the file it was preprocessing had static SQL containing "TIMESTAMP WITH TIME ZONE". The most likely sqlpp warning was "Warning! W2661 near 'with': Unrecognized SQL syntax". This has now been fixed.
720298 Under rare circumstances, calling the system procedure sa_index_statistics() could have caused the server to crash. This has been fixed.
720303 In a client-only installation, the Services wizard would not have allowed the creation of a Windows service. This was incorrect, as it prohibited creating a MobiLink service, and has been fixed.
720384 Under very rare circumstances, the server may have crashed when running the procedure sp_forward_to_remote_server, or any of the Remote Data Access procedures (i.e sp_remote_columns, sp_remote_tables, etc). This has been fixed.
720419 LONG VARCHAR columns could have contained incorrect results for the second and subsequent queries using that datatype.
720462 Under very rare circumstances, the server may have crashed when running the system procedures sa_char_terms or sa_nchar_terms, or some internal text index related procedures, with invalid arguments. This has been fixed.
720473 An application that connected using either the SQL Anywhere ODBC Driver or the SQL Anywhere JDBC Driver, with a userid that did not have SELECT ANY TABLE privilege, would have retrieved the wrong result set when calling either SQLTables or DatabaseMetaData.getTables() when the request was for base tables only. In particular, dbo owned system tables would have been incorrectly returned in the result set. This problem did not exist if the application connected with a userid that had SELECT ANY TABLE privilege. The problem has now been fixed and dbo owned system table information no longer gets returned if the request explicitly asks for base table information only.
720488 When creating a config (class ConfigPersistent), setting a row score flush size greater than 0 would have turned on both row limiting and lazy loading, however this was not immediately reflected by getLazyLoadIndexes(). Furthermore, a subsequent call to setLazyLoadIndexes( false ) would not have turned off lazy loading as the row score flush size was still set. This has been fixed. ConfigPersistent.setRowScorFlushSize() with a value greater than zero immediately marks lazy loading as on. ConfigPersistent.setLazyLoadIndexes() with false immediately sets the row score flush size to zero.
720489 In very rare timing dependent cases, when a high availability mirror was taking over as primary, it could have hung or failed assertions 100924 or 100925. In order for this to have occurred, the mirror must have had active read-only connections using temporary tables and performing commits or rollbacks, as well as certain other conditions. This has been fixed.
720564 If the MobiLink client (dbmlsync) was running on a schedule, the MobiLink Server could not be located, and dbmlsync did not know the status of the last synchronization, it was possible for dbmlsync to have shut down. The problem is now fixed, and dbmlsync will remain running on a schedule, even if the MobiLink Server cannot be located.
720592 If the values 'SYSTEM TABLE', 慡YSTEM VIEW� or 'GLOBAL TEMPORARY' were specified as the TABLE_TYPE restriction for either of the SQL Anywhere OLE DB DBSCHEMA_TABLES or DBSCHEMA_TABLES_INFO rowsets, an empty rowset was returned. If 慣ABLE�, 慥IEW�, or 慣EXT� was specified as the TABLE_TYPE restriction, there was no problem. This problem has been corrected. To correct the problem in an existing database, the Upgrade utility must be used once the problem resolution fix (EBF) has been installed.
720607 When the SQL Preprocessor was run with the "-e u" command line option (Flag syntax that is not supported by UltraLite) it would have incorrectly reported the TIMESTAMP WITH TIME ZONE syntax as a language extension. This has been fixed so that it is no longer reported as a language extension.
720643 -
720725 If a subquery using a LIKE predicate, scaned an index in reverse order but another earlier index scan used the index in forward order, or vice versa, the LIKE scan would have accessed the table in the wrong order.

For example:

SELECT c.name, d.b FROM fwd c,

(SELECT TOP 2 name FROM fwd2 WHERE name LIKE 慳%� ORDER BY name ASC) AS d( b )

WHERE c.name LIKE 慾%�

ORDER BY c.name DESC

This has been fixed.

720804 If a backwards index scan blocked on a locked row, it would have continued onto the next row after it resumed, rather than retrying the current row. This has been fixed.
720811 A high availability mirror or a copy node server running on Windows could have failed assertion 112002 during a transaction log rename. This has been fixed.

If the high availability mirror was busy applying log pages, failing over due to the other partner being preferred, or due to the ALTER DATABASE SET PARTNER FAILOVER statement, could have been delayed for a minute or more. This has also been fixed.

721039 Dropping a connection that had previously made an external environment call to a connection scoped external environment, could, in very rare cases, have caused the server to crash. This problem has now been fixed.
721068 Under rare circumstances, a 揝tatement interrupted by user� error could have been returned from parallel query executionm, instead of the correct runtime error. Other possible behaviours under the same circumstances were returning an 揢nexpected error� error, or a server crash. This has been fixed.
721070 The REGEXP search condition and the REGEXP_SUBSTR function could have incorrectly matched or failed to match regular expressions with ^ or $ followed immediately by a character that had special meaning in a regular expression if it was escaped. For example, REGEXP_SUBSTR( 'A', '^A' ) was incorrectly returning NULL. This has been fixed.
721288 In rare cases, if a copy node was renaming the transaction log while a child copy node was requesting log pages, the parent copy node could have failed with "Fatal Error: Internal database error". Note that a child copy node only requests pages until the child has all the log pages that the parent has (after that the parent sends the updated log pages as they are written).

Also, in very rare cases, if a copy node or mirror was renaming the transaction log while the connection to the parent or partner dropped, the could node or mirror could have crashed.

These issues have now been fixed.

721300 Copy nodes which used a partner server name as a parent (as opposed to the primary or mirror), could have failed to connect to this parent. In this case, the initial connection to the parent could have succeeded, but if the parent database or server was restarted, the copy node was unable to connect. This has been fixed.
721318 The changes for Engineering case 674232 broke JAX-WS support for multiple databases on a server. The generated WSDL document omitted the database name in the targetNamespace. For example, targetNamespace="http://localhost:8082/WS" instead of targetNamespace="http://localhost:8082/demo/WS".

As a result, all the URL references to web services could have gone to the wrong database. It would have gone to the database that was started first. This problem can not be worked around using the DBN option, as follows:

dbsrv12 -xs http(port=8082;dbn=test) "%SQLANYSAMP12%\demo.db" test.db

as the targetNamespace is correct but the wsdlLocation is wrong. The correct workaround is to edit the source files generated by wsimport and make the corrections. This problem has been fixed.

721394 The server may have failed assertions 111706, 111707, or 201200, if a procedure call was used in a SELECT statement, one of the specified arguments exceeded its declared parameter size, and the procedure used the argument in a DML statement. This has been fixed.
721396 Two new methods have now been added to UltraLiteJ for Android: PreparedStatement.getParameterCount() and PreparedStatement.getParameterType( int ).
721398 A new method, Connection.getState(), has been added to UltraLiteJ for Android for consistency with UltraLiteJ for BlackBerry.
721401 UltraLiteJ for Android now has the capability to get error parameters from ULjException objects. The methods ULjException.getParameterCount(), ULjException.getParameter( int ), SQLInfo.getParameterCount(), and SQLInfo.getParameter( int ) have been added.
721437 The "Check for Updates" menu item in the Interactive SQL utility, Sybase Central, and DBConsole would have always reported that the update server was unavailable if a network proxy was used to access the internet. This has been corrected so that now if an HTTP proxy is configured for the computer, the proxy will be used and the check for updates will succeed.

Note that if the computer is set to automatically configure its proxy, the HTTP proxy must also be set explicitly for the update checker work function properly.

721534 If an application made a remote procedure call to an Oracle server, then the server would have incorrectly forced a commit operation to occur on the Oracle server. This problem has now been fixed.
721582 The usage description of the -sv switch for the MobiLink Listener utility for Windows devices (dblsn), was missing the placeholder of the script version. This has now been corrected.
721637 An ADO .Net application could have failed to fetch from a proxy table with blob columns. The error returned would have been: 揅ursor is restricted to FETCH NEXT operations�. This problem has now been fixed.
721757 The Password field in the connection string (file App.config) could have been inadvertently removed during execution when running the Entity Framework application. This problem has been fixed.
721778 When a connection was pooled and reused by SQL Anywhere's connection pooling, in some cases there were some behavior differences compared to getting a new (unpooled) connection. Note that the type of connection pooling affected is controlled by the ConnectionPool connection parameter and enabled by default, but this connection pooling is not used by the ADO.Net driver. The specific behaviors that differed between reusing a pooled connection and getting a new unpooled connection were:

1) a "SET rowcount <value>" statement done on a connection that was then cached and reused could have incorrectly continued using this setting.

2) a "SET TEMPORARY OPTION secure_feature_key = <value>" statement done on a connection that was then cached and reused could have incorrectly persisted using this option.

3) the @@identity value could have incorrectly returned an identify value from before the connection was cached and reused.

These problems have been fixed so that the cached and reused connections will have the same behavior as completely new connections.

721874 Applications that associate themselves to edit .js or .vbs files, like UltraEdit, could have caused the quick setup script to fail. This has been fixed.
721933 Unique keys could have been created incorrectly in the following situations:

1) If a CREATE TABLE defined a column as nullable then placed that column in an unique constraint, the column would have remained nullable. For example:

CREATE MyTable(

pkey INT PRIMARY KEY,

num INT NULL,

CONSTRAINT un_num UNIQUE( num )

)

2) A GEOMETRY column could have been placed in a unique constraint.

3) An ALTER TABLE which added a UNIQUE constraint could have included a nullable column.

This has been fixed. When a table is now created, columns in unique constraints are forced to be not null and GEOMETRY columns are not allowed in unique constraints (as previously documented). When adding a unique constraint on a nullable column, an error will now occur. The correct procedure is to first alter the column to be not null, then alter the table to add a unique constraint.

721950 Under rare circumstances, execution of a query using a MergeJoin operator could have crashed the server. This has been fixed.
721976 In some cases, when a CHECK constraint was defined on a table, errors in the constraint were not detected when the constraint was created, even if they could have been detected at creation time. These errors were instead reported when the check constraint was evaluated. For example, the following CREATE TABLE would have succeeded but the subsequent INSERT would have failed with an error.

create table T_ColumnCheck( x long varchar, check (x is distinct from COUNT( DISTINCT ( 1 ) )) );

insert into T_ColumnCheck(x) values(1)

This has been fixed. Some errors can not be detected when the constraint is created (for example, data exceptions).

721977 Under very rare circumstances, the server may have crashed when encountering a thread deadlock during a login packet receive. This has been fixed
721986 Attempting to drop a table that was still referenced by a foreign key would not have returned an error, but would have lefte the database in an incorrect state. This has been fixed. DROP TABLE will now signal SQLE_TABLE_IN_USE in this case..
722071 When attempting to execute a statement which contained an incomplete multi-line comment, the error message mentioned that there was an error at the end of the SQL statement, but did not indicate that the problem was an unterminated comment. Now, the error message makes that explicit.
722245 Calling PreparedStatement.setNull() and passing in a SQL type of java.sql.Types.NULL, would have incorrectly returned a 揵ad datatype� error. This problem has now been fixed and java.sql.Types.NULL is now allowed in setNull() calls.
722314 Searching a database that contained hundreds of users would have taken a very long time and would likely have caused Sybase Central to run out of memory. This has been fixed.
722429 Calling the system procedure sa_iometrics() with invalid arguments may have caused the server to crash. This has been fixed.
722440 In rare timing dependent cases, two partners attempting to determine roles could have restarted their databases unnecessarily a number of times until their role was finally determined.

Also, in rare timing dependent cases, a running copy node that was able to reconnect to its parent server could unnecessarily have restarted its database. In order for this to have occurred, the parent server would needed to have been unavailable for long enough for the copy node to connect to the root or alternate parent.

These issues have been fixed.

722466 In rare circumstances, preforming bulk inserts and deletes of large amounts of data may have caused the server to fail assertion 200130. This has been fixed.
722646 When an application that was connected using Open Client or jConnect executed a query that involved parameters, and the query generated a syntax error, the server could have crashed. For the crash to occur at least one of these parameters had to have been a string or binary parameter that was greater than 250 bytes in length, and an additional tinyint, smallint, int or bigint parameters followed the string or binary parameter. This problem has now been fixed.
722739 If a string of between half a page size and one page size in length was inserted into a compressed column, the string could have caused a full page to be allocated to hold the compressed data, which usually took up a very small percentage of the page. No other strings would be able to use the same page. This has been fixed.

Note that it is not possible to gain back the 搘asted� space until the compressed string is completely rewritten, and 揂LTER TABLE t SET comp_col=comp_col� will not do it either. The easiest way is to 揂LTER TABLE t ALTER comp_col NOT COMPRESSED�, followed by 揂LTER TABLE t ALTER comp_col COMPRESSED�. This only needs to be done once. Depending on how much data is in the column, doing this may be slow and will likely increase the database file size. But once it抯 done, all the strings will be properly, and efficiently, compressed, and any 搘asted� pages will now exist in the database file as free pages that can be re-used.

722800 UltraLiteJ queries that used an index with a DESC column that contained NULLs, may have returned wrong results. The query must not have had a lower bound condition for the DESC column for this problem to have occurred. Depending on any ORDER BY clauses, the query may have returned no rows, or may have returned rows containing nulls when the query had a predicate on that column.

For example:

CREATE TABLE "T" ( "pk" bigint NOT NULL PRIMARY KEY, "x" integer NULL )

CREATE INDEX "idx1" on "T" ( "x" DESC ) WITH MAX HASH SIZE 0

And the following data:

insert into T(pk,x) values(1, -20)

insert into T(pk,x) values(2, null)

insert into T(pk,x) values(3, 10)

And the following queries:

SELECT pk FROM T WHERE x >= 5 ORDER BY x DESC

-> UL will return the wrong results (no rows, when it should return the row with pk=3).

SELECT pk FROM T WHERE x <= 10 ORDER BY x ASC

-> UL will return no rows when it should return the rows with pk=1 and 3

SELECT pk FROM T WHERE x <= 10 ORDER BY x DESC

-> UL will return all rows (including the row pk=2,x=null when it should return the rows with pk=1 and 3

This has been fixed.

722938 PROBLEM: With UltraLiteJ for Android, when synchronizing a large number of tables with a SyncObserver the following JNI exception was likely to occur: "E/dalvikvm(26683): JNI ERROR (app bug): local reference table overflow (max=512)". The native code to call the SyncObserver was not freeing local references to Java String objects containing the table name.

SOLUTION: Fixed

722972 Server may have run out of memory and crashed when executing the system procedure sa_get_request_times(), especially when running with databases that had large page sizes. This has been fixed.
722976 It was possible, in rare circumstances, for a database backup to fail, leaving the backup marked as 揚ending� in the console. If this backup was deleted, parts of the cloud data directory on the host containing the backup, could have been deleted, including other tenant databases, server certificates, log files, etc. This could have caused any number of problems with the cloud. This has been fixed.
723007 UltraLite queries that used an index with a DESC column that contains NULLs, may have returned wrong results. The query must not have had a lower bound condition for the DESC column for this problem to have occurred. Depending on any ORDER BY clauses, the query may have returned no rows, or may have returned rows containing nulls, when the query had a predicate on that column.

For example:

CREATE TABLE "T" ( "pk" bigint NOT NULL PRIMARY KEY, "x" integer NULL )

CREATE INDEX "idx1" on "T" ( "x" DESC ) WITH MAX HASH SIZE 0

And the following data:

insert into T(pk,x) values(1, -20)

insert into T(pk,x) values(2, null)

insert into T(pk,x) values(3, 10)

And the following queries:

SELECT pk FROM T WHERE x >= 5 ORDER BY x DESC

-> UL will return the wrong results (no rows, when it should return the row with pk=3).

SELECT pk FROM T WHERE x <= 10 ORDER BY x ASC

-> UL will return no rows when it should return the rows with pk=1 and 3

SELECT pk FROM T WHERE x <= 10 ORDER BY x DESC

-> UL will return all rows (including the row pk=2,x=null when it should return the rows with pk=1 and 3

This has been fixed.

723010 Under rare circumstances, the server may have returned the error SQLSTATE_INVALID_RECURSION for a recursive select statement. This has been fixed.
723017 On Mac OS X 8 systems, the MobiLink Server may have failed to start, with startup error 揢nable to bind socket�. This has been fixed.
723024 An index with multiple columns, and any nullable column except the last one in the index, may have been incorrectly ordered.

For example:

CREATE TABLE Foo ( num INT PRIMARY KEY DEFAULT AUTOINCREMENT, b1 BINARY(1), b2 BINARY(1), b3 BINARY(1) )

CREATE INDEX I ON Foo( b1, b2, b3 ) WITH MAX HASH SIZE 3

INSERT INTO Foo( b1, b2, b3 ) VALUES( 0, 0, 7 )

INSERT INTO Foo( b1, b2, b3 ) VALUES( 0, null, 8 )

INSERT INTO Foo( b1, b2, b3 ) VALUES( null, 0, 9 )

INSERT INTO Foo( b1, b2, b3 ) VALUES( null, null, 10 )

SELECT * FROM Foo ORDER BY b1, b2, b3 could result in an ordering like:

row: 0, 0, 7

row: 0, null, 8

row: null, 0, 9

row: null, null, 10

DROP INDEX Foo.I

CREATE INDEX I ON Foo( b1, b2, b3 ) WITH MAX HASH SIZE 3

SELECT * FROM Foo ORDER BY b1, b2, b3

row: null, null, 10

row: null, 0, 9

row: 0, null, 8

row: 0, 0, 7

This has been fixed.

723092 An index with multiple columns and any nullable column except the last one in the index may have been incorrectly ordered.

For example:

CREATE TABLE Foo ( num INT PRIMARY KEY DEFAULT AUTOINCREMENT, b1 BINARY(1), b2 BINARY(1), b3 BINARY(1) )

CREATE INDEX I ON Foo( b1, b2, b3 ) WITH MAX HASH SIZE 3

INSERT INTO Foo( b1, b2, b3 ) VALUES( 0, 0, 7 )

INSERT INTO Foo( b1, b2, b3 ) VALUES( 0, null, 8 )

INSERT INTO Foo( b1, b2, b3 ) VALUES( null, 0, 9 )

INSERT INTO Foo( b1, b2, b3 ) VALUES( null, null, 10 )

SELECT * FROM Foo ORDER BY b1, b2, b3 could result in an ordering like:

row: 0, 0, 7

row: 0, null, 8

row: null, 0, 9

row: null, null, 10

DROP INDEX Foo.I

CREATE INDEX I ON Foo( b1, b2, b3 ) WITH MAX HASH SIZE 3

SELECT * FROM Foo ORDER BY b1, b2, b3

row: null, null, 10

row: null, 0, 9

row: 0, null, 8

row: 0, 0, 7

This has been fixed.

723096 If the SQL Anywhere server was registered with an ActiveDirectory LDAP server and an LDAP error occurred at just the right time, the LDAP entry could have been corrupted. When the server then shutdown, no new server with the same server name would have been able to start. This has been fixed.
723102 UltraLite could have returned incorrect results when a subquery made reference to its own expressions.

For example, in the following, c2 is not evaluated properly:

select * from (select id + id as c1, c1 as c2 from T) as DT(c1,c2)

This has been fixed.

723135 If a directory in quotes with a trailing backslash inside the quotes (i.e. 搈y directory name\�) was supplied to a utility requiring a directory name, the name of the directory used would have been incorrect (in this case my directory name� with a trailing quote). The affected tools were: dbbackup, dbunload, dbtran (-m switch), dbremote (-ml switch) and the server (-dt, -ad, and -ds switches). This has been fixed. The trailing quote will now be stripped from the directory name.
723212 If a MobiLink project in Sybase Central contained a SQL Anywhere consolidated database, and that database was being monitored by the SQL Anywhere Monitor, tables which were owned by the Monitor were being displayed in the user interface. They have now been removed, because they should never take part in a synchronization.
723333 On Linux systems, executing "samonitor stop" could have failed to stop the SQL Anywhere Monitor. This has now been corrected.
723368 When deploying a synchronization model with a SQL Anywhere remote database, an error could have occurred if the "Save message log to the following file (using -ot option)" option was unchecked on the "Verbosity For SQL Anywhere Remote Synchronization Client" page of the "Deploy Synchronization Model Wizard". The error message would state:

The synchronization model could not be deployed.

Error for: Rendering macro APPEND_VAR

This has been fixed. A workaround is to enable that option and redeploy.

723443 String concatenation expressions in UltraLite could have given incorrect results, in such a way that a substring was missing from the correct result. For example, the SQL query "SELECT ISNULL('a','') + ISNULL(NULL, '') + 'b'" would have given the result 慴� when the correct result was 慳b�. This has been fixed.
723590 If a database exceeded the limit of allowed database pages, the database would have become corrupted and the application may have encountered the SQLE_ERROR:

UltraLiteJ Error[-300]: Run time SQL error -- recordRowID 5832712

This has been fixed. When the maximum number of pages is reached, UltraLiteJ will now report SQLE_DBSPACE_FULL (UltraLiteJ Error[-604]: A dbspace has reached its maximum file size).

Applications encountering this error may be using too small a value for the database page size.

723698 A client application could recieved the exception OptimisticsConcurrencyException when updating tables with computed columns. This has now been fixed.
723706 In very rare cases, it was possible for the server to have crashed when an HTTP connection is accepted. This has been fixed.
723710 On Mac OS X systems, use of the server option -um allows the server to run with a GUI (through DBLauncher). It was not displayed though in the server's usage message. This has now been corrected.
723719 A permissions error could be given when calling a procedure or functions that had been inlined. This has been fixed.
723757 The changes made for Engineering case 72143 broke the fast launchers for Interactive SQL and Sybase Central on computers that use a system-level network proxy. The symptom was that attempting to turn on the fast launcher would caused Interactive SQL or Sybase Centralto become unresponsive. This has been fixed.
723835 Under certain circumstances, the NOT NULL clause for a foreign key specification would have been ignored. When determining the nullability of an indexed column the fact that a foreign key could be specified as NOT NULL was not being taken into account. This has been fixed.
723843 The StartServer task could have started database copies on the server that were not stopped when the StopServer task was executed for the server. This has been fixed.
723889 When using a secured connection between the Relay Server Outbound Enabler and the local backend server, it was possible fior the Outbound Enabler to have crashed when disconnecting. This has been fixed.
723960 Under specific circumstances, the server could have crashed when applying updates via SQL Remote. This has been fixed.
723969 The Unix installer may have returned an error like 搒amples/sample_env32.sh: No such file or directory", when the selected components did not require the sample directory.

This has been fixed.

723981 In a synchronization model, if the Events editor was used to create a script using the .NET language and deployed the synchronization model, the MobiLink server could have given an error like the following:

Cannot load DLL or shared object: 'ml.net12.dll' for Script Language: '.net'

For Java scripts, a similar error could have been displayed on operating systems with case-sensitive file names, or errors fetching Java scripts on Windows.

These problems have been fixed.

724069 The SQL Anywhere Unix installer may not have installed the Start Server (dbspawn) and Stop Server (dbstop) utilities when 揝QL Anywhere Monitor�(developer edition) was selected as a component to install. Running a command like samonitor.sh {start|stop} would have failed due to the missing dbspawn and dbstop executables. This has now been corrected.
724258 A web procedure created using the PROXY clause may have returned the error: '-981: 揢nable to connect to the remote host specified by �<URL>敂 ', depending on the type and configuration of the proxy server being used. This would only have occurred for HTTP requests, HTTPS requests would have worked. This has been fixed.
724284 In some network environments, a synchronization would have failed with a StringIndexOutOfBound exception due to Set-Cookie: response headers with multiple cookies. This has been fixed.
724287 If a cloud server required a proxy server to access the internet, it would have been unable to contact the SAODE usage server, and the cloud would have stopped functioning after 1000 hours. This has been fixed. There is now an option (through the AlterCloud task) to set the proxy server for the cloud.
724349 If a variable was used as an OUTPUT parameter for a procedure, the value was not cast to the data type of that variable. This resulted in local or global variables that had values larger than its data type, or values with a different type than its variable declaration. This has been fixed.
724355 In very rare circumstances, the server may have crashed while performing a query sort operation if the sort key was very long and the query was low on cache space. This has been fixed.
724359 If a database contained a Remote Server definition with a variable reference in its srvinfo column, then clicking the Overview panel would have caused a 搗ariable not found� error to be reported. This has been fixed.
724507 In rare circumstances, a server that was running diagnostic tracing to a remote server may have crashed if the diagnostic tracing server or database stopped, or if the diagnostic tracing server or database stopped and tracing was detached at the same time. This has been fixed.
724518 When using the MobiLink autodial feature, it was possible for the connection attempt to fail initially. Later connection attempts would generally have worked. This has now been corrected.
724543 In very rare cases, the server could have crashed while parsing a request-level log file using the system procedure sa_get_request_times(). This problem was introduced by the changes for Enginnering case 722122, and has now been fixed.
724550 The CacheFree server statistic could have underflowed and presented extremely large values. This has been fixed.
724639 A new library (iAnywhere.Data.SQLAnywhere.v4.5.dll) has been added for supporting .NET 4.5 and Entity Framework 5. Now 4 versions of SA ADO.NET provider are shipped:

1 - iAnywhere.Data.SQLAnywhere.dll / policy.1x.0. iAnywhere.Data.SQLAnywhere.dll � for .NET 2

2 - iAnywhere.Data.SQLAnywhere.v3.5.dll / policy.1x.0. iAnywhere.Data.SQLAnywhere.v3.5.dll � for .NET 3.x and 2

3 - iAnywhere.Data.SQLAnywhere.v4.0.dll / policy.1x.0. iAnywhere.Data.SQLAnywhere.v4.0.dll � for .NET 4

4 - iAnywhere.Data.SQLAnywhere.v4.5.dll / policy.1x.0. iAnywhere.Data.SQLAnywhere.v4.5.dll � for .NET 4.5

SetupVSPackage.exe has also been updated. A new option 憊ersion� has been added.

1 - If the version is �4�, SetupVSPackage.exe registers the v4 dll in machine.config file.

2 - If the version is �4.5�, SetupVSPackage.exe registers the v4.5 dll in machine.config file.

3 - When the version is not specified, SetupVSPackage.exe registers the v4.5 dll in machine.config file if .NET 4.5 is installed; otherwise, it registers the v4.0 dll in machine.config file.

Examples:

1 - SetupVSPackage.exe /i /v 4.5 � register the v4.5 dll

2 - SetupVSPackage.exe /i /v 4 � register the v4.0 dll

3 - SetupVSPackage.exe /i � register the v4.5 dll if .NET 4.5 is installed; otherwise, register the v4.0 dll.

SetupVSPackage.exe should be run to register the v4.0 provider for .NET 4 applications and register the v4.5 provider for .NET 4.5 / Entity Framework 5 applications.

724701 When MobiLink clients starts up, it deletes temporary files left by any previous instance of the software that might have exited abnormally. This cleanup was not occurring when the SATMP environment variable was set. This has been fixed.
724847 In certain circumstances, running the Information utility to get table usage and sizes ("dbinfo -u"), calling the system procedure sa_table_page_usage(), or executing "VALIDATE DATABASE", could have caused assertion failure 109510 "Memory allocation size is too large". This problem has been fixed.
724850 DataTable.Load() , ULTable.GetSchemaTable(), or use of ULIndexSchema object could have thrown the exceptions: "Too many temporary tables in connection" or "Attempted to read or write protected memory. This is often an indication that other memory is corrupt� if used repeatedly. The method ULIndexSchema.Close() has been added, and should be called when an application has finished with an ULIndexSchema instance. This method is also now called internally by UL.Net objects that use ULIndexSchema.
724900 Temporary tables, functions and variables were not dropped after a pooled connection was closed (returned to the connection pool). This has now been corrected.
724960 If the Relay Server had been acting as an intermediary for a backend server that required authentication (such as an IIS Server), it was possible that the authentication handshake between the client and backend server could have failed, despite the client having provided the proper username and password for authentication. This has now been fixed.
725019 The syntactical construct "numeric( precision, scale )" would have returned the error "Syntax error near ')'" if the scale value was greater than the precision value. This has been fixed so that the syntax error message now contains the scale value.
725104 When the MobiLink Server was using an embedded Outbound Enabler, and connectivity issues occurred between the Relay Server and the MobiLink Server while the embedded OE was busy uploading requests, the service may not have recovered. A restart of the MobiLink Server was needed in this case. This problem has been fixed.
725107 A 'value out of range' SQLException could have occurred in the data collector of the SQL Anywhere Monitor for Relay Server. This has been fixed
725110 Under rare circumstances, the server may have crashed when the system procedure sa_locks() was trying to collect row locking information for global temporary tables. This has been fixed.
725179 Diagnostic tracing also collected information from Cleaner task connections. This has been removed.
725184 SQL Anywhere permits the use of identical foreign key CONSTRAINT names on different tables. Some third-party software tools cannot handle duplicate constraint names. As a result, the sample database demo.db that is shipped with SQL Anywhere has been modified so that it now has unique foreign key constraint names. The constraint name FK_CustomerID_ID in the GROUPO.Contacts table has been renamed to FK_CustomerID_ID2. The constraint name FK_ProductID_ID2 in the GROUPO.MarketingInformation table has been renamed to FK_ProductID_ID2.
725197 Using the PHP external environment in an HTTP request, could have returned an HTTP status code of 500 even when it was successful. This was most likely to happen on Windows systems, and has now been fixed.
725201 If an application loaded the SQL Anywhere JDBC Driver into a private ClassLoader, there was a small chance that the application would have crashed when the private ClassLoader was garbage collected. This problem has now been fixed.
725206 A FETCH RELATIVE {offset}, where the offset was greater than 1, could have failed with a "Connection was terminated" error if the fetch was not the first fetch on the cursor, and prefetch was enabled for the fetch. For this to have ocurred, the rows between the last fetch and the requested rows row had to have values that were greater than 250 bytes. This has been fixed.

As a workaround, prefetch can be disabled.

725212 The Relay Server IIS7 quick setup script was using %USERDNSDOMAIN% as the domain of the machine and that didn't always work. The script has now been changed to test if the FQDN can be resolved, and if not it will offer two options:

a. Setup without a domain

b. Let user enter the domain manually and test again.

Also, the setup step has been clarified so that using the domain user account for Relay Server State Manager service is a valid option if local online maintenance feature is not needed.

725215 The following corrections have been made to the IIS6 and IIS7 quick setup:

1 - The Relay Server State Manager could not start as the generated configuration contained removed properties (start and auto_stop). This has been fixed so that the invalid properties is no longer generated.

2 - Many links in the generated quick reference documentation no longer worked, and have now been fixed.

3 - The quick reference only demonstrated the use of the detailed status page, using the rs_admin extension only. Now a full set of pin-pointed status pages are added to the troubleshooting section.

725302 When running on Windows systems, the database server could have hung for up to three minutes when running as a system service when the system was first booting up. This has been fixed.
725391 If an Open Client or jConnect application attempted to perform a positioned update on a table that had an NCHAR based column in the primary key, then there was a chance the application would have hung. This problem has now been fixed. Note that this problem did not affect non-TDS based clients.
725392 When setting options using the system procedure sa_server_option(), the documentation states that 'YES/NO' as well as 'ON/OFF' can be used for any settings that accept Boolean values. There were two options that would accept 'ON/OFF', but not 'YES/NO', ProcedureProfiling and DeadlockLogging. This has been fixed.
725451 The execution of SELECT INTO statements in stored procedures may have been inefficient to compute. This has been fixed.
725546 UltraLite now supports the new armv7s architecture in Xcode 4.5 for A6 chip devices (iPhone 5 and iPad).

The build script for the UltraLite library (SQLAnywhere/ultralite/iphone/build.sh) now selects which architectures to build based on the version of Xcode. Xcode 4.5 and later will build armv7 and the new armv7s. Older versions of Xcode will build armv6 and armv7 as before. An armv7s version of the obfuscated source is now included.

725553 A client request which required a server to server request could have hang if the server to server connection was dropped while the client request was using it. For example, if a client request (such as a commit) resulted in writing to the transaction log on a primary high availability server, and the connection to the mirror (the server to server connection) dropped while the client request was attempting to send log pages to the mirror, the client request could have hung. Similarly, this could have occurred during a client request if a connection to a diagnostic server dropped during the client request. Note that only the single client request was hung and the server was still operating normally otherwise. This has been fixed so that the client request will not hang.

As a workaround, the client connection that is hung can be dropped using DROP CONNECTION. This will cause the client connection to immediately report an error.

725583 Execution of "[not] exists(subquery)" expressions in stored procedures may have been inefficient to compute. This has been fixed.
725599 In some cases, invalid DEFAULT values were allowed when executing a CREATE TABLE statement. In specific instances, these invalid default values could have caused a server crash. This has now been corrected.
725600 Some queries with invalid ORDER BY clause specifications could have failed to give an error, given an inappropriate error, or caused a server crash. This has been fixed.
725601 An error could have been incorrectly returned when creating a procedure, trigger, view, or event if there was a constant literal for a number. For the problem to occur, the number must have been larger than can fit in a NUMERIC type, but in range for a DOUBLE value (alternatively, it could have been a number smaller than can fit in a NUMERIC type but non-zero when interpreted as a DOUBLE). When the problem occurred, an error such as the following might have been returned:

SQLCODE=-836 "Procedure 'P1' is no longer valid"

Further, the database where the statement was executed could have failed to recover after a failure.

For example:

create or replace procedure dba.P1()

begin

select if 1=1 then 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 end if;

end

create or replace procedure dba.P2()

begin

select if 1=1 then 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 end if;

end

725602 If a grouped query contained a ROWID function in the SELECT list or the HAVING clause, where the primary key of the table of the ROWID was in the GROUP BY list but the ROWID function was not in the GROUP BY list, then an inappropriate error (揈xpression error�) was returned.

For example:

select ROWID(T)

from sys.dummy T

group by dummy_col

This has been fixed. The following error is now returned:

Function or column reference to 'ROWID' must also appear in a GROUP BY

SQLCODE=-149, ODBC 3 State="42000"

To avoid the error, include the ROWID function in the GROUP BY list.

725690 Under rare circumstances, if recovery operations performed on a database included changes affecting immediate text indexes, there was a potential for triggering assertions failures or server crashes. There is also a potential for generating incorrect score values or incorrect results for subsequent queries using the text index. These problems have now been corrected.
725692 The connection widgets lists all connections to the SA resource (server). There can be more than one database on the server and the connections showed up with no indication of which database they were on. The database name for the connection is now shown.
725700 The performance of the SAParameterCollection.AddParameters method has been improved.
725718 When running the server on Linux systems with a recent glibc version, the server could have crashed. This was more likely when a system with many CPUs was being used. This has now been fixed.

The only reliable workaround is to use an older version of glibc.

725779 When installing an EBF, the installer could have erroneously terminated and rolled back the install. This has been fixed.
725820 If a high availability partner was stopped while it was attempting to determine its role, the database may have been corrupted. If this corruption occurred, attempting to start the database would likely fail with the 100904 assertion "Failed to redo a database operation." This has now been fixed.

As a workaround, when stopping a mirror partner that is currently determining the role with an affected build, it is recommended that the server is terminated instead of stopped normally.

If this database corruption occurs, the database is corrupted but the transaction log is not. The database can be fully recovered by applying the current transaction log file(s) to a backup.

725821 The Entity Framework reference in the ADO.NET v4 provider for the 12.0.1.3797 EBF incorrectly refered to the Entity Framework 5.x assemblies. This has been fixed.

Also, version support for the ADO.NET v4 provider to the Entity Framework is now limited to Entity Framework versions 4.4.x and up.

725827 With UltraLiteJ for Android, the network protocol options 搃dentity� and 搃dentity_password� for authentication of the client during MobiLink synchronization, are now supported. These network protocol options must be set as 揺xtra� parameters with the UltraLiteJ API StreamHTTPParms.setExtraParameters().
725849 When converting .NET values of SAParameter to native types, the provider always allocated new unmanaged memory, which may have been slow. To improve performance, unmanaged memory is now cached and reused.
725854 The .NET values of SAParameter have been converted to native types to improve performance. The native values are now cached and reused if they are not changed since the last execution of the command. Also, several other changes have been made to reduce the time for accessing the properties and methods of SAParameter and SAParameterCollection.
726235 Under rare, timing and execution plan dependent circumstances, execution of a parallel query plan could have caused the server to hang. This has been fixed.

A workaround is to disable intra-query parallelism for affected queries.

726268 Under rare circumstances, using Sybase Central抯 search functionality may not have have been able to locate a search hit when it was double-clicked. This has been fixed.
726388 Some XML documents could have caused the server to allocate excessive memory while processing OPENXML. This has been fixed. These types of documents now return the error:

-890 "Statement size or complexity exceeds server limits"

In some cases, a statement processing an XML document could not have been stopped by cancelling or dropping the connection. This has been fixed

726393 The UltraLiteJ Database Transfer utility would not have transfered databases on 64bit only Windows systemss. An 揈rror transferring database� dialog would have been displayed immediately after clicking on the 揝tart� button. This has been fixed.
726396 If a SQL batch contained multiple DECLARE statements for local variables with assignments of the default value or an initial value, then the assignments were only executed for the last DECLARE variable-name statement of the batch. This has been fixed.
726508 If a query used the user_name() or suser_name() builtin function, then the described length of the column was LONG VARCHAR, even though the value would be at most 128 bytes. This has been corrected so that the described type is now VARCHAR(128). Any materialized views that use these builtins in the select list should be rebuilt after this change.
726536 When using the START EXTERNAL ENVIRONMENT statement to start a connection-scoped external environment, and then disconnecting later on without actually making any external environment calls to the connection-scoped external environment, then there was a small chance the server would have crashed. This problem has now been fixed.
726546 The LastReqTime connection property could have had an incorrect time stamp compared to current time. This would have only occurred if the server had been running for more than 24 hours. This has been fixed.
726715 The server could in some cases, have crashed while performing a BCP IN request if an error was generated while servicing the BCP request. This problem has now been fixed.
726720 In very rare timing dependent cases, it was possible for a mirror server connection between two servers to have only been partially established. If this was the case, the mirror or copy node with the partially established connection would not have written or applied changes. In particular, a mirror would have stayed in the 'synchronizing' state when it should have become 'synchronized'. This has been fixed.

A work around is to restart the server that is not writing or applying changes.

726945 Attempting to start external environments would have failed if an Version 10.0 database, with a large number of objects, was upgraded. This problem has now been fixed.
726951 In rare timing dependent cases, if the primary server was stopped, the mirror server would have failed to take over as the new primary server. This has been fixed.
726952 The MobiLink Client would not have reported error messages generated by the MobiLink server for a synchronization where progress offsets were checked against the server values at the beginning of the synchronization and found to be different from the server side values. This has been fixed.
726959 In a high availability mirroring setup, if the connection between the mirroring partners dropped, but the connections to the arbiter were stable, it was possible for the primary to have restarted. This has been fixed.
727045 If the case of the procedure owner and/or name differed between the procedure抯 definition statement and its source statement in the reload script generated by dbunload, then attempting to compare the databases would have thrown an assertion.

For example:

create procedure usr.FullName( ...;

COMMENT TO PRESERVE FORMAT ON PROCEDURE "USR"."FullName" IS ...;

The same problem would have occurred for functions, triggers, views, and events. These issues have been fixed.

727087 If a stored procedure statement contained an OPENXML statement with a variable used in an XPATH value, or a CONTAINS condition with a variable used in the query parameter, then the statement could have failed incorrectly with an error:

-134 "Feature 'OPENXML with non-constant query' not implemented"

-1159 "Non-constant or unknown text query string."

In order for the error to be returned, the variable must have been used in a larger expression such as a cast or string concatenation. The failure would have occurresd intermittently, for example on the 11th execution of the statement. This has been fixed.

727093 In extremely rare, timing dependent cases a database could have been corrupted if a server crashed or was terminated during a checkpoint, and then was terminated again during recovery. This has been fixed.
727096 Clicking the "Single Step" menu item executes the SQL statement containing the editing caret, then selects the next statement in the "SQL Statements" panel. If the SQL statements were separated by the word "GO", the single stepping could have failed depending on the specific statement being executed, resulting in a syntax error that referred to a trailing letter "G" in the statement. This has been fixed.
727144 When executing SQL statements and queries with many parameters, they could have taken a long time to complete in an UltraLite.Net application. This has been fixed.
727192 Comparing databases could have failed if extended characters were used in one or more of the connection parameters for either of the databases. For example, if a database name was specified that contained characters other than 7-bit ASCII. This has been fixed.
727198 Specific forms of the LIKE predicate could have caused the server to crash. As well, the wrong answer could have been returned for a LIKE predicate that compared non-string values. These problems have now been fixed.
727245 UltraLite could have signaled -305 or -309 errors, and the crashed or possibly failed to upload all rows, after the following sequence:

- synchronization including downloaded deletes

- concurrent commit operation during the synchronization download cleanup phase

- shutdown (or application termination) soon after the synchronization completes

This has now been corrected.

727315 Under rare circumstances, the server may have crashed if RememberLastStatement was turned on and a statement being executed was too complex. This has been fixed.
727357 If a version 16 or later MobiLink client connected to a version 12 or earlier MobiLink server, the server would have printed a confusing error. It will now print an 'unrecognized version' error.
727360 The MobiLink server may have crashed if the upload stream contained updates for tables with BLOB or spatial columns. Other requirements were that the updates caused conflict updates, and the script version contained conflict detection/resolution scripts. This problem is now fixed.
727601 If a statement contained an IN predicate on a column and one or more other sargable predicates on the column, then the statement might not have executed as efficiently as it could have. When optimizing predicates, the range of values within the IN list was not considered when finding tautologies, contradictions, or a narrower interval of validity. This has been fixed.

For example, the following predicates are now optimized as follows (where, UDF is a user-defined function):

x=3 and x in (1,2,3) --> x=3

x>=3 and x in (1,2,3) --> x=3

x>3 and x in (1,2,3) --> FALSE

x=2 and x in (1,2,UDF(3)) --> x=2

x=3 and x in (1,2,UDF(3)) --> x=3 and x in (1,2,UDF(3))

727658 The Deploy wizard in the MobiLink Plug-in generates a summary file that shows all the choices made during the deploy process. Each line in this file was terminated with a \n character. Some Windows editors do not recognize this a line terminator, they expect \r\n. The wizard now terminates the lines of the summary file with the appropriate line terminator for the operating system on which it is running.
727669 Under rare circumstances, a simple statement using variables or builtin functions could have returned incorrect results. This could only happen if the simple statement was processed by bypassing the query optimizer. This has been fixed.
727676 The MobiLink Log File Viewer in Sybase Central was unable to read log files that contained lines which were longer than 8192 bytes. Now, lines up to 65536 bytes are supported.

Note, line length in log files can become very long when the MobiLink server "-vr" option (display column values) is used.

727729 Executing a specific statement involving DateTimeOffset and an empty HashSet in LINQ against the Entity Framework would have resulted in an "Unknown EdmType: DateTimeOffset" error. This has now been corrected.
727737 Some clauses of the CREATE SPATIAL REFERENCE SYSTEM statement were incorrectly recorded in the transaction log. This has been fixed
727756 With UltraLiteJ for Android, data synchronization over HTTPS using default trusted certificates from the system store would have failed on Android 4.0 (Ice Cream Sandwich) or later. The location of the system trusted certificate store, and APIs to retrieve certificates, changed in Ice Cream Sandwich. Now the Android version is detected at runtime to determine how to retrieve the certificates.
727765 If the SQLANY12 environment variable had a trailing slash, the path to the Driver= line in the DSN would have been constructed incorrectly by the Data Source utility (dbdsn). This has been fixed.
727769 When comparing databases, a CREATE TRIGGER statement would have been marked as an unrecognized statement if it included a trigger owner; for example, CREATE TRIGGER trigger-owner.trigger-name BEFORE INSERT ON table-owner.table-name... . This has been fixed.

Note that while the trigger owner is syntactically valid, it is ignored by the server.

727777 When comparing databases, applying the generated script to convert database 1 to database 2 would have failed if one database contained a table and the other database contained a view, such that the table and view shared the same owner and name. The same problem would also have occurred for procedures and functions. These problems have been fixed so that the generated script now contains the required statement to drop the object from database 1 before creating the object from database 2.
727860 In extremely rare timing dependent cases, a database server could have crashed if a mirrored database or mirror server was stopped, or dropped from the mirroring setup. This has been fixed.

Also in rare timing dependent cases, when dropping an arbiter server from a mirroring setup, it was possible for old state information to be left behind in the arbiter server抯 state file. This could have caused difficulties later on if the same server was started as a high availability server for the mirroring system. This has been fixed as well.

728223 If an HTTP request was incorrectly formatted in a particular way, the server could have crashed. This has been fixed.
728245 慏igital Signature� has been added to the default Key Usage for non-certificate authorities for the Certificate Creation utility (createcert). Some OpenSSL implementations return an error if the peer certificate does not have 慏igital Signature� in its key usage.
728260 In order to support better software protection from potential SQL injection threats, the following restriction will be applied to databases created by SQL Anywhere 16.0.0.

Identifiers:

The following characters are currently not permitted in identifiers:

Double quotes

Control characters (any character less than 0x20)

Backslashes

In addition to the above, the following characters will now not be permitted in an identifier:

Square brackets ([])

Back quotes (`)

Aliases:

1. select-list : expression [ [ AS ] alias-name ]

The new restrictions on identifiers now apply to the characters permitted in an alias-name.

2.select-list : alias-name = expression (Transact-SQL dialect)

The new restrictions on identifiers now apply to the characters permitted in a Transact-SQL dialect alias-name.

Notes:

New restrictions described above will only be applied if the database is created using SQL Anywhere 16.0.0 software.

Databases upgraded to version 16.0.0 as well as all databases created and/or upgraded to older versions will continue to apply the current restrictions and continue to allow newly prohibited characters inside identifiers and aliases.

If pre-version 16.0.0 database has any square brackets or back quotes in an identifier, they must be removed before performing a reload; otherwise the reload will fail.

728261 The MobiLink Replay utility (mlreplay) was not sending liveness commands to the MobiLink server correctly when using HTTP. This has been fixed.
728335 When setting SAParameter.DbType to DbType.DateTime2, an IndexOutOfRangeException could have been thrown. The data type conversion was missing for DbType.DateTime2. This has now been corrected.
728436 Importing TINYINT data using the INPUT statement would have caused the Interactive SQL utility to report an internal exception. This has been fixed.
728446 When the error message 揝QL statement failed: (-782) Cannot register 'sybase.asa.dbmlsync' since another exclusive instance is running� was generated and the database character set of the remote database was different from the OS character set, the message would be displayed in the wrong character set and may have been unreadable. This problem affected only this error message, and has now been fixed.
728449 When using communication compression on HP-UX, or on Linux with a recent glibc version, a communication error could have occurred on the compressed connection. This has been fixed
728458 The server may have behaved badly, including crashes or corruptions, when using a recent version of Linux with glibc 2.11 or higher. This has been fixed.
728460 The UpgradeCloudInfrastructure event may have been logged as an error in the Cloud Console's Events & Tasks page even though the upgrade succeeded. If this was the case, the UpgradeCloudInfrastructure will have the red X icon indicating an error, even though all Subevents and related tasks were successful. This has been fixed.
728589 Calling Entity Framework SaveChanges could have caused a NullReferenceException if the entity model had properties with 揻ixed� concurrency mode. This has now been fixed.
728597 Crashes and data corruption were possible due to silent I/O failures on Red Hat Linux 6, as well as other Linux distributions with kernel versions greater than 2.6.38. The most likely manifestation of this bug was assertion 200505 ("checksum failure on page x").

This problem is related to a possible bug in the transparent huge pages (THP) feature introduced in these operating system versions. Red Hat bug 891857 has been created to track this issue.

The problem can be triggered by calling an external environment, xp_cmdshell, or other procedure that causes a fork while other I/O is occurring. A known limitation with the Linux kernel limits the use of fork while doing O_DIRECT I/O operations. Essentially what can happen is that the data can come from or go to the wrong process� memory after the fork. SQL Anywhere performs O_DIRECT I/O operations according to the documented safe usage. However, THP appears to cause further problems and the O_DIRECT I/O data comprising database page reads/writes appears to get lost.

This has been fixed by disabling THP on the SQL Anywhere cache memory where possible. We are working with Red Hat to identify a solution within the operating system.

There are two possible workarounds:

1. disable THP on a system-wide basis with one of the following methods:

echo never > /sys/kernel/mm/transparent_hugepage/enabled

echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled

boot with transparent_hugepage=never

2. disable O_DIRECT I/O for database file reads/writes with one of the following methods:

use the -u flag on the server command line

set SA_DISABLE_DIRECTIO=1 in the environment before starting the server

Transparent huge pages cannot be disabled just for the SQL Anywhere cache memory on Red Hat Enterprise Linux 6. SQL Anywhere now disables direct I/O if transparent huge pages are enabled and cannot be disabled on a per-allocation basis. A warning will be printed as the database file is being opened to indicate that direct I/O is disabled due to this bug. This is similar to how SQL Anywhere handles file systems that do not support direct I/O.

Customers using RHEL 6 who wish to continue using direct I/O should use the previously-stated command to disable THP at the system level.

728720 A long delay may have been observed when right-clicking in the SQL Statements panel, especially if the internet connection was slow, or if there was no internet connected at all. This has been fixed. Note, the problem does not occur if the documentation has been installed locally.
728734 Crashes and data corruption are possible due to silent I/O failures on Red Hat Linux 6, as well as other Linux distributions with kernel versions greater than 2.6.38. The most likely manifestation of this bug is assertion 200505 (checksum failure on page X).

This problem is related to a possible bug in the transparent huge pages (THP) feature introduced in these operating system versions. Red Hat bug 891857 has been created to track this issue.

The problem can be triggered by calling an external environment, xp_cmdshell, or other procedure that causes a fork while other I/O is occurring. A known limitation with the Linux kernel limits the use of fork while doing O_DIRECT I/O operations. Essentially what can happen is that the data can come from or go to the wrong process� memory after the fork. SQL Anywhere performs O_DIRECT I/O operations according to the documented safe usage. However, THP appears to cause further problems and the O_DIRECT I/O data comprising database page reads/writes appears to get lost.

Until this is fixed, there are two possible workarounds:

1. disable THP on a system-wide basis with one of the following methods:

echo never > /sys/kernel/mm/transparent_hugepage/enabled

echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled

boot with transparent_hugepage=never

2. disable O_DIRECT I/O for database file reads/writes with one of the following methods:

use the -u flag on the server command line

set SA_DISABLE_DIRECTIO=1 in the environment before starting the server

728742 If a database contained a materialized view that used key joins, then unloading and subsequently reloading the database would have failed. This problem has now been fixed.
728776 Attempting to import data into a table for which the user did not have permission to select rows, they would have failed with the incorrect error message "The table you selected ... does not exist."

Similarly, the same bad error message would have been presented when exporting into a database table for which the user did not have permission to select rows.

These problems have been fixed. The error message now clearly indicates that you don't have permission to select from the table.

Users could encounter this problem when executing the INPUT or OUTPUT USING statements, or when using the Import or Export wizards.

728789 If the SQLCONNECT environment variable was used to specify default connection values, and the length of the SQLCONNECT value was greater than or equal to 255 bytes, the SQLCONNECT value was ignored. This has been fixed so that SQLCONNECT values up to a length of 1023 bytes are accepted.
728863 A MobiLink client using HTTP could have hung, or an error could have been reported, when it automatically attempted to reestablish a lost connection. This has been fixed.
728865 The Index Consultant would have reported an error message when opened if the SQL statement being analyzed contained a semicolon as part of an identifier name or a literal string. This has been fixed.
728886 When the "Show all result sets" option is on, the Interactive SQL utility will display all the result sets returned by a query. If a statement produced more than one result set, and the Export Wizard was used to export those result sets, clicking the "Next" button on the first page would have returned an error saying that only one result set can be exported to an ODBC data source. This message would have been returned even when not exporting to a database. This has been fixed. The Export Wizard now supports exporting multiple result sets to text files, HTML files, and XML files.
728972 The header for the first column (the row header "Property Name") of the Server and Database property lists could have been truncated if the header text was longer than the longest property name being shown in the table. This problem was readily apparent when running the program in French, but it affected all languages. This has been fixed. The first column is now sized wide enough for the header text and the names of the properties shown in the table.
729006 Creating a procedure with a right curly-bracket "}" in procedure_name(e.g CREATE PROCEDURE 揚1{}�()�) would have failed. This has been fixed.
729137 When running a non-English synchronization profile, attempts to synchronize an UltraLite database from the Sybase Central UltraLite plug-in, via the Synchronization wizard, could have failed with a message reporting that the synchronization profile can抰 be found (and the name of the profile will be mangled). This has been fixed.
729261 If a server was running with IP address monitoring enabled, the server could have crashed if more than one IP address was removed from the machine within the IP address monitoring period (default 2 minutes). This could have happened if the machine was suspended or hibernated and moved to another network where more than one of the previous IP addresses were no longer available. This has been fixed.
729292 The unload support utility for pre-10.0 database (dbunlspt) may have behaved badly, including crashing, failing assertions, or database file corruption, when using a recent version of Linux with glibc 2.11 or higher. This has been fixed.
729394 In very rare cases, a database could have failed to start with the error "Fatal error: undo log corrupted after log rename". In order for this to have occurred, all of the following needed to be true:

1) a connection to the database had an outstanding transaction

2) while there was this outstanding transaction, the transaction log was renamed or truncated

3) the database had no free pages and needed to grow during the checkpoint that was part of renaming or truncating the transaction log

4) the connection from 1) still had an outstanding transaction during the last checkpoint before the database stopped or was backed up

5) the database was not shut down cleanly, or it was backed up

6) attempting to start the database from 5) required recovery and could have in rare cases failed with the error "Fatal error: undo log corrupted after log rename".

Other failures may have been possible if all of the above conditions applied. This has been fixed to avoid corrupting the undo log.

729396 Attempting to fetch the 揚RECISION� column of the DatabaseMetaData.getTypeInfo() result set, using one of the ResultSet.getXXX( String ) methods, would have resulted in the incorrct error: 揷olumn number 0 is invalid�. Using one of the ResultSet.getXXX( int ) methods would have worked fine. This problem has been fixed.
729427 The MobiLink server could have crashed when using HTTP and a misconfigured HTTP proxy. The server now reports an error and kills the synchronization when this occurs.
729541 The Relay Server mistakenly logged session errors from the Outbound Enabler as a failure in initializing the random number generator. This has been fixed.
729556 The UltraLite runtime could have caused an application to crash during the optimization of a query with many JOINs (typically more than 12). This has been fixed.
729661 If the host running the cloud primary had a large number of IPv4 and IPv6 addresses, then there was a chance that other cloud servers would have failed to start up because they could not connect to the cloud primary. This problem has now been fixed.
729777 The "Overview" panel for a database shows the mirrored state of a database. If the deprecated command line option "-xp{partner=...;arbiter=...}" were specified, the mirroring configuration was not shown on the "Overview" panel. This has been corrected so that now it is.
729836 In some situations dbcloudarbiterstate.txt was not preserved properly while running RepairServer task. This has been fixed.
729852 The Text Completer has an option to open automatically when typing to suggest object names. Opening the Query Editor window had an inadvertent side-effect of always turning off this option. This has been fixed so the Query Editor no longer permanently turns off the option.
729867 After calling the system procedure sa_server_option( 慠equestTiming�, ... ), connections may have gathered or returned request timing values inconsistently. In particular, request timing may have been enabled when the connection was established but disabled immediately after changing the option, or request timing may have been disabled when the connect was established but ignored when the option was enabled. Also, if a pooled connection was reused, the values tracked by request timing where not reset as they would be if a new connection was established. This has been fixed so that request timing is enabled or disabled at connect time (including when reusing a pooled connection). Once the connection has been established, request timing will remain enabled or disabled for the connection until it is disconnected, regardless of sa_server_option( 慠equestTiming�, ... ) calls during the life of the connection. In addition, if a pooled connection is reused when request timing is enabled, the values tracked by request timing are reset.

Note that the database and server properties that correspond to those enabled by the 杬t server option are only updated for connections that have request timing enabled or disabled at their individual connection time.

729869 The Relay Server converted server responses containing malformed headers into a '400 Bad Request' response without logging an error. This fix added a new RSE_CLIENT_RESPONSE_HEADER_ERR(4016) error when this now happens.
729871 The Relay Server was considering server responses that contained headers with empty values as malformed, and was converting the responses to a '400 Bad Request' response. This fix is to relax this case and relay the response without changing it or raising an error.
729873 The Relay Server automatically sends down instruction to the client to expire the affinity cookie when the backend server response code falls into the error range, except for 401 and 407 authentication challenges. Debug information of this expiring activity was not available in the Relay Server log at any verbosity level. This fix is to add a message at verbosity 4 and above for this activity.
729894 The error ID and error name column in the Relay Server Record did not capture RSE4008 and RSE4016. This has been fixed.
730023 The SQL Anywhere JDBC Driver would have thrown a SQLException with a 揘ot Implemented� message when calling an optional JDBC method that was not supported by the JDBC Driver. This has been corrected so that the JDBC 4.0 SQL Anywhere JDBC Driver now throws the new SQLFeatureNotSupportedException. Since SQLFeatureNotSupportedException is a JDBC 4.0 feature, the JDBC 3.0 Driver will continue to throw a SQLException instead.
730024 The SQL Anywhere JDBC Driver would have incorrectly throw a 揘ot Implemented� exception when PreparedStatement.setNull() was called with either java.sql.Types.BLOB or java.sql.Types.CLOB. This problem has now been fixed.
730094 When the Relay Server encountered an invalid SAP Passport, it would have reported an error in English without providing an error code, while continuing to relay the request. This has been fixed by replacing the error with a localized warning RSW104 indicating that an invalid passport has been ignored.
730111 Attempting to creating a primary key on a table with an existing primary key could have return an 揑ndex name not unique� error, rather than an error reporting the existence of a primary key. This has been fixed.
730134 When a relay error occured early enough, there may not have been enough information to calculate the relay KPI. The result was a wrong KPI value shown in the Relay Server record. This has been fixed by replacing the wrong value with zero when the KPI cannot be calculated due to a failure. The occurrence of the error is already recorded in the same RSR.
730149 On rare occasions the server would have crashed on shutdown when running on Linux systems. The crash would have occurred when stopping shared memory connections. This problem has now been fixed.
730237 The SQL Anywhere topology widget height did not show all nodes without scrolling the widget. This has now been fixed to initially show all child nodes.
730248 When using the table editor to change a column抯 data type, Sybase Central could have crashed if a domain had previously been created in the same Sybase Central session. This has been fixed.
730250 Attempting to delete one or more objects by selecting the objects, pressing the Delete key, and then quickly pressing the Y key to confirm the deletion before the confirm dialog was displayed, could have caused Sybase Central to crash. This has been fixed.
730251 The Upgrade Database wizard could not have been used to upgrade a database unless the user was granted exercise rights on the SERVER OPERATOR system privilege, even though the wizard didn抰 make use of this system privilege. Now the wizard no longer requires the SERVER OPERATOR system privilege.
730270 SQL Remote always assumes that all databases involved in replication share the same character set. By default, SQL Remote will always apply source CHAR data to a target database using the default character set for the operating system it is running on, ignoring the source data character set.

When using a database character set that is different than the default character set for the operating system, dbremote must be instructed to perform explicit data conversion to that character set on its connection string:

e.g. dbremote -c 揅HARSET=utf8;厰

or instruct dbremote to always use the CHAR character set of the target database to apply the remote CHAR data:

e.g. dbremote -c 揅HARSET=none;厰

730271 Syncs could have failed when using HTTP and using an HTTP intermediary that was setting a 揅onnection: Keep-alive� header, but was actually creating a new connection for each HTTP request. This has now been corrected.
730384 Pressing the F1 key while an error window was open after executing a SQL statement with the Interactive SQL utility, would have cased dbisql to crash. This has been fixed.
730475 When viewing a NULL binary value in the Long Value window, the Save button was incorrectly enabled. If the Save button was clicked, Interactive SQL would have crashed. This has been fixed;. Now, the button is not enabled if the value is NULL.
730485 The Interactive SQL utility shows result sets using a scrollable table, which can be searched. With "Match case" selected in the "Find in Results" window, dbisql would still have performed a case-insensitive search. This has been fixed.

Also, It was possible for the table cell which contained the matched text to be hidden under the "Find in Results" window. Now, the window is automatically moved out of the way.

730642 If multiple threads attempted to access a connection pool concurrently (by modifying it to add/remove a connection), an InvalidOperationException would have been thrown. This has been corrected.
730652 If the Fast Launcher was enabled, but was unable to initialize, the Interactive SQL utility or Sybase Central would have crashed when the Fast Launcher was subsequently disabled. This has been fixed.
730761 If the Unix setup script was run from a path containing spaces (including the default behaviour for the Mac DMG file), it would not have run correctly. One example of bad behaviour was improper display of the version numbers. The graphical installers would also have failed to display the license text properly. This has been fixed.
730762 In the Breakpoints window, selecting an existing breakpoint to edit may not have selected the right server name. This has been fixed.
730770 The Relay Server for IIS may have leaked memory. This has been fixed.
730776 In very rare, timing dependent cases, it was possible for one or more copy nodes to have failed an assertion after the primary was shutdown and the mirror took over as the primary. The assertion would have indicated a problem applying operations from the transaction log (for example assertion 100903). This problem has now been corrected.
730783 In rare circumstances, synchronizations could have failed if another thread was performing operations on the database at the same time. This has been fixed.
730785 The Deployment wizard may not have worked corrctly on UNIX platforms. The version number may not have been displayed correctly and/or the list of components may have been empty. This has now been fixed.
730789 The INPUT statement and the Import wizard could have failed while importing spatial data if the source column did not have a SRID constraint, the data contained an embedded non-zero SRID, and Interactive SQL was creating a new table to hold the imported data. This has now been fixed.
730797 The fix for Engineering case 728776 introduced a bug which caused the CREATE TABLE ON clause of the INPUT statement to fail with a message saying that the destination table did not exist. This has been fixed.
730800 Some uniqueidentifier column values could have been displayed as "(IMAGE)" in the result set table. This has been fixed.
730890 When displaying the last state change time for LDAP servers, the values displayed in the LDAP Servers folder did not include a time zone, while the values displayed on the LDAP server property sheet included the server抯 time zone, which was incorrect. Now the values clearly indicate that LDAP server last state change times are in Coordinated Universal Time (UTC).
730893 On the Create Database wizard抯 揅onnect to the Database� page, the server name shown would have been incorrect if a new local server was started, then the database creation was cancelled and the database file name was changed. This has been fixed.
730896 On the Fragmentation tab for a database, selecting a table or index in the list and then attempting to change the selection while the previous selection抯 bitmap was being loaded, may have caused Sybase Central to hang until the loading completed. This has been fixed. Now the loading of the previous selection抯 bitmap is canceled and the loading of the new selection抯 bitmap is started.
730900 When attempting to connect to two databases with the same server and database names, but with the servers on different subnets, Sybase Central would have reported 揧ou are already connected to this database� when the second connection was attempted. This has been fixed. Now Sybase Central will connect to both databases as long as the servers� machine names differ.
730907 When selecting the Data tab for a table or view, clicking Cancel in the 揕oading Data� dialog then attempting to fetch the Data didn't always cancel the loading. This has now been corrected.
730919 Clicking the Cancel button in the Spatial Viewer window could have failed to cancel the execution. At that point, the Spatial Viewer could not then be closed. This problem has been fixed, and execution can now be cancelled.
730928 The Interactive SQL utility could have crashed when viewing binary values if the long value window was closed before the server returned the complete cell value. This has been fixed.
730932 When working with an UltraLite database from Sybase Central or the Interactive SQL utility, some errors displayed by those tools may now display slightly different (more detailed) information in the error message.
731014 If the MobiLink server had been started with a command line in which the maximum number of concurrent database worker threads (-wm option) was a value less than the initial number of concurrent database worker threads (-w option, default value 5), then the MobiLink Server would have failed to start. The MobiLink Server will now print a warning to the MobiLink Server log indicating that it has reduced the initial number of concurrent database worker threads to the maximum number of concurrent database worker threads that was specified on the command line.
731017 On the Grantees, Roles or System Privileges tabs for a user, role or system privilege, if the New Grantees/Granted Roles/Granted System Privileges dialog was opened and an object was selected for which there was already a row in the privilege editor, then no privileges would have been granted. This has been fixed.
731021 On the Grantees, Roles or System Privileges tabs for a user, role or system privilege, the Grantor was not shown until the changes were saved to the database. This has been fixed.
731040 When using the SQL Anywhere On-Demand edition with a cloud that had reduced functionality because it had not been activated following 1000 core hours use, it was not possible to update the proxy settings for the cloud. As a consequence, the cloud could not be activated if the proxy settings were incorrect. The AlterCloud task is now permitted when the cloud has entered reduced functionality.
731071 When connected to an SAP HANA database, attempting to display BINARY, VARBINARY, or LONG VARBINARY data would have resulted in a message saying that the result set could not be displayed. This has been fixed.
731172 The Interactive SQL utility did not display BLOB types of data from SAP HANA tables correctly. This has been fixed.
731199 Attempting to connect to a SAP HANA database using a system ODBC data source, would have failed with a message which said that the host name and port were missing. This has been fixed.

Note that connecting using user data sources worked as expected. If was only system data sources that were affected by this problem.

731211 A query of the form 搒elect * from T, R where T.X IN (R.X, T.Y )� may have had a suboptimal execution plan if an index existed on the column T.X. This has been fixed.
731291 The producer configuration option ServiceRoot, as used by the OData Server, was ignored and the default /odata was always used. This has been fixed.
731308 When working with the MobiLink plug-in, a connection to a consolidated database is usually required. The connection is opened automatically when it is needed. If the saved connection information is no longer sufficient, the "Connect" window opens to prompt for credentials. If the "Connect" window opened as a result of testing a synchronization model, it could have opened behind a status window which was opened by the Test window. This would have prevented the entering of database credentials, and the software would subsequently have reported an internal error. This has been fixed.
731334 If a SQL Anywhere 16 database was created with 揹binit -pd� or 揅REATE DATABASE � SYSTEM PROCEDURE AS DEFINER ON�, or if an older database was upgraded using 揹bupgrad -pd y� or 揂LTER DATABASE UPGRADE � SYSTEM PROCEDURE AS DEFINER ON�, then attempting to perform a 揊ORWARD TO�, or make use of any of the sp_remote_... procedures, would have failed with an invalid userid or password error. This problem has now been fixed. A database upgrade will be required to apply this fix.

Note that two possible workarounds are:

1) create an externlogin for dbo, or

2) set the new extern_login_credentials database option to 揕ogin_user�

731345 Sybase Central could have crashed while testing a synchronization model if a test synchronization was cancelled while rows were being fetched for the "Data" tab, and if the database server was a little slow in returning the data. This has been fixed.
731386 When comparing databases, if the parser encountered a COMMENT ON statement for which the corresponding CREATE <object-type> statement could not be found, then an 揢nknown error� would have been reported. Now the COMMENT ON statement is reported in the SQL Scripts tab as an unhandled statement.
731448 Execution of loops with a large number of iterations could have been slower in 16.0.0 than in 12.0.1. For the problem to have occurred, the loop condition, or statements executed in the loop, had to use variables. This has been fixed.
731461 ADO.NET provider did not convert 憈imestamp with timezone� values correctly when the regional date settings of the client did not match the date settings of the database. The provider will now return .NET DateTimeOffset values to the client. The client can then convert the .NET DateTimeOffset values to a desired format.
731483 Several issues with database mirroring and read-only scale-out have now been fixed.

1) If the mirror or copy node was requesting pages from the primary or parent (it had recently started and had not caught up to the current log operation) and renamed log files required by the mirror or copy node had been deleted on the primary or parent since the mirror or copy node started requesting pages, then the mirror or copy node could have stopped applying log operations or failed with the assertion 100904. This has been fixed so that that primary or parent now correctly detects this case (a required renamed log file has been deleted) and logs the message "Database <DBName> mirroring: failure when requesting pages on remote server <ServerName>: missing transaction log with start offset <Offset>" (where <DBName>, <ServerName> and <Offset> are replaced with appropriate values). If this occurs, the mirror or copy node will log the message " Database "asatest" mirroring: database is not compatible with primary; files must be replaced� and the database and possibly the server will stop.

2) The message "Database server shutdown due to incompatible files for database mirroring� could have been displayed if an incompatible log file was detected even though the server was not stopped. If there is more than one database running on the server, the affected database is stopped, but the server is not stopped. This has been fixed so that this message is only logged if the server is actually being stopped.

3) In rare timing depending cases, after one or more ALTER DATABASE SET PARTNER FAILOVER statements, neither partner could have taken the role of primary. This has been fixed. As a workaround, the ALTER DATABASE ... FORCE START statement can be used to force a partner to take over as partner if this problem occurred.

4) If a copy node or async mirror got significantly behind writing log pages, it could have caused requests to the primary database to block for more than a minute. This has been fixed so that the primary will not be blocked for more than about 10 seconds.

731504 When comparing databases, if the source or definition for a procedure, function, view, materialized view, trigger or event contained a multi-line comment with a line that contained only the text 揼o�, then Sybase Central would have reported that it had encountered an unhandled statements. This has been fixed.
731600 When creating a MobiLink project, or when adding a consolidated database to a project, an inappropriate error message could have been raised saying that a database connection could not be made. The problem was specific to connecting to databases using an ODBC Data Source which contained a user id, and not giving a user id in the new project and add consolidated database wizards. This has been fixed.
731731 When running on Solaris systems, if the server had accepted a new connection, but the client side closed its socket right away, the TCP listener would have been stopped and the message "TCP Listener shutting down (130)" was be displayed on the server console. This has been fixed.
731821 If a database was stopped when its maintenance plan was executed, the database would not have been backed up. This has been fixed for full backups. Incremental backups will not be created for stopped databases.
731823 Calling the ODBC function SQLGetInfo to retrieve the version of the ODBC driver (i.e. SQLGetInfo( dbc, SQL_DRIVER_VER, � ) would have returned a string that did not include the build number of the driver. This has been corrected so that the string now contains the build number. For version 12.0.1, the string returned was �12.00.0001�. As of this change, the value returned is �12.01.xxxx� where xxxx is the build number.
731843 The OData server could have failed to start because one of the ports (shutdown or server port) could not be used, but the port number was not included in the error message. This has been corrected.
731886 The OData server could have started and reported that it was listening on a port that was already in use. This has been fixed.
731939 Binary values could have been unexpectedly truncated when being displayed to a console window, or in Interactive SQL if the program was configured to display result sets as text. This has been fixed.
731940 If a database was stopped when its maintenance plan was executed, the database would not have been backed up. This has been fixed for full backups. Incremental backups will not be created for stopped databases.
731945 The Fast Launcher feature of Interactive SQL and Sybase Central has an option to automatically terminate the Fast Launcher process if the program is not used for some number of minutes. The mechanism for terminating the process could have failed, leaving running, but unused processes, which were visible in the Windows Task Manager. This has been fixed.
731965 If a user ID and an encrypted password was given on the Interactive SQL utility's command line, the "Connect" dialog would have always opened, even if the user ID and password were sufficient to open a connection. This has been fixed. Now, Interactive SQL will attempt to open the connection with the given connection parameters.
731978 ODBC (and JDBC) escape sequence support has been enhanced to include the following functions.

{fn TIMESTAMPADD(<interval>, <integer-expr>, <timestamp-expr>)}

Returns the timestamp calculated by adding <integer-expr> intervals of type <interval> to <timestamp-expr>. Valid values of <interval> are shown below.

{fn TIMESTAMPDIFF(<interval>, <timestamp-expr1>, <timestamp-expr2>)}

Returns the integer number of intervals of type <interval> by which <timestamp-expr2> is greater than <timestamp-expr1>. Valid values of <interval> are shown below.

These escape functions are mapped directly to the SQL Anywhere DATEADD/DATEDIFF functions.

The <interval> type can be one of the following:

<interval> SQL Anywhere DATEADD/DATEDIFF date-part mapping

========================= ==========================================

SQL_TSI_YEAR YEAR

SQL_TSI_QUARTER QUARTER

SQL_TSI_MONTH MONTH

SQL_TSI_WEEK WEEK

SQL_TSI_DAY DAY

SQL_TSI_HOUR HOUR

SQL_TSI_MINUTE MINUTE

SQL_TSI_SECOND SECOND

SQL_TSI_FRAC_SECOND MICROSECOND

Examples:

// Number of days in February, 2013

SELECT {fn TIMESTAMPDIFF(SQL_TSI_DAY, '2013-02-01T00:00:00', '2013-03-01T00:00:00' )}

28

// Timestamp for 28 days after February 1, 2013

SELECT {fn TIMESTAMPADD(SQL_TSI_DAY, 28, '2013-02-01T00:00:00' )}

2013-03-01 00:00:00.000000

732114 The first insert of a blob into a table after the database was started may have taken longer under the following conditions:

- the blob to insert was longer than its column INLINE value

- the table contained a large number of blobs that were longer than about 8 database pages (blobs with blob index)

- the columns containing these blobs were created with a blob index (default)

- large parts of the table were not in cache

This has been fixed.

To work around the problem the blob indexes can be dropped by running the following statement for all long varchar or binary columns with blobs longer than 8 pages:

alter table <table-name> alter <columns-name> no index

To fix the problem in existing databases rebuild the database or drop and recreate the blob index by running ALTER TABLE. This must be done with a fixed version of the server and only on table columns with above conditions.

732156 Validating a database on a server with concurrent activity could have resulted in failed assertions, or a server crash. This has now been fixed.
732247 In rare timing dependent cases, if the primary server was stopped, the mirror server could have failed to take over as the new primary server. This has been fixed.
732338 Feature selection/de-selection switches for the setup.exe command-line are now as follows:

Switch: Feature:

SERVER64 SQL Anywhere Server (64-bit)

CLIENT64 SQL Anywhere Client (64-bit)

SERVER32 SQL Anywhere Server (32-bit)

CLIENT32 SQL Anywhere Client (32-bit)

MOBILE SQL Anywhere for Windows Mobile

UL UltraLite

ML64 MobiLink (64-bit)

ML32 MobiLink (32-bit)

SR64 SQL Remote (64-bit)

SR32 SQL Remote (32-bit)

AT64 Administration Tools (64-bit)

AT32 Administration Tools (32-bit)

SM64 SQL Anywhere Monitor (64-bit)

SM32 SQL Anywhere Monitor (32-bit)

RS64 Relay Server (64-bit)

SAMPLES Samples

FIPS FIPS-approved Strong Encryption

CAC CAC Authentication

HA High Availability

IM In-Memory Mode

SON Read-only scale-out

Server and Client features are now separately selectable in both 64-bit and 32-bit installs. The following features have been removed: ECC Strong Encryption, QAnywhere, and Relay Server (32-bit).

See also the Comments section of the following DocCommentXchange page: http://dcx.sybase.com/index.html#sa160/en/dbprogramming/using-silent-install-deploy.html*d5e50990

732453 If an application made a Java External Environment call to a Java method that made server side requests, then the Java External Environment may have hung when the Java method created or prepared a large number of server-side statements but did not explicitly close statements that were no longer needed. This problem has now been fixed.
732565 MSI installs generated using the Deployment wizard would have always contained the same upgradecode property. This was causing the behavior that installing a newer version of SQL Anywhere would cause the older version to be uninstalled. This has been fixed by changing the upgradecode property to a distinct code for each major revision of SQL Anywhere.
732583 The system procedure sp_parse_json() would not have accepted quoted strings containing the characters �,:{}�. This has been fixed, these characters are now accepted.

Note that SQLAnywhere does not permit the characters 慬� or 慮� inside identifiers, and so it follows that these will not be accepted in JSON quoted strings.

Also, sp_parse_json() would have accepted bare pairs that were not in a row. This has been fixed to match with JSON standards.

For example, the following would not have given an error, but is now no longer accepted:

call sp_parse_json('tvar','a:b');

The FOR JSON clause would have escaped the forward slash character (�/�) in double quoted text. This has been fixed and forward slashes will no longer be escaped.

732584 When editing a binary table value in either the Interactive SQL utility, or Sybase Central, an assertion error would have been reported if the existing value was not null. This has been fixed.
732594 The "Plan Viewer" menu item could have been incorrectly disabled if there had not yet been a connection to a database. This has been fixed.
732615 On 64-bit systems, the feature selection option for the 32-bit server feature would not have installed the feature when set to 1 (i.e., SERVER32=1). This has been fixed.
732617 It was not possible to cancel statements which contained a brace character ( { or } ), even if the brace was in a comment. This has been fixed so that such statements can now be canceled.
732727 Under rare circumstances, executing a stored procedure call could have crashed the server. This has been fixed.
732730 Under some circumstances, the array concatenation operator could have failed to evaluate correctly. This has been fixed.
732731 Issuing a CALL PROCEDURE statement from a client where the procedure accepted a ROW or ARRAY argument, but did not have one in its result set, could have failed, either with SQLCODE -1599 (Invalid use of collection type), or (on ODBC with smart describing enabled), by disconnecting the client. This has been fixed.

A workaround is to put the procedure in the FROM clause of a SELECT statement, rather than call it immediately.

732736 If the StopDatabase or StopDatabaseCopy parameter was unconditionally set to 0, and user connections existed at the time of task invocation, the database or database copy would have stopped. This has been fixed.
732743 Original description for Engineering case 706876:

A Microsoft Data Link Error could have occurred with newer versions of Microsoft software when using the SQL Anywhere OLE DB provider. When the Test Connection button was clicked, the following message would have been displayed when the error occurred:

Test connection failed because not all properties can be set.

Window Handle (BAD VALUE)

Continue with test connection?

[Yes] [No]

The message was informational only and Yes can be clicked. If the credentials and other connection information were correct, the connection succeeded. This problem has been fixed. Instead of returning a NULL window handle to the Microsoft software, the OLE DB Window Handle property is now marked as unsupported, which removes the warning message.

===

The solution to this problem was incorrect. Some applications require support for the Window Handle property and terminate if not supported (e.g., ROWSETVIEWER application).

The problem has been corrected. The Window Handle property value was improperly described as 32-bit in a 64-bit application.

732745 If a SELECT statement with an INTO clause contained a variable in the select list, then the temporary table was created with a not-nullable or nullable column definition depending on the value of the variable. This has been fixed. The column definition will now always be nullable in this context.
732853 Attempting to create a Mobilink project using Sybase Central on a 64-bit platform could in some cases have caused Sybase Central to crash. This problem was most noticeable on Solaris and Mac platforms. The problem has now been fixed.
732857 The samonitor.bat and run_migrator.cmd files may not have been updated by a support package. This has been fixed.
732943 Various batch and jdp* files may not have been updated by a support package. This has been fixed.
732957 One of the Relay Server Outbound Enabler's debug messages (-v 4) "Successfully retrieved relay servers peer list.." was logged before the RSOE tried to read the list. Thus it was misleading and could have lead to an incorrect diagnosis. This fix is simply to re-word the message to "Successfully posted peer list request..".
732958 The existing affinity flag in the Relay Server Record has been extended to carry a value of 憍� when the Relay Server told the client to expire the affinity cookie. This can be useful for troubleshooting.
732959 A pinpointed status page may have mistakenly report that the server was not found when IAS-RS-SERVER was not the last parameter in the URL query. This has been corrected.
732975 The Apache Quick Setup script contained some bash specific syntax that caused errors when run on Linux systems running Ubuntu. Ubuntu uses dash, not bash, as the default shell interpreter. This has been fixed.
733096 OData filters running against SQL Anywhere databases, using startswith(), substringof() and indexof(), with long search strings would have returned nothing. To correct this, search strings are now restricted to 254 bytes for SQL Anywhere databases. If longer strings are supplied, searches will only use the first 254 bytes. This restriction does not apply to OData queries against ASE databases.
733155 During silent installs of a SQL Anywhere Monitor SP, the Migration tool抯 progress window was being displayed. This has been fixed so that the progress window is no longer displayed during a silent install.
733171 The Relay Server provided no option to inject the X-Original-URL header. This has been fixed by injecting the header whenever the original request didn抰 contain such a header. The injected header value is URL-encoded.
733174 When the test window in the MobiLink plug-in is opened, it first deploys the synchronization model to the consolidated database and to a newly created remote database. In the past, changes were made directly to the databases to prepare for synchronization. This behavior is now changed so that SQL files are generated containing the changes to be made. The SQL files are then automatically applied to the databases. This is consistent with the way deployment is handled when the deployment wizard is used.

This should result in no user visible change in behavior, but it will ensure that going forward behavior seen when testing a synchronization model in the test window is consistent with that seen when the model is actually deployed using the deployment wizard.

733180 In the MobiLink plug-in, the popup menu for a synchronization model now contains a new item, 揇uplicate�. This item creates a copy of the synchronization model in the same project. The name the user provides is used for the name of the copy, as well as the script version and publication name values of the new synchronization model. This feature is useful, when there is a working synchronization system and a copy of it is required as a starting place for making the next version of the system.
733181 When executing a statement with a parallel execution strategy, it was possible for the statement to fail to complete with an error such as the following:

All threads are blocked [-307] ['40W06']

This problem was more likely to occur with a UNION query where multiple branches could use parallel execution. This problem has now been fixed.

733306 The server would have returned the error "Correlation name ... not found" for a query when the following conditions were true:

- the query contained a proxy table and a nested query block with an outer reference

- the nested query block used a view with a non-flattable select statement

- the outer reference in the nested query block could have been pushed into the select statement of the view

For example, in the following query T1 is a proxy and would have returned the error "Correlation name 'V0' not found".

create view V1 as select 2 as col1 union select 1;

select ( select col1 from V1 where col1 = V0.c21 ) as D from T2 V0, T1;

This has been fixed.

733309 If an UltraLite application placed a cursor on a row and then moved to before the first row and then back to that row again, the row may have been skipped the second time if the row was updated while the cursor was positioned before the first row. This has been fixed.
733313 The mirror partner server in a mirroring setup may have failed to take over immediately as primary, and instead restarted, when the primary mirrored database became unavailable but the server was still running. This could have happened when the primary mirror server was shutting down, or if the 揝TOP DATABASE� statement has been used on the primary server. This has been fixed.
733438 The OData Producer could not access metadata of a SQL Anywhere table (and therefore not do any operations on it) when it, as a result of the user connecting, could only view a subset of the columns.

For example, the table ColumnPerm is defined below as owned by dba and user httpAuthUser3 is granted select on only the id and v1 columns

CREATE TABLE dba.ColumnPerm(

id INTEGER NOT NULL DEFAULT AUTOINCREMENT,

v1 VARCHAR(128) NOT NULL,

v2 VARCHAR(128) NOT NULL,

PRIMARY KEY( id ) )

go

GRANT SELECT( id, v1 ) ON dba.ColumnPerm to httpAuthUser3

go

This has been fixed. When an OData Producer connects using httpAuthUser3 (in the example above), it will see meta data for table ColumnPerm with columns id and v1 (but not v2).

733443 Building the PHP external environment using phpize, or by integrating into the PHP source code, would have failed. On version 16, it will fail to find libdblib at the configure stage. On both versions, it will fail to produce a useable PHP module. This has been fixed.
733469 The automatic text completer used in the Interactive SQL utility could have behaved incorrectly in a CREATE TRIGGER statement. The following have been fixed:

- When suggesting SQL statements, "CREATE TRIGGER" could have appeared in the list of suggestions twice.

- When writing a CREATE TRIGGER statement, the text completer would have suggested only "CREATE TRIGGER" statements rather than keywords that matched what was typed so far.

- Only SQL keywords and owner names were suggested. Now, table names are also suggested.

Issues related to other types of CREATE statements have been fixed:

- CREATE ROLES and CREATE LDAP SERVER statements were never suggested. They are now suggested where appropriate.

- If the second token in a CREATE statement was misspelled the completer would have suggested only statements which started with the keyword CREATE. Pressing Enter would then have replaced the entire statement text with one of the CREATE statements, which was seldom the user's intent.

733471 The Outbound Enabler was performing unnecessary operations when an internal restart was caused by an up-channel failure. This change eliminates the unnecessary operations, so recovery time, and clarity in logged operations, are improved.
733583 The MobiLink Agent for central administration of remote databases could have executed a given task ID concurrently if the task was running on a schedule and also was server-initiated. This has been fixed. Although tasks may run concurrently in general, only one instance of a given task ID should be executing at any given time.
733645 The Precision and Scale attributes for Edm.Decimal properties in the metadata document may have incorrectly displayed values outside of the allowed range for Edm.Decimals if the underlying DECIMAL or NUMERIC column used a precision greater than 58, or a scale greater than 29 (the maximums as defined in the OData spec). This has been fixed.

Note that this is only an issue in the metadata document itself. The actual values for Edm.Decimal properties are enforced to be within the allowed range as defined in the OData spec.

733726 If an application using the SQL Anywhere JDBC Driver failed to explicitly close all open connections before attempting to exit, then there was a chance the Java VM would have crashed. This was most noticeable on Unix platforms. This problem has now been fixed.
733902 The ADO.NET provider for .NET 4.0 was requiring assemblies from .NET 4.5 and would not run properly. This has now been fixed.
733905 Attempting to export a result set which contained character data to a Microsoft Access database would have failed with a message saying that 'there is no data type in the destination database that corresponds to "char".' This has been fixed.
733912 The File Hiding utility (dbfhide) would have crashed if an input file was larger than 65528 (64k-8) bytes. This has been fixed so that an error is now displayed if the file is too large.
733915 When installing sub-components in silent mode, for example with:

setup -silent � -install sqlany64,sqlanyclnt32

the installer may have given an error like:

The following option names are invalid or are not exposed by the registration key provided:

sqlanyclnt32

sqlany64

Another symptom of the same problem could be seen using the -list_packages switch, for example:

setup � -list_packages

would have output garbled messages. This has been fixed.

733922 When run on Unix systems, the uninstaller always returned an error code of 1. This has been fixed.
733923 The Additional Connection Parameters on the Advanced page of the ODBC configuration dialog is used to specify rarely used connection parameters that do not appear on other pages of the wizard. The problem was that once a parameter was added in this page, it could not have been removed again. The value of the parameter could have been modified, but could only be deleted by editing it directly in the registry or by recreating the datasource. This problem has been fixed.
734038 The database property TimeWithoutClientConnection has been added.

The description for this database property is:

Returns the elapsed time in seconds since a CmdSeq or TDS client connection to the database existed. If there has not been a CmdSeq or TDS connection since the database started then the time since the database started is returned. If one or more CmdSeq or TDS connections are currently connected, 0 is returned.

734042 Query plans containing a HashGroupBy operator could have under-performed in some cases. This was only possible when there were a large number of groups (~10,000 or more) and where the data types of the aggregate functions included strings, bit vectors, numerics, or other BLOBs. This has now been fixed.
734049 If the trigger definition resulting from ALTER TRIGGER statement execution conflicted with an existing trigger, the original trigger could have been deleted, and a wrong error returned. This has been fixed.

This change also introduces a change in the algorithm used to decide the order of firing triggers when an ORDER clause is not specified, or multiple triggers with the same order and combination of events were created. For example, this may change the order in which triggers created with 揢PDATE ORDER 2�, 揢PDATE, DELETE ORDER 2� and 揢PDATE OF <col> ORDER 2� are fired. Note that documentation explicitly recommends specifying different ORDER values for triggers with the same event. If your database contains such sets of triggers, and the order of firing is important, please alter the triggers to reorder them accordingly.

In general, both UPDATE ORDER 1 and UPDATE OF <col> ORDER 1 triggers will fire before any UPDATE � ORDER 2 triggers are fired. A unique ordering between UPDATE and UPDATE OF <col> triggers is still recommended.

734068 A MobiLink Server with the integrated Relay Server Outbound Enabler could have crashed on shutdown. This has now been fixed.
734077 Synchronizations with large downloads could have been slowed by up to the liveness timeout when using HTTP, if a network interruption occurred. This has been fixed.
734158 Executing a batch or stored procedure that contained the ALTER DATABASE UPGRADE statement would very likely have crashed the server. This problem has now been fixed. Note that executing ALTER DATABASE UPGRADE within a batch or stored procedure is not recommended when using SQL Anywhere 16 and up, since the database will automatically be shut down once the upgrade completes.
734160 Attempting to perform a cloud UCI would have failed on hosts that had a large number of IPv4 and IPv6 addresses. This problem has now been fixed.
734192 scc_repository database unable to be started on VM
734216 If a previously recorded profiling session was opened, the database connection IDs for synchronizations displayed in Synchronization properties, or the Details Table, would have be incorrect. The values saved in the database though would have been correct. This has been fixed.
734315 In some cases, the Relay Server Outbound Enabler could have failed to startup without giving a specific startup error, but rather a general initialization error. This had been seen specifically in the integrated RSOE case. This has now been fixed in order to better help resolve startup issues.
734471 For queries with LIKE expressions of the form 揷 LIKE <pattern>�, where column c is a numeric data type, the UltraLite runtime would have given a SQLE_CONVERSION_ERROR during query execution if column c contained data whose string length when converted to a string was longer than the domain size of the numeric type. For example, if c is of type INTEGER and a row in table t contained the integer 12345, then the query SELECT c FROM t WHERE c LIKE �1%� would have caused a SQLE_CONVERSION_ERROR because the length of the string �12345� is greater than 4, the domain size of the INTEGER data type. This has been fixed.
734486 If the computer on which a server is running was improperly configured, it was possible for property(慣cpipAddresses�), property(慔ttpAddresses�), or property(慔ttpsAddresses�) to return a string with multiple consecutive or trailing semicolon characters, eg. �1.2.3.4;1.2.3.5;;1.2.3.6;;;1.2.3.7�. This has been fixed.
734566 It was possible for the ConvertCloudPartnerToServer task to be reported as cancelled when the task actually ran successfully. This has been fixed. The status of the ConvertCloudPartnerToServer task should now be accurately reported.
734580 The Schedules tab for an event could have shown out-of-date information after a schedule was modified, for example, via its property sheet. This has been fixed.
734589 In a mirroring configuration, it was possible for the primary mirror server to restart sooner than expected when its partner was converted to a copy node. This has been fixed.
734591 When using the Foreign Key Wizard to create a foreign key, and choosing to add one or more columns to the foreign table for a foreign key that allowed nulls, the foreign key would actually have prohibited nulls if the foreign table was empty. This has been fixed.

In addition, the Foreign Key wizard did not display the SQL to create the columns on the last page of the wizard. This has also been fixed.

734626 Attempting to switch between Design, Debug or Application Profiling modes while editing a row in the Data tab for a table or view, would have caused Sybase Central to crash. This has been fixed.
734839 In rare circumstances, a MobiLink client using HTTP would have ignored bytes sent down by the MobiLink server during a download and requested that the MobiLink server resend them. This has been fixed.
734841 The Relay Server component may have silently missed error messages with old versions of the language resource. This has been fixed by adding a generic error message indicating the resource library is too old.
734960 Updating a column, or a set of columns, that contained exactly the same value and had an index defined, could have caused the server to crash. This has been fixed.
734989 In a version 12 or later database, attempting to create a Synchronization Subscription by dragging a publication and dropping it on a MobiLink user (or vice versa), or copying a publication and pasting it to a MobiLink user (or vice versa), would have caused Sybase Central to report an error while attempting to create the subscription. This has been fixed.
735005 If the temporary directory used by the server (specified by one of the SATMP, TMP, TMPDIR, or TEMP environment variables) was longer than about 48 characters (differs by specific platform), clients would not have been able to connect to servers over shared memory, they would simply fail to find the server. This has been fixed.
735124 Calling the Entity Framework function CurrentDateTimeOffset would have resulted in a 'procedure not found' server error. This has now been corrected.
735130 Using the Entity Framework in an ASP.NET MVC application could have caused a NullRferenceException. The provider was not checking if the Type.FullName was null before calling the method Type.FullName.StartsWith. This has been corrected.
735151 Attempting to revoke all object privileges on a given table or view, from a given user or role, could have resulted in a 損ermission denied� error, even when the user did in fact have permission to revoke the granted privileges. This has been fixed.
735216 In rare situations, queries containing a Merge Join appearing below another Merge Join may have failed assertion 106104: "Field unexpected during compilation". This has been fixed.
735226 In rare situations in a high availability mirroring setup, it was possible for the primary mirror server to hang while doing a commit if the connection to the partner server was lost. This has been fixed.
735254 Selecting View -> Refresh Folder or View -> Refresh All while viewing object privileges would have caused Sybase Central to crash if a row was selected in the object privilege editor. This has been fixed.

Note that the problem did not occur if instead the F5 key was used to perform the refresh.

735267 When using Snapshot isolation, a statement-level or transaction-level snapshot may remain active while other transactions completed. Previously, the time to close the snapshot was proportional to O(N^2) for N transactions that completed with the snapshot open. With one hundred thousand transactions, this could have taken over a minute to close a single snapshot. With one million transactions, this could have taken over 100 days to close a single snapshot. During this time, other transactions were not allowed to start or stop. The server would have appeared to be fully busy on a single core.

This performance has been improved; for one hundred thousand transactions, the new algorithm completes in 13 milliseconds (compared to 80205 milliseconds previously).

Further, it was possible for the server to crash with specific access plans relating to viewing snapshot meta-data. This has also been fixed.

A best practice is to ensure that the number of transactions tracked by the server is minimized; for example, by keeping the length of transaction snapshots short (commit as soon as possible). For statement-level snapshots, the snapshot is closed when the statement is closed. For cursors opened WITH HOLD (for example, using ODBC), the snapshot will not be closed when a COMMIT or ROLLBACK is performed; it is delayed until the statement is closed. Best practice recommends closing these cursors promptly. The sa_snapshots() procedure can be used to monitor active snapshots and sa_transactions() monitors transactions being tracked due to snapshots.

735343 The MobiLink server now supports consolidated databases running on Sybase IQ 16.0 servers. For the recommended ODBC drivers for Windows and Linux, please visit the following link:

http://www.sybase.com/detail?id=1011880

The Row Level Versioning (RLV) feature introduced in Sybase IQ 16.0 has removed the 搒ingle-writer� limitation. Therefore the IQ 16.0 server now allows multiple connections modifying a RLV enabled table concurrently. Based on testing, the upload would be ten times faster for synchronizations with RLV enabled tables than with RLV disabled tables. Therefore, in order to get better upload performance, all sync tables are recommended to be RLV enabled. However, if there is any table that cannot be RLV enabled, for instance a sync table that contains BLOBs and/or foreign keys, the upload phase must be serialized. This requirement can be achieved, if the begin_upload connection script is written to include or to use the following SQL statement:

LOCK TABLE table_name IN WRITE MODE WAIT time_string

where table_name is the name of a table that is defined on the IQ store and the time_string gives the maximum time period to lock the table. The table can be as simple as the one defined as:

create table coordinate_upload ( c1 int )

It is not required to have any data. If any of the other MobiLink server transactions is required to modify any IQ tables, all of these transactions must be serialized as well. The same logic mentioned above can be used. This technique is considered more efficient than retries on each of the transactions by the MobiLink server.

735344 After performing a calibration using the ALTER DATABASE CALIBRATE statement, it was possible for queries to execute slowly on the database due to an error in the recorded calibration data. This problem was most likely to happen with faster computers. This problem has been fixed. A workaround is to use 揂LTER DATABASE RESTORE DEFAULT CALIBRATION� to remove the incorrect calibration data.
735358 In rare situations in a high availability setup with TLS connections, it was possible for the primary server to hang while doing a commit. This is the same fix that was done for Engineering case 674782, but now available on Unix platforms.
735367 If an application used variables in the USING clause of a remote server, or the AT clause of a proxy table or procedure, then the server would have leaked memory. This problem has now been fixed.
735368 Selecting and deleting multiple table privileges could have crashed Sybase Central if there were corresponding column privileges. This has been fixed.
735400 Revoking all column privileges for a given table/grantee/grantor combination could have caused another table privilege editor to be opened in an inconsistent state. Specifically, the editor could have initially shown a row that was marked for deletion. This has been fixed.
735452 In a mirroring setup, if a copy node lost its connection to its parent, and MaxDisconnectedTime had been specified, it was possible for the server to noticeably exceed the time before shutting down. This has been fixed. The shutdown time should now be much closer to the MaxDisconnectedTime if the copy node is unable to re-establish a connection to its parent, alternate parent, or the primary.
735454 When reading an event trace (.etd) file, the Event Trace Data File Management utility (dbmanageetd) did not correctly decode the event severity associated with events in the log. The severity reported by dbmanageetd was incorrect and filtering by severity level (-fl) would not work correctly. This problem has been fixed.

Note that the files themselves are correct and only a new dbmanageetd is required to interpret them correctly.

735595 Attempting to connect to a database running on a version 7 or earlier server (for the purposes of unloading/reloading the database into a new version 16 database), would have caused Sybase Central to crash. This has been fixed.
735598 When using the wizard to create a table, and selecting a dbspace that the user didn抰 have permissions on, the error wasn抰 reported until attempting to save the table, at which point the dbspace couldn't be changed because the wizard had already closed. This has been fixed. Now the error is reported immediately when choosing the dbspace in the wizard.

Similarly, when using a wizard to create a materialized view, index or text index, if a dbspace was selected that the user didn抰 have permissions on, then the error wasn抰 reported until the Finish button was clicked. This has been fixed. Now the error is reported immediately when choosing the dbspace n the wizard.

735599 When duplicating a materialized view, any change to which dbspace it was located would have been ignored. Now the choice of dbspace is no longer given, and the copied materialized view is created in the same dbspace as the original.
735605 Opening the Text Configuration Objects folder or the Create Text Index wizard could have resulted in the error 揚ermission denied: you do not have permission to change remarks for "default_char"�. This would only have occurred if the default text configuration objects (SYS.default_char and SYS.default_nchar) didn抰 already exist in the database and the user did not have permission to set a comment on a text configuration object. This has been fixed.
735654 The SAConnection.Open method would have thrown an exception when opening a version 10.0 or 11.0 database connection using the version 12.0 or 16.0 provider. This has now been corrected.
735807 Closing a pooled connection could have been blocked when the request was from a multi-threaded application. This has been fixed.
735815 Calling the SAConnection.Close method would have thrown an exception when closing pooled version 10.0 and version 11.0 database connections.
735922 In the test window of the MobiLink Plug-in, the client log page would have continued to report 揝ynchronization in progress�, even when the MobiLink server did not start correctly during a synchronization and the synchronization had failed and was complete. This has been fixed.
735923 Calling SAConnection.Open would have thrown an exception when attempting to open the 'utility_db'.
735992 When computing the Multiplicity of an Association, the OData Producer was not taking unique indexes into account. For example, the tables T8 and T8b are functionally identical but generate different multiplicity:

CREATE TABLE T8 (

pk1 INTEGER NOT NULL,

c1 INTEGER,

PRIMARY KEY (pk1),

FOREIGN KEY F_KEY_T8 (c1) REFERENCES T7 MATCH UNIQUE SIMPLE );

CREATE TABLE T8b (

pk1 INTEGER NOT NULL,

c1 INTEGER NULL,

PRIMARY KEY (pk1));

CREATE UNIQUE INDEX T8bIndex on T8b(c1);

ALTER TABLE T8b ADD CONSTRAINT

F_KEY_T8b FOREIGN KEY (c1)

REFERENCES T7 (pk1)

Results in

<Association Name="F_KEY_T8">

<End Role="T8_Dependent" Type="SAPSybaseOData.T8" Multiplicity="0..1"/>

<End Role="T7_Principal" Type="SAPSybaseOData.T7" Multiplicity="0..1"/>

</Association>

<Association Name="F_KEY_T8b">

<End Role="T8b_Dependent" Type="SAPSybaseOData.T8b" Multiplicity="*"/>

<End Role="T7_Principal" Type="SAPSybaseOData.T7" Multiplicity="0..1"/>

</Association>

This has been fixed. Table T8b above now returns associations identical to those of table T8.

735993 The test window of the MobiLink Plug-in was not modal. This has been corrected.
735998 The Relay Server Outbound Enabler may have restarted unnecessarily in rare situation, resulting in repeated RSE3003 error for a duration as long as the OE-RS liveness timeout period. One example situation would have been when a Relay Server was removed from the farm and then being added back after. This has been fixed.
736004 Some window functions, including MIN and MAX, could have given incorrect results if called over a column with data type TIMESTAMP WITH TIME ZONE. This has been fixed.
736024 The renew_overlapped_cookie property was introduced for the Relay Server to work with clients without cookie isolation support. The default value of renew_overlapped_cookie in version 16.0.0 was set to 'yes' for maximum compatibility. The same feature was added to version 12.0.1, however the default value was 'no'. The 12.0.1 decision has been revised and this feature is now on by default in 12.0.1 as well.
736044 The MobiLink server may have crashed when the MobiLink client connects via HTTPS via a proxy. Although the likelihood of the crash was extremely low, it has been corrected.
736239 When the MobiLink client held on to old affinity information across Outbound Enabler restarts, and used it on new requests, the Outbound Enabler would have failed the relay (reported as OEE1051 error on version 16). The Outbound Enabler has been fixed to allow the traffic to go through instead.
736249 Numeric and Decimal columns and parameters are transferred to and from the client in packed-decimal format when the column or parameter is bound as SQL_NUMERIC (SQL_C_NUMERIC). APIs like ODBC, OLE DB, and JDBC must convert between the packed-decimal number and a 128-bit binary number for these cases. Improvements have been made to the conversion routines for Windows 64-bit platforms.

Conversions from packed-decimal to 128-bit binary for numbers in the range 10^20 to 10^38 are now approximately 67 times faster.

Conversions from 128-bit binary to packed-decimal for numbers in the range 10^20 to 10^38 are now approximately 2.7 times faster.

736255 A SQLE_COLUMN_NOT_STREAMABLE error would be erroneously reported when importing in the Interactive SQL utlity. This has been fixed.
736264 A number of improvements and bug fixes have been made to the SQL Anywhere OLE DB provider.

1 - When a column cannot be fetched in its entirety, the status is now set to DBSTATUS_S_TRUNCATED instead of DBSTATUS_S_OK, and length to actual length, not amount fetched.

2 - IRowsetUpdate methods InsertRow/Update now inserts rows in manual commit mode (i.e., commit in batches), rather than autocommit each row.

3 - Improved support for DBTYPE_DBTIME2/DBTYPE_DBTIMESTAMPOFFSET data types.

4 - In order to identify columns that are DEFAULT AUTOINCREMENT, IColumnsInfo::GetColumnInfo now sets the DBCOLUMNFLAGS_ISROWVER bit for those columns. Microsoft defines a column with this attribute as a non-writable versioning column (such as the SQL Server TIMESTAMP) which suits SQL Server. Note, however, that SQL Anywhere supports versioning columns that are writable.

5 - Corrected failure to describe money/smallmoney as DBTYPE_CY (currency type). Also corrected OLE DB schema queries DBSCHEMA_COLUMNS, DBSCHEMA_PROCEDURE_COLUMNS, and DBSCHEMA_PROCEDURE_PARAMETERS results for DBTYPE_CY.

6 - Corrections were made to the schema rowset information (DBSCHEMA_COLUMNS, DBSCHEMA_PROCEDURE_COLUMNS, and DBSCHEMA_PROCEDURE_PARAMETERS) for datetime/time precision and scale.

7 - Corrections were made to 搑un-time� information for datetime/time precision and scale.

8 - Added "DATETIME" to the list of DBPARAMBINDINFO.pwszDataSourceType types for SetParameterInfo (SQL Server uses this undocumented type name). Type names are usually of the form 揇BTYPE_xxx� (for example, 揇BTYPE_I4�, 揇BTYPE_STR�, 揇BTYPE_DBTIMESTAMP�).

9 - Adjusted GetConversionSize values for TIME, DATETIME, DATETIMEOFFSET data types (only 6 fractional digits are supported by SQL Anywhere).

10 - A memory leak caused by failure to free rows whose refcount is 0 in Update() was fixed.

11- A possible memory corruption in calls to IRowsetChange::SetData, IRowsetChange::InsertRow, ISequentialStream::Write, and IRowChange::SetColumns was fixed.

12 - A performance problem when DataConvert was used when no conversion is required was fixed.

13 - A performance issue with SQL_NUMERIC columns, with values comprised of 19 to 37 decimal digits, was fixed.

736356 Sybase Central could have crashed after changing the definition of a view or materialized view. This has been fixed.
736526 Under very rare conditions, reading indexes containing compressed data could have lead to a server crash with an 慽nvalid memory read� error. This has been fixed.
736527 The OLE DB provider accepts two cbBookmark values, one which is the 搒hort� DBBMK_FIRST/LAST value, and another with the value "4" or "8" depending on the bitness of the provider. The 64-bit provider was flagging "4" was an illegal value for cbBookmark, and the 32-bit provider flagged "8" was an illegal value for cbBookmark. The OLE DB provider should have accepted both values as the length of a bookmark value and fetched the appropriate 32-bit/64-bit bookmark value from memory. This problem affected IRowsetLocate::GetRowsAt, IRowsetLocate::Compare, IRowsetLocate::GetRowsByBookmark, IRowsetLocate::Hash, and IRowsetScroll::GetApproximatePosition, and IRowsetExactScroll::GetExactPosition. It has now been fixed so that both 32-bit and 64-bit providers now support 4-byte and 8-byte bookmark values, in addition to 1-byte values.
736544 When creating or altering a table, CHECK constraints were allowed that were not valid. These failed when evaluating the CHECK at execution time.

- in TABLE checks, unknown column/variable names were permitted if they started with '@'

- aggregate and window functions were permitted

- ROWID() and NUMBER() were permitted

- host variable references were permitted

This has been fixed. These now give appropriate errors when the CHECK is created.

736546 The LIKE predicate allows an optional ESCAPE argument which must be a single character. In some cases where the string and pattern could be optimized, an error was not returned for ESCAPE arguments that did not consist of a single character.

For example:

select if 'abc' like 'abc' escape '99' then 1 else 0 endif

should have failed with an error, but did not. This has been fixed.

736547 Under rare circumstances, evaluation of a query with complex expressions could have caused a server crash. This has been fixed.
736562 When combining values, where one was an array and the other was a NULL literal value, it was possible for the result to fail with an unexpected error.

For example:

create or replace variable var_strarray array(3) of long varchar;

select cardinality( coalesce( var_strarray, null ) );

would have failed with the error:

Could not execute statement.

Expression is not an array

SQLCODE=-1666,

This has been fixed.

736570 Statements that included invalid Transact-SQL outer join predicates, did not give appropriate errors.

For example, the following gave an 搃nvalid expression� error:

select count(*) c

having c *= 0

This has been fixed.

736571 Certain SQL constructs containing selectivity estimates could have caused the server to crash. This has been fixed.
736572 When converting a value of Row type with a field of Array type, an inappropriate error may have been given.

For example:

create or replace variable var_row row(col_intarray array(3) of int);

set var_row = var_row;

set var_row = var_row;

The second SET statement would have returned the error:

Expression is not an array

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

This has been fixed.

736573 When executing statements that included invalid uses of the NUMBER function, the statement could have failed with a non-fatal assertion failure.

For example:

select COUNT( DISTINCT NUMBER(*) )

from sys.dummy

would have failed with the following error:

*** ERROR *** Assertion failed: 106103 (16.0.0.1320)[asatest] NUMBER(*) is not associated

This has been fixed so that an appropriate error is now returned.

736574 When using a statement that contained a ROWID() expression in a search condition, it was possible for the statement to fail with a nonfatal assertion failure.

For example:

select first 1

from T_Exprs

where col_str >= CAST( ROWID(T_Exprs) AS LONG VARCHAR )

order by 'a'

would have failed with the following errort:

Could not execute statement.

Run time SQL error -- *** ERROR *** Assertion failed: 106105

Unexpected expression type dfe_FieldRID while compiling

This has been fixed.

736575 In some cases, a statement that contained a dotted reference was misinterpreted with the dotted reference interpreted as a row access.

For example:

select (dt.ci).nosuchcolumn

from (

select cast(row(25 as val1,27) as row(val1 int, ci int)) ci

) dt

would have incorrectly returned DT.ci.ci instead of an error. This has now been fixed.

736680 It was possible for a mirror server to have hung for a few seconds or indefinitely, have had connection timeouts, failed, or have had poor performance. It was more likely to see these problems when running multiple mirrored databases on a single server that had automatic multiprogramming level enabled (the default) and there were nearly as many mirrored databases as cores.

This has been fixed by ensuring some long running background tasks do not affect the number of tasks controlled by the multiprogramming level. A workaround is to ensure that the minimum multiprogramming level is at least three times the number of mirrored databases.

Two new server properties were added by this change:

1) property( 'CurrentMirrorBackgroundWorkers' ): The number of workers currently being used for database mirroring background tasks. These workers are separate from those controlled by the multiprogramming level.

2) property( 'MaxMirrorBackgroundWorkers' ): The highest number of workers used for database mirroring background tasks since the server started. These workers are separate from those controlled by the multiprogramming level.

736683 An UltraLite database could have unnecessarily grown by a small amount during each synchronization, or as a result of executing publication DDL. This has now been corrected.
736687 Queries with predicates of the form '( T.X = <constant expression> OR T.X = <constant expression> OR ...)' may have had unoptimal plans if the <constant expression> was a variable, host variable, or aliased constant. This has been fixed.
736716 By design, the Relay Server Outbound Enabler treats client disconnect as an immediate cancel of the request if it is happening at the middle of the HTTP request/response cycle. Therefore, uploads could have been truncated by the immediate cancelling, if the client disconnect arrived while the upload was queued up. This has now been changed so to make sure all request bytes that came before the disconnect are not cancelled by the client disconnect. Also, the RSOE no longer views this situation as an abnormal behavior of an HTTP client.
736717 The Relay Server may have reported that the shared memory manager was in an unhealthy state when under heavy load. This has been fixed.
736786 Two ALTER TABLE ... DROP DEFAULT statements, executed consecutively on the columns that where created in an online fashion, would have cause the server fail assertion 200610 (Attempting to normalize a non-continued row ). This has now been fixed.
736791 In the case where users turn on HTTP backend status detection in the Relay Server Outbound Enabler (by providing a url_status parameter in the -cs optiobn), it was possible for the RSOE to fail to identify if the backend was available or not. This has now been fixed by making the RSOE more tolerant to space characters when parsing the HTTP response provided by the backend server.
736806 Under rare circumstances, evaluation of very complex expressions could have caused the server to crash. This has been fixed.
736823 If a database was created with the -a or -af dbinit command line options set, or with the "ACCENT RESPECT" or "ACCENT FRENCH" clause on a CREATE DATABASE STATEMENT, and if the database CHAR charset was not a UCA collation, then catalog lookups for tables, procedures, etc, could have been slow because the server would not have taken advantage of the available indexes on the catalog tables. This problem has been fixed.

As a side effect of the fix, dbunload now generates dbinit command lines or CREATE DATABASE statements that use fully explicit collation specifications such as "1252LATIN1(CaseSensitivity=Respect)" and it no longer puts -a, -af, ACCENT RESPECT, and ACCENT FRENCH on dbinit command lines or CREATE DATABASE statements. By using fully explicit collation specifications, dbunload also no longer puts "-c" or "CASE RESPECT/IGNORE" on dbinit command lines or CREATE DATABASE statements.

737027 If in a query block, two equal correlation names referred to exactly the same view or base table, then the server could have merged them and performed a query rewrite. The server incorrectly rewrote a query if one of the two table expressions aliased with the same correlation name was a derived table, a procedure name, an openstring expression, a contains expression, or a DML derived table. As a result, the server may have returned an incorrect result set. This has been fixed.
737036 Executing a REORGANIZE TABLE statement could have worked sub-optimally and may have left some pages with single rows on them. This has been fixed
737159 If two separate connections had set the PRIORITY connection option, and the database shut down unexpectedly so as to required automatic recovery, it was possible for the database to fail the automatic recovery with assertion 100904:

Failed to redo a database operation (id=#, page_no=0x#, offset=0x###)

Error: Permission denied: you do not have permission to set the option 'PRIORITY'

This has been fixed. An upgraded database server will now be able to recover the database successfully.

737184 It was possible for a mirror server running multiple mirrored databases to have hung, have had connection timeouts, failed, or have had poor performance. These problems were more likely as the number of mirrored databases running on the server increased. This has been fixed. As a workaround, the -gn value could be increased.
737186 In rare, timing dependent cases, executing the "ALTER DATABASE SET PARTNER FAILOVER" statement could have hung. If this occurred, the server itself was not hung, but the server on which the statement was executed would not accept connections to the database being failed over. This has been fixed. As a workaround, the server that was running as the primary could be stopped, or the database that was running as the primary could be stopped by connecting to the utility database and executing the STOP DATABASE statement.
737191 The MSSqlToSA.xml mapping file is used by the SQL Server Import and Export Data wizard (DTSWizard). This mapping file has now been improved in the following ways:

- other SQL Server clients (SQLOLEDB;SQLNCLI;SQLNCLI10) are now included in the list of possible data sources, in addition to the existing SQL Server .NET provider.

- "datetimeoffset" is now mapped to "timestamp with time zone" instead of "datetimeoffset", because the Microsoft DTSWizard would append "(0)" to "datetimeoffset" and that would cause a syntax error when the CREATE TABLE statement was executed against a SQL Anywhere / Sybase IQ server. For example, "CREATE TABLE Temp (dtocol datetimeoffset(0) )" is invalid syntax.

- 揻loat� is now mapped to 揹ouble�, instead of float. This causes the Microsoft DTSWizard to use "real" for small precision float types, and "double" for large precision float types. When 揻loat� was used, Microsoft did not add the precision specification (for example, float_col float(53)).

These improvements apply to the use of the SQL Anywhere .NET or the SQL Anywhere OLE DB providers, in combination with a number SQL Server providers, in the migration of tables from SQL Server to SQL Anywhere/Sybase IQ.

737271 If two separate connections had set the PRIORITY connection option, and the database shut down unexpectedly and so required automatic recovery when restarted, it was possible for the database to fail the automatic recovery with assertion 100904:

Failed to redo a database operation (id=#, page_no=0x#, offset=0x###)

Error: Permission denied: you do not have permission to set the option 'PRIORITY'

This has been fixed. An upgraded database server will now be able to recover the database successfully.

737416 When the OData Producer tried to create an entity against a SQL Anywhere proxy table, the server would have shutdown and the Producer would have failed. This has been fixed. However, the OData Producer for SQL Anywhere will not allow the use of default values in the proxy tables primary key. Clients must specify all primary key properties explicitly when creating new entities.
737497 Previously, the CREATE INDEX statement for local temporary tables on read-only nodes had been disallowed. This has been changed, and now local temporary tables are the only tables where index creation is allowed on the read-only databases.
737533 When a secured feature exception occurred, and Sybase Central prompted for a secure feature key, it asked for an authorization key only. This has been corrected so that it now prompts for both the key name and its authorization key.
737598 The "Run New Task" wizard (and some others) display a list of task parameters with a component for each parameter. For those parameters which had a default value, the wizard provided an editable combobox for the value. The dropdown contained one item: "(Default)". There were a number of usability issues with the combobox which made it difficult to enter values when the box was open. This has been corrected so that now, the combobox has been replaced by a text field. When the text field is empty, the word "(Default)" appears in the field.
737612 If an application closed the connection to the database used to synchronize before the synchronization completed, the database could have become corrupt. One possible symptom of this corruption was the runtime sending two different progress values for the same publication during synchronization. This has been fixed. Now the runtime will report SQLE_SYNCHRONIZATION_IN_PROGRESS in the close connection call and immediate abort the application. When the database is restarted, recovery will be done to rollback any uncommitted operations that occurred during synchronization.
737614 If a native thread in the Java VM launched by the MobiLink Server printed to stdout, it was redirected to the MobiLink log file. If the MobiLink Server was ready to accept synchronizations when the Java VM attempted to print to stdout, it was possible that the Java VM could have crashed after printing the string, which would also have crashed the MobiLink Server. A work around for this issue is to start the Java VM with the -XtraceFile option, which will redirect the Java VM stdout to a file instead of the MobiLink log file. The issue has now been fixed, and the way the Java VM stdout strings are written to the MobiLink Log has changed. Instead of being posted as errors to the log with error number -10133, the output is now informational and has "(JVM): " at the start of the string to identify the source of the string.
737801 If a single user on a computer ran a number of copies of the Interactive SQL utility (dbisql), it was possible for its options to have been reset to their defaults. For this to have occurred, one dbisql process would have to have be starting, when another dbisql process was shutting down. This has now been fixed.
737813 In the Options window, if the "Editor" category and the "Tabs" tab were selected, then the Options window was resized, the controls in the tab could have easily resized themselves in a way that made it very difficult to see the values. This has been fixed.
737917 Some queries that contained an invalid GROUP BY or HAVING clause could have failed to give an error. Specific constructs that were not correctly validated include the following:

- x IS OF TYPE(�)

- x IS [NOT] DISTINCT FROM y

- TSEQUAL( x, y )

- array_expression[[ index_expression ]]

- (row_type_expression).field_name

- Subqueries predicates or subselects that contained joins with outer references in the ON condition

In certain cases, these invalid queries failed with a non-fatal assertion failure. In specific circumstances, it was also possible for the server to crash. This problem has now been fixed.

737992 The error message that was displayed when help could not be opened for the Console or Interactive SQL utilities was always in English. Now the message can be localized. Also, the title for the message window was incorrectly empty, this has been fixed.
738030 The Event Trace Data File Management utility (dbmanageetd) did not display the full contents of an ETD file if logging to the file was interrupted (e.g. because of a process crash) and then resumed on a new process. This has been fixed.
738031 Using dbstop -c "...;NODETYPE=..." could have failed. Note that it is not recommended that NODETYPE is used with dbstop since it may not be clear which server will be stopped. This has been fixed.
738036 Support for callbacks has been added to version 3 of the SQL Anywhere C API. The following function is now available when _SACAPI_VERSION is defined as 3.

void sqlany_register_callback( a_sqlany_connection * sqlany_conn, a_sqlany_callback_type index, SQLANY_CALLBACK_PARM callback );

This function can be used to register callback functions.

Parameters

sqlany_conn A connection object with a connection established using sqlany_connect().

index Any of the following:

CALLBACK_START

CALLBACK_WAIT

CALLBACK_FINISH

CALLBACK_MESSAGE

CALLBACK_CONN_DROPPED

CALLBACK_DEBUG_MESSAGE

CALLBACK_VALIDATE_FILE_TRANSFER

callback Address of the callback routine.

The index parameter values correspond to the index parameter values of the Embedded SQL/DBLIB db_register_a_callback function (http://dcx.sybase.com/goto?page=sa160/en/dbprogramming/db-register-a-callback-esql.html).

typedef enum a_sqlany_callback_type {

CALLBACK_START = 0,

CALLBACK_WAIT,

CALLBACK_FINISH,

CALLBACK_MESSAGE = 7,

CALLBACK_CONN_DROPPED,

CALLBACK_DEBUG_MESSAGE,

CALLBACK_VALIDATE_FILE_TRANSFER

} a_sqlany_callback_type;

Callback routines are typed "SQLANY_CALLBACK". This corresponds to the Embedded SQL/DBLIB SQL_CALLBACK type.

The a_sqlany_message_type enum is used with message callbacks (index=CALLBACK_MESSAGE).

typedef enum a_sqlany_message_type {

MESSAGE_TYPE_INFO = 0,

MESSAGE_TYPE_WARNING,

MESSAGE_TYPE_ACTION,

MESSAGE_TYPE_STATUS,

MESSAGE_TYPE_PROGRESS

} a_sqlany_message_type;

Here is an example from SDK\dbcapi\examples\callback.cpp.

api.sqlany_register_callback( sqlany_conn, CALLBACK_MESSAGE, (SQLANY_CALLBACK_PARM)messages );

void SQLANY_CALLBACK messages( void *sqlca, a_sqlany_message_type msg_type, int sqlcode, unsigned short length, char *msg )

{

size_t mlen;

char mbuffer[80];

switch( msg_type )

{

case MESSAGE_TYPE_INFO:

printf( "The message type was INFO.\n" );

break;

case MESSAGE_TYPE_WARNING:

printf( "The message type was WARNING.\n" );

break;

case MESSAGE_TYPE_ACTION:

printf( "The message type was ACTION.\n" );

break;

case MESSAGE_TYPE_STATUS:

printf( "The message type was STATUS.\n" );

break;

case MESSAGE_TYPE_PROGRESS:

printf( "The message type was PROGRESS.\n" );

break;

}

mlen = __min( length, sizeof(mbuffer) );

strncpy( mbuffer, msg, mlen );

mbuffer[mlen] = '\0';

printf( "Message was \"%s\" SQLCODE(%d)\n", mbuffer, sqlcode );

}

A complete callback example with two callback routines can be found in SDK\dbcapi\examples\callback.cpp.

738143 In rare circumstances, the ADO.NET Provider could have thrown an AccessViolationException when reading a DataSet. This has now been fixed.
738144 In rare circumstances, calling SAConnection could have throw a NullReferenceException when the ConnectionString property was accessed. This has now been fixed.
738147 When creating entities in an entity set representing a proxy table in a SQL Anywhere database, without fully specifying key properties, the OData Producer would have given an inaccurate error message (30125 - "One or more properties could not be reset to a default value."). This has been fixed. Now, if any of the missing key properties does not have a default value, a 30124 error ("Cannot set a non-nullable property to null.")will now be returned. Otherwise if the missing key properties have default values, a 30154 error ("Key properties with default values must be explicitly set in this entity set.") will now be returned.
738148 A number of issues with the 揅hange Server Version" wizard have been fixed:

1. On the "Restart Servers" page, if "Create a task..." was selected, options for methods selected in the "Run" box should have been shown, but were not. For example, if "Run" was set to "On a certain date", the date should have been selectable.

2. If the version of system servers was changed, and the cloud had high availability turned on, a message that the cloud needed to be restarted was displayed three times.

738201 When attempting a download resumption through the Relay Server to a MobiLink server farm, the client could have connected to the wrong MobiLink server, resulting in the download resumption attempt failing. The client weren抰 persisting the HTTP cookies that the Relay Server requires to match it back up with the correct MobiLink server. The cookies are now stored with the rest of the restart state.
738246 The system trace events, SYS_RLL_StartProcedure, SYS_RLL_StopProcedure, SYS_RLL_StartTrigger, and SYS_RLL_StopTrigger, only logged one letter in the procedure_name field of the trace event. This has been fixed.
738247 Trace event session names and trace event names were being treated as case sensitive. This has been fixed.
738260 A read-only scale-out system, or an asynchronous mirror, could have done more disk writes and more communication with children than necessary, which could have resulted in somewhat slower performance. The unnecessary writes and communication were most likely when many small transactions per second were being committed on the primary or root server. This has been fixed so that the unnecessary writes and communication have been eliminated.
738276 For specific types of views and procedures using a WINDOW specification, it was possible for the server to crash when processing a query referencing the view or procedure. This has now been fixed.
738279 A SQL Anywhere OnDemand Edition cloud can be upgraded to an SAP Sybase SQL Anywhere, on-demand edition cloud provided:

1) the cloud infrastructure has been upgraded to 1.0.0.3881 (see note 1 below),

2) all the servers in the cloud are running 12.0.1.3873 (see note 2 below), and

3) the cloud secure feature key is at least 6 characters in length (see note 3 below).

If the SQL Anywhere OnDemand Edition cloud meets the above criteria, then the cloud can be upgraded by performing the following steps:

1) using the cloud console, choose 揈vents & Tasks->Run new task� and run the PrepareForUpgrade task (see note 4 below).

2) once the PrepareForUpgrade task completes successfully, use the 揢pgrade cloud infrastructure� button to download and upgrade to the new SAP Sybase SQL Anywhere, on-demand edition cloud.

Note 1:

If the SQL Anywhere OnDemand Edition cloud infrastructure is below version 1.0.0.3881, then use the 揢pgrade cloud infrastructure� button to upgrade the cloud to version 1.0.0.3881.

Note 2:

If all the servers in the cloud are not running version 12.0.1.3783, then they can be upgraded to run the latest server version by:

1) Using the 揅loud Software->Change server version� wizard, change the server version of all servers that are not running the latest server version to 12.0.1.3873. Make sure you select 揇o not restart any servers.� Note that if you have both Windows and Linux hosts in your cloud, then you will need to perform this step twice, once for each platform.

2) Stop the cloud.

3) Restart the 1.0.0.3881 cloud agent on each of the cloud HA hosts. This will also start your cloud HA servers.

4) Start all of the other servers in your cloud.

5) Verify that all of the servers in the cloud are now running 12.0.1.3783.

Note 3:

If the cloud secure feature key is less than 6 characters in length, then use 揈vents & Tasks->Run new task� to run the AlterCloud task. The AlterCloud task will allow you to change the cloud secure feature key.

Note 4:

The PrepareForUpgrade task takes two parameters: license_key and patch_file. The license_key parameter is not the license key that was provided with your SQL Anywhere OnDemand Edition software. Instead a new license key will be provided by SAP for the new SAP Sybase SQL Anywhere, on-demand edition cloud. The patch file will also be provided by SAP and you will be required to put this patch file locally on the host where the cloud primary server is running. The patch_file parameter is the full path to the patch file on the primary host.

When the PrepareForUpgrade task runs, it will verify that the license key is correct, the secure feature key is at least 6 characters in length and all of the servers in the cloud are running 12.0.1.3873. If any of these criteria is not met, then the PrepareForUpgrade task will exit with an appropriate message. It should be noted that these messages will be returned in English only.

Once all of the above criteria are met, the PrepareForUpgrade task will run and will modify the cloud as follows:

1) All software earlier than version 1.0.0.3881-12.0.1.3873 will be removed from all hosts in the cloud. This includes both installed software and hosted software.

2) A unique public key/private key pair will be generated and stored on each host in the cloud.

3) The patch file provided by SAP will be applied to allow the cloud to download the new SAP Sybase SQL Anywhere, on-demand edition software.

Please note that the PrepareForUpgrade task can take a significant amount of time to run depending on the number of hosts in the cloud. Once the PrepareForUpgrade task completes, the cloud is ready to be upgraded to the new SAP Sybase SQL Anywhere, on-demand edition software. The cloud at this point is perfectly usable and databases can continue to be added, dropped, backed up etc. You should not, however, attempt to add new hosts after performing the PrepareForUpgrade task and before completing the 揢pgrade cloud infrastructure� process. If you do add hosts between the time that you run PrepareForUpgrade and before you complete the 揢pgrade cloud infrastructure�, then you will be required to run PrepareForUpgrade a second time.

738302 When comparing databases, Sybase Central could have run out of memory if the source for a procedure, function, view, materialized view or trigger contained a large comment within the 揅REATE <object-type> <object-owner>.<object-name>� prefix. This has been fixed.
738312 When comparing databases, an error could have occurred if either database contained any of the following:

1. A table column with a default value containing nested parentheses

2. A table column with a computed value spanning multiple lines and/or containing nested parentheses

3. A table or column check constraint definition spanning multiple lines and/or containing nested parentheses

These issues have been fixed.

738381 Changes have been made to improve performance for connection pooling.
738400 In the 12.0.1 installer for Mac OS X, there is an information panel at the end of the install that tells users that they must build the UltraLite library from the source files included in the install prior to developing on iPhone or building the samples. This panel was erroneously excluded in the 16.0 GA installer, though it still applies, and has now been added.
738415 Use of connection pooling could have caused web applications to hang. This has been corrected.
738510 The xp_getenv() built-in function returns long binary. In nearly all cases, since environment variables are typically used to store strings, users would need to cast the long binary value to a char or nchar type, depending on their needs. Optionally, csconvert() would need to be used in order to ensure the strings are in the correct character set, but this is not particularly easy to use. This has been corrected. In databases created after this fix, xp_getenv() will return a long nvarchar. This allows strings to be used easily, while minimizing string mangling due to character set conversion. The environment variable value is obtained in UTF-16 from Windows. On Unix platforms, both the variable name and the variable value are assumed to be in the OS charset, and are then converted to the NCHAR charset for the database. If this is not the case, some variable name lookups may fail or values may be mangled.
738517 On Unix platforms, using any of the email functions, while running a version 12.0 database on a version 16.0 server, would have failed with an error: 揇ynamic library 憀ibdbextf.so� could not be loaded.� This has now been fixed.

There are two workarounds:

- ensure that libdbtasks12_r.so.1 is in the library load path (e.g. copy it into the SA 16.0 installation next to libdbextf.so.1)

- upgrade the database to version 16.0

738617 In exceptional rare circumstances, the server may have crashed while trying to use the string value of a column DEFAULT or COMPUTE definition. This may have occurred after resetting the column's DEFAULT or COMPUTE definition using ALTER TABLE. Restarting

the database after executing the ALTER TABLE prevents the problem. This has been fixed.

738659 In some cases, a profiling session opened from the profiling database may have had some changed information, compared to when the profiling session was collected. Some data may not have been saved correctly in the database, especially if the same MobiLink Profiler instance was used for multiple sessions and non-initial sessions were ended while synchronizations were active, or while recent data was still being saved in the profiling database. Even if the data in the profiling database was correct, the "in progress" and "active" sync properties would always have been false when a saved session was opened. These problems have now been fixed.

To mitigate these problems, restart the Profiler between sessions, start sessions when no synchronizations are in progress, and end sessions after all synchronizations have completed.

738679 If a database created with a version 12 server was run on a version 16 server (without being upgraded), inserting data into a compressed column would have succeed and the data could be correctly retrieved, but if the same database was later moved back to a version 12 server, the data may not have been retrieved correctly. This problem would also have been seen if views, procedures, events, triggers, comments on objects, text configuration objects, or java JAR files were added or altered in the version 12 database while running on the version 16 server (since those system tables contain compressed columns). This has been fixed.
738691 Using the dbmanageetd.exe command line option 杅regex prevented any results from being filtered. This has been fixed.
738707 When a mirror or copy node was transitioning between pulling log pages and having the primary or parent pushing log pages, it was possible for the mirror or copy node to have failed assertions 112011 or 100927. This has been fixed.
738756 If an operation on the database had executed trigger actions that included UPDATE PUBLICATION commands, and that operation was also implicitly rolled back because of an error in the trigger (such as a referential integrity violation), then it was possible for SQL Remote (dbremote) to have sent operations that would have been rolled back in the database. The Log Translation utility (dbtran) may have also shown operations as committed in the translated transaction log that were rolled back. This issue has now been fixed
738779 The UltraLite Runtime could have crashed when setting a blob parameter on a prepared statement if the statement was a query and there were more parameters than columns in the result set. This has been fixed.
738782 The integrated Relay Server Outbound Enabler (RSOE) library could have crashed the Mobilink server in the following cases:

1- In an error case, such as a failure to send data to the backend

2- In a timing sensitive situation, while the RSOE was sending data to the backend and receiving a notification from the RelayServer to disconnect a socket (due to client dropping the connection or aborting for any reason before completing a clean send/receive HTTP cycle).

This has been fixed.

738786 The integrated Relay Server Outbound Enabler (RSOE)could have missed processing a socket close event, leading to leaked memory. This problem was rare and random and only occurred in a time-sensitive scenario where the integrated RSOE was sending data to the backend server and received a notification from the Relay Server to close that particular socket connection. This has been fixed.
738912 In extremely rare cases, a copy node could have been partially connected to its parent indefinitely, and not write or apply log operations. In order for this to have occurred, a connection to its parent would need have been dropped shortly after it was established. The sa_mirror_server_status() system procedure would have reported the copy node as connected. This has been fixed.

As workaround, restarting the copynode in this state would cause it to get and apply log operations from its parent.

738955 In rare timing dependent cases, when the primary server was shutdown, the mirror could have failed to take over as primary. In versions 11 and 12, both the primary and mirror could have both appeared to have hung for two minutes while the primary was shutting down. This has been fixed.
738974 The SQL Anywhere Python Database support (sqlanydb) does not work with python 3.3. This has been fixed.
738994 If the mirror tried to take over as primary and failed, in rare cases it was possible for the database on the mirror to have become corrupted. The most likely case of this occurring involved the connection between the two partners being dropped for some reason, and then the mirror server or database being shut down while the mirror was in the middle of attempting to take over as primary. This has been fixed.
739081 Inherited object privileges can now be viewed for any table, view, procedure, function, sequence generator, or dbspace via the 揚rivileges� tabs.

Also, inherited object privileges can now be viewed for any user or role via the 揟able Privileges�, 揤iew Privileges�, 揚rocedure Privileges�, 揝equence Privileges�, and 揇bspace Privileges� tabs.

In both cases, a new 揝how Inherited� check box has been added to the tabs. With the check box checked, the tabs show privileges that are inherited through role inheritance, in addition to privileges that are granted explicitly.

739154 In rare timing dependent cases, the primary could have restarted unnecessarily if the connection between the primary and mirror server was dropped about the same time that the mirror became synchronized. When the primary restarted, the database was stopped and restarted, causing all connections to have been dropped. This has been fixed so that the primary does not restart in this case.
739171 Sybase Central could have become unresponsive for a few moments when a stored procedure was saved, if the text completer was open. The problem occurred if the start of the ALTER PROCEDURE statement was modified (perhaps by removing the quotation marks from the owner or procedure name), then clicking the "Save" toolbar button. This has been fixed.
739173 In the MobiLink Server Log File Viewer, on the "Synchronizations" panel, a single synchronization could have appeared a number of times in the "Synchronizations" table. This happened when the messages from the sync were interspersed with messages from "<Main>". This has been fixed.
739187 If an application executed the STOP JAVA or STOP EXTERNAL ENVIRONMENT statement for a database scoped external environment (i.e java or clr), then the server and external environment resources associated with the connection would be correctly cleaned up, but the external environment executable would not have been shut down. This problem has been corrected and the executable will now shut down when the STOP JAVA or STOP EXTERNAL ENVIRONMENT CLR statement is explicitly executed and there are no other connections using the database scoped external environment.
739247 When a new SAConnectionStringBuilder object was created and used by each SAConnection object in a loop, performance was slow. Performance has now been improved.
739248 CREATE TABLE allows the default for a column to reference a non-existing variable. The server does not validate the DEFAULT clause at creation time. Trying to do the same thing in ALTER TABLE, causes a server crash. This has been fixed, and the server now returns an appropriate error message.
739269 A procedural statement of the form "IF [NOT] EXISTS( simple-subselect ) ..." may have failed with a warning or an error. The warning "The result returned is non-deterministic" was returned if the subselect did not contain an ORDER BY clause. The error "Cursor has not been declared" was returned if the THEN clause, but not the ELSE clause, contained a SELECT statement that returned a result set, and the IF condition evaluated to 'false'. This has been fixed.
739349 If an application executed a SQL SECURITY INVOKER JAVA stored procedure with an effective user id that required quoting or that was owned by a user id that required quoting, then the server would have failed the Java procedure execution with a syntax error. This problem has now been fixed.

Note, a user id that requires quoting would be one that was either a keyword, or contained a dot (.) or some other unusual character. No other external environment is affected by this problem.

739361 An error could have occurred if the View > By Remote ID option was selected when a profiling session was started. This has been fixed.

A workaround is to use View > Compact View instead.

739688 If the SQL Anywhere OnDemand Edition cloud infrastructure is below version 1.0.0.3881, then use the 揢pgrade cloud infrastructure� button to upgrade the cloud to version 1.0.0.3881. Once the cloud infrastructure has been upgraded to 1.0.0.3881, then the cloud servers can be upgraded to 12.0.1.3783.

To upgrade the cloud servers to 12.0.1.3783, follow the steps outlined below instead of following the original documented procedure:

1) Using the 揅loud Software->Change server version� wizard, change the server version of all servers that are not running the latest server version to 12.0.1.3873. Make sure to select 揇o not restart any servers.� Note that if there are both Windows and Linux hosts in your cloud, then this step will need to performed twice, once for each platform.

2) Stop the cloud.

3) Restart the 1.0.0.3881 cloud agent on each of the cloud HA hosts. This will also start the cloud HA servers.

4) Start all of the other servers in the cloud.

5) Verify that all of the servers in the cloud are now running 12.0.1.3783.

739706 If a server was started with a database that contained an invalid path to the transaction log file, the startup message and console log could have contained garbage characters. This has been fixed.
739802 When connected to an IQ database, or if your the Interactive SQL utility is configured to use only IQ, the following "Help" menu items have been disabled:

Interactive SQL Help

SQL Syntax

Keyboard Shortcuts

Also, on the "Connect" window, the "Help" button has been disabled if the type selected is "SAP Sybase IQ".

739810 During quick setup, users are prompted by the following question:

Expect Afaria clients (y/N)?

If the answer is yes, the expectation is that the quick setup script will configure IIS to turn off request buffering, due to the incompatibility between IIS and Afaria client regarding how the size of the entity body of the HTTP request was specified. The IIS7 version of the quick setup script was failing to turn off the buffering. This problem has been fixed.

739834 If a recipient list for an email sent using xp_sendmail contained leading, trailing, or duplicate semi-colons, the server could have crashed when sending the message. This has been fixed.
739835 The body of email messages sent using xp_sendmail would have been truncated at 255 characters. This has been fixed.
739928 When the 64-bit version of the Information utility (dbinfo) was run on Mac OS X systems with the -u option, the values for the 揑ndex Pages�, �%used (index pages)� and 揚ercent of File� columns could have been very large positive or negative numbers. This has been fixed.
740130 Under very rare circumstances, DML operations on a table with an immediate text index that used an external prefilter or termbreaker library, could have caused assertion failures or other issues with the database server. This problem has now been fixed.

--EOF--

  • 本文链接地址:http://www.dbainfo.net/sap-asa-cr-number-7.htm
  • 本文为dbainfo个人原创,请在尊重作者劳动成果的前提下进行转载;
  • 转载务必注明原始出处 : Sybase数据库技术,数据库恢复专家
  • 对《SAP SQL Anywhere的所有已知BUG列表(7)》有何疑问或见解,请在本文下方发表;
  • 对网站还有其他问题或建议,请提交在留言板,谢谢!
  • 目前还没有任何评论.
    :wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)