SAP SQL Anywhere的所有已知BUG列表(5)
随着Sybase被完全整合到SAP下,Sybase原来的支持网站被SAP Support Portal取代。
只有购买了SAP服务的用户才能使用账号登录SAP Support Portal进行介质下载、补丁升级、报Incident等。
考虑到Sybase数据库的初学者或者没有购买原厂服务的Sybase客户情况,现提供SAP ASE/IQ/RS/SDK/SQL Anywhere/PB等产品的BUG信息。
在SAP Support Portal网站或者google上搜索Targeted CR List for ASE,可以看到针对不同版本的CR(CR表示Change Request)简单描述信息列表。
需要注意的是:Targeted CR List for ASE列出的CR虽然绝大多数是BUG,但有一些是更改需求。
以下提供SAP ASE/IQ/RS/SDK/SQL Anywhere/PB等产品的BUG信息!
不仅仅包括BUG的详细描述信息,还包括首次报告BUG的平台、数据库版本以及BUG修复历史过程;有些BUG还提供了Workaround来临时解决该BUG带来问题。
SQL Anywhere的所有已知BUG列表(1)
SQL Anywhere的所有已知BUG列表(2)
SQL Anywhere的所有已知BUG列表(3)
SQL Anywhere的所有已知BUG列表(4)
SQL Anywhere的所有已知BUG列表(5)
SQL Anywhere的所有已知BUG列表(6)
SQL Anywhere的所有已知BUG列表(7)
SQL Anywhere的所有已知BUG列表(8)
CR Number |
Description |
542516 | Shutting down the Relay Server Outbound Enabler could have caused the communication error message: "Communication error! Failed reading." to be logged in the Relay Server log file. This has been fixed. |
542519 | If an application made a large number of remote calls to fetch data from a JDBC based Remote Data Access server, then there was a chance the server would have crashed. For this problem to have occurred, the remote table and/or column names must have been longer than 30 characters. This problem has now been fixed. |
542521 | On Unix systems, when an application crashed, rather that aborting or exiting, it may have gone intio a state of 100% CPU utilization. This would have occurred when the following conditions occurred in order:
1. The application loaded one of SQL Anywhere's client libraries (JDBC driver, ODBC driver, DBLIB), which automatically install a signal handler. 2. The application installs its own signal handler function 3. An application fault happens which causes the application's signal handler to call the SA signal handler. The SA signal handler will return without causingan abort and the application fault would have been re-triggered. The re-trigger of the signal and the return without handling the signal generated 100% CPU utilization. This has been fixed. |
542522 | In rare cases, executing an invalid ALTER PROCEDURE statement could have caused a server crash or an incorrect error message. This has been fixed. |
542523 | It was possible for a mirroring connection (i.e. a connection from one server to another server in a high availability configuration) to have failed with no error message being written to the console. This has been fixed. |
542524 | If an application on a Unix system used the iAnywhere JDBC driver to connect to a DB2 server using a 64-bit DB2 ODBC driver, then calling the Connection.getTransactionIsolationLevel() method may have crashed the client. This problem has been fixed. |
542528 | An application using the iAnywhere JDBC driver may have in rare cases received a Null Pointer Exception when calling Connection.close(). This problem has now been fixed. |
542622 | If a database contained userids which had been assigned non-default login policies, running the Extraction utility (dbxtract) would have generated a reload script containing references to those users, even though some of them might not be defined in the extracted database. This has been fixed. |
542634 | In a MobiLink farm environment with Server-Initiated Sychronization, when the secondary notifier was under stress, it may have failed to have been promoted to the primary. This would have resulted in an I/O exception being thrown whenever a push or pollnow request arose. This problem has been fixed. |
542656 | When run on Windows Vista systems, selecting "Make Interactive SQL the default editor for .SQL files and plan files" in the "Options" dialog, did not make Interactive SQL the default editor. This has been fixed. |
542763 | UltraLite databases could have grown unnecessarily when blobs and clobs were updated. Pages from blobs/clobs on deleted rows were not bing properly released. This has been corrected. |
542768 | Incorrect parameters to the system functions LEFT(), RIGHT() and INSERTSTR() could have caused a Java exception. This has been fixed. |
542812 | If the Administration Tools were the only components installed, the tools would not run correctly, eg., Sybase Central would fail to load the SQL Anywhere plugin. The jodbc.jar file was not being installed. This has been corrected. |
542825 | SQL Anywhere attempts to create a single physical data structure when multiple indexes on the same table are created with identical properties. The dbspace id recorded in the catalog for a newly created index referred to the dbspace id for the new logical index instead of the dbspace id of the existing physical index shared by the new index. This problem has been corrected, and the server will now record the dbspace id of the existing index whenever sharing takes place.
Note, existing databases with this problem can be corrected by dropping and recreating the logical indexes sharing a physical index. Whether or not an existing database has an instance of this problem can be determined by checking the physical_index_id and the file_id fields of the system view SYS.SYSIDX. The problem cases exist in a database when two indexes on the same table have the same physical_index_id values but their file_id values differ. |
542840 | If a Disconnect event was defined and a connection was dropped using DROP CONNECTION, the value of event_parameter('DisconnectReason') would have been incorrect when evaluated inside the event handler. This has been fixed. |
542868 | In rare circumstances the server could have hung updating a blob column. This has been fixed. |
542949 | Sybase Central would sometimes have failed to populate the All Connected Users tab and failed to graph statistics on the Performance Monitor tab. These problems have been fixed. |
542959 | The Interactive SQL utility's (dbisqlc) OUTPUT statement was incorrectly using the value (NULL) for null values, instead of using a blank value. This has been fixed.
This can be worked around by using dbisql or by correcting the output_nulls Interactive SQL option using the statement: set option output_nulls = '' |
542962 | On a busy server, if an application made an external environment or Java call which could have resulted in a thread deadlock error, there was a small possibility that the server would have hung. This problem has now been fixed. |
542967 | If the Unload utility (dbunload) was used to unload an existing database with comments on text indexes or text configurations, the comments were not unloaded. This has been fixed. |
542977 | If a connection was using the CLR External Environment, and the CLR External Environment was left idle for ten minutes or so, then that connection would no longer have been able to make CLR calls, even though other connections were able to use the CLR External Environment without difficulty. This problem has now been fixed.
Note that a simple workaround to the problem is to execute: STOP EXTERNAL ENVIRONMENT CLR on the connection that is having difficulty executing CLR calls. Unfortunately, stopping the CLR External Environment will have the side effect of dropping all static variables for that particular connection. |
543002 | An HTTP server response returning an error status, such as "404 Not Found", was returned in the server's language and the Content-Type header incorrectly specifies charset=ISO-8859-1. This has been fixed so that HTTP status messages are now always returned in the English language. Therefore the Content-Type header charset=ISO-8859-1 will now be correct. |
543006 | If an application was using a JDBC based Remote Data Access server to fetch long multi-byte string data, then there was a possibility the server would have crashed. This problem has been fixed. |
543011 | If the Windows desktop was used to associate ".sql" files with the Interactive SQL utility (dbisql), double-clicking a ".sql" file would probably not have launched dbisql. This has been fixed so that now it does, as long as the desktop was told to open the file with "dbisql.exe" (i.e. NOT "dbisql.com"). Before this change, the only reliable way to associate .SQL files with dbisql was to use the "Make Interactive SQL the default editor..." check box in the "Options" window. |
543069 | The server could have leaked memory, possibly leading to an 'Out of Memory' error, when using TDS connections (eg. jConnect) that fetched string data. This has now been corrected. |
543100 | The table editor would have allowed marking all columns in a table for deletion. If this was attempted in multiple operations; that is, by selecting some of the columns and pressing the Delete key, and then selecting the remaining columns and pressing the Delete key again. In such cases, attempting to save the table would have failed while attempting to delete the last column in the table. This has been fixed. Now it is no longer possible to mark all columns for deletion. Attempting to do so displays an error message. |
543127 | After executing the Unload utility (dbunload) with the -d option (data only), the resulting reload.sql file would have contained calls to the non-existent function sa_unload_display_table_status(). The same problem would have occurred when using the Sybase Central Unload wizard and chosing "Unload data only". This has been fixed. |
543135 | When the Interactive SQL utility (dbisql) was started with the -q "Suppress non-critical messages" command line option, it did not suppressing the following warnings:
- "Interactive SQL is currently configured to quit if a SQL statement fails to execute" - "You are connected to an database which is not explicitly supported" - "ODBC tracing is currently enabled" This has been corrected and these warnings are now suppressed when "-q" is used. |
543210 | Queries with a large number of aggregate expressions in the select list, but without a GROUP BY clause, could have crashed the server. This has been fixed.
A workaround for this problem is to add a GROUP BY clause. |
543216 | The Schema Painter would have failed to save schema if it contained multibyte characters. This has been fixed. |
543231 | The OK button on the "Connect" dialog could have failed to do anything if all of the following were true:
1. The "Fast launcher" option was enabled 2. The "Connect" window was opened and left open in one DBISQL window 3. A "Connect" window was opened and closed from another DBISQL window This has been fixed. To workaround the problem, close the "Connect" window and reopen it. |
543245 | In certain configurations, executing the REMOTE RESET statement can cause the server to crash. This has been fixed. |
543248 | If a comment was created for a primary key, the comment would not have been unloaded by the Unload utility (dbunload). This has been fixed. |
543254 | The value for the "EncryptedPassword" connection parameter was visible in clear text on the "Advanced" page of the "Connect" window. This has been fixed. |
543261 | The server could have hang while concurrently updating blob columns. This has been fixed. |
543272 | Second and subsequent connections from a single application may have used TCP/SPX options specified by the first connection made by that application using the same protocol. This could potentially have resulted in a connection being made to the wrong server. This has been fixed. |
543367 | Clicking the "Options" button in the Query Editor window did not automatically select the "Query Editor" tab in the "Options" window as it did in previous versions of Interactive SQL. This has been corrected. |
543375 | Failure of a statement which was partially executed and involved either clobs or blobs, could have caused unneccessary database growth. Blobs and clobs were not being correctly discarded following statement failure. This has been corrected. |
543380 | Clicking the "Create a synchronization subscription" task for a MobiLink user would have caused nothing to happen. Now, the "Create Synchronization Subscription Wizard" is opened. |
543391 | A security flaw in the MobiLink server was fixed. |
543394 | An INSERT, UPDATE or DELETE statement executed on a table with an IMMEDIATE text index could have caused correctness issues for subsequent CONTAINS queries that used the text index. For the problem to have occurred, very long string values (over 32K characters) had to have been indexed by the text index and modified by the INSERT, UPDATE or DELETE statement. This has been fixed.
For existing databases with IMMEDIATE text indexes that could be affected by this issue, dropping and recreating the text index is recommended. |
543397 | If an application was connected via jConnect and attempted to query the column metadata of a table containing a DATE or TIME column, then the server would have incorrectly returned the error -186 'Subquery cannot return more than one row'. When support for the TDS DATE and TIME datatypes was added, the metadata information in spt_jdatatype_info was not properly updated. This has now been fixed. |
543478 | In very rare circumstances, an auto-shutdown of a database could have caused the server to crash, if the server was in the process of shrinking the cache at the same time. This problem has been fixed. |
543491 | Sybase Central could have crash while attempting to fetch the messages for a server. This has been fixed. |
543518 | The SQL Anywhere http option "AcceptCharset" generated a SQL error with "SQLCODE -939 Invalid setting for HTTP option" when a match was not found within the union of the client's Accept-Charset list and the server's AcceptCharset http option charset list. This has been fixed.
With this change a SQL error is now generated only if the http option value is malformed or none of the charsets within the value are supported by SQL Anywhere. In addition, the run-time selection of a suitable response charset has changed to provide more control over the charset selection. Primarily, given that the union of server and client charset lists are empty, a charset is now selected based on the server's AcceptCharset http option value not from the client's Accept-Charset request header. The old behaviour is supported by allowing an asterisk (*) to be specified within the AcceptCharset http option list. An asterisk has the meaning that, should the client/server charset union be empty, try to use the preferred charset specified by the client. If none are found, then select from the server's AcceptCharset http option list. A summary of the processing priority of the various cases follow: Processing Priority cases: 1 - If a charset can be selected from the union of charsets from the AcceptCharset http option and the Accept-Charset HTTP request header, then it will be used (no change in behaviour). 2 - If the client sends an Accept-Charset HTTP request header, but none of the charsets match the AcceptCharset http option, then use the first and/or highest q-value charset specified within the AcceptCharset http option. (This is a behaviour change). 3 - If the client does not send an Accept-Charset HTTP request header, select the first and/or highest q-value charset specified within the AcceptCharset http option (no change in behaviour). Caveats: a. Within the AcceptCharset http option value, the placement of the '+' token (which specifies the use of database charset whenever possible regardless of the q-value assigned to it by the client) is now significant. If '+' is specified anywhere within the http option value then case 1) will be true if the client happens to specify the database charset. If '+' is specified first and/or it has the highest q-value, then cases 2) and 3) above would resolve to using the database charset. b. Within the AcceptCharset http option value, an asterisk (*) signifies that any client charset (as specified by its Accept-Charset HTTP header) should be considered prior to defaulting to the http option charset list. The best match within the union of client/server charsets ( case 1) ) has priority. In the processing priority cases above, having failed case 1) the client's Accept-Charset is scanned for a suitable charset. If a suitable charset is not found, then a charset is selected according to case 3). c. SQLCODE -939 error is only generated if the http option value is malformed or none of the specified charsets within its value is supported by SQL Anywhere. The database charset is selected whenever a SQLCODE -939 error is generated. |
543525 | Issuing a REMOTE RESET, or granting REMOTE to a user, when the log offset was larger than 4GB could have caused the server to crash. This has been fixed. |
543541 | If an application was connected via the iAnywhere JDBC driver, and the application had made DatabaseMetaData calls, then calling Connection.close() would have given a NullPointerException if the server has already closed the connection. This problem has now been fixed. |
543548 | The version number built into the UltraLiteJ.jad file for RIM BlackBerry deployment would sometimes have been incorrecting generated. This has been fixed. |
543552 | In a scenario where a table had a large number of initial inserts followed by a large number of deletes, inserts or updates, where the number of deletes that had taken place were always greater than the number of inserts, the database may have become corrupted. These operations may have occur via program initiated operations, or via synchronization operations. This has been fixed. Existing databases that have not yet been corrupted will be fixed when the UltraLiteJ library is updated. |
543562 | If an application was connected using jConnect and attempted to fetch a result set containing a large number of columns (more than 3000), then the application would have failed with a TDS protocol error. This problem has now been fixed.
Note, that in order to fetch such a result set, the application must be using jConnect 6.x. |
543631 | If a simple statement was executed with a particular form of ORDER BY clause, then the server could have crashed while executing the statement. This has been fixed. |
543647 | The REFRESH MATERIALIZED VIEW statement is used to rebuild the contents of a materialized view. When this statement was used inside a stored procedure, execution of the procedure could have caused the server to crash under certain circumstances. This problem has been corrected, and the server now executes the stored procedure correctly. The problem can be avoided by using EXECUTE IMMEDIATE with the REFRESH statement. |
543652 | The stored procedure debugger would not allow breakpoints to be set within triggers. This has been fixed. |
543656 | A database that had gone through recovery after an abnormal shutdown could have been unreadable by the MobiLink Client dbmlsync. Dbmlsync would have reported that the transaction log was corrupt, even though the server successfully recovered. At the end of recovery, the server performs a checkpoint. This checkpoint was correctly updated in the database and written to the transaction log, but was not being flushed to the log properly. This has now been fixed.
The original crashed database will need to be recovered with the fixed server. |
543658 | If the property sheet for a column was opened and its comment updated when an index or text index was selected in the tree, then the updated comment would not have appeared in the right pane. This has been fixed. |
543689 | Sybase Central could have crashed, if when attempting to change a table's primary
key from within the Table Editor the primary key was dropped, but could not be re-created. This has been fixed. |
543694 | When using Snapshot isolation, WITH HOLD cursors would have failed to see rows modified by their own connection after the connection executed a COMMIT. This has been fixed so that when using Snapshot, Statement-Snapshot or Readonly-Statement-Snapshot isolation,
WITH HOLD cursors will see a snapshot of all rows committed at the snapshot start time, as well as all modifications done by the current connection since the start of the transaction within which the cursor was open. Note that the contents of the cursors are unaffected by the current transaction committing. |
543695 | Output parameters for stored procedure calls that were marked as indirect (DBTYPE_BYREF) were not handled properly by the SQL Anywhere OLE DB provider. This problem has been corrected. |
543803 | On the "Request Logging" page of a server's property sheet, the drop-down list adjacent to the "All connections to the following database:" radio button would actually have listed connections, not databases. This has been fixed. |
543812 | If a user caused an event to fire, e.g. by disconnecting to fire a Disconnect event, and another user immediately caused that user to be dropped, the server would have crashed. This has been fixed. |
543814 | The ansi_substring option, which was removed in the 11.0.0 release, has been re-instated. The default value for the option is ON, as it was in version 10. For databases created with 11.0.0 where the option did not exist, a setting for PUBLIC.ansi_substring must be defined before attempting to set the option for another user and before executing "set temporary option ansi_substring ...". |
543826 | If an application called sp_remote_columns to determine the domain ids of an UltraLite table, and the UltraLite table contained a UniqueIdentifier column, then the domain id of the uniqueidentifer column would have been incorrectly returned as Char. This problem has now been fixed. |
543835 | The functions YEARS(), MONTHS(), WEEKS(), DAYS(), HOURS(), MINUTES(), and SECONDS() could have been described with the incorrect data type. If these functions were used with two parameters with the second parameter an untyped expression, then the expression was assigned the incorrect data type. Untyped expressions include NULL constant literals and host variable that are not yet bound to a type, for example during DESCRIBE.
For example, the following expression was incorrectly described as TIMESTAMP (it should be INT): select months( current timestamp, NULL ) This incorrect type could have affected more complex expressions composed with one of the affected functions as an argument. This problem has been fixed. Note, this change could alter the definition of materialized views; views containing the affected constructs should be refreshed. |
543888 | The SQL Anywhere OLE DB provider did not support multiple parameter sets in the ICommand::Execute method. The number of parameter sets is specified in the cParamSets field of the DBPARAMS structure, for example:
HRESULT Execute ( IUnknown牋牋 *pUnkOuter, REFIID牋牋牋牋riid, DBPARAMS牋牋 *pParams, DBROWCOUNT牋 *pcRowsAffected, IUnknown牋牋**ppRowset); struct DBPARAMS { void *pData; DB_UPARAMS cParamSets; HACCESSOR hAccessor; }; This is now supported, so it is now possible to execute one INSERT statement and specify several sets of parameters in order to insert several rows into a table. Note the following OLE DB specification restriction: Sets of multiple parameters (cParamSets is greater than one) can be specified only if DBPROP_MULTIPLEPARAMSETS is VARIANT_TRUE and the command does not return any rowsets. This means that multiple parameterized SELECT statements can not be executed that would each return a result set. For the SQL Anywhere provider, DBPROP_MULTIPLEPARAMSETS is VARIANT_TRUE (and always has been). |
543910 | The version 10 and 11 servers were truncating 32-byte names to 31 bytes. So when a version 10 or 11 client attempted a shared memory connection specifying a 32-byte server name that had a common prefix of exactly 31 bytes with a running version 10 or 11 server that also has a 31-byte name, the connection attempt would have failed. As well, if a version 10 or 11 client attempted a shared memory connection specifying a server name that had a common prefix of exactly 31 bytes with a running version 9 or prior server that had a name longer than 31 bytes, the connection attempt would have failed. This problem has been fixed. Note that for version 10 and 11, the fix affects both client and server. For version 9, the fix is just to the server. However, an unmodified version 10 or 11 client will be able to establish such a connection against an unmodified version 9
server. |
543940 | The server could have stop responding and continue to consume CPU when processing the SUBSTR() function. For this to have occurred, the SUBSTR() must appear on the right hand side of a string concatenation operation and must also be over a string that comes from a row in a table. Additionally, the string data must be greater than one database page in length. Even if all these conditions are met, it is very unlikely that this bug will be hit, as it depends on other internal server conditions as well. This has now been fixed. |
543943 | When using the Table editor to create a column or modify its data type, if the data type was set in the column's property sheet, then extraneous NO INDEX or COMPRESSED clauses could have been added to the CREATE TABLE or ALTER TABLE statement. This has been fixed. |
543955 | Some files for subfeatures would still have be included in the install created by the Deployment Wizard, even if their parent feature was unselected. This has been fixed. |
544030 | Triggers defined on global temporary tables were not fired. This has been fixed. |
544047 | Validation of a database may have reported that some tables contained orphaned blobs. This was only true for tables that were stored in a dbspace other than the SYSTEM dbspace. This should also have only occurred on databases using snapshot isolation. Databases containing these orphaned blobs have pages which are being wasted. The only way to free these pages for reuse is to rebuild the database file. This problem has been fix so that generating orphaned blobs should no longer be possible. |
544069 | The server could have crashed if two or more connections were simultaneously scanning a table for the first time after the server was started. This has been fixed. |
544094 | When creating a procedure or function, if an existing procedure or function was altered and a language clause was specified with an undefined language, then the server would have failed to return an error. This problem has now been fixed and the server now correctly returns an error. |
544101 | The initial width of the "Plan Viewer" window could have been too narrow to display all of its contents. As a result, the "Get Plan" button could have been hidden. This has been fixed. |
544181 | Calling the system function traced_plan() for a query containing captured host variables could have failed and return a conversion error. When using Profiling Mode in the Sybase Central plugin, this caused the profiling browser to fail to display a "Best Guessed Plan" for a query whose original graphical plan was not captured. This has been fixed. |
544187 | A server could have failed to start if another server was starting at the same time. The server that failed to start would have displayed the error "Database cannot be started -- No such file or directory". The error message was also misleading since the database file did exist; the server actually had a problem opening the database's temporary file. This has been fixed. |
544191 | In some circumstances, host variable references in batches could have caused a server crash. This has been fixed so that the error "Host variables may not be used within a batch" is now returned. |
544199 | In rare situations, the server could have crashed during graphical plan construction. For the problem to occur, one of the tables used in the query had to have a unique index and a foreign key index sharing the same columns and settings, and the index had to be considered or used for the query. This has been fixed. |
544213 | Comments on the following object types were not preserved by dbunload:
dbspaces Java classes Java jars external environments external environment objects login policies This has been fixed. |
544214 | The changes for Engineering case 535861 caused the OLE DB schema support stored procedures to not be installed in newly created databases. This problem has now been corrected.
As a work-around, databases can be upgraded using dbupgrad.exe or by executing an ALTER DATABASE UPGRADE PROCEDURE ON statement. |
544318 | Specific forms of SELECT statements could have caused a server crash when opened with particular cursor types. This problem has been fixed.
As an interim work-around, the server command line switch "-hW AllowBypassCosted" can be specified to avoid this problem. |
544321 | An HTTPS synchronization through a proxy server that required authentication would have failed. When using HTTPS through a proxy server, the client first sends a CONNECT HTTP request to establish a channel through the proxy. Unfortunately, authentication challenges was only active for GET and POST requests. This has been corrected so that CONNECT requests are now active as well. |
544343 | When the Deployment wizard was used to create an installment that included Sybase Central and the SQL Anywhere plugin, the plugin was not automatically installed in Sybase Central. This has been fixed |
544350 | A user could have dropped a publication whose upload was in an unknown state. For example, the synchronization failed due to a communication error before the upload acknowledgement was received from MobiLink. Dropping a publication whose upload status is unknown could result in lost upload data or duplicate uploads. This has been fixed. Attempting to drop a publication in such a state will now result in a SQLE_SYNC_STATUS_UNKNOWN error. |
544460 | Particular forms of complex predicates could have caused the server to crash when executed against a string column with declared size no more than 7 bytes. This has been fixed. |
544486 | If an application connected using Open Client attempted to fetch a result set containing a large number of columns (more than 3000), then the application would have failed with a TDS protocol error. This problem has now been fixed.
Note, that in order to fetch such a result set, the application must be using Open Client 15. |
544496 | If the server was started with the "-x none" command line option, and without the -xs option, then calling an external web procedure would have caused the server to crash. This has been fixed. |
544525 | If a publication that had been previous used in a synchronization was dropped, the next publication created would not have been able to synchronize due to a progress offset error from MobiLink. This has been fixed. |
544612 | If a row was inserted into a database table using the table in the "Results" panel, and the table contained a non-nullable TIME, DATE, or TIMESTAMP column, the column was initially filled with the current time or date in a format that was not necessarily parsable by the database. This has been fixed. |
544613 | In an SIS environment, if a MobiLink client device went offline (device a), and then another client device (device B) came online with the same device address (ie. IP address/port) as A, and an SIS UDP notification for client A was sent by the notifier, then client B would have received and rejected the notification with an error similar to the following:
Error: <Notifier(QAnyNotifier_client)>: Request 1604437321 is accepted by invalid respondent 'ias_receiver_lsn'. Please check the message filters on the listener This error would have happened whenever a UDP notification for client A was sent, resulting in wasteful SIS notifications. This has now been fixed. For 9.0.2, the fix was made only for MobiLink with messaging (QAnywhere) for ASA consolidated databases. In later versions, the fix applies to all MobiLink Notifiers in all supported consolidated databases. |
544614 | Pressing the F2 key while inserting or updating a row in the "Results" pane table, would have resulted in an internal error. This has been fixed by ignoring the F2 key if editing mode is already entered. |
544626 | The iAnywhere JDBC driver may have crashed when allocating a new statement, and the Java VM was out of memory. This has been fixed. The driver will now either fail gracefully, or assert, depending on the circumstances. |
544641 | When running on Windows systems, the server could have taken longer than necessary to shutdown, or could even have crashed during the shutdown process. This has now been fixed. |
544651 | Under rare circumstances, a full text search could have returned incorrect results. For this problem to occur, the database with the text index had to have been refreshed at least once and then moved between platforms with different byte orderings. This has now been fixed. No action needs to be taken for databases with text indexes that were created on little-endian machines and were never refreshed or updated on big-endian machines. Text indexes will need to be truncated and refreshed (for MANUAL and AUTO text indexes), or recreated (for IMMEDIATE indexes), after applying this fix if they were created or refreshed on a big-endian machine. |
544669 | If a column histogram incorrectly contained a selectivity estimate of 100% for the NULL values, the best plan found by the optimizer could have been very inefficient. This problem affected the computation of the selectivity estimation of predicates of the form "T.X theta expression" (theta can be =, <>, >, >=, < or <=) which would have incorrectly been computed as 0%. A change has been made to the optimizer so that it no longer trusts a NULL selectivity estimation of 100%, instead it uses the computed selectivity estimation of (100% - epsilon).
To test the estimated selectivity of the NULL values for a column T.X use: "select first estimate(X, null) from T". A workaround is to recreate statistics on the column T.X by using: "create statistics T (X)". However, if the column T.X has often only NULL values, and then it is updated to some non-null values, it is recommended to upgrade to a server containing this fix. |
544670 | In some cases, statements containing complex expressions could have used an excessive amount of memory that could affect other connections in the server. This has been fixed so that attempts to execute large expressions that can not be handled will now generate the error:
-890 "Statement size or complexity exceeds server limits" |
544672 | Some fulltext queries took inordinate amounts of memory when opening the statement. These queries typically also took too long to open. These problems predominantly affected queries with long phrases or queries over NGRAM indexes with long search terms. The memory usage and open times have been improved. |
544689 | All database pages for a table may not have been freed when the table was dropped. This has now been fixed. |
544763 | The -nc option, which limits the number of concurrent sockets opened by MobiLink server, wasn't feasible to use with non-persistent HTTP/HTTPS, because sockets that could have been continuations of valid synchronizations might have been rejected. The -sm option has been improved to provide similar functionality to -nc when used with non-persistent HTTP/HTTPS. Furthermore, the MobiLink server should usually have provided HTTP error 503 (Service Unavailable) to the remote when the -sm limit was reached and sessions were kicked out. If the -nc limit was reached, however, the error would instead have been a socket error -- usually with a system code about being unable to connect, but experience has shown the system code can vary.
Note, to limit the number of concurrent synchronizations for non-persistent HTTP/HTTPS, the -nc option should be set significantly higher than -sm. The greater the difference between -sm and -nc, the more likely (but never guaranteed) the 503 error will be sent to the remote instead of a socket error. |
544779 | Any web service in the SYSWEBSERVICE table with data in the PARAMETER column would have been disabled when the database was unloaded into a new database. This has been fixed.
Note, any SOAP services that defined a DATATYPE, GROUP or FORMAT clause, or any web service that defined a METHODS clause, were affected. |
544787 | If a statement required rows to be sorted and at least two rows had long ORDER BY key values that were equal in the first 256 bytes and the statement was executed with a parallel access plan, it was possible for the two rows to be returned in an order that did not match the ORDER BY clause. This problem has been fixed.
Note, it was possible for text indexes that contain long search terms to be affected by this problem when the text index was built or updated. If this occured, the index should be rebuilt with a server containing this fix. |
544791 | In rare timing dependent cases, the server could have hung on shutdown, or possibly failed in other ways, after executing a DROP CONNECTION statement. This has now been fixed. |
544925 | A connection may have continued to hold table or row locks even when a DDL statement failed. This has been fixed. |
544938 | The server supports the [NOT] DETERMINISTIC specification for user defined functions. When used for stored procedures the clause would have failed to generate the expected syntax error. Instead the clause was accepted and then ignored by the server. This has been fixed so that the server will now generate a syntax error when [NOT] DETERMINISTIC is used in the CREATE and ALTER PROCEDURE statements. |
544943 | The MobiLink server could have hung, or crashed, when using encrypted streams. The behaviour was highly dependent on both timing and data size. This has now been fixed. |
544944 | When calling sp_remote_tables() to get the column information for an UltraLite table, any unsigned columns would have been described as signed columns. This problem has been fixed. |
544948 | The system function xp_sendmail() would have always encoded the subject line of an email being sent. While this is properly decoded when the email is delivered to an email client, it was not decoded in many instances when sent via SMS. A change has been made to not encode the subject line when the subject contains only 7-bit ascii characters. Attempting to send a message containing non 7-bit ascii characters to a SMS client will still result in the subject line being encoded. It will be up the carrier to properly convert from SMTP to SMS. |
544956 | If MobiLink Client was performing a synchronization, and the status of the last synchronization was unknown, it was possible for the MobiLink Server to have reported that the synchronization had started twice. The MobiLink Log with no extra verbosity might contain the following messages:
Request from "Dbmlsync Version 10.0.1.3750" for: remote ID: rem1, user name: rem1, version: v1 Request from "Dbmlsync Version 10.0.1.3750" for: remote ID: rem1, user name: rem1, version: v1 Synchronization complete This problem has been fixed. |
544961 | The Stored Procedure Debugger was not able to set breakpoints on statements within exception handlers. This has been fixed. |
544969 | UltraLite treated all cursors declared in embedded SQL as being FOR UPDATE. A query with the FOR READ ONLY clause could still have been updated as the clause was ignored. This has now now fixed.
Also with this fix, UltraLite embedded SQL cursors are now considered read only if no clause is present. The previous behaviour can be achieved with sqlpp 杕 HISTORICAL. |
544972 | The server could have crashed while optimizing a text query containing a phrase. This has been fixed. |
545000 | SELECT DISTINCT with more than 16 select-list items would have caused an exception to be thrown. A DISTINCT optimization should have tested that there were 16 or fewer select-list items and failed when that was not so. The omitted test has now been added. |
545096 | The latest release of the Perl, PHP, etc language drivers now use the C API that was released with SQL Anywhere 11.0. To allow those new drivers to be backward compatible with 10.0.1, support has been added for this new C API to 10.0.1. Note that the language drivers that ship with 10.0.1 EBFs will continue to be the ESQL version. |
545105 | The DatabaseInfo methods getDbFormat and getRelease, would have returned incorrect values. Additionally, getRelease now returns a String which reflects both the release version and the build number. |
545251 | The MobiLink Listener (dblsn), with IP tracking off (-ni) or default UDP listening off (-nu), may have shutdown unexpectedly after the first notification. This problem was introduced by the changes made for Engineering case 535235. This has now fixed. |
545353 | The cardinality estimation of the table expression "P key join F", where P is the primary key table and F is the foreign key table, was incorrectly computed in certain cases for multi-column keys. This has been fixed. Now, the cardinality estimation for this class of table expressions is "card(F) \ #of rows in F with at least one NULL value for multi-column key".
Example: ALTER TABLE FOREIGN KEY ( fk1, fk2, ..., fkn) references P (pk1, pk2,..., pkn) Q: select * from F, P where F.fk1 = P.pk1 and F.fk2 = P.pk2 and ... and F.fkn = P.pkn returns all rows from the foreign key table F less the rows having at least one NULL for the foreign key columns F.fk1, F.fk2, ..., F.fkn. |
545374 | When using the SQL Anywhere ODBC driver, if SQLBindCol was called immediately after a SQLFetch and before calling SQLBulkOperations( SQL_UPDATE_BY_BOOKMARK ), then the SQLBulkOperations update would have failed. This problem has been fixed. |
545383 | Queries accessing a table via an index could have performed poorly after performing many update and delete operations on the indexed table. If two leaf pages that required cleaning were merged, the second of the two would not have been cleaned, which could have resulted in many almost empty leaf pages. This has been fixed. |
545454 | The Interactive SQL utility (dbisql) could have crashed if the iAnywhere JDBC-ODBC driver was not installed correctly. This has been changed so that dbisql gives an error message instead. |
545455 | A server started with the -zl or -zp command line options (or by calling the system procedure sa_server_option() with RememberLastStatement or RememberLastPlan), that services large numbers of HTTP connections could have crashed. This issue would have been rare and highly timing dependent. This has now been fixed. |
545463 | The Interactive SQL utility (dbisql) would have crashed if a START DATABASE ... ON statement was executed when it was not connected, and had never been connected. This has been fixed. |
545468 | Calling either of the system procedures sa_http_php_page() or sa_http_php_page_interpreted() would have resulted in a leading and a trailing space in the output. This has been corrected. |
545516 | The MobiLink server now requires the ASE native ODBC driver, version 15.0.0.320, which can be retrieved from the Sybase Software Developer Kit - 15 ESD #14, for consolidated databases running on ASE 12.5 or ASE 15.0 database servers. This is required due to a bug in the older versions of the ASE native ODBC driver, that has now been fixed. |
545519 | The changes for Engineering case 541942 could have cause GLOBAL TEMPORARY tables to be created in the SYSTEM dbspace during database creation. Only databases created by a server with this problem are affected, and can be corrected by rebuilding with a fixed server.
This problem has two visible results: Firstly, diagnostic tracing into a local database will cause the database to grow twice as large as expected due to diagnostic data. It will be necessary to rebuild a database this problem in order to prevent this growth from happening with subsequent builds. Secondly, JDBC metadata that is supposed to be unique to each connection will end up being visible to all connections. This can cause a variety of problems for applications that depend on querying this metadata. This manifestation of the problem can be avoided by running dbupgrad with a fixed server against a database with this problem. The presence of this problem in a database can be verified by querying SYSTABLE and noting that all jdbc_* tables have type of BASE. |
545528 | Inexpensive statements may have taken a long time to optimize (i.e. OPEN time was high), or may have had inefficient access plans. This has now been fixed. The only condition required for this to happen was that the parallel access plans were considered by the optimizer.
For more info on intra-query parallelism see: SQL Anywhere Server - SQL Usage Query Optimizer Query optimization and execution Query execution algorithms Parallelism during query execution This change is particularly important when moving to version 11.0.1, from 10.0.1 or 11.0.0, and running the personal server (dbeng11). The 10.0.1 personal server (dbeng10) and 11.0.0 personal server (dbeng11) are restricted to using only one CPU, and only one core if the CPU has multiple cores. Also, the 10.0.1 optimizer did not consider the number of maximum concurrent threads (i.e. ConcurrentThreads global variable), and may generate parallel plans which will not be executed in parallel by the 10.0.1 personal server, only one parallel branch will process all the rows. This is a bug which was fixed in 11.0.0 GA. The 11.0.1 personal server can use all the cores available in one CPU, which means the 11.0.1 optimizer will cost and generate access plans using parallel physical operators when multiple cores are available. This difference in behaviour related to the number of cores allowed to be used by the personal server may result in a very different access plan being executed by 11.0.1 compared to the access plan executed by 11.0.0, for the same SQL statement. |
545543 | Unloading and reloading a 9.0.2 db could have failed with a 'capability not found' error if the 9.0.2 db had remote servers defined and contains capabilities that do not exist in later versions. This problem has now been fixed. The unload/reload scripts now check for the existence of each capability in SYSCAPABILITYNAME prior to issuing the ALTER SERVER ... CAPABILITY statement. |
545546 | When using the Create Database wizard, if a collation's punctuation sensitivity was changed to a value other than its default, then the wizard would have failed to create the database. This has been fixed. |
545565 | When an application called the ODBC fuction SQLTables() to get a list of supported table types, the TEXT table type would not have been listed. In addition, calling SQLTables() to list tables would have incorrectly listed tables of type TEXT as LOCAL TEMPORARY. Similarly, when an application using the iAnywhere JDBC driver called DatabaseMetaData.getTableTypes() to get a list of supported table types, the TEXT table type would not have been listed; and calling DatabaseMetaData.getTables() would have incorrectly identified TEXT tables as LOCAL TEMPORARY. Both the ODBC driver and JDBC driver have now been updated to properly list the TEXT table type and identify tables of type TEXT correctly. |
545570 | The server could have crashed while inserting rows to a table when also creating statistics on the table. This has been fixed. |
545574 | In certain circumstances, TLS connections that should have failed, would have actually succeed. This has been fixed. Note that this problem does not occur on Mac OS X systems. |
545611 | In some rare cases, errors during execution of a DROP TABLE or DROP MATERIALIZED VIEW statement, could have resulted in locks being held for too long. This has been fixed. |
545621 | The server may crash after a materialized view has been dropped. This has been fixed. |
545627 | Clicking the "File/Run Script" menu item to run a script file could have caused the Interactive SQL utility to crash with an "Out of memory" error. This has been fixed so that a more ordinary error message is displayed, and running the script is gracefully aborted. This problem could have occurred when the script was very large (thousands of lines) and especially if it contained unclosed block statements. |
545640 | Attempting to set an HTTP header from within an inner procedure would have resulted in a SQL error indicating that setting of the HTTP header was invalid. This has been fixed so that inner procedures may now modify HTTP response headers.
For example: With this fix an HTTP request to the SUB service now succeeds in setting the User-Header within the SUB1 function. create service sub type 'raw' authorization off secure off user dba as call sp_sub(); create procedure sp_sub() begin select sub1(); end; create function sub1() returns long varchar begin call sa_set_http_header('User-Header', 'test'); return 'test'; end; |
545641 | The Interactive SQL utility (dbisql) could have crashed if the Query Editor window was open and the database connection was lost. This has been fixed. |
545646 | Creating a new connection profile by copying an existing profile, could have resulted in the copy having the wrong plugin type. This has been fixed. |
545684 | When optimizing simple SQL statements the server was skipping some of the optimizations implemented to improve DESCRIBE time. This has been corrected.
For more information see: SQL Anywhere Server - SQL Usage Query Optimizer Query optimization and execution Query processing phases |
545690 | When a message was sent to a destination alias, the QAnywhere Server may not have immediately generated push notifications for some members of the alias. This could have resulted in the server taking as long as a minute to push notifications to clients. This has been fixed. |
545704 | When trying to create a Transact-SQL function or procedure, use of the "expr AS name" syntax in the arguments to a function call would have given an error. This has been fixed.
A workaround is to write the function or procedure using the Watcom-SQL dialect. |
545707 | When running on Unix systems, the server could have hung and not proceeded any further while generating a mini-core. This has been fixed. |
545713 | On Mac OS X systems, the function sqlany_initialize_interface() in sqlanydll.c would have failed if it attempted to use the default library name (that is, if the second argument to the function was NULL and the environment variable SQLANY_API_DLL was not set). This was due to the default library name having the wrong extension ('so' as opposed to 'dylib'). This has been fixed.
As a workaround, the correct library name can be specified in the second argument to sqlany_initialize_interface, the environment variable SQLANY_API_DLL can be set to the correct library name, or the extension can be manually changed in the DEFAULT_LIBRARY_NAME macro in sacapidll.c. |
545744 | The server may found, and used, the wrong license file when starting up. This has been corrected.
Note: if the server now reports a "License file not found" error after applying this fix, when it started prior to the fix, then the license file was not correctly installed. To correct this, the license file should be moved so that it is in the same directory as the server executable. |
545760 | The SQL tab for a Trigger, View, Procedure or Event could have contained stale SQL, if the object's SQL was modified and saved to the database in a separate window (opened using the "Edit in New Window" menu item). The problem would only have occurred when the object's SQL tab was displayed in the right pane before the object was modified and saved to the database in the separate window, and the object's SQL was modified and saved to the database in the separate window while the object's SQL tab was not displayed in the right pane of the main Sybase Central window.
A similar problem would have occurred if a maintenance plan was modified after having shown its corresponding event's SQL tab. The event's SQL tab would have displayed stale SQL. In both cases, pressing F5 to refresh Sybase Central would have show the object's up-to-date SQL. Pressing F5 is now no longer necessary, as Sybase Central has been corrected to keep such objects' SQL up-to-date. |
545762 | The MobiLink system stored procedures for DB2 Mainframe were created with a default isolation level of RR (Repeatable Read = Serializable) instead of CS (Cursor Stability = Read Committed). This has been fixed. |
545772 | If an application was connected using the iAnywhere JDBC driver, and the application subsequently executed a statement that returned more than one result set, then attempting to fetch any result set after the first would have failed with a function sequence error. This problem would only have appeared once the fix for Egineering case 533936 was applied. This has now been fixed. |
545785 | If a SELECT statement referenced a single table and contained a TOP n or FIRST clause, it was possible for a slow execution plan to be picked. In order for this to have occurred, there needed to be at least two indexes that could be used for the plan and the depth of the indexes needed to differ. This has been fixed. |
545815 | The database server could have leaked memory, and eventually failed with an 'Out of Memory' error, when using TDS connections (eg. jConnect) that fetched string data. This has now been fixed. This fix is in addition to the memory leak that was fixed for Engineering case 543069. |
545824 | When doing dynamic cache size tuning, the server could have choosen a cache size which was larger than appropriate. This could have caused performance degradation if other system components were competing for memory. The server was erroneously basing target cache size computations on the server's "peak" working set size, rather than its "current" working set size. This has been corrected. |
545899 | For particular structures of tables and indexes, it was possible for an ALTER TABLE statement to fail with an assertion failure such as the following:
Assertion failed: 201501 - Page for requested record not a table page or record not present on page This has been fixed. |
545901 | If an application called an external environment procedure immediately after issuing a commit, and the external environment procedure performed server side calls and issues its own commit, then there was a chance the server will have failed assertion 201501 "Page for requested record not a table page or record not present on page". This problem has now been fixed. |
545902 | If The Interactive SQL utility (dbisql) could not load the DBLIB library it would have crashed, rather than reporting the problem and degrading gracefully. This has been fixed. |
545912 | The original release of the Express Bug Fix for 11.0.0 1490 would have failed to install on non-English Windows systems. This has been fixed. |
545917 | When the Relay Server (rshost) or the Relay Server Outbound Enabler (rsoe) RSHOST executables printed the usage message, empty lines and/or garbage characters could have been displayed after the usage message. This has now been fixed. |
545933 | Attempting to backup a database of size 5GB or larger with the clause "WAIT BEFORE START" could have caused the server to hang. Backups of databases this size and larger cause the server to calibrate the dbspaces, which is done to improve the parallel performance of the backup. However, if the calibration updated the catalog, then the WAIT BEFORE START clause would have caused the backup to wait on itself. This has been fixed by turning off calibration for large databases when the WAIT BEFORE START clause is specified. If desired, the CALIBRATE DATABASE statement can be issued before the backup begins.
A workaround is to run the backup without the WAIT BEFORE START clause. |
545934 | A database could have failed validation before a checkpoint, and then passed validation after a checkpoint. A possible message that may have been generated in this case was "Database validation failed for page nnnnnn of database file '<file.db>'". In cases such as this, the database was in fact valid, but the validation step was falsely reporting failure. This has been fixed, although there is still a small possibility that when run on an active database, the validation step could still report errors. It is recommended that, where possible, validation occur when there is little or no database activity.
A workaround is to issue a checkpoint before running validation. |
545949 | Visual Studio 2008 SP1, which contained the support for the Entity Framework, was released after the initial release of SQL Anywhere 11.0.0. Full support for the Entity Framework has now been added to SQL Anywhere. |
545950 | The STOPLIST setting specifies the terms to ignore when building a text index. The sample stoplists for English contained words with apostrophes as well as words. An apostrophe is treated as a whitespace for the purposes of stoplist construction, causing such words to be treated as phrases (e.g. you'll is treated as "you ll"). Such words have now been removed from the sample. |
545987 | In the Text Configuration Object wizard, the defaults for the term breaker and maximum term length were "Generic" and "1" respectively. These were not particularly useful defaults. They have been changed so that the wizard now provides a reasonable default for the term breaker based on the database's CHAR collation, and the maximum term length based on both the database's CHAR collation and the currently selected term breaker. The term breaker now defaults to N-gram if the database's CHAR collation is a Chinese (936ZHO, 950ZHO_HK, 950ZHO_TW, EUC_CHINA, EUC_TAIWAN), Japanese (932JPN, EUC_JAPAN) or Korean (949KOR, EUC_KOREA) collation; otherwise, it defaults to Generic. The maximum term length now defaults to 20 if the Generic term breaker is selected; otherwise, for N-gram it defaults to 2 if the database's CHAR collation is a Chinese, Japanese or Korean collation, and 4 otherwise. |
546038 | Sybase Central could occasionally report an internal error when a table header on the "Data" tab was clicked in order to sort the data. This has been fixed. |
546046 | The QAnywhere plugin could have reported an internal error (NoClassDefFoundError) when connecting to a server message store if the plugin was registered with Sybase Central directly (i.e. using the QAPLUGIN.JAR file) rather rather than by using an installer-created .JPR file. This has been fixed.
The workaround is to add "mldesign.jar" to the list on the "Advanced" page of the QAnywhere 11 plugin properties window. |
546070 | The operation executed after an embedded SQL application executed a FETCH, could have caused a crash if the cursor was opened without WITH HOLD and a COMMIT or ROLLBACK was done by a procedure or function called by the FETCH. This has been fixed. |
546072 | The iAS ODBC driver for Oracle could have crashed when the application tried to create multiple connections concurrently. This problem was more likely to have occurred on Unix systems. This problem has now been fixed. |
546074 | A database that was initialized with a version 10 server could have become corrupted when run with a version 11 server. The problem could have resulted in the database not starting, failing assertions, or other errors. This has now been fixed.
Note that rebuilding a database to a version 11 format will provide performance improvements, while also preventing this problem. |
546104 | Temporary tables with LONGVARCHAR or LONBINARY columns were not being completely freed. This has been fixed.
Note, temporary tables occur when there are no indexes discovered to implement operations such as ORDER BY. |
546131 | The following bug fixes, which were originally made only for ASA consolidated databases, have now been implemented for ASE consolidated databases as well:
1 - primary key conflicts for table ml_qa_global_props in upload_insert script (Engineering case 463062), 2 - table ml_qa_status_history unlimited growth problem (Engineering case 495514), 3 - UDP notifications to inactive devices problem (Engineering case 544613). |
546164 | During the execution of server transmission rules, it was possible for the QAnywhere server to repeatedly report a java.util.NoSuchElement exception, and abort the rule execution. This has been fixed. |
546171 | When a delivery condition that referenced message properties was specified for a QAnywhere connector, message transmission to the connecting messaging system would have been disabled. This has been fixed. |
546172 | If a parallel execution plan was executed using an exists join (JE / Exists Join), then it was possible for the statement to return the wrong answer. This has been fixed. |
546173 | When uploading timestamp data with the .NET Direct Row API, an exception could have been thrown. Even if an exception wasn't thrown, the fractional part of the timestamp would have been incorrect. When downloading timestamps with the .NET Direct Row api, values would have been incorrect by a few seconds. Both of these problems have now been fixed. |
546176 | When running a farm of MobiLink servers with QAnywhere messaging enabled, the delete rules and archiving process could have logged "deadlock detected" errors in the MobiLink server log. The rules were functioning correctly, but unnecessary database contention was occurring. This has been fixed by having the delete rules and archiving process run only in the primary server. |
546256 | When connected to a DB2 Mainframe (D2M) consolidated database, the MobiLink server could have held locks across COMMITs, causing increased contention and sometimes resulting in deadlock or timeout errors. This has been fixed. |
546290 | When connected to a DB2 Mainframe (D2M) database, the iAnywhere JDBC driver could have eld locks across COMMITs, causing increased contention and sometimes resulting in deadlock or timeout errors. This has been fixed. |
546294 | The server could have failed assertion 104301 - "Attempt to free a user descriptor with non-zero reference count", while trying to drop a user. This assertion was likely to occur when an attempt was made to ALTER the same user in the same server session, and the ALTER had failed due to an error. This has been corrected. |
546330 | In the UltraLite plug-in, it is possible to view the data of a table by choosing the table in the left pane, and clicking on the 揇ata� tab in the right pane. When this was done though, subsequent attempts to change the schema of the database could have failed with the error 揂 schema upgrade is not currently allowed�. A result set created when viewing the data was not explicitly closed. This has been fixed. |
546367 | Sybase Central permitted utility operations while debugging or profiling. In some circumstances, running a utility operation while debugging or profiling could have caused Sybase Central to hang. This has been corrected so that utility operations are now permitted only when in Design mode. |
546432 | The server may have hung while performing updates to rows containing blobs. This has been fixed. |
546439 | The Interactive SQL utility would have reported an internal error if the OUTPUT statement operated on a result set that contained a UNIQUEIDENTIFIER column. This has been fixed. |
546478 | Referential integrity constraint checking could have failed, allowing a primary key to be removed when it still had referencing foreign keys, or preventing the removal of a primary key with no referencing foreign keys. The likelihood of this happening decreased as the number of foreign tables increased. This has now been fixed. |
546587 | If the option Chained was set to off (i.e. auto-commit enabled), executing an INSERT, UPDATE or DELETE statement inside a BEGIN ATOMIC block would have resulted in error -267 "COMMIT/ROLLBACK not allowed within atomic operation". This has been fixed. The DML statement will now be allowed to execute and a commit (or rollback if an error occurs)will be performed automatically at the end of the atomic block. |
546736 | In CONTAINS queries, the AND NOT (or -) operator applied to all expressions following (to the right of) the operator. This has been fixed so that AND NOT (and its variants listed below) now applies only to its immediate left and right arguments.
For example, CONTAINS query 'a AND NOT b OR c' would be evaluated as 'a AND NOT (b OR c)'. After the fix, the meaning of the query is '(a AND NOT b) OR c'. Equivalents to the AND NOT operator are: 'a & NOT b', 'a NOT b', 'a AND -b', 'a & -b', 'a -b'. Note that if hyphen is used, it has to be preceded by a space and immediately followed by it's argument. There are two other legitimate uses for hyphen in a text query: 'a-b' and 'a - b'. The first case is interpreted as the phrase '"a b"', whereas the second is interpreted as 'a b' (='a AND b'). Additionally, interpretation of CONTAINS queries was dependent on exact order of operators and their arguments. For example, query 'a AND b OR c' would be evaluated as 'a AND (b OR c)' and query 'c OR b AND a' would be evaluated as 'c OR (b AND a)'. This has also been fixed by imposing an order of evaluation on all the text query operators as follows: 1) FUZZY, NEAR 2) AND NOT 3) AND 4) OR With the new rules, two examples above are equivalent '(a AND b) OR c' = 'c OR (b AND a)' Full syntax for the CONTAINS queries is described in the documentation: SQL Anywhere Server - SQL Reference Using SQL � SQL language elements Search conditions CONTAINS search condition |
546742 | The MobiLink client (dbmlsync) could have crashed when reporting certain TLS or HTTPS errors. Certain TLS errors could have caused a null pointer dereference during creation of the error message string. This has now been corrected. |
546854 | If a query contained DISTINCT, ORDER BY and GROUP BY clauses and an expression in the ORDER BY clause appeared in the the GROUP BY clause, but not in the SELECT list, then the wrong error was returned, namely "Function or column reference to ... must also appear in a GROUP BY." This has been fixed so that the correct error message: "Function or column reference to .. in the ORDER BY clause is invalid."
For example, the query: SELECT DISTINCT X FROM T GROUP BY E ORDER BY E Would have returned the error: "Could not execute statement. Function or column reference to 'E' must also appear in a GROUP BY." SQLCODE=-149, ODBC 3 State="42000" |
546867 | A partial index scan using an index with DESC columns, may have been inefficient. For this problem to have occurred, the last column used to define the range must have been in descending (DESC) order, and the index must have contained NULLs. This has been fixed.
For example: Previously, the server would have read approximately 85 index leaf and table pages for the query below, now the number of pages read is approximately 10. CREATE TABLE CURRENCY_TABLE (CURRENCY CHAR(10) NOT NULL, DOLLAR_EQUIV NUMERIC(5, 2), PRIMARY KEY (CURRENCY)); INSERT INTO "CURRENCY_TABLE" VALUES ('DOLLAR', 1.00); INSERT INTO "CURRENCY_TABLE" VALUES ('POUND', 1.91); INSERT INTO "CURRENCY_TABLE" VALUES ('DM', .45); INSERT INTO "CURRENCY_TABLE" select 'DM', NULL from sa_rowgenerator(1,20000); commit; create index currency_idx_1 on currency_table( dollar_equiv desc ); call sa_flush_cache(); select count(*) from CURRENCY_TABLE with (index (currency_idx_1 )) where DOLLAR_EQUIV < 1000 option( force optimization); |
546869 | The property sheet for connectors contained a "Transmission Rules" page. This was incorrect because connectors do not have transmission rules; they have delivery conditions. As a result, that page has been replaced with a new "Delivery Conditions" page in which the single delivery condition for the connector can be typed. |
546882 | The GrowLog system event that fires when the database transaction log grows can be setup to truncate the transaction log upon its exceeding a certain size. In cases where the database server was very busy, the transaction log would not have been truncated often enough. This may have lead to the transaction log getting significantly larger than the threshold set in the event. This has been fixed, although in a very busy server it is still possible for the log to grow larger than the threshold for short periods of time. |
546908 | When running the Unload utility (dbunload) to unload a pre-10.0 version database, the directory for the unloaded table data would not have been created. This has now been fixed. |
546912 | The wrong item could have been edited or deleted if the list that contained the item was sorted. This would have occurred in the following places:
1. List of members for a given destination alias 2. "Properties" tab of client store property sheets 3. The "Client Properties" tab of the property sheet for a server message store 4. The "Members" tab in the property sheet for a destination alias 5. The property sheet for a client in a server message store 6. The "Transmission Rules" or "Deletion Rules" tabs in any property sheet. 7. The "Properties" tab of a connector's property sheet. This has now been fixed. |
547033 | Opening the property sheet for a table that had an embedded quote in its name or in its owner's name, would have caused Sybase Central to generate an invalid SQL statement causing an error. This has been fixed. |
547035 | Attempting to use an UltraLite remote server with the Migrate Database wizard would have caused Sybase Central to crash. This has been fixed. |
547036 | The PacketsSent and PacketsReceived properties were being updated by HTTP and HTTPS connections, even though the HTTP protocol has no real concept of packets. This has been fixed by no longer updating these properties for HTTP and HTTPS connections. The BytesSent and BytesReceived properties will continue to be updated for HTTP and HTTPS connections. |
547037 | When using the QAnywhere plugin, it was not possible to create an empty destination alias. This has been fixed so that creating an empty alias is now possible. |
547041 | Some remotes could have synchronized with servers that were not licensed to synchronize with those remotes. This has been corrected. |
547045 | Support has been added to allow exporting a script version's connection and table scripts, as well as its defined column names, to a SQL file by selecting the version object in Sybase Central while in Admin mode, and then choosing File -> Export.... The Version Export wizard prompts for a file name, and when Finish is clicked, a SQL file is created that contains a sequence of required calls to the ml_add_...() procedures. |
547049 | After calling SQLGetTypeInfo, the application would not have been able to get the column names through problem could have prvented exporting MobiLink Monitor data to an Oracle database. This has now been fixed. |
547073 | Performance of database operations when there was a large transaction log (many transactions awaiting synchronization and/or checkpointing) has been improved.
Note, GA versions of the software will not be able to read a database that has been used by UltraLiteJ as of this change. Earlier databases will automatically be upgraded. |
547076 | Executing a "MESSAGE ... TO CLIENT FOR CONNECTION n" statement could have resulted in a message with mangled characters in the message text. For this to have occurred, the source connection and destination connection must have been connected to databases with different collation sequences. This has been fixed. |
547078 | An ODBC or OLEDB application may have been positioned to an incorrect row when fetching by bookmark value. This would only have happened if the last column of the result set was not bound (for example with SQLBindCol). This has now been fixed. |
547084 | A connection attempt that resulted in a warning was treated as an error and no connection was created. This was affecting the PHP, Python, and Ruby drivers. This has been fixed. Warnings no longer prevent a successful connection. The actual warning message can still be retrieved as usual. |
547198 | Changes for Engineering case 536370 introduced a problem where simple select statements could have caused a server crash for specific forms of table schema and index definition. This has been fixed. |
547205 | Renaming a column in a table having referential action triggers, could have resulted in a server crash. This has been fixed. |
547206 | Non-persistent HTTPS synchronizations could sometimes fail with stream error STREAM_ERROR_WRITE and a system error code of 10053. This has been fixed. |
547213 | The server could have looped forever executing a REORGANIZE TABLE statement. This should only have occurred if the table had a clustered index that contained non-unique values in the clustered column or columns. This has been fixed. |
547224 | When selecting data using the Interactive SQL utility, from an UltraLite database that was UTF8 encoded, it was possible for extra garbage characters to have be displayed at the end of the string.燜or example, if a VARCHAR column contained the string 'f黵' (the middle letter is u umlaut) and the database was UTF8 encoded, selecting that column would have displayed a garbage character at the end (typically a box).燦ote that this was a display problem only. This has been fixed.燗 possible work around is to cast the data as VARCHAR(x), where x is a value big enough to display the data. |
547228 | n very rare circumstances, the server could have failed a fatal assertion when commiting deleted rows containing short strings (less than a database page in length). The typical assertion seen in this instance was assertion 201501 - "Page for requested record not a table page or record not present on page". This has been fixed. |
547234 | When the UltraLite SQL functions length() and char_length() were used on LONG VARCHAR columns, the results were incorrectly the lengths of the strings in bytes, rather than characters. Note that some characters require multiple bytes internally. The function byte_length() is used to determine the length in bytes of the string. This has been fixed. |
547248 | If the server had shut down due to a start-up error involving a database that participated in mirroring, the shutdown reason would not have been recorded correctly. On Unix systems, it would have been recorded as being a result of a SIGHUP signal. On Windows systems, it would have been recorded as being a result of a request from the console. This has been fixed so that it is now correctly recorded as being a result of a start-up error. |
547254 | The Interactive SQL utility (dbisql) could have reported an internal error if the "Run Script" menu item was used to execute a script file that caused dbisql to close. This has been fixed. |
547385 | In rare circumstances, Sybase Central could have crashed when selecting a task in the tasks list. This has been fixed. |
547392 | Database corruption was possible if a database crashed while a lazy checkpoint was in progress. For corruption to occur, pages must have been allocated during the lazy checkpoint and one of the following must have occurred prior to the checkpoint:
- dropping a table or index - truncating a table (that could have been truncated quickly, eg. no triggers) - deleting or replacing long blobs (greater than roughly page size) - [in general] an operation that resulted in pages being freed without the contents being modified This was more likely to have been an issue on heavily loaded servers. This problem has been fixed by temporarily allocating the pages at the start of the lazy checkpoint and then re-freeing them at the end. |
547415 | If all terms in a CONTAINS query were dropped, due to STOPLIST, MINIMUM and MAXIMUM TERM LENGTH settings of the text index, unnecessary searches in the text index could still have been performed. This has been fixed. |
547496 | A long-running HTTP connection to an OEM server would have resulted in an authentication violation. This was corrected by making all HTTP connections authenticated by default. |
547498 | Outer references are expressions used in a nested query block which reference table columns from the outside of that query block. For example, in the query below, 'T.Z+1' is an expression used in a subquery referencing the base table column T.Z of the base table T which is in the FROM clause of the main query block. Such expressions are now sometimes considered constants inside the nested query block. These constants are used in many optimizations by the SA optimizer, such as order optimization, functional dependencies optimization, and MIN/MAX optimization. Previously, these outer references are always treated as non-constants.
Q: select * from T where T.X <> (select max(R.Y) from R where R.Z = T.Z+1) |
547504 | A multithreading application using the ADO .Net provider, could have hung due to incorrect thread synchronization. This has been corrected. |
547506 | The server could have become unresponsive when executing a query, if during an index scan very few rows satisfied the WHERE conditions. This has been fixed. |
547513 | When running the server on Unix systems and using the -m command line option ("truncate transaction log after checkpoint"), the transaction log was not being truncated on checkpoints. This has been fixed. |
547514 | The QAnywhere plugin could have crashed Sybase Central when connected to a message store which contained thousands of messages. This has been fixed. Now, only the first 1000 messages are displayed. If there are more messages in the store, a message window will display a message that these are the latest 1000 messages. |
547522 | If the MobiLink system setup in the consolidated database was corrupt, then using the Check MobiLink System Setup command in the MobiLink plug-in could have caused a Java null pointer exception. This would only have happened if a MobiLink system setup stored procedure incorrectly had no parameters. This bug has been fixed.
A workaround is to manually remove the MobiLink system setup and then re-run the command. |
547541 | Using a server that is in In-memory mode to start a database requiring recovery would have caused the server to fail assertion 201842, "Checkpoint log: failed to write info page". The server running in In-memory mode was unable to use the transaction and/or checkpoint logs for recovery. This has been changed so that the server running in In-memory Never-write mode (-im nw) will now read both logs during recovery only. When in In-memory Checkpoint-only mode (-im c), the server will read the transaction log during recovery only. This is useful for example, to validate a backup copy of a database that requires recovery, without making changes to the backed up copy. |
547593 | When in the Maintenance Plan wizard, if the checkbox for "Disallow logins while the maintenance plan is running" was checked, then logins would have been disallowed for all databases running on the server. Now, logins are disallowed only for the database in which the maintenance plan is defined. |
547594 | In the Maintenance Plan wizard, if the checkbox "Validate database pages" was selected, then the generated event handler would have validated tables and materialized views as well, even if the checkbox "Validate tables and materialized views" was not selected. This has been fixed. |
547708 | Attempting to create a database with an apostrophe in a filename or the dba user's password, could have failed with a syntax error. Also, attempting to create a database with a dbkey containing a backslash may have resulted in a database which could not be connected to. These problems have now been fixed. |
547713 | Sybase Central would have failed to delete a remote server or a directory access server if it had one or more proxy tables. Now, the proxy tables are automatically deleted before
the remote server or directory access server is deleted. This fix restores the behaviour to what it was in versions 10 and earlier. |
547716 | Attempting to add a blob to the download stream when using the MobiLink Direct Row API and the MLPreparedStatement.setBytes() method, would have failed. The method would have returned the error "Value is out of range for conversion" if the length of the byte array was larger than 65536 bytes. This problem has now been fixed. |
547730 | If a corrupted UltraLite or SQL Anywhere remote client synchronized with a MobiLink server, it was possible for protocol errors to be generated. When this occurred, the MobiLink server console log would have shown the text:
I. <1> failed reading command with id:%d and handle:%d I. <1> Synchronization complete This has been fixed. Now, the error message "[-10001] Protocol Error: 400" will be displayed and a synchronization error will be reported. |
547738 | Starting with version 10.0.0, the server now uses a new mechanism to evaluate LIKE predicates that start with a prefix of non-wildcard characters. This mechanism is needed to provide correct results with the NCHAR collation. This new algorithm operates by computing sortkey hashes that specify a range of column values that could possibly match the LIKE predicate; the LIKE predicate is retained in some cases where it may further filter these returned rows. These sortkey hashes can be used as index range bounds to quickly filter the set of rows processed by the query. In the case that an index was not selected to process the LIKE predicate, the new implementation could have been more expensive, as it had the additional cost of computing the sortkey hash. The optimization has now been adjusted so that the sortkey hash bounds are used only if the LIKE predicate is used in an index scan. Otherwise, the like_prefix predicate is evaluated by comparing the column string to the pattern prefix character by character. This should give performance that meets or exceeds previous versions. |
547779 | When creating a maintenance plan, the SQL for the plan's event handler would not always have been displayed in the database's Executed SQL tab. Instead the event SQL would have contained "HANDLER null". This problem would only occur if the handler did not include an SMTP or MAPI password. This has been fixed. |
547858 | If columns used to build an NGRAM text index contained words shorter than N, some positional information could have been lost. The positional information would also have been lost if a CONTAINS query, that used the NGRAM text index, contained terms shorter than N. For example, if the value 'what a weather' was stored in a column col1 indexed by NGRAM text index with N=4, the following CONTAINS queries would match the row:
CONTAINS( col1, '"what a weather"') CONTAINS ( col1, '"what weather"' ) CONTAINS( col1, 'what NEAR[1] weat' ) CONTAINS( col1, 'what NEAR[2] weat' ) This has been fixed, so that only the first and fourth queries will now match the row. Note, all NGRAM text indexes built before this fix should be rebuilt either by using REFRESH TEXT INDEX ... FORCE BUILD (for MANUAL or AUTO REFRESH text indexes), or by dropping and recreating (for IMMEDIATE text indexes). |
547905 | If a SQL statement contained comments using %-style comments, then the ODBC driver could have reported a syntax error when the comment contained an unmatched quote.
For example: % it's a contraction The ODBC driver has to parse statements looking for ODBC escape sequences, but did not handle %-style comments. This has been fixed. |
547906 | If a column in the consolidated database was larger than the corresponding column in the remote database, then the MobiLink server may have crashed when synchronizing. This has been fixed so that the sync will now abort with the error -10038. |
548007 | A query that executed using intra-query parallelism did not respect the Priority connection option and would have executed at the 'normal' priority level. This has been fixed. |
548032 | The MobiLink server would have printed the warning, "[10082] MobiLink server has swapped data pages to disk", after it had swapped 5000 pages to disk, or about 20MB of row data. This has been changes so that it now prints this message after the first time the server must swap to disk. This should make it easier to diagnose performance problems when -cm is set slightly too small. |
548033 | When synchronizing through a third-party server or proxy and using TLS or HTTPS, the sync could have failed with the stream error code STREAM_ERROR_READ and system error code 4099 (hex 1003). This has now been fixed. |
548043 | Under heavy load, the server could have, in rare situations, generated a log that had an operation that would have been unreadable by the MobiLink client dbmlsync. Dbmlsync would have reported: "Log operation at <location> has bad data at offset <location>". This was likely only possible on multiprocessor systems, and has now been fixed. |
548059 | A server started with a 32K page size, and a large cache size (or a very high -gn value), could have failed an assertion during or immediately following server startup. This has been fixed. |
548142 | The messages "Failed to attach database worker thread", "Error while attaching database worker thread to Java VM" and "Unable to attach worker to VM.", mention worker threads and database worker threads, but these errors can occur on any thread within the server. They have now been changed to "Failed to attach thread", "Error while attaching thread to Java VM" and "Unable to attach thread to .NET runtime." respectively. |
548144 | If a network error occurred during a read from the stream, some MobiLink Java clients could have hung with 100% CPU utilization. This has been fixed. The MobiLink Monitor, the SQL Anywhere Monitor, the Notifier and QAnywhere are all affected by this. |
548153 | When using Interactive SQL to select text strings that include curly brackets or braces ie the characters 憑� and 憓� using the result format 憈ext� will cause a stack trace in Interactive SQL. |
548160 | In certain specific circumstances, some expressions in triggers could have caused the server to crash when executing the trigger. This has been fixed. |
548173 | Repeated update synchronizations, that is where existing client rows are updated, could have caused unnecessary database growth. A row storage problem has now been corrected. |
548260 | The function REGR_R2( Y, X ) incorrectly returned NULL as the answer when COUNT(*) * SUM( Y * Y ) was equal to SUM(Y) * SUM(Y). This has been corrected so that the server will now return the correct answer of 1. |
548282 | CONTAINS queries with prefix terms that contained non-alphanumeric characters would fail to match rows containing the matching terms. Additionally, if the columns in the CONTAINS query were indexed using NGRAM text index, and the length of the prefix was greater than N, the CONTAINS query would also fail to find matches. If the columns in the CONTAINS query were indexed using a GENERIC text index with MINIMUM TERM LENGTH set to a value other than the default, searches for the phrase with a prefix shorter than MINIMUM
TERM LENGTH could fail to find matches. Examples: query with non-alphanumeric characters: ' pre-school* ', ' a_variable_n* ', ' " pre-scho* children " ' query over 4-GRAM indexed columns: ' weath* ', ' " beau* weath* " ' query over columns indexed by GENERIC text index with MINIMUM TERM LENGTH = 3: ' singular no* ending with ', ' " singular no* ending with " ' This has been fixed so that the above examples are now interpreted as the following queries: ' pre-school* ' = '"pre school*"' (GENERIC text index) ' a_variable_n* ' = '"a variable n*"' (GENERIC text index) ' " pre-scho* children " ' = '"pre scho* children"' (GENERIC text index) (Note: STOPLIST and length restrictions are applied to all resulting terms except for the actual prefix, i.e. if 'pre' was in the STOPLIST, the last query would be interpreted as '"scho* children"') ' weath* ' = '"weat eath"' (4-GRAM text index) ' " beau* weath* " ' = '"beau" & "weat eath"' (4-GRAM text index) ' singular no* ending with ' = 'singular no* ending with' (GENERIC text index with MINIMUM TERM LENGTH = 3) ' " singular no* ending with " ' = '"singular ^ ending with"' (GENERIC text index with MINIMUM TERM LENGTH = 3. The ^ in the query represents the fact that the phrases with a single term between 'singular' and 'ending' will be found, and not those with no intervening terms, or multiple intervening terms) The following new rules were added to the CONTAINS query grammar with respect to NGRAM text indexes: 1) If a prefix term is shorter than N, all NGRAMs beginning with the prefix will be matched. For example: on a 4-GRAM text index the query 'a*' will match all the rows that contain at least one 4-GRAM beginning with a, including the following: 'apple pie' (contains appl) 'container' (contains aine) 2) If a prefix term has length N or higher, it is converted to a search for the exact substring equal to the prefix. This is due to the fact that information about the beginning and end of a word is not stored in NGRAM index. Searches for 'apple' or 'appl*' on a 4-GRAM text index will both find rows containing words 'apple' and 'pineapple'. 3) If a prefix term appears in a phrase in the CONTAINS query that will use NGRAM text index, the phrase is converted into an AND of two phrases - one from the beginning of the phrase up to and including the prefix term, and the other one beginning at the term following the prefix term and ending at the last term of the phrase. For example, for a 4-GRAM text index, query ' " where ord* an* relati* distance " ' is interpreted as '"wher here ord*" & "an*" & "rela elat lati" & "dist ista stan tanc ance"' 4) If one of the arguments to NEAR is a prefix, NEAR is converted to AND. For example, for a 4-GRAM text index, query ' app* NEAR orang* ' is interpreted as 'app* & "oran rang"' The following new rules were added to the CONTAINS query grammar with respect to GENERIC text indexes with MINIMUM TERM LENGTH > 1: 1) In a phrase, prefix term shorter than MINIMUM TERM LENGTH will be dropped. For example, on a GENERIC text index with MINIMUM TERM LENGTH = 3, query ' " the g* weather " ' will be interpreted as '"the ^ weather"' and will match both 'the good weather' and 'the bad weather', but not 'the weather is good'. 2) Outside of a phrase, prefix term shorter than MINIMUM TERM LENGTH will match terms that are between MINIMUM and MAXIMUM TERM LENGTH and begin with the specified prefix. For example, on a GENERIC text index with MINIMUM TERM LENGTH = 3, query ' the g* weather ' will be interpreted as 'the & g* & weather' and will match 'the good weather', 'the weather is good', but not 'the bad weather'. |
548322 | If an application calls PreparedStatement.executeBatch(), the iAnywhere JDBC driver is supposed to return an integer array that contains a status for each row in the batch. The iAnywhere JDBC driver was instead returning an integer array containing only two elements. This problem has now been fixed. |
548323 | If many connections were making external environment (or Java) calls at the same time, and the number of worker threads had not been increased by an appropriate amount, then there was a possibility that the server would either have hung or crashed. A thread deadlock error will now be returned instead. |
548431 | Sybase Central could have crashed when pasting a column in the table editor. The problem would only have occurred if a new column was added, but a name for the new column had not
yet been specified. This has been fixed. |
548437 | Under rare circumstances, a loss of quorum could have resulted in the database file and the transaction log on the primary becoming out of sync. Subsequent attempts to start the database would have failed with the error "Unable to start specified database: Cannot use log file '<name>' since it is shorter than expected". This has been fixed.
Note, the likelihood of this problem appearing with 11.0.0 servers was even smaller than with 10.0.1 servers. |
548455 | When attempting to export synchronized data to an Oracle database, the application could have given a false positive for a table's existence, which would have resulted in an export failure since it would not have tried to create the table for the current user. This has been fixed.
Also, exports to Oracle previously used the Date data type. Now, for Oracle 9 or later Timestamp is used instead of Date. |
548463 | Using the Certificate creation utility (createcert) to create certificates or certificates requests would have failed with the error "Error occurred encoding object", when provided non-ASCII input. This has been fixed. |
548465 | Database startup events that used external environments or web procedures may have failed if the database was specified on the server start line. This has been fixed.
Note that databases started later (after the server is up and running) would not have this problem. |
548470 | If a mirror server had shut down and then very quickly restarted as a preferred server, synchronization may have been delayed by thirty seconds. This has been fixed. |
548473 | When a version 9 server was used to run a databases created with version 7 or older, the server could have choosen inefficient query access plans due to errors in estimation of join selectivities. These database do not contain column statistics in the form of domain distribution histograms stored in the system table SYSCOLSTAT, as with later version. This has been corrected so that the server will now do a much better job of estimating these selectivities. |
548519 | The process for creating the MobiLink stored procedures for DB2 mainframe (D2M) via syncd2m_jcl.sql was not complete. This has been fixed.
With the addition of d2mrelod.jcl, the steps are now: 1) Copy syncd2m_jcl.sql and edit it. Change {MLTABLESPACE} to your qualified tablespace, eg. MYDB.MYTS Change {WLMENV} to the name of a WLM associated with your DB2 instance 2) Start DBISQL and connect to DB2 mainframe. File->Run your copy of syncd2m_jcl.sql. 3) From the %SQLANY%\MobiLink\setup directory, FTP to your mainframe, running the following commands after you connect: bin hash cd xmit quote site recfm=fb lrecl=80 quote site cyl put d2mload.xmit put d2mdbrm.xmit quit The two XMIT files on the mainframe are now: USERID.XMIT.D2MLOAD.XMIT USERID.XMIT.D2MDBRM.XMIT where 'USERID' is the username you gave when connecting via FTP. 4) Open a terminal session and run the following commands from the ISPF Command Shell: RECEIVE INDATASET('USERID.XMIT.D2MLOAD.XMIT') RECEIVE INDATASET('USERID.XMIT.D2MDBRM.XMIT') The output is: USERID.ML.LOADLIB USERID.ML.DBRMLIB 5) Copy d2mrelod.jcl and edit it. Change USERID to your mainframe userid. Change DSNDB0T to your DB2 DSN. 6) Run your copy of d2mrelod.jcl 7) Copy d2mbdpk.jcl and edit it. Change USERID to your mainframe userid. Change DB0T to your DB2 SSID. Run your copy of d2mbdpk.jcl The MobiLink schema should now be ready to use. |
548580 | Synchronizing a UNIQUEIDENTIFIER field in a remote database to Oracle via MobiLink would have resulted in a 32 character UUID, followed by a NULL character and three other characters (typically also NULL). When sending GUIDs to Oracle, MobiLink was removing the hyphens to match the GUIDs generated by the SYS_GUID() function in Oracle, but was not trimming the ODBC bind length to account for the hyphen removal, thus resulting in 4 extra bytes in the string representation of the UUID in Oracle. These four extra characters have now been removed. |
548619 | When using the Foreign Key wizard to create a foreign key, or the Foreign Key Change Settings dialog to drop and re-create a foreign key with new settings, then the "Allows null" setting chosen would have been reversed. That is, if to allow nulls was chosen, then the foreign key would have been created to prohibit nulls, and vise versa. This has now been corrected. |
548625 | When the -z command line option was used, or when request level logging was enabled, the server could have generated thousands of message of the form:
"Internal warning: <x> dispatch took <y> seconds" where x is an object name and y is a number. This would have affected the Windows platform only, and not necessarily on all Windows machines. This has now been fixed. A workaround is turn off the -z option or request level logging. |
548626 | If a table had a trigger defined that made an external environment call and many connections attempted to access the table at the same time, forcing table locks and simultaneous external environment calls, then there was a chance the server would have hung. This problem has now been fixed. |
548627 | Remote TCP connection attempts to servers running on Unix systems with IPv6 enabled, may have failed with the error "Connection error: An error occurred during the TCPIP connection attempt." This was only likely to happen on machines that were ONLY using IPv6. This has been fixed. As a workaround, the IPv6 address of the server machine can be specified using the HOST parameter. |
548710 | If recovery was attempted on a database that had grown since the last successful checkpoint had been executed, some pages may have become unavailable for reuse. This has now been fixed. |
548716 | When the server was started with a command line that specified -xs option (comma-separated list of web protocols) without a port, the server 'Overview' did not show the default port. This has been fixed. |
548721 | If the CREATE SYNCHRONIZATION PROFILE statement was used to create a synchronization profile with embedded whitespace in the options string, then Sybase Central was not able to parse the string and display the option values on the Synchronization Profile property sheet. This has been fixed. |
548724 | When using an ASE consolidated database, the MobiLink server with messaging enabled will log deadlock errors, such as the following, when several QAnywhere clients are synchronizing concurrently:
E. 10/07 09:14:13. Error: java.sql.SQLException: [DataDirect][ODBC Sybase Wire Protocol driver][SQL Server]Your server command (family id #0, process id #342) encountered a deadlock situation. Please re-run your command. These errors happen because ASE uses page-level locking by default. This locking level causes deadlocks with many of the SQL statements executed by MobiLink with QAnywhere, especially as many clients are synchronizing concurrently. This problem can be worked around by executing the following SQL statements on the ASE consolidated database, when the database server is not handling other requests: alter table ml_qa_repository lock datarows go alter table ml_qa_delivery lock datarows go alter table ml_qa_notifications lock datarows go alter table ml_qa_global_props lock datarows go alter table ml_qa_status_history lock datarows go alter table ml_qa_repository_props lock datarows go alter table ml_qa_repository_staging lock datarows go alter table ml_qa_status_staging lock datarows go create index ml_qa_delivery_cli on ml_qa_delivery ( client ) go create index ml_qa_delivery_dld on ml_qa_delivery ( client, syncstatus, status ) go create index ml_qa_mstage_user on ml_qa_repository_staging ( mluser ) go create index ml_qa_sstage_user on ml_qa_status_staging ( mluser ) go These SQL statements change the QAnywhere system tables to use row-level locking, and add some indexes for increased performance. |
548833 | If a server was very busy, and several connections attempted to start external environments at the same time, and if several of the start external environment requests timed out, then, in very rare cases, the server could eventually have become unresponsive. This problem has now been fixed. |
548870 | A database could have become corrupted when deleting rows containing long string (or binary) values that were indexed. The server then may have crashed, or failed an assertion, when attempting to read rows from the table at a later time. The server would likely have crashed during full validation of a table corrupted in this manner. This has been fixed. Dropping and re-creating the index should be a valid workaround. |
548890 | The delivery condition for a destination alias may not have been fully visible on the "Members" tab of the alias' property sheet. The cells in the table have their height and width set explicitly . The code which calculated a row's height looked only at data in the second column, rather than using the data in all three columns. This has been fixed. |
548895 | Sybase Central could have created a dialog, property sheet or wizard whose window was larger than the screen. This would have made it difficult to work with the window. This has been fixed so that Sybase Central now ensures that dialogs, property sheets and wizards are no longer than the screen. |
548941 | Statements with a CONTAINS clause, and statements over text index stored procedures (for example, sa_text_index_vocab), could have incorrectly returned no results. This problem affected only MANUAL and AUTO REFRESH text indexes, and only occurred when statements that useed a MANUAL or AUTO REFRESH text index had to be executed simultaneously with a REFRESH statement on the same text index. Alternatively, if the statement was prepared or cached by the server before a REFRESH on the text index occurred, an empty result set could also be returned when the prepared statement or cached plan was used after the REFRESH has completed. This has now been fixed. |
548981 | The pages allocated for temporary tables was not being recovered after an abnormal shutdown. This has been corrected. |
549048 | When displaying results as text, the row count was not being displayed under each result set. This has been corrected so that the count will now be displayed, unless the result is returned from a stored procedure. |
549052 | Scheduled transmission rules defined in the MobiLink server for QAnywhere message transmission, could have behaved unexpectedly in some circumstances. The server would have sent push notifications to clients with waiting messages satisfying the condition of a scheduled rule according to the schedule. However, if a client synchronized with the server for any reason, whether or not as a result of a push notification from a scheduled rule, messages satisfying the condition of a scheduled rule would have been transmitted to the client. Thus, the unexpected behaviour was that messages that satisfied the condition of a scheduled rule in the server could have been transmitted from the server to clients at times differing from the times specified in the schedule. This has been fixed so that the transmission of messages that satisfy the conditions of the scheduled rules from the server to clients is now governed more closely by the schedule specified in those rules. |
549085 | A heavily-loaded server could have hang while running diagnostic tracing with a high detail level. This has been fixed. |
549088 | Under rare circumstances, the server could have failed to report the warning "Row has been updated since last time read" (SQLCODE 104), when using a value-sensitive cursor and fetching a row that had been modified since it was last fetched. This has been fixed. |
549098 | If an application issued an external environment request, and the external environment process crashed for whatever reason at the same time, then there was a chance, although likely rare, that the server would have crashed as well. This problem has now been fixed. |
549142 | The LIKE operation could have produced incorrect results. The operation did not operate case insensitively, and the first character of a range was not accepted. This problem has now been fixed. |
549218 | If an application creates a scrollable statement and then scrolls through the result set, calling ResultSet.getRow() will return the correct row number for all rows. Calling ResultSet.getRow() will also return the correct row number when the end of the result set is reached. However, if the application called ResultSet.isLast() while positioned on the last row of the result set and then called ResultSet.getRow(), the row number returned would have been "invalid" or "unknown". This problem has now been fixed.
Note that calling ResultSet.getRow() after calling ResultSet.isLast() while positioned on any row other than the last row would have returned the correct row number. |
549235 | The external names for the D2 Mainframe stored procedures were supposed to be xxxa for version 10, xxxxb for version 11, and xxxxc for version 12. The changes for Engineering case 545762 incorrectly caused the names to be xxxxW. The scripts sent out as xxxxW will still be okay, as the important thing is that major versions differ in the external names by at least one character, so customers can use multiple versions of MobiLink in the same consolidated. This has now been corrected. |
549396 | Some arithmetic expressions in procedure statements could have been evaluated with the incorrect result domain. This would have occurred when one of the arguments had one of the following domains { BIT, TINYINT, UNSIGNED SMALLINT, SMALLINT } and the other argument was either one of those domains or INT. The result domain would have been INT. In some cases this could have lead to a different result being returned than expected, for example if an overflow would have occurred in the correct result domain. This problem has been fixed. |
549419 | If an Open Client application that supports retrieving result sets with a large number of columns attempts to perform an encrypted login, the login would have failed with a protocol error. This problem has now been fixed. |
549424 | A server running a tracing database could have crashed. This has been fixed. |
549431 | If a Windows based machine had both 32 and 64 bit client software installed, and an application subsequently attempted to use the iAnwhere JDBC driver, the driver may have thrown the exception UnsatisfiedLinkError indicating that it had attempted to load a dbjodbc11.dll of the wrong bitness. This problem has now been fixed.
Note that switching the order in which the Bin32 and Bin64 directories appear in the path will work around this problem. |
549453 | When manually unregistering the SQL Anywhere ODBC driver from the command line using "regsvr32 -u dbodbcXX.dll", the unregistration process may have failed and reported error code 0x8000ffff. Note that the failure occurred after the user successfully acknowledged the prompt to allow dbelevate (the "SQL Anywhere elevated operations agent") to run as an administrator. This problem has been fixed.
As a work-around, run "regsvr32 -u dbodbcXX.dll" from a command shell which is already elevated. |
549461 | When attempting to update data in a proxy table on the "Data" tab in Sybase Central, or by manipulation of the result set in the Interactive SQL utility, the operation would have failed with the error "Feature remove savepoints not implemented." This been fixed. |
549466 | The "-host" and "-port" command line options were completely ignored when connecting to a SQL Anywhere database. This problem also affected the Console utility (dbconsole) as well. It has now been fixed.
As a workaround, use the "-c" command line option instead. |
549518 | The Schema Painter Create UltraLite Database Browse dialog was not filtering for database files, but incorrectly filtered by SQL files (*.sql). This has been fixed. |
549606 | If an ALTER TABLE statement added a column with a user-defined type having a default value, subsequent ALTER's affecting the table could have caused a server crash. This has been fixed. |
549622 | A server running on a Linux system, may have hung when under heavy I/O load, and a large number of concurrent request tasks (i.e. large -gn value). Specifically, if -gn was larger than 250, then there was a chance a hang may have occurred. This has been fixed. The workaround is reduce the -gn value. |
549628 | When starting a backup, if any dbspace files had not already been opened by the server (for example, the file was moved), the server could crash. This has been fixed. |
549636 | When connected to a SQL Anywhere database in Admin mode of the MobiLink plug-in for Sybase Central, any internal tables used for maintaining text indexes would have been displayed under the Tables folder. This has been corrected so that these tables are now excluded, since they are of no use to users when creating table scripts. |
549644 | When running on Linux systems, a mini core could have been improperly generated under rare circumstances.This has been fixed. |
549682 | In rare, timing-dependent circumstances, multi-threaded client applications with multiple simultaneous TLS connections could have crashed. This has been fixed. |
549800 | The SQL Anywhere ODBC driver incorrectly described a column of type NCHAR as SQL_WVARCHAR (-9), instead of SQL_WCHAR (-8), when the odbc_distinguish_char_and_varchar database option was set 'off'. In the following SQL statement, the two columns should be described as SQL_WCHAR and SQL_WVARCHAR respectively.
select cast('abc' as nchar),cast('abc' as nvarchar) This problem did not affect calls to SQLColumns(), but it did affect calls to SQLDescribeCol(). This problem has been fixed. The odbc_distinguish_char_and_varchar option is intended for CHAR columns only. It is provided for backwards compatibility with older versions of the SQL Anywhere ODBC driver. For backwards compatibility, the odbc_distinguish_char_and_varchar option is set 'off' by default. When odbc_distinguish_char_and_varchar option is set 'on', the ODBC driver will describe CHAR columns as SQL_CHAR, rather than SQL_VARCHAR. |
549829 | When using the SQL Anywhere PHP driver, calling the sasql_num_rows() function always returned zero if the function sasql_query() was used with the SASQL_USE_RESULT option, or the function sasql_use_result() was called. According to the documentation, the function sasql_num_rows() is supposed to return an estimate with SASQL_USE_RESULT, and an exact value with SASQL_STORE_RESULT. This has now been fixed.
The workaround is to use the SASQL_STORE_RESULT option or call the function sasql_store_result(). |
549846 | In rare cases, monitoring of a heavily loaded server using the system procedure sa_performance_diagnostics, could have caused a server crash. This has been fixed. |
549847 | In rare cases, an execution plan using parallelism, and index-only retrieval with a string or numeric column, could have caused a crash or possibly returned a wrong answer. This has been fixed. |
549866 | The server could have crashed, or failed assertions, when under heavy load if pages were freed. The assertions were most likely to be about unexpected page types or contents. This has now been fixed. |
549932 | The iAnywhere JDBC driver has supported the PreparedStatement.addBatch() and PreparedStatement.executeBatch() methods for quite some time now, but, these methods were only supported for INSERT statements. These methods will now also be supported for UDATE and DELETE statements, provided the underlying connection is to an SA server. If the underlying connection is to a non-SA server, then these methods will still only be supported for INSERT. |
549940 | If a transaction log was not completely written out to disk (e.g. during a low disk space scenario), it was possible for the server to crash when trying to apply a partial log operation during recovery. This has been fixed. |
549967 | A SELECT ... FOR XML ... over an NCHAR value could have caused a string right truncation error to be generated.
For example: SELECT * from table FOR XML AUTO where table is defined with an NCHAR column, e.g.: create table (col1 LONG NVARCHAR); For the error to have occurred, the byte length of the NCHAR value must have been greater than 32767, and the "string_rtruncation" database option must have been set to "on" (which is the default). This has been fixed. |
549983 | If an application executed a query involving both proxy tables and local tables, and the query had IN predicates that contained subqueries involving proxy tables, then there was a chance executing the query would have caused a server crash. This problem has now been fixed. |
549999 | If an Open Client application supports retrieving result sets with a large number of columns, then attempting to perform a Kerberos login using such an application would have failed with a protocol error. This problem has now been fixed. |
550080 | In the Sybase Central QAnywhere Plugin, if when connected to a server message store a client was created, and then the view refreshed, the newly created client would not have been displayed. This has been fixed. |
550083 | Clicking the "Generate/INSERT statement" menu in the "Results" pane could have incorrectly caused the error "An INSERT statement could not be generated. The results are from more than one table or contain only computed columns." This has been fixed.
Note, this problem appeared on the "Data" tab in Sybase Central, and has been fixed as well. |
550095 | If a query execution plan contained a Group-By Hash operator and one of the aggregates computed was marked as DISTINCT, then the server could have crashed while executing the statement. In order for the crash to occur, specific characteristics needed to be present in the statement. Thishas now been fixed. |
550103 | Attempting to query a proxy table with a SELECT statement that used the FOR XML RAW clause would have failed with an "invalid expression" error. This problem has now been fixed. |
550116 | In rare cases, a stored procedure call could have caused a server crash. This has been fixed. |
550120 | An UltraLite .NET synchronization initiated by the SYNCHRONIZE SQL statement would have hung if no global listener was provided via the DatabaseManager::SetGlobalListener method. The unmanaged code always registered a global sync listener to send sync status messages, but the managed code only created a listener for these messages if the DatabaseManager::SetGlobalListener method was called, which resulted in the hang. Now the unmanaged code now only registers a global sync listener when SetGlobalListener is called. |
550159 | The ia32-libs package is required to install SQL Anywhere on 64-bit Ubuntu distributions. It is also required to run any 32-bit software on 64-bit Ubuntu distributions.
Futhermore, resolving host names from 32-bit applications will fail on 64-bit Ubuntu installations, unless the package lib32nss-mdns is installed. See: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=479144 |
550236 | If a query execution plan included parallelism and specific expression types were used, it was possible for memory corruption or assertion failures to occur when the query was executed. The following expression types could have caused the problem:
SORTKEY() COMPARE() CONVERT( <date, time, or timestamp>, <string expression> ) In order for the failure to occur, further specific characteristics needed to be present in the string parameters to the above functions. This problem has been fixed. |
550246 | If an application attempted to create a proxy table to a SQL Anywhere or Micrsoft SQL Server remote server, and the remote table had an XML column, then the server would have returned an undefined data type error. This problem has now been fixed. |
550247 | The MobiLink Deployment wizard could have crashed with a missing resource exception. This has been fixed. |
550252 | If an application made a remote procedure call that contained output parameters of type Float, and the remote server for that RPC was using one of the SAJDBC or ASEJDBC classes, then the value of the Float output parameter would always have been 0. This problem has now been fixed. |
550260 | When using UltraLite .NET, the ULConnection's SyncResult was not updated after doing a synchronization via the SYNCHRONIZE SQL statement. This has been fixed. |
550267 | If an application set the java_vm_options option, and then attempted to start the Java VM on a Unix system, there was a chance the extra VM options would not have been used when the VM was launched. This problem has now been fixed.
Note that this problem does not exist on Windows platforms. |
550362 | In a database mirroring system, if the transaction log on the primary server was renamed via a backup, the mirror server could have reported various failed assertions, for example:
100902, 100903: Unable to find table definition for table referenced in transaction log 100904: Failed to redo a database operation For this problem to have occurred, other connections must have been making changes to the database at the time the log is renamed. The problem seemed to occur more frequently if many old log files were present on the primary server. The copy of the transaction log on the mirror server would have been corrupted as a result of this problem. When the log was renamed, there was a small window during which another connection could force a log page to be sent to the mirror before the mirror was notified that the log was renamed. The transaction log lock is now held across this window. |
550379 | Sybase Central would have failed to load plugins on start-up when it was run on Korean Windows systems. The wrong codepage was being used to read the .jrp file. This has been fixed. |
550416 | If an application executed a Java in the database stored procedure, and then subsequently canceled the request, in very rare cases the server may have crashed if the cancel request coincided with the Java request actually finishing. This problem has now been fixed. |
550418 | The Python module would have sent all "string" host variable data as varchar data. This would have resulted in an unwanted character set conversion when the desired type was binary. This has been fixed.
As well, Python scripts can now pass an instance of sqlanydb.Binary in the variable data list. This will cause the value to be sent as binary data. |
550502 | There was a small possibility that canceling an HTTP request to a SQLAnywhere service, as the server was shutting down, may have caused the server to crash. This has been fixed. |
550503 | When running in console mode, if a SQL statement caused a warning, and the "-q" command line option was not used, the Interactive SQL utility would have prompted the user to press ENTER before continuing. This has been corrected so that the warning message is now printed, and the user is not prompted. This was the behavior in version 10.0.1 and earlier. |
550506 | In order to determine if a stored procedure returns a result set, the iAS Oracle ODBC issues a query to the Oracle database when the DSN option, "Procedure returns results" is checked. However, this query was not in an optimal form and the Oracle server needed to compile it every time before execution. The query has now been rewritten by using host variables, so that the actual SQL statement is always been the same, and the Oracle server can use it from the hash without recompiling it.
To further improve the query, an extra connection parameter, ProcOwner (the long form) or POwner (the short form), has been introduced in the iAS Oracle ODBC driver. This parameter can be given as follows: -c "uid=...;pwd=...;powner=my_procedure_owner;..." If this connection parameter is given, the query will be limited to the stored procedures owned by the given owner only. Please note, if not all the stored procedures used in the synchronization have a single owner, this extra connection parameter should not be used. |
550525 | If a communication error occurred during the last few bytes of the upload, or first few bytes of the download, UltraLiteJ would have assumed that the upload failed and revert the progress for it. In this scenario, MobiLink may have actually accepted the upload and thus its progress offsets would conflict with the client. This has been fixed. |
550536 | If an application was using Java in the database and the Java VM run out of memory, then the Java VM would have remained alive even though Java in the database requests could no longer be made. The Java VM will now exit in this situation, and new Java in the database requests will now automatically restart a new Java VM. |
550555 | The server could have crashed when executing the WRITE_CLIENT_FILE() function, or when unloading a table to a client file. This failure was more likely when the data being written was large (on the order of tens of megabytes), and when the server was heavily loaded. This has been fixed. |
550669 | If a query plan contained a hash-based operator (group-by, distinct, or join) and the plan allowed at least one other operator to consume memory at the same time as the hash-based operator, then the execution plan could have been slower than it should have been. This slowness would also have resulted from high CPU usage. The slow behaviour did not occur if the hash-based operator appeared in a parallel execution plan, but only occurred in specific memory configurations. This slowdown has been fixed. |
550676 | Attempting to construct a string value longer than the server's maximum string length (2^31-1) would have resulted in silent trucation of string data.
For example, the statement: select length(repeat('a', 2000000000) || repeat('b', 2000000000)) returns 2147483647 (i.e., 2^31-1) characters, but does not raise a SQL error to indicate the operation failed and truncated the string data. This has been fixed so that SQL Error -1313 MAX_STRING_LENGTH_EXCEEDED will now be generated whenever an operation attempts to construct a string value longer than the server's internal maximum string length. |
550687 | In very rare circumstances, a server acting as a mirror in a High Availability setup may have spuriously hit assertion 100917 - "Unable to re-read a transaction log page" while shutting down. This has been fixed. |
550693 | The server could have generated bad query execution plans due to incorrect index statistics. This has now ben corrected. |
550694 | A string ending with an incomplete multi-byte character may have had extra characters appended to its escaped representation as generated by an UNLOAD TABLE statement. This has been fixed. |
550695 | Under rare circumstances, the server could have crashed while trying to load trigger definitions from the catalog. The error was likely to have occurred while trying to compile an invalid query. This problem has now been fixed. |
550716 | If an application updated a proxy table and then queried the TransactionStartTime property, the value returned by the property would not have been properly updated. This problem has now been fixed. |
550723 | If the Data tab for a table or view was selected, columns were added, modified or removed from the table or view, and the Data tab was selected again, then the column changes would not have been reflected in the Data tab. This has been fixed. |
550725 | A query with many predicates (original or inferred) was slower than some earlier versions, due to many semantic transformations in the parse tree. This has been fixed. |
550729 | The user-supplied comment clause provided by the WITH COMMENT clause that may accompany the BACKUP statement was written to the backup.syb log in the database character set, rather than the OS character set. All other information, such as database name is written in OS charset. This has now been fixed. |
550803 | When using the system procedure xp_sendmail(), if the message body contained a period "." on a line by itself, text following that line would have been removed from the message that was sent. A line containing a single period is the end-of-message marker for the SMTP protocol. When sending a line that begins with a single period, clients must precede it with another period character, which xp_sendmail() was not doing. This has been fixed. |
550838 | The server was not utilizing 100% of all CPUs with a workload that should have been mostly CPU bound with interleaving I/O. This would likely have occurred on lightly loaded servers. This has been fixed. |
550839 | Dynamic cache size tuning was not enabled while databases were recovering at server startup. Prior to 9.0.0, dynamic cache size tuning was enabled during recovery. This has now been fixed. |
550841 | Entity headers and a response body should not have been returned by a web service having explicitly set a 'Not Modified' HTTP status via a call to sa_set_http_header ( '@HttpStatus', '304' ). The following response headers were being returned:
Transfer-Encoding: chunked Expires: ... GMT Content-Type:... As an artifact of the chunked transfer encoding, a response body consisting of a 0 chunk length was returned. This has been corrected so that a response body and the above headers will not be sent by the server when a 304 'Not Modified' HTTP status has been explicitly set. |
550956 | The Relay Server may have reported the error "Internal error! Session number out of sync." when handling a server response. When this error occurred, further traffic going through the same Relay Server to this particular responding backend server, had an increased chance of failure. This would have reduced the quality of service to the affected Relay ServerS serving the backend server where the problem first arose. The problem also would not have cleared itself until the affected Relay Server was restarted. Traffic going through other Relay Servers in the Relay Server farm, traffic going through the same Relay Server to other backend farms, or traffic going through the same Relay Server to other servers within the same backend farm would not have been affected. This problem has now been fixed. |
550957 | The Relay Server cannot grow the pre-allocated shared memory dynamically and it is essential that users start up the server with sufficient memory to handle foreseeable peak traffic. As well. there has been no tool for users to determine the amoumt of shared memory Relay Server was using. Now, a snap shot of shared memory usage is reported in the log file whenever the log is archived. That is when rshost.exe -ua is executed, the running Relay Server will log the current shared memory usage, archive and then truncate the log file. |
550985 | There are documented rules for making Relay Server configuration changes in a Relay Server farm environment. When those rules were violated, a farm of Relay Servers may have resulted in heterogeneous backend farm and server indices on different Relay Servers. When a tcp load-balancer, instead of a http load-balancer, was used to maintain client-RS affinity, client sessions could not survive moving across Relay Servers in such Relay Server farms. This has been fixed by remoings the need to keep the indices in sync across all Relay Servers. |
550989 | When the Relay Server was relaying normal Afaria traffic, it would have reported the following error and warning:
... <F0B1S0R0> IIS ReadClient error(10054): Connection was forcibly closed by the remote host. ... <F0B1S0R0> Failed reading from client. Aborting this request. ... <F0B1S1R1> Communication warning! Backend server disconnected before finishing response. These are expected, as Afaria traffic uses false http content-length. The Relay Server will now suppress these messages for Afaria traffic. |
550991 | Client type information was not available in Relay Server log. Alternatively, users may have been able to derive the client type by looking at the optional user-agent header logging in the Web server's access log. However user-agent headers can be uncontrollable on certain mobile application platforms. Changes have been made which now allows the Relay Server to identify the following 11 types of known clients using a combination of user-agent header and proprietary header:
Afaria dblsn DBMLSync MLClient // All pre-11.0.1 ml clients MLFileTransfer MLLightPoll MLMonitor UltraLite UltraLiteJ QAnywhere QAnywhereUL These client types, and the full client information (usually including build and version), will be logged by the Relay Server under verbosity level 1 or higher. |
550999 | If an error occurred while the Relay Server Outbound Enabler was attempting to renew the up channel, it did not try again. Current client sessions going through the Outbound Enabler would not have survived. This has been fixed so that the Outbound Enabler now attempts again to renew the up channel, in order to preserve active client sessions. |
551002 | When a backend farm or backend server was disabled, the associated Relay Sserver Outbound Enabler could still have connected to a Relay Server even though further new relay service to that farm or server was blocked. This problem has been fixed. |
551003 | When a backend server entry was removed from the Relay Server configuration file, and the rshost -u command was applied, the removed backend server should have been disabled, but it was not. This is now fixed. |
551112 | If a database mirroring server encounters a failed assertion, the desired behaviour is for the server to exit. This allows the mirroring partner server to detect that a failure has occurred and take an appropriate action. After a failed assertion on Windows, the server was exiting in such a way as to cause Windows to display a dialog noting the abnormal exit. This prevented the server from actually exiting until action was taken to clear the dialog, and thus prevented the partner server from being notified. This has been fixed.
In addition to this change, customers should consider configuring dbsupport to ensure that it does not prompt when a failure occurs. For example: dbsupport -cc autosubmit or dbsupport -cc no A future version of the software may avoid the need to configure dbsupport to prevent prompting in this situation. |
551124 | Typing completion would have inadvertently added the table's owner name when completing a column name after a table alias in the following places:
1. The column list in a SELECT statement select C. from customers C ^ 2. The WHERE clause in a DELETE statement delete from customers C where C. ^ 3. The SET or WHERE clauses of an UPDATE statement update Customers C set C. ^ update Customers C set C.City = 'Waterloo' where C. ^ This has been fixed by suppressing adding the owner's name if the inserted text immediately follows a table alias. |
551146 | When creating or renaming an object, if the name specified was a SQL keyword, Sybase Central could have erroneous issued a warning that the specified name would need to be double-quoted when used in a SQL script. This has been fixed. Now, Sybase Central only issues a warning if the specified name is both a SQL keyword and a SQL reserved word. |
551255 | In certain circumstances, the server could have crashed, or otherwise failed, when executing mutliple LOAD TABLE statements concurrently when in in-memory no write mode (i.e., the server was started with the "-im nw" option). This failure was far more likely to occur if one or more of the LOAD TABLE statements failed with a SQL Error, as would be the case if the file being loaded from could not be located or opened. There was also a very small window of opportunity where the server could have crashed, or failed an assertion, even if none of the LOAD TABLE statements failed. This has now been fixed. |
551259 | If a mirror server encountered a failed assertion, the primary server could have hung when the mirror server was stopped. This has been fixed. |
551261 | Index scans done with a snapshot isolation level could have returned incorrect results if there were concurrent UPDATE and DELETE statements to the underlying table. This has been fixed. |
551262 | If a cached plan for a MERGE statement was reused, the MERGE statement could have failed to perform the required updates. In particular, this problem could have affected immediate materialized view maintenance, if the view was updated multiple times by the same connection. This has been fixed. |
551264 | On Windows systems, if msvcr71.dll is not on the path and Java, the Notifier, QAnywhere or SQLPassthrough were being used, then the MobiLink server would have failed to start with an error stating that MSVCR71.DLL could not be loaded. This has been fixed.
A work around is to put msvcr71.dll on the path. It is installed with the JRE. |
551297 | When unloaded using the Unload utilities external unload (i.e., dbunload -xx or -xi), a table containing binary values could have had the contents of these values truncated. The binary values would typically have to have been longer than approximately 500 bytes for this bug to occur. This has been fixed.
A workaround is to use an internal unload. |
551406 | A MobiLink server with messaging enabled, using an ASE consolidated database, could have logged errors such as the following when a QAnywhere client synchronizes:
Stored procedure 'ml_qa_upsert_global_prop' not found. Specify owner.objectname or use sp_help to check whether the object exists (sp_help may produce lots of output). (ODBC State = 42000, Native error code = 2812) Error: Unable to insert into table 'ml_qa_global_props_client' using upload_insert This problem may have been as a result of the fix made for Engineering case 546131. That fix involved MobiLink creating this stored procedure at startup if it does not exist. In order for MobiLink to be able to create the stored procedure, the database option "ddl in tran" needed to be true. Therefore, there are two possible workarounds for this problem: Workaround 1: Set "ddl in tran" to true in the database by executing the following SQL statements on the database, where database_name is the name of the database used as the QAnywhere server message store. use master go sp_dboption database_name, "ddl in tran", true go Workaround 2: If workaround 1 is not desirable, execute the following SQL statements on the database to make the changes described in case 546131: drop trigger ml_qa_repository_trigger go create trigger ml_qa_repository_trigger on ml_qa_repository for delete as delete from ml_qa_repository_props from deleted d, ml_qa_repository_props p where d.msgid = p.msgid delete from ml_qa_delivery from deleted d, ml_qa_delivery p where d.msgid = p.msgid delete from ml_qa_status_history from deleted d, ml_qa_status_history p where d.msgid = p.msgid go drop procedure ml_set_device_address go create procedure ml_set_device_address @device varchar(255), @medium varchar(255), @address varchar(255), @active char(1), @ignore_tracking char(1), @source varchar(255) as declare @d varchar( 255 ) if @active = 'y' begin update ml_device_address set active = 'n' where address = @address and medium = @medium and active = 'y' and device_name <> @device end select @d=device_name from ml_device_address where device_name = @device and medium = @medium if @d is null begin insert into ml_device_address( device_name, medium, address, active, ignore_tracking, source ) values( @device, @medium, @address, @active, @ignore_tracking, @source ) end else begin if @source = 'tracking' begin update ml_device_address set address = @address, active = @active, ignore_tracking = @ignore_tracking, source = @source where device_name = @device and medium = @medium and ignore_tracking = 'n' end else begin update ml_device_address set address = @address, active = @active, ignore_tracking = @ignore_tracking, source = @source where device_name = @device and medium = @medium end end go exec sp_procxmode 'ml_set_device_address', 'anymode' go create procedure ml_qa_upsert_global_prop @client varchar(128), @name varchar(128), @modifiers integer, @value varchar(16384) as begin if exists( select 1 from ml_qa_global_props gp where gp.client = @client and gp.name = @name ) update ml_qa_global_props set modifiers = @modifiers, value = @value where client = @client and name = @name else insert into ml_qa_global_props (client,name,modifiers,value) values( @client, @name, @modifiers, @value ) end go exec sp_procxmode 'ml_qa_upsert_global_prop', 'anymode' go These SQL statements make the changes to the server message store that are done automatically if database option "ddl in tran" is true. Note, MobiLink system schema changes can only be made in a major release, so these documented workarounds are provided. Later versions contain these fixes. |
551433 | Calling to the StartServer or WaitForServerShutdown methods when using the Dbmlsync .NET API, would have caused problems for some values of the timeout parameter. If the timeout value was greater than 2147483647, the WaitForServerShutdown method would always have returned DBSC_ERR_TIMED_OUT, and the StartServer method would also have returned DBSC_ERR_TIMED_OUT, unless the call was able to connect to an existing dbmlsync server on the port specified. The calls will now treat values greater than 2147483647 as equivalent to DBSC_INFINITY. |
551442 | The changes for Engineering case 547228 did not fully eliminate the assertions and other failures that could have occurred when committing deleted rows containing short strings. This has been corrected. |
551458 | If an application that was connected using jConnect called DatabaseMetaData.getPrimaryKeys() to get the primary key information for a table, the key sequence of the primary key would not have been returned correctly. This problem has now been fixed. |
551460 | In very rare circumstances the server could have crashed when executing Java, HTTP web procedures, or Remote Data Access RPC calls. This has been fixed. |
551562 | If an execution plan contained an index-only retrieval scan and the scan had a predicate on a NUMERIC/DECIMAL or short string column, then it was possible for the scan to return the wrong result, omitting rows from the scan that should have been returned. This has been fixed. |
551589 | The batch file uljdbtserv.cmd did not work when SQL Anywhere was installed in a path that contained spaces. It also relied on environment variables other than SQLANY11. These problems have now been fixed. |
551593 | When the MobiLink system tables were not present on the consolidated database, the MobiLink server would have displayed the following error on start-up:
[-10076] The MobiLink server was unable to calculate the timestamp precision on the consolidated database using the ml_scripts_modified table. Timestamp precision related warnings will not be generated. This has been fixed. The following error will now be displayed: [-10100] The MobiLink system table 'ml_user' is missing or a table column is missing |
551602 | The file sbgse2.dll was a new file added in a 9.0.2 EBF for the support of FIPS encryption. The EBF installer was incorrectly installing this file only when MobiLink was installed. It was therefore possible to break FIPS encryption by installing an EBF.
For example: - 9.0.2.GA was installed with Mobilink deselected, - FIPS is installed, again with Mobilink deselected, - a 9,0,2 EBF is installed accepting all the defaults. FIPS gets broken because sbgse2.dll does not get installed. This has been fixed. The installer now checks if FIPS is installed before copying sbgse2.dll. |
551611 | If an application had uncommitted data in a local temporary table, and then called a Java, or any other, external environment procedure, there was a chance the server would have crashed if the application subsequently performed a rollback later on after the Java or external environment procedure had completed. This problem has now been fixed.
Note that this problem will not show up if the local temporary table is declared with "on commit preserve rows" or "not transactional". |
551615 | With Microsoft SQL Server 2005 and higher, the check for the existance of an index on given table did not work with tables under schemas that did not have a corresponding user. This has been fixed.
A workaround is to deploy to file and then modify the SQL file to use the sys.schemas table wherever the sysusers table is currently used, and change the id, uid column references to object_id and schema_id for that table. |
551622 | The system procedure sa_get_user_status() required the connection calling the procedure to have DBA authority in order to obtain information about users other than the current user. Calling sa_get_user_status() from a procedure owned by a user with DBA authority was not sufficient to return information about other users. This has been fixed. Now, if sa_get_user_status() is called from a procedure owned by a DBA, information about all users will be returned. In addition to an updated server, this fix requires the sa_get_user_status() procedure to be updated. |
551686 | If a statement contained a work table, and evaluation of the expressions for the work table generated an error (for example, string trunctation or data overflow), then the server could have incorrectly returned an assertion failure error message (assertion 106502) instead of returning the appropriate error code. This assertion failure would have occurred only if expressions in the work table were not nullable. This problem has been fixed. |
551690 | If a request was made that was larger than the packet size, then, in rare timing dependent cases, the connection could have hung until it was cancelled or dropped. Examples of requests larger than the packet size include executing a statement with long SQL text, or executing a statement with large host parameters. This has now been fixed. |
551692 | If a query consisted of a non-zero number of UNION DISTINCT operations, followed by a non-zero number UNION ALL operations, the result set could have had twice as many columns as were specified by the query. The leftmost columns would have been correct, while the rightmost extra columns were bogus. The alorithm for creating the selection list for the overall query was flawed, and has now been corrected. |
551695 | The Table editor would have allowed the removal of all columns from a new table (that is, a table which had yet to be saved to the database) by selecting all columns and then selecting Edit -> Undo, clicking the Undo toolbar button, or typing Ctrl-Z. This has been fixed. Now attempting to remove all columns from a new table causes an error dialog to be displayed. |
551700 | Column widths in the debugger Details panel were not persistent. This has been fixed so that column widths are saved in user preferences. |
551739 | When a TCP/IP connection abnormally disconnected from the server (for example due to the DROP CONNECTION statement), there was a chance that a network buffer was leaked. This has been fixed. |
551740 | If a query contained an outer join and a predicate of that included the concatenation operator (||), then the server could have returned the incorrect answer for the query. In the incorrect case, the outer join was converted to an inner join. This has been fixed.
For example, the following two queries should be equivalent, but the first incorrectly returned no rows: select R.row_num || 'z' x, string(R.row_num ,'z') y from dummy D left outer join rowgenerator R on 1=0 where x = 'z' select R.row_num || 'z' x, string(R.row_num ,'z') y from dummy D left outer join rowgenerator R on 1=0 where y = 'z' |
551747 | Deadlocks could have occurred more often than expected at isolation level 3, if more than one transaction attempted to update the same row concurrently. This has been corrected. |
551749 | Connections that had executed a Java stored procedure would have taken three seconds longer than necessary when attempting to disconnect. Connections that were not used to make Java stored procedure calls are unaffected by this problem. The problem has now been fixed.
Note that this problem was introduced in the changes made for Engineering case 548322. |
551750 | Executing a Java stored procedure that attempted to fetch resources using getResourceAsStream() or getResource(), would have had the fetch of the resource fail. This problem has now been fixed.
Note that due to differences in compression schemes, it is strongly recommended that jars containing textual resources be created without compression turned on. For jars containing binary resources (ex. movies or images), using a compressed jar will work fine. |
551751 | Attempting to use the QAnywhere Server to cancel a message in an Ultralite Client Message Store would have failed with a NullPointerException. This problem was more likely to occur when using the Sybase Central plugin to connect to an Ultralite client database and then attempting to cancel a message. This has been fixed. |
551752 | Calling the system procedure sa_server_messages() could have resulted in the server crashing. This problem would have been rare, requiring a busy server to reproduce. This has been fixed. |
551813 | Messages printed to the MobiLink server log could have been mangled on systems with non-English character sets. This would have happened most often on errors from QAnywhere or the Notifier. This has now been fixed. |
551820 | If a PARAMETERS statement was run from an Interactive SQL window a dialog was displayed prompting for the values. If the PARAMETERS statement was then rerun, the prompt was not displayed, and the previously values were used. This behavior was not intentional and has been corrected. Now, the prompt is displayed each and every time the PARAMETER statement is executed. |
551839 | Host variables used as function arguments did not work correctly. This has now been fixed. |
551850 | Attempting to execute a badly formed UPDATE statement of the form "update test X set X..a = 2", where test is a proxy table, would very likely have lead to a server crash. This problem has now been fixed. |
551858 | If a remote server used character length semantics for a string column (e.g. a SQLAnywhere remote with an nchar column, or an UltraLiteJ remote with a char column), and the column on the remote database was smaller than the column in the consolidated database, then the MobiLink server could have failed to report the truncation. The server was already counting the number of characters in the the column coming out the consolidated, but it wasn't checking the length against the domain info given by the remote. This has now been fixed |
551944 | The fix for Engineering case 549983 introduced a problem such that two simultaneous remote data access requests from two separate connections could have caused the server to crash. This problem has now been fixed. |
551953 | It was possible for the MobiLink client .NET API to have thrown an unhandled socket exception when attempting to disconnect from a socket that had been forcibly closed by the operating system. This exception is now caught and handled within the dbmlsync .NET API. |
551956 | When the TargetType parameter to the ODBC function SQLGetData() is SQL_C_DEFAULT, the driver selects the default C data type based on the SQL data type of the source.
For NCHAR types, the Microsoft ODBC driver selects a SQL_C_CHAR binding. Microsoft acknowledges in its knowledgebase article http://support.microsoft.com/default.aspx/kb/293659 that to do so is an error, but states that it does this to support older legacy applications. The SQL Anywhere ODBC driver selected a SQL_C_WCHAR binding. This caused problems with applications like Microsoft Access, that expected the Microsoft ODBC behaviour. This problem in Access could have been seen when setting up a linked table using the SQL Anywhere ODC driver to a database table containing NCHAR, NVARCHAR, or LONG NVARCHAR column types. The resulting table columns were displayed with "#deleted" values. To conform to the Microsoft ODBC driver behaviour, the SQL Anywhere ODBC driver has been changed. Now,爐he SQL Anywhere ODBC driver selects a SQL_C_CHAR binding for NCHAR, NVARCHAR, and LONG NVARCHAR (including NTEXT) types when the "MS Applications ( Keys In SQLStatistics)" checkbox is selected in the ODBC Administrator configuration dialog for SQL Anywhere datasources. This option can also be specified as the connection parameter "KeysInSQLStatistics=YES" in a SQL Anywhere ODBC driver connection string. This change affects any ODBC function, like SQLBindCol, SQLBindParameter, and SQLGetData, where SQL_C_DEFAULT can be specified. |
551967 | Attempting to view a column value which contained image data would have crashed Sybase Central. This has been fixed. |
551978 | If an application called ResultSet.getString() on a uniqueidentifier column, the iAnywhere JDBC driver would have incorrectly returned a string of binary bytes. This problem has now been fixed and the iAnywhere JDBC driver now returns a properly formatted GUID string. |
552057 | In general, applications that use Java in the database support install the classes and jars to be used into the database. Doing so allows the database to be moved from one machine to another, or from one platform to another. The other benefit of installing classes and jars into the database is that the SQL Anywhere class loader can then be used to fetch the classes and resources from the database allowing each connection that is using Java in the database support to have its own instance of these classes and its own copy of static variables within these classes. In VERY rare cases, it is beneficial to have the system class loader load a class instead of the SQL Anywhere class loader. The only real reason for having the system class loader load the class is that statics within classes loaded by the system class loader can then be shared across all connections using Java in the database support. There are of course many reasons why the system class loader should not be used:
1) since statics are shared across all connections, there is an issue with the security of data 2) mixing classes loaded by the SA class loader and the system class loader can lead to the VM throwing IllegalAccess and ClassCast exceptions 3) there is now the danger that the system class loader will get used for loading classes that should actually have been loaded by the SA class loader Because of these potentially serious problems, it has always been STRONGLY recommended that all classes and jars to be used for Java in the database support be explicitly installed within the database. However, for those rare cases where the class really needs to be loaded by the system class loader, the server's classpath argument (-cp) can be used to add directories and jars to the classpath that the server builds for launching the JVM. Unfortunately, as of version 10.0, the server's classpath argument was being ignored when launching the JVM. This problem has now been fixed and the server's classpath argument is now properly appended to the classpath the server builds when launching the VM. Again, the use of the server's classpath argument is STRONGLY discouraged; instead, it is STRONGLY recommended that all classes and jars to be used for Java in the database support be installed explicitly in the database. |
552066 | If a SQL Anywhere database used with Replication Server was unloaded using the Unload utility (dbunload), some tables and procedures used by Replication Server would not have been included. This has been fixed. |
552067 | The server could have become deadlocked if the 'wait after end' option was used when performing a backup. For the deadlock to have occurred, there must have been an active transaction when the backup attempted to truncate the log, and then a checkpoint and commit must have occurred, in that order on separate connections, between the time that the backup attempted to truncate the log and when the backup noticed that there was an active transaction (a very short time interval). This has now been corrected.
A work around in most cases is to omit the 'wait after end' option, as it is often not required. |
552077 | The server could have become deadlocked when frequently executing UPDATE ststements on the same set of rows. This would only have occurred if the table being updated had a non-unique index defined. This has now been fixed. |
552094 | When AES_FIPS or AES256_FIPS database encryption was used for a long enough period of time, the server would have eventually failed to allocate memory, due to a small memory leak. This included use of the encrypt() or hash() functions with FIPS algorithms, or if the -fips server command line option was used. There was also a leak on the client side of approximately 1k per TLS connection attempted. All of these leaks have now been fixed. |
552144 | The SQL script file passed to UltraLite抯 ALTER DATABASE SCHEMA FROM FILE statement and used by the SQL Passthrough feature, must have been in a specific format. Each SQL statement must have ended with 慻o� on a line by itself.
For example: ALTER TABLE T RENAME R go This format was assumed and if 'go' was not found on a line by itself, nothing would have been executed, but no error would have been generated. Now, the error SQLE_SCRIPT_MISSING_DELIMITER (-1315) is generated if 'go' is not found on a line by itself. Moreover, with this change the file may end with 'go<eof>' (previously, it had to be 'go\n'). Note that even single line script files must end with the 揼o� separator. This includes SQL Passthrough scripts. So the following is a correct example of adding a SQL Passthrough script: call ml_add_passthrough_script( 憇cript1�, null, null, 慉LTER TABLE T RENAME R\ngo� ) If an error occurs and only part of the file is applied, the database must be shutdown and restarted (and the schema will as it was prior to the ALTER DATABASE statement). |
552171 | When applying a series of renamed transaction logs to the server, or when the MobiLink client (dbmlsync) reads a series of renamed transaction logs, the error "Missing transaction log(s) after file ..." cound have been reported. The offsets reported in the error message (between the end of one log and the start of the next) can be subtracted to determine the size of gap; this apparent gap would have been exactly 24 bytes. With a 4K pagesize, this would have happened to roughly 1 out of every 4000 renamed logs; it is less likely with a larger pagesize. It was only a problem when the affected log was the last one before the online (currently active) log. This has been fixed.
Note, despite the reported gap, no data was actually lost from the logs. The data can be recovered by using dbtran to generate a .SQL script and then applying this to the database. |
552186 | Truncating a table with deleted rows could have caused the server to fail assertion 201501 - "Page for requested record not a table page or record not present on page". For this to have occurred, the table must have contained string data shorter than a page, and one of those short values (which had to have come from one of the deleted rows) must have been held active in an open cursor or variable. This has now been fixed. |
552189 | The changes for Engineering case 545904 introduced a problem where the server could have issued a variety of assertions, including "200610: Attempting to normalize a non-continued row" while concurrently updating rows containing blobs. For this to have occurred, the string values must have been less than a page size, but larger than the column's inline amount. This has been fixed. |
552196 | Quoted SQL identifiers that were part of the Interactive SQL utility's command line were inadvertently stripped of their quotes before being passed to the database. This has been fixed.
For example, the following command line was not being handled correctly: dbisql -c "uid=dba;pwd=sql" CREATE TABLE "123TEST" ( c INT ) |
552210 | After selecting the Network tab in the ODBC Administrator (ODBCAD32) for ASA 9.0.2 data sources, it was not possible to configure RSA_TLS_FIPS. The RSA_TLS option would have been selected and the suboptions string would have been garbled. This problem has been fixed. |
552226 | The cast of a LONGVARCHAR value to VARCHAR value could have caused a crash. This has now been fixed. |
552293 | Execution of a query with a left outer join could have caused database corruption when the null-supplying table supplied a null row, and that table was subsequently updated. This has now been corrected. |
552302 | If the HTTP listener was enabled, the server may have crashed on shutdown. There is no risk of data corruption. This has been fixed. |
552304 | If the OS and database character sets were not the same, localized server window messages pertaining to checkpoints and events could have been mangled. This has been fixed. |
552311 | If a SELECT statement contained a procedure call with arguments that contained column references to other tables in the from clause, the server may have return a "Column not found" error for these column references. This would have occurred when the query rewrite process can remove tables from the query.
For example: create table T1( a int primary key ) create table T2( a int primary key, c int ) create procedure P1 ( u int ) begin select a from T1 where a = u; end select dt.* from T1 left outer join T2 on T1.a = T2.a, lateral( P1(T2.c) ) dt For every row in T1 the left outer join can return at most one row because of the join on primary keys. So the query rewrite removed the left outer join and the table T2 from the query which caused a "Column T2.c not found" error for the procedure argument. This has been fixed. |
552312 | The changes made for Engineering case 541615 introduced a problem where attempting to create a proxy table to a DB2 or Microsoft SQL Server table using Sybase Central could have failed with a strange conversion error, instead of creating the proxy table. This problem has now been corrected. |
552314 | If an application called the ResultSet.getBlob() method, and if fetching the blob should have thrown a valid SQLException, then quite often the exception would not have been thrown and an empty blob would have instead been returned to the client. This problem has now been fixed. |
552319 | If an operation (INSERT, UPDATE or DELETE) occurred on a remote database, and the operation belonged to one or more publications that were subscribed to by different users, then the operation would have been uploaded once for each user that had subscribed to a publication containing it. This has been fixed so that the operation will now only be uploaded once.
For example, suppose two publication P1 and P2 are defined that both contain a table T1. Two ML users, U1 and U2 are defined on the remote. U1 is subscribed to P1, and U2 is subscribed to P2. A row is inserted into T1 in an operation I'll call O. The old behaviour would have been to upload O when the subscription between U1 and P1 was synchronized, then upload it again when the subscription between U2 and P2 was synchronized. The new behaviour is that O will be uploaded for the subscription that is synchronized first (U1-P1 or U2-P2), and not uploaded when the other subscription is synchronized. |
552321 | If an error or warning occurred when commiting, the MobiLink server would not have reported any error or warning messages. If it was an error, the MobiLink server would have just failed the synchronization request without giving any reasons. This problem is fixed. |
552323 | The conversion of NUMERIC values to or from VARCHAR was incorrect. This has now been corrected. UltraLiteJ should now produce the same conversions as does UltraLite. |
552355 | The table editor could have crashed when the Compressed column heading was selected. It could also have crashed when opening, if the last time a column heading was selected in the Table editor, the Compressed column was selected. This has been fixed. |
552454 | The Import Wizard would have shown an empty combobox of databases when importing from an Oracle database. Clicking on the combobox would have caused the Interactive SQL utility to report a NullPointerException. This has been fixed. The combobox is now hidden in this case. |
552465 | If an application attempted to migrate tables containing unique constraints, either by using sa_migrate or Sybase Central, then there was a possibility that the migration would have failed because some of the foreign keys could not have been created. This problem has now been fixed, but only if the remote data access class involved is one of SAODBC or SAJDBC. |
552473 | When attempting to export results to an Oracle database using the iAnywhere Oracle ODBC driver, the Export wizard would have inappropriately prompted for a database name and then reported a NullPointerException when the "Next" button was clicked. This has been fixed. The "Database" combobox is no longer displayed in this case. |
552488 | The server could have failed assertion 201138 - "Attempt to allocate page ... beyond end of dbspace". For the assertion to have occurred, the database must have had an additional (non-primary) dbspace, and an operation such as TRUNCATE, DROP TABLE, DROP INDEX, etc must have been performed on an object in that dbspace. This has now been fixed. |
552493 | When rebuilding databases on Windows Mobile devices, the Unload utility (dbunload) could have failed with the error "Table SYSPROCP not found". If the unload was successful, reloading the new database by running the resulting reload.sql file with the Script Execution utility (dbrunsql) could have failed with the error "Cursor not open" when executing a call statement. Both of these problem have now been corrected. |
552501 | The Export wizard could have crashed when exporting to ASE, using the ASE Organic ODBC driver, into a new table. This has been fixed. |
552503 | SQL statements which don't contain Transact-SQL OUTER JOINs, OUTER JOINs, KEY JOINs, or NATURAL JOINs will now skip some of the optimizations implemented in the server, which will improve the DESCRIBE time. |
552587 | If an application created a remote server and then accessed that remote server using a different case than the one specified on the CREATE SERVER statement, the server would have incorrectly opened additional connections to the remote server. For example, suppose the application executed the following CREATE SERVER statement:
CREATE SERVER MyServer CLASS ... and then created two proxy tables as follows: CREATE EXISTING TABLE table1 AT 'myserver...' CREATE EXISTING TABLE table2 AT 'MYserver...' If the application now queried "table1", the remote data access layer would have correctly established a connection to the remote and returned the requested data. If the application then queried "table2", the data access layer should reuse the connection previously established to the remote, but the server instead would have created a new connection to the remote. This problem has now been fixed. |
552591 | If an Open Client or jConnect application executed a query that involved the use of host variables within a batch, then the server would have crashed, rather than giving the "Host variables may not be used within a batch" error message. This problem has now been fixed. |
552595 | In exceptionally rare conditions, typically while the server was under heavy load or processing many backups on many databases simultaneously, a backup could hang and the CPU usage of the server could have gone to 100%. This has been fixed.
A workaround is to use a higher value on the -gn command line switch. |
552620 | After the server had started a database that required recovery, it could have crashed when running a cleaner. This has now been fixed. |
552627 | If the language DLL was missing, the utilities createcert, viewcert, createkey, and mlfiletransfer would all have continued to execute, but would not have output any string resources. These utilities will now fail in this case with an appropriate error message.
Also, the usage text for createcert and viewcert will now display the options in alphabetical order. |
552638 | The Relay server may have run out of shared memory when under high load. This was more likely to have occurred when the Relay Server was hosting a large number of backend servers. This has been fixed by leaving spare room in shared memory according to the startup configuration. The user specified amount of shared memory is left for relaying traffic. |
552644 | Up channel recovery upon the Relay Server Outbound Enabler detecting a communication error may have sometimes failed on some active sessions. This has been corrected.
Note, normal up channel renewal was not affected by this fix. |
552648 | Renaming a transaction log via a BACKUP statement could have failed as a result of a transient sharing violation error on Windows. The error may have been caused by a virus scanner or other software accessing the file as it is being renamed. This has been fixed. |
552649 | The Relay Server Outbound Enabler would have held on to a backend connections until the application timed out, when the request/response processing of the associated session had failed. Tnis has been fixed so that the Relay Server will now forward a command to the Outbound Enabler to explicitly disconnect the faulty session. |
552653 | Some situations, similar to those fixed for Engineering case 545904, allowed the server to hang while concurrently updating rows containing blobs. This has been fixed. |
552658 | The Relay Server may have crashed under stress and the Outbound Enabler may not have been able to recover connections to it, even when IIS replenished the service with a new worker. These potential crashes have been fixed. |
552672 | The combination of the HAVING clause containing a single-row subquery, and a temporary table referenced in the ORDER BY and/or GROUP BY clauses, could have produced incorrect results or a crash. This has now been fixed. |
552716 | The Relay Server's throughput may have been reduced significantly when under load with Afaria traffic. This was caused by Afaria traffic not terminating persistent http sessions properly, when using Connection: close header. IIS did not release its resources until the connection's Keep-Alive timeout. Per-process resource limits cap the throughput when enough sessions are waiting to be timed out by IIS. This has been fixed bay having the Relay Server terminate Keep-Alive connections regardless of the presence of the Connection: close header, in the case where content-length is violated. Since Afaria traffic always violates content-length on the last request, in both of their POST and GET sessions, IIS will no longer hold on to keep-alive resources when the last request of their session exit the web server extension. This change also stops the Relay Server from complaining about content-length violations, if the client identifies itself as an Afaria client. The I/O error only is being suppressed.
A user workaround is to increase web garden size (i.e. adding more worker processes) of the application pool associated with the rs_client.dll web server extension. This user workaround is inefficient though, letting limited resources to be held idle for unnecessary amount of time. With this fix, per process resource caps are no longer a reason for increasing the web garden size. |
552720 | When the Relay Server was under heavy load, with verbosity set to 4 or higher, it may have occassionally reported an OE_BACKEND_DISCONNECTED error. This was due to another session having taken over the request id. This was not harmful to known client types, as all known clients initiates their own disconnect. However, this may have caused the Relay Server to hold onto resource for the worker waiting for that packet. This would have timeout in 100 sec, and was transparent to the client. This has been fixed, the client worker is no longer held up until it ties out, as the faulty discarding has being removed. |
552729 | Under rare circumstances, the server could have crashed, or failed an assertion, if it needed to grow a database file quickly by a large amount (e.g., as a result of inserting a very large blob). Furthermore, there was a possibility for corruption affecting the data that triggered the file growth. This has now been fixed. |
552739 | For an ADO/OLE DB application, if the CursorLocation was adUseClient and the size of the query was larger than 4K characters, then the SQL Anywhere OLE DB provider would have crashed. Also, if the client query contained single quotes (apostrophes), then the query metadata would not have been obtained. Both of these problems have now been fixed. |
552760 | If the default port number was already in use (eg. by another server), the server may have failed to start TCP/IP, rather than choosing a different port number. If the -z command line option was used, the error "TCP/IP link, function bind, error code 10013" would have been displayed on the server console. This would only have happened on Windows Server 2003, and has now been fixed. |
552767 | A QAnywhere application could have reported a deadlock error from the SQL Anywhere server, if the application was attempting to retrieve a message from the message store while the QAnywhere agent was synchronizing. This has now been fixed. |
552771 | Using a poorly formed connection string ("-c" command line option) could have caused the Interactive SQL utility (dbisql) to crash on startup. This has been fixed. |
552779 | When executing an "OUTPUT" statement, dbisqlc would have executed the current query two extra times. Some output file formats require a particular date format to be used and in version 10.0.0 and later, changing the date format option on a connection does not affect cursors that are already open. To work around this change of behaviour, dbisqlc closed the current query, changed the DATE_FORMAT option to the format required by the output file format and then reopened the query to write the result set to the output file. It then closed the query again, restored the old DATE_FORMAT option, and reopened the query. Thus the query was executed a total of three times.
Note that the Java-based dbisql has always executed the query a total of two times (once for the original query, once for the OUTPUT statement). That behaviour is not addressed by this change. The problem in dbisqlc has been corrected in most cases by avoiding the close/set-date-format/reopen operations if the requested output file format does not have a mandated date format or if the current date format matches the date format required by the output file format. If the specified output file format requires a specific date format and it is different from the current date format, the query will still be executed two extra times. To avoid executing the query multiple times, set the DATE_FORMAT option for the current connection as listed below before executing the query for the first time: Output file format DATE_FORMAT setting DBASEII MM/DD/YY DBASEIII YYYMMDD FOXPRO YYYMMDD WATFILE YYYY/MM/DD Output file formats not listed above do not have a mandated date format and dbisqlc will not close/reopen the current query to execute the OUTPUT statement. |
552888 | If an application called PreparedStatement.setBlob(), and if the underlying java.sql.Blob implementation misbehaved, then there was a chance that the iAnywhere JDBC driver would have failed when the PreparedStatement was executed. Workarounds have now been implemented in the iAnywhere JDBC driver to attempt to handle the Blob implementation misbehaviour. |
552921 | When assigning the result of a bitwise NOT operation on a value of type Bit, TinyInt or Unsigned SmallInt to the same type, the error "Value -1 out of range for destination" was returned. This was due to these types being converted to an Integer before applying the operation. This has been fixed |
552931 | When executing a batch command which returned multiple resultsets, if fetching the second or subsequent resultset caused an error, no exception was returned to the application. This problem has now been fixed. |
553064 | If an application accidentally defined a Remote Data Access server that used the SAJDBC class and connected back to the same database as the local user connection, then an error indicating that the server definition was circular was not displayed. This problem is now fixed and an error message is now displayed. Note that this problem does not affect SAODBC class remote servers. |
553103 | During the optimization process, the optimizer creates and maintains order properties for all physical operators placed in the access plans generated as part of the search space generation process. These order properties are used to decide if SORT physical operators are needed, for example to satisfy an ORDER BY clause at the root of the access plan. Maintaining and tracking order properties are expensive operations as described in [1]. For performance reasons, the optimizer will now build and maintain only those order properties needed by an interesting order property, such as the one imposed by an ORDER BY clause. This change does not affect in anyway the performance of the order optimization, it just makes the optimization process more efficient.
[1]揇atabase System with Methodology for Generalized Order Optimization擬atthew Young-Lai, Anisoara Nica, 2007 US Patent 7,359,922. |
553289 | If a query execution plan contained a SORT operator in a parallel execution strategy, it was possible for the server to crash while processing the request. This type of plan can be used during a CREATE INDEX statement. The crash was timing and load dependent and would have predominantly affected servers processing requests from multiple connections. This problem has been fixed. |
553300 | Network error messages in the MobiLink monitor, the SA Monitor, the Notifier or the QAnywhere server could have been garbled on non-English machines. This has been fixed. |
553309 | A cursors position in a result set was not always correct after changes were made (i.e. inserts, updates and deletes). This has been corrected. |
553310 | An application that uses the iAnywhere JDBC driver must now have the jodbc.jar built with the same build number as the dbjodbc and mljodbc shared objects. If the jar and shared objects are out of sync, a SQLException will be thrown at connect time and the connection will be refused. |
553312 | If the MobiLink Monitor's Details Table, Utilization Graph, or Overview panes were disabled, when reenabled they might not be visible, under some circumstances, or a program error may have occurred. Also, resizing a pane or the application, could have produced unexpected results. These problems have been fixed. Now when resizing the application, only the Chart pane size is changed; and when resizing a pane, only the panes on either side of the splitter bar are affected. |
553387 | The following fixes have been made to support MobiLink in DB2 Mainframe Compatibility Mode
- The ml_pt_script table did not have an explicit ROWID column. This was required for the CLOB column. Some D2M deployments support an implicit ROWID, and some do not, inluding compatibility mode. Fixed by adding an explicit ROWID column. - The SQL used for JCL-based CREATE PROCEDURE statements included the SQL body of the stored procedure. This worked most of the time, but not under compatibility mode. Now, the external-procedure form of CREATE PROCEDURE is used, which doesn't include the body (which of course isn't necessary because it is in the *.xmit files). - The SQL used to create the SQL-based D2M stored procedures didn't escape single quotes. This wasn't noticed because D2M treats most unquoted text between single quotes as a string, so it just worked. Single quotes are now escaped in the procedure body, inside the call to DSNTPSMP. - The D2M ml_add_pt_script stored procedure didn't work under compatibility mode, for several reasons: 1) it had a VARCHAR( 256 ) parameter (the flags for the SQL Passthrough script) that caused conversion problems inside the procedure when run under compatibility mode. This parameter has been changed to VARCHAR( 255 ). 2) it referenced a Unicode string, which isn't supported under compatibility mode. This has been fixed by replacing it with a non-Unicode string. 3) it used a form of the SIGNAL statement that isn't supported under compatibility mode. This has been corrected. |
553469 | Backups done where the checkpoint log was copied (WITH CHECKPOINT LOG COPY), did not mark the dbspaces as active. This allowed databases that possibly required recovery to be started in read-only mode. If this was done, it could have lead to assertion failures as the server tried to flush pages that had been dirtied. This has been fixed. |
553482 | Prior to executing the "begin_connection_autocommit" script, the MobiLink server will temporarily turn on auto-commit on the ODBC connection, due to restrictions with some consolidated databases. On ASE consolidated databases, this will generate a warning (SQL_SUCCESS_WITH_INFO) in the ODBC driver:
"AutoCommit option has changed to true. All pending statements on this transaction (if any) are committed." This warning was being generated whether the begin_connection_autocommit script was defined or was absent. This has been fixed. The server will now only turn on auto-commit when the script is defined and will only execute the script if it is defined. If the script is defined, it is still possible to see this warning logged in the MobiLink server console log. This is expected behaviour. |
553491 | The Apache redirector module would have crashed when used with the Sun built Apache web server that currently ships with the Solaris operating system. This has been fixed. |
553520 | If a database server acting as mirror lost its connections to the arbiter and primary server, the database being mirrored did not restart and wait for the connections to be re-established. This has been fixed. |
553561 | The OUTPUT statement would have unnecessarily re-executed the query which generated the last result set, if the Interactive SQL utility was run in windowed mode and the result set had not already been displayed. This has been fixed so that the statement is not re-executed in this case. |
553600 | A query of the form: "SELECT * FROM table-expression" could have been misdiagnosed as a syntax error when there was exactly one column in the select list. This has now been fixed. |
553687 | Tables storing CHAR and NCHAR values longer than approximately 126 bytes, may have used two bytes of storage more per value than was necessary. If the column's PREFIX value was smaller than 126, then strings longer than the specified prefix value would have used two extra unnecessary bytes as well. This has been fixed.
Note, rebuilding the database after applying this fix will remove all of the unneeded bytes. |
553689 | If a query contained at least two predicates on the same column T.A with the following conditions:
1. there existed an equality predicate T.A = expression, with a selectivity estimation of selectivity1, and the expression was not a constant 2. there existed a range predicate on T.A with constant bounds (for example, T.A > 111), with a selectivity estimation of selectivity2 3. there existed an index on column T.A, where the column T.A may have been the only column in the index, or the index had a prefix of other columns before T.A, all of which are equated with constants in the query: e.g., the index idx<C1, C2, A> is defined, and the predicates 'T.C1 = 10 and T.C2 = 20 and T.A > 111 and T.A = R.X' are used in the query. 4. The selectivity estimation of the range predicate was much larger then the selectivity estimation of the equality predicate, i.e., selectivity1 << selectivity2 Such a query had an overestimated number of rows, and the execution plan chosen by the optimizer may have been inefficient. This has been fixed. |
553693 | If a server had many external environment requests active, and several of these external environment requests were subsequently cancelled at the same time, there was a chance the server would have crashed. There was a very small window where a cancel request could have been ignored by the external connection. This has now been fixed. |
553719 | The Unload utility (dbunload) was not able to rebuild a pre-Version 10 database if the variable SATMP was unset, but variable ASTMP was set. Dbunload would have returned a connection error in this case. This has been fixed.
Note, as workaround the SATMP variable can be set. |
553720 | If an HTTP/1.1 client made a request on a keep-alive connection, and then after receiving the response, did not send another full request over the connection for one minute, the connection would have timed out and sent a 408 Request Timeout status message. This is consistent with the HTTP/1.1 specification, but if the HTTP client was Apache, it would have been confused by the error message. The behaviour has been changed so that the error status code is suppressed (and the connection is simply closed) if all of the following are true:
- A complete request and response have previously been sent on the connection - No data has been received on the connection since the most recent response was sent - The keep-alive timeout has expired |
553748 | When using the iAS ODBC driver for Oracle, calling SQLColAttribute with an attribute code of SQL_DESC_TYPE_NAME would not have returned the type names of columns. This has now been fixed. |
553752 | If a CREATE SYNCHRONIZATION SUBSCRIPTION statement was executed with an OPTION clause that gets the option value from a variable (e.g. OPTION sv=@Var) and the variable was set to null, then the server may have crashed, or inserted a random option value into the catalogs. This has been fixed so that the server now returns a sql error (SQLSTATE_BAD_SYNC_OPTION_VALUE) "Synchronization option '%1' contains semi-colon, equal sign, curly brace, or is null". |
553759 | The "Replace All" action in the syntax highlighting editor could have corrupted the text if the action was restricted to the selected text. This has been fixed. |
553775 | While synchronizing a large download using "direct TCP" on BlackBerry devices (not through the BES), the synchronization would have failed with "... Max connections opened".
This has been fixed. Note: For IDENT BlackBerry devices, the default is Direct TCP connections. For non-IDENT BlackBerry devices, the default is BES connections. Using the URL suffix ";deviceside=false" forces Direct TCP connections. |
553897 | If an application used one of the C_ODBC32, C_ODBC64, C_ESQL32 or C_ESQL64 external environments and specified .dll or .so in the external name clause, then the external environment would have incorrectly added an extra .dll or .so to the shared object name and then give an error. This problem has now been fixed.
Note that a workaround is to not specify the .dll or .so in the external name clause. |
553901 | On rare occasions, a mirror server could have crashed, or failed an assertion on shutdown, particularly if the arbiter and primary were being shut down at the same time. On Linux, the problem could have also manifest itself as a hang in libc's __lll_mutex_lock_wait. This has been fixed. |
553911 | The Service utility (dbsvc) included with versions 10.0.0 and up, did not recognize services created with pre-10.0 versions of dbsvc. This has been fixed. Old services can now be viewed, deleted, started and stopped. If an old service is created using the patched dbsvc, the new service will no longer be visible by pre-10.0 dbsvc. |
554067 | A Windows application using the iAnywhere JDBC driver, could have hung if all of the following conditions were true:
1) the application installed a message handler connections 2) the application shared a connection amongst multiple threads 3) one of the threads executed a statement that returned an asynchronous message 4) at the same time another thread used the same connection and called createStatement(), prepareStatement() or prepareCall(), before the asynchronous message was returned from the server This problem has now been fixed. |
554080 | Applications which used the EncryptedPassword connection parameter could have crashed when attempting to connect. This has been fixed. |
554106 | The ODBC driver would have issued an HY090 error if any of the connection string parameter to SQLConnect were specified as a combination of a NULL pointer and SQL_NTS. This situation is permitted by the ODBC specification. As a result, this restriction has now been removed. |
554242 | The Validation utility (dbvalid) was not validating materialized views by default. The utility was generating a list of tables to validate that only included base tables. This has been corrected incorporate initialized materialized views in either the fresh or stale state. |
554265 | If more than one message store connection was open, and the connections were broken from outside of Sybase Central, attempting to then disconnect from within Sybase Central could have caused Sybase Central to crash. This has been fixed. |
554271 | If the MobiLink client (dbmlsync) was run against a database with a character set that was different from the operating system's character set, then errors generated by the database would have been garbled when displayed in the dbmlsync log. This has been corrected so that these messages will now be displayed correctly. |
554273 | If a database mirroring system was running in asynchronous mode and experienced a very high rate of transaction log page updates, the mirror server could have crashed or reported a failed assertion. This has been fixed. |
554369 | Using the property sheet to rename a primary key, foreign key or unique constraint, could have caused Sybase Central to crash. This has been fixed. |
554373 | Sybase Central would have crashed if the server was shut down while the Performance Monitor tab was displayed. This has been fixed. |
554383 | In the MobiLink Monitor Details Table, if the optional column "connection_retries", or optional columns starting with "download_" or "sync_", were enabled, the column labels for these columns would have been misaligned by one or two columns. A similar problem would have occurred when exporting to a database, where that data was exported to incorrect columns in the database tables. Both of these problems have been fixed. |
554708 | Attempting to install an EBF against an Evaluation, Developer, Web or Runtime edition of 11.0.0 would have failed with a missing directory table entry error. This has been fixed in version 11.0.1. |
554764 | When running on heavily loaded Unix systems, applications using a large number of connections may have crashed. This has been fixed. |
554779 | It was not possible to retrieve index or key information through calls to the SAConnection.GetSchem method. The SAConnection.GetSchema method was using a view which did not include the primary keys. This problem has been fixed. |
554781 | In a database mirroring system, if the mirror server was starting while the transaction log on the primary server was being renamed, the primary server could have crashed. This has been fixed. |
554782 | For particular forms of statements, it was possible for the server to incorrectly return the following error when trying to open a cursor:
The optimizer was unable to construct a valid access plan [-727] ['WI010'] In order for the problem to have occurred, the statement must have referred to only a single table and used only columns satisfied by an index. Further, snapshot isolation must have been enabled. This has now been fixed. As a workaround, the statement hint "options(force optimization)" can be included to avoid the error. |
554854 | If the evaluation of certain expressions resulted in an error code, it was possible for memory to be leaked. When this memory leak occured in an INSERT, UPDATE, DELETE, or SELECT statement, the memory leak would have been transient. In the case of stored procedures and triggers, this leak could have lead to a slow increase in the size of the main heap. In that case, less memory would have been available for caching file pages, or other purposes, until a reboot. This problem has been fixed. |
554876 | If an application established an HTTP session from the PHP external environment, then the server may have hung or crashed. This problem has now been fixed. |
554880 | If the Server Monitor was used to monitor several servers, and one or more of those servers were down, then it was likely that the server monitor requests would have started to time out, and cause communication errors within the browser. This problem has now been fixed. |
554886 | Some particular constructions of the LIST aggregate could have caused the server to crash while processing the statement containing the LIST aggregate. In order for the crash to occur, the LIST must have contained an ORDER BY clause. This has been fixed. |
554889 | Simple SELECT, UPDATE, and DELETE statements with a specific predicate structure could have caused the server to crash. A workaround to avoid the crash is to set the option Max_plans_cached=0. This problem has been fixed. |
554998 | When ADO asks for the schema information related to a query (e.g., SELECT * FROM Products), it requests a number of attributes like "IDNAME", "TABLENAME", etc. The SQL Anywhere OLE DB provider returns a DBID for schema rowset columns that matches Microsoft's declared DBID. For example, the schema column DBCOLUMN_IDNAME is defined in Microsoft's OLEDB.H header file as follows:
extern const OLEDBDECLSPEC DBID DBCOLUMN_IDNAME = {DBCIDGUID, DBKIND_GUID_PROPID, (LPOLESTR)2}; This is what the OLE DB provider would return as the DBID for the "IDNAME" column. This strategy works for many ADO methods that request schema information. However, the following example illustrates a problem with the ADO RecordSet Save() method. Dim strConnection = "PROVIDER=SAOLEDB;ServerName=demo;DatabaseName=demo;USERID=DBA;PASSWORD=sql" Dim strSQLStatement = "SELECT ID, Name FROM Products" Dim strXMLLocation = "c:\\temp\\products.xml" Dim objADOConnection As New ADODB.Connection Dim objADORecordSet As New ADODB.Recordset objADOConnection.Open(strConnection) objADORecordSet.Open(strSQLStatement, objADOConnection, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic) If Not (objADORecordSet.EOF And objADORecordSet.BOF) Then objADORecordSet.MoveFirst() objADORecordSet.Save(strXMLLocation, ADODB.PersistFormatEnum.adPersistXML) End If For reasons unknown, the ADO RecordSet Save() method returns the error "catastrophic failure". The SQL Anywhere OLE DB provider has been changed to return only the "property ID" part of the DBID. This is equivalent to returning the following structure. extern const OLEDBDECLSPEC DBID DBCOLUMN_IDNAME = {NULL, DBKIND_PROPID, (LPOLESTR)2}; This permits the ADO RecordSet Save() method to complete successfully. |
555007 | Sybase Central could have crashed when attempting to change the visible columns (via View -> Choose Columns...), or column widths, while the MobiLink 11 node was selected in the tree. In addition, when in Model mode, the list of columns under the View -> Sort menu would sometimes not have contained all the displayed columns when the MobiLink 11 node was selected in the tree. Both of these issues have now been fixed. |
555024 | When the server was run on Unix systems, the PHP external environment would have reported all errors, warnings, etc, even when PHP was explicitly configured not to do so. This has been fixed. |
555033 | Providing the function ML_GET_SERVER_NOTIFICATION() with long MobiLink stream parameters (longer than 128 characters) could have caused the results of the function call to be incorrect. This has been fixed so that the poll will now work with arbitrary length
stream parameters |
555034 | Push notifications over a SYNC gateway may have stopped working after the listener reconnected. The was timing dependent and was more likely to have occurred when there was a proxy, a redirector, or a relay server being used between the listener and the SYNC gateway of the MobiLink server. The listener may have reconnected to the SYNC gateway when the IP address of the remote device had been changed, when the QAAgent registered with the listener on startup, or a communication error had occurred. This problem has now been fixed. |
555054 | Sybase Central was allowing the modification or deletion of the QAnyNotifier_client notifier. Doing so could have caused problems with QAnywhere. To prevent any problems, it is now only possible to modify the notifier's description, polling interval and event SQL. |
555056 | A new feature was added to the Interactive SQL utility (dbisql) in version 11.0.0, which automatically released database locks after executing queries when it was run as a windowed application. This feature was on by default, and was undocumented. It unfortunately also broke the locking tutorial, and introduced an unexpected behavioral change. The behavioral change has now been rectified. Automatic lock releasing is now OFF by default. This is a behavioral change from 11.0.0, but it makes dbisql consistent with older versions. Also, users can now control the automatic lock releasing feature explicitly. The "Result Set" tab in the "Options" window contains a new checkbox called "Automatically release locks". Check this if dbisql is to release locks after executing a statement. |
555059 | When using Microsoft's AppVerifier (a development/debugging tool), the tool may have reported various errors, such as the use of an invalid handle in client libraries (ODBC, dblib, etc) or in the database server. These problems have been fixed and the database server and client libraries now run cleanly under AppVerifier.
Note, without the use of AppVerifier it would have been extremely rare for users to encounter these problems. |
555181 | In very rare circumstances, cancelling a DDL statement could have caused the server to crash, cause corruption or possibly other erratic behaviour. The cancel would need to have been detected after a DDL completed successfully, but before the DDL was auto-committed, which is a very tiny window. Whether or not a problem would be caused by a cancel at that time, and if so, the nature of that problem also depended on the DDL itself and what the connection did afterwards. This problem has been fixed. |
555185 | It was not possible to retrieve the columns for a primary key index using the method SAConnection.GetSchema. The SAConnection.GetSchema method was using a view which did not include the columns for primary keys. This problem has been fixed. |
555208 | Interactive SQL utility options, which were set from a .SQL file while it was running as a console application, would not have been saved. This has been corrected so that now they are. |
555211 | Sybase Central would have crashed when attempting to use the Column property sheet to rename a column that had not yet been saved to the database. This has been fixed. |
555228 | Under some circumstances the server could have crashed when a table was dropped. This has bben fixed. |
555236 | SQLColumns returns a result set including COLUMN_SIZE, BUFFER_LENGTH, and CHAR_OCTET_LENGTH among other things. For a column typed NCHAR(30) or NVARCHAR(30), the COLUMN_SIZE was returned as 30 and the BUFFER_LENGTH as 30. The BUFFER_LENGTH should have been 60. For CHAR_OCTET_LENGTH, NULL is returned, whereas it should have ben 60 as well.
From the ODBC standand: "COLUMN_SIZE": For character types, this is the length in characters of the data; The defined or maximum column size in characters of the column or parameter (as contained in the SQL_DESC_LENGTH descriptor field). For example, the column size of a single-byte character column defined as CHAR(10) is 10. "BUFFER_LENGTH": The defined or the maximum (for variable type) length of the column in bytes. This is the same value as the descriptor field SQL_DESC_OCTET_LENGTH. "CHAR_OCTET_LENGTH": The maximum length in bytes of a character or binary data type column. For all other data types, this column returns a NULL. These problems have been fixed. |
555245 | Under rare circumstances, selecting a table type in the Query Editor could have caused an internal error. This problem was highly timing-dependent. This has been fixed. |
555250 | The name of the current user did not appear in the list of owners in the Import Wizard on the page that asks "Where do you want to save the data" if the current user does not own any database objects. Now, the user name always appears in the list of owners. |
555390 | If the option PUBLIC.quoted_identifier was set to 'off', executing the reload script produced by Unload utility (dbunload) would have failed when attempting to set subsequent options. This has been fixed. |
555444 | When synchronizing using HTTPS through an HTTP proxy, MobiLink clients would have incorrectly appended the url_suffix to the HTTP CONNECT request, which could have caused some proxies and servers to fail. This has been fixed. |
555450 | Column names that are greater than 29 bytes in length were being truncated. This has been fixed. |
555453 | If an encryption key was specified, it was not possible to create a server message store when running on Linux systems. This has been fixed. |
555616 | he MobiLink server was allocating more memory than necessary and thus wasting memory. The amount wasted was approximately equal to 13% of the -cm option value. This has now been fixed. |
555617 | When calling SQLForeignKeys(), the result set was not returned in the correct sort order. According to the ODBC standard, the sort orders are:
1. If the foreign keys associated with a primary key are requested, the result set is ordered by FKTABLE_CAT, FKTABLE_SCHEM, FKTABLE_NAME, and KEY_SEQ. 2. If the primary keys associated with a foreign key are requested, the result set is ordered by PKTABLE_CAT, PKTABLE_SCHEM, PKTABLE_NAME, and KEY_SEQ. This has now been corrected. |
555621 | When displaying a graphical plan without statistics, estimates for internal nodes were not included. This has been fixed. |
555622 | Lower bounds are imposed on selectivity and cardinality estimates during the optimization process. These bounds are meant to be greater than 0, but less than one row of the result set of a physical operator, and are set to be a very small percentage, which in the case of very big tables, or big intermediate result sets (> 10,000,000 rows), were actually bigger than one row. This has been fixed. |
555623 | The following fixes have been made to graphical plan descriptions:
1. Range expressions of a partial index scan are now always printed as "low expression <[=] column name <[=] high expression [ASC |DESC]". The low and high expressions can be NULL value if the real fence post was set to NULL value; they can be '*' if the real fence post is not set (this is actually an open range partial index scan). 2. Selectivity estimations are now printed with 9 decimal digits. |
555626 | If the server used a cached plan for a query with an IN list predicate which contained a variable, and used the IN list predicate to return the rows in descending order
using a table index, then the result set may have had fewer rows than it should have. For example, if table T1 had an index on column col, then the following query may have return too few rows: select * from T1 where col in ( 5, Var1 ) order by a desc; This has been fixed. |
555765 | There was a very small chance that the server would have returned a thread deadlock error on an external environment call in situations where no actual thread deadlock occurred. For this problem to have occurred, a previous valid thread deadlock must have been returned by the server, resulting from a large number of connections attempting to issue an external environment call at the same time. This problem has now been fixed. |
555769 | If an application, or set of applications, constantly connected, made a Java call, and then subsequently disconnected, then there was a chance the Java VM used by the server would have thrown an 'out of memory' exception. This problem has been fixed. |
555789 | In very rare circumstances, the server could have reported assertion failures 101428 or 101424 "Writing page with no position in file." when running with AWE enabled and under periods of heavy activity or high server stress. This has been fixed. |
555808 | For a query containing a WITH RECURSIVE table, if the estimated cardinality of the recursive table after the first iteration was lower than 2 rows, the optimizer would not have set the alternative JNL operator if an alternative index existed. The resulting execution plans may have been very inefficient, depending of the number of rows on the right hand side of the JoinHashRecursive operator. This has been fixed.
Example: with recursive Ancestor( child) as (select row_num from rowgenerator R1 where R1.row_num = 1 ) UNION ALL (select R2.row_num+100 from Ancestor, rowgenerator R2 where Ancestor.child = R2.row_num ) ) select * from Ancestor Ancestor(child) has exactly one row after the first query block is computed. Computing the second query block is very efficient if the executed plan is "Ancestor<seq> JNL R2<row_num>". However, because the optimizer did not set up the JNL operator, the inefficient plan "Ancestor<seq> JH* R2<seq>" was executed. |
555809 | The Server Message Store would have been unable to connect to the store after creating it, if an encryption password was specified. This has been fixed. |
555827 | When using the Create Table wizard to create a new table, or the Table Duplicate dialog to duplicate a table, the default_value for the dbspace option was ignored; that is, the dbspace selection in the wizard or dialog would have always defaulted to "system". This has been corrected so that it now defaults to the value of the default_dbspace option, if the option value corresponds to the name of a dbspace. |
555936 | An attempt to drop a database whose page size was larger than the server's page size, using the 'DROP DATABASE' statement, would have resulted in the error "An attempt to delete database 'database file' failed", leaving the reason for the failure unclear. The server will now raise the more specific error, "Page size too big: 'database file'". |
555940 | Simple statements of the form "select TOP n from T order by T.X [asc|desc]" may have had a very inefficient query access plan. This has been fixed. |
555959 | If an application executed a remote query that involved a User Defined Function, and the call to the function passed in column references as parameters, there was a chance the server would have crashed when the server decided to run the query in partial passthru mode. This problem has now been fixed. |
555961 | The server's log window could have contained garbage characters if a language DLL was used that was older than the server. There was also a very small chance that the server could have crashed in this case. This has been fixed. |
555963 | If an NCHAR, NVARCHAR, or LONG NVARCHAR parameter was bound as SQL_C_DEFAULT, the binding would have defaulted to SQL_C_CHAR, instead of SQL_C_WCHAR. This has been corrected. |
555965 | In rare and timing dependent circumstances, a request could have hung on a heavily loaded server. This has only been observed when the request was a cached statement with host variables containing data larger than the communication buffer size, after a schema change, set option or drop variable. This has been fixed.
Note, setting the max_client_statements_cached database option to 0 may workaround this issue. |
555973 | Tested and reproduced with:
Product: SQL Anywhere 11.0.0.1526 with UltraliteJ feature OS: Windows XP SP2 BlackBerry Java Development Environment: JDE 4.1.0.185 and MDS 4.1.0.22 20050927 Remote Database for ASA Proxy tables: Oracle 10g After synchronizing UltraliteJ app tables with Consolidate ASA database, BlackBerry application exits with java.lang.OutOfMemoryError. When confirming BlackBerry memory, there's actually 17M free. |
555976 | With the release of SA 10.0.0, identifiers were restricted such that they could no longer include double quotes or backslashes. Unfortunately, if an application wants to create an externlogin to a remote SQL server using secure logins, then the remote login needs to be specified in the form user\domain. As a result, the remote login specification of a create externlogin statement has now been extended to accept both identifiers and strings. Note that no catalog changes have been made; hence, the remote login specification is still restricted to 128 bytes. |
555978 | Executing a "CREATE PROCEDURE ... LANGUAGE ..." or a "START EXTERNAL ENVIRONMENT ..." statement when connected to a case sensitive database, would have failed with an "external environment not found" error, if the external environment name was not specified in lower-case. This problem has now been fixed. |
555985 | The MobiLink server would given an error message that the classpath was too long if the Java classpath given in the -sl java option was longer than about 3000 characters. This restriction has been removed. |
555989 | It was possible that the last download timestamp for one or more publications would not have been updated after receiving and applying the download from the server. This has been fixed. |
556111 | In specific situations, it was possible for the server to crash when processing a statement that contained a LIST aggregate function with an ORDER BY specification inside of a subquery. This has been fixed. |
556121 | Changes made as part of the fix for Engineering case 554242, introduced a problem where running the Validation utility (dbvalid) with a user who did not have DBA authority, or execute permission on the dbo.sa_materialized_view_info procedure, would have failed
with the error message: Permission denied: you do not have permission to execute the procedure "sa_materialized_view_info" This has been fixed. |
556123 | Under certain circumstances, use of the system procedure sa_row_generator() could have caused the server to crash, or enter an infinite loop. This problem has been fixed.
Note that the result set of the stored procedure will be empty when the specified values are not appropriate. |
556127 | If the server could not find a transaction log file when attempting to start a database that needed recovery, it would have returned the misleading error "Specified database not found" (SQLCODE -83). This has been fixed. The error now returned in this situation is "Cannot open transaction log file -- <filename>" (SQLCODE -106). |
556132 | The name of a .SQL file to run can be specified on the command line without an explicit READ keyword. If the .SQL file requires parameters, it is now possible to give the parameters following the file name without the READ keyword. For example,
DBISQL x.sql [parm1] is equivalent to DBISQL READ x.sql [parm1] |
556146 | The optimizer may have generated a query access plan that used intra-query parallelism that could not be executed in parallel, by underestimating the execution cost. This has been corrected by adjusting the costing of such enumerated plans during the optimization process so that it is closer to what the server does during query execution. This was done by using a new property of the partial access plans - "partitioned during execution". Hence, less than optimal parallel plans are more likely to be estimated as such by the optimizer. |
556154 | A server participating in mirroring system may have crashed if a mirroring connection timed out due to liveness, or, on very rare occasions, if a connection attempt to the partner or arbiter failed. This has been fixed. |
556162 | If concurrent connections made DDL changes to the same global temporary table, then it was possible for the server to fail to reapply the resulting transaction log using the "-a" server command line option. Normal recovery should have been performed properly. This has been fixed so that the server will now be able to apply the transaction logs without error. Existing transaction logs will work correctly as expected. |
556163 | If the sa_validate() procedure was called without arguments, materialized views were not being validated. This has been fixed.
Note, for changes to the sa_validate() procedure to take effect, the database will need to be rebuilt with a server containing this fix. |
556175 | Queries with unflattenable subqueries may have returned incorrect results, or crashed the server. The following conditions must have been true for the incorrect result set to have been, or for the server to have crashed:
- the query contained a subquery predicate (e.g., EXISTS() , NOT EXISTS()) which could not be flattened in the main query block, which was used in the cost-based optimization by the SA Optimizer - the subquery predicate was correlated to at least two tables from the main query block - a correlation expression was equated to a constant in the main query block For example: select * from f, i, fi where f.fund_id = 1 <==== f.fund_id is a correlation expression for the NOT EXISTS() predicate and it is equated to a constant and f.fund_id = fi.fund_id and fi.investor_id=i.investor_id and i.investor_id not in ( select ib.investor_id <=== i.investor_id is a correlation expression for the NOT EXISTS() predicate from ba , ib where f.fund_id = ba.fund_id <==== f.fund_id is a correlation expression for the NOT EXISTS() predicate and ib.bank_account_id=ba.account_id ) |
556292 | Output host variables for SQL statements would not have been updated when using the UltraLite engine if a warning had been triggered. This has been fixed. |
556296 | In rare cases, creating a procedure could have caused a server crash. This has been fixed. |
556326 | Applications running on Unix systems, and using the iAS ODBC driver for Oracle, could have received an "Out of memory" error when calling SQLTables, SQLColumns, SQLPrimaryKeys, SQLForeignKeys, SQLProcedureColumns, SQLProcedures, or SQLStatistics. This problem has now been fixed. |
556340 | Applications fetching data from an NCHAR column that was greater than 32767 bytes, using the Perl, Python, PHP, or Ruby drivers, may have crashed. This has been fixed. |
556447 | When editing a DATE value in the "Results" pane of the Interactive SQL utility (dbisql), or on the "Data" tab in the SQL Anywhere plug-in for Sybase Central, if the date was typed in, rather than using the date chooser dialog, the value entered was ignored when the value was updated. This has been corrected so that the value entered is now sent to the database. |
556453 | Newly added or modified DATE values on the "Data" tab for a table, could have been displayed using the canonical YYYY-MM-DD format rather than that specified in the "Date_format" database option. This has been fixed. |
556516 | If an application was using one of the JDBC based Remote Data Access classes (i.e. either SAJDBC or ASEJDBC), and the remote login failed, then there was a possibility that the error reported would not contain the actual reason for the failed login. When jConnect throws a JZ00L SQLException, the actual reason for the failed login is usually contained in a chained SQLException, rather than the main SQLException. The server will now report the error on the chained exception instead of reporting the topmost SQLException. |
556527 | A new network protocol option 'http_buffer_responses' has been added. When set to 'On', HTTP packets from MobiLink will be completely streamed into an intermediary buffer before being processed, instead of processing the bytes as they are read off the wire.
Syntax: http_buffer_responses = { off | on } Protocols: HTTP, HTTPS Default: off Because of the extra memory overhead required, this feature should only be used to work-around HTTP sync stability issues. In particular, the ActiveSync proxy server for Windows Mobile devices will throw away any data that is not read within 15 seconds after the server has closed its side of the connection. Because MobiLink clients process the download as they receive it from MobiLink, there is a chance they will fail to finish reading an HTTP packet within the allotted 15 seconds causing synchronization to fail with stream error code STREAM_ERROR_READ, when synchronizing using non-persistent HTTP. By specifiying 'http_buffer_responses=On', the client will read each HTTP packet in its entirety into a buffer before processing any of it, thereby beating the 15 second timeout. |
556539 | UltraLite and UltraLiteJ were not able to recognize a correlation name following the table name in UPDATE and DELETE statements. Without this ability, WHERE clauses that require the correlation name to disambiguate column references could not be written.
For example: update Employee E set salary = salary * 1.05 where EXISTS( SELECT 1 FROM Sales S HAVING E.Sales > Avg( S.sales) GROUP by S.dept_no ) The syntax for UPDATE and DELETE statements was been expanded to correct this. |
556552 | In certain cases, rebuilding a pre-10.0 database to version 10.0 or later may have failed due to an incorrectly charset-converted database file-name. The SQL error that was reported was:
"Cannot access file '<incorrectly-converted-file-name>.db' -- The filename, directory name, or volume label syntax is incorrect." This issue only occurred when using an OS charset whose label was not used prior to version 10.0.0, such as "GBK". Additionally, for this issue to have occurred, the database must have used a different charset than the OS charset - specifically, the filename must contain characters that require translation to be valid in the database charset. This has been fixed. |
556724 | Using the "Request Logging" page of a server's property sheet to attempt to enable request level logging for all connections to a database, or for a single connection, would have caused Sybase Central to crash. This has been fixed. |
556754 | When deleting a row containing a CHAR or BINARY (i.e. string) column, there were some circumstances where the space on the table page for the string might not have been reclaimed. This problem only occurred with string data shorter than approximately one page in size, and the string must have been held active, either in a cursor or in a variable, then inserted into a new row, and then deleted while still held active. The database cleaner must also run after commiting the delete, but before closing the cursor or value holding the string. This has been fixed. |
556757 | If a JDBC application called ResultSetMetaData.getColumnTypeName() with an invalid column index, then the application may have crashed. This problem has been fixed. |
556771 | On Windows platforms other than Windows Vista, performance counters for the server were not visible in the performance monitor when the server was started as a service. The code to check if the process was still alive was using the wrong permissions to open the process. This has been corrected. |
556778 | The return values of the built-in functions user_id() and suser_id() may have incorrectly been described as not nullable even if the function argument was not nullable. This may have lead to the assertion error 106901 "Expression value unexpectedly NULL in write". This has been fixed so that the functions' results are always described as nullable. |
556913 | SQL Anywhere JSON services incorrectly encoded the apostophe (') within a string to a double backslash (\\), the backslash was not encoded. This has been fixed so that a backslash is now correctly encoded to a double backslash, and the apostrophe is not encoded. |
556925 | The fix for Engineering case 553312, may have prevented restarting the MobiLink Monitor after disabling the Details Table, Utilization Graph, or Overview panes. This has been fixed. Pane sizes are now also properly restored when re-enabling after restarting. |
556960 | The "Join Type" value on the "Join" page of the Query Editor could not be reset to its initial empty value. This has been corrected so that now it can. |
556974 | Using a QAnywhere JMS connector to communicate with a Websphere MQ JMS provider could have resulted in the following two issues:
- The MobiLink server could have reported the error "The property name 'JMSTimestamp' is reserved and cannot be set." when Sending a message from a QAnywhere application to the JMS connector. - The ReplyToAddress of a QAnywhere message originating from a Websphere JMS provider could have contained a malformed queue name. Both of these issues have been corrected. |
556989 | The server may have crashed, or returned incorrect data, on GET DATA requests if the cursor reused a query access plan for a simple SELECT statement. This has been fixed |
557107 | When locking a table in exclusive mode (i.e. LOCK TABLE {tablename} IN EXCLUSIVE MODE), the server would first obtain a read lock on the table, increasing the likelihood of deadlocks occurring. This has now been fixed. |
557311 | A connection established by an HTTP request to an HTTP listener port, would have leaked a small amount of memory when the connection was closed. This has been fixed.
Connections to HTTPS listener ports were not affected by this problem. |
557328 | If an application logged on the database using a userid with multibyte characters, and the application subsequently made a Java in the database call, then there was a chance the Java VM would have failed to start if this was the first time a Java call was made since the database was started. This problem has now been fixed.
The workaround is to log in using a userid without non-multibyte characters and execute a START JAVA statement. Once the Java VM is successfully started, making Java calls using userids with multibyte characters will work fine. |
557332 | If a string column used a UCA collation with accent or case sensitivity, and the column appeared in an index with order DESC, then the server could have returned incorrect answers for LIKE predicates on the column. Problematic LIKE predicates started with a prefix of non-wildcard characters, such as the following: "T.x LIKE '01234%'". This has been fixed. |
557363 | By default (or with SET 'HTTP(CH=auto)') an SA HTTP client procedure would have sent its HTTP request using chunk mode transfer encoding when posting data that was greater than 2048 bytes. If the server rejected the request with a 501 "Not Implemented" or 505 "HTTP Version Not Supported" status, the procedure would have automatically re-issued the request without using chunk transfer encoding. When in default mode, an SA client would not have used chunk transfer encoding when posting data that was less than 2048 bytes in length. This has now been changed so that the data byte limit is now 8196 bytes, from 2048 bytes, and the status 411 "Length Required" has been added to its criteria for re-issuing the request without using chunk mode transfer encoding. |
557465 | In exceptionally rare circumstances, the server may have crashed during the rewrite phase of optimization, when attempting to execute a very large and complex SELECT statement. This may have occurred when the server was close to running ouf of stack space, or was low on cache. The problem was seen with queries containing UNION, EXCEPT, INTERSECT, and deeply nested subselects. This has been fixed. The server will now correctly return the error "-890: Statement size or complexity exceeds server limits". |
557507 | If the statement:
set option public.login_mode='Standard,Integrated' was executed, it would have been recorded in the transaction log as set option public.login_mode='Standard' This could have affected mirroring environments where the login_mode was set correctly on the primary server, but not on the mirror. This has been fixed. |
557518 | An extremely busy server with multiple CPUs, maxed on processing queries, could have crashed in rare conditions. This has been fixed. |
557527 | A SQL Anywhere HTTP client function was only able to return a varchar data type. Support has now been added to the HTTP client so that it can also be defined to return binary, varbinary or long binary data types, i.e.:
CREATE function client() RETURNS long binary URL 'http://localhost/image_service/...' TYPE 'HTTP:GET' Note, this change only extends the semantic meaning of the returned value, declaring the return data type as binary does not change the behaviour at the transport level. Textual data may still be converted to the database character set based on Content-Type HTTP header or SOAP envelope encoding criteria. |
557677 | The server automatically collects and updates column statistics during the execution of DML statements. Earlier versions of the server did the auto collection only when a single DML statement affected more than a threshold number of rows, in order to reduce the overhead of collecting statistics on a relative basis. Support was added in release 10.0.1 to also do some automatic statistics collection on all DML statements, including those affecting as few as a single row. A subtle defect in this new support caused the server to miss some opportunities for automatic statistics collection for UPDATE statements, as opposed to the INSERT and DELETE statements. This has now been corrected. |
557679 | When running a 64-bit version of perfmon, the Adaptive Server Anywhere or SQL Anywhere counters would not have been displayed if the 64-bit version of the counters library (dbctrsX.dll) was registered and the 32-bit version was not. This has been corrected.
Note, both versions of the counters library are registered during a normal product installation so it is unlikely that users would encounter this problem. |
557685 | UltraLite and UltraLiteJ erroneously accepted DEFAULT TIMESTAMP as a clause in the CREATE TABLE and ALTER TABLE statements, and treated the clause as if DEFAULT CURRENT TIMESTAMP had been entered. Attempts to execute CREATE TABLE or ALTER TABLE statements with this clause will now result in a syntax error. |
557686 | The MobiLink server could not start in a server farm if the consolidated databases were running on DB2 or DB2 mainframe database servers, and the MobiLink server in the farm was requested to start with a liveness setting from the ml_property table (the ml_property table in the consolidated database contained a liveness value for the server farm). This problem has now been fixed. |
557767 | If an ALTER TABLE statement needed to rewrite the rows of the table (for example, if a 17th nullable column is added) and the table contained long or compressed strings, the operation could have taken much longer than necessary and the database may have end up with many more free pages than before the ALTER. The number of extra pages would have been approximately the number of pages in the table in question. This has been fixed. |
557794 | Under certain circumstances, it is possible that database indexes could have become corrupt. This has been fixed. |
557802 | In rare circumstances, server CPU usage could have been unnecessarily high. The problem would only have occurred with certain layouts of memory within a heap, and when certain heap operations were being performed on the heap. This problem has been fixed. |
557808 | The changes for Engineering case 552171 introduced a problem where occasionally the use of the db_backup() function on a running database server could have returned a corrupt transaction log page. This would have caused the MobiLink client (dbmlsync) to fail the synchronization, or the Backup utility (dbbackup) to fail to recover the newly backed-up file. In both cases, this was a transient failure, and the sync/backup could simply have been restarted when the error was detected. This has now been fixed. |
557812 | If an UPDATE or DELETE statement used a keyset cursor and the statement executed at isolation level 0 or 1, it was possible for the statement to update or delete rows improperly. This could have occurred if another transaction deleted a row identified by the UPDATE or DELETE statement and committed, and then another transaction inserted a row and committed before the UPDATE or DELETE statement had finished processing. In this case, the newly inserted row would have been improperly processed by the UPDATE or DELETE statement. DELETE and UPDATE statements use a keyset cursor if there is a possibility that an updated row could be re-processed by the statement (for example if an UPDATE modifies a column in the index scan, or if a join is present). This has now been fixed.
A workaround would be to use a higher isolation level (2 or 3). |
557818 | When running on Windows CE devices, an UltraLite database could have failed to start, reporting SQLE_DYNAMIC_MEMORY_EXHAUSTED, when the default cache size chosen for the database was too large. The default cache size that is now chosen takes the physical memory available in to consideration, and limits our size accordingly. The cache size allocated on Windows was also somewhat reduced. Specifying the cache_size connection parameter with an appropriate value will work around this problem. |
557829 | If the MobiLink Listener (dblsn) was started with the -q option ("run in minimized window"), and it was then restored by double clicking on the icon from the today screen, the "shutdown" button did not appear. This has been fixed. |
557837 | Incorrect results were possible when there was both an equality condition and another redundant conjunctive expression such as:
x >= 2 AND x = 3 with only a column name on one side of the comparison. That column name must also have been the first column in an index. This has now been fixed. |
557849 | The Interactive SQL utility (dbisql), or the SQL Anywhere plug-in for Sybase Central, could have crashed when opening the "Connect" dialog when run with JRE 1.6.0 update 11. This has been fixed.
Note, SQL Anywhere 11.0.0 and 11.0.1 ship with JRE 1.6.0 update 4, which does not suffer from this problem. |
557870 | If a table containing columns declared as compressed strings was used in a parallel plan that contained a parallel hash join, it was possible, in rare circumstances, for the server to have crashed. This has been fixed. |
557924 | If a connection string containing the "verify=no" TCP option was passed to the Interactive SQL utility (dbisql) and the -jconnect option was used, the dbisql would have crashed. This has now been fixed. |
557938 | It was possible for a deadlock to have occurred in the database server if the QAnywhere server was performing delete rules and archiving messages at the same time. Furthermore, the exception thrown by this deadlock exposed another problem in the QAnywhere server error handling where it was possible for a transaction to be left open, causing other connections to block due to unreleased table locks. Both of these issues have been fixed. |
557953 | The Index Consultant may have caused the server to crash following query optimization. The class of queries for which this could happen was characterized by the existence of a comparison or EXISTS() subquery predicate in one of the query blocks.
For example: select * from sales_order_items soi1, sales_order_items soi2 where soi1.id = soi2.id AND soi1.quantity < ( select avg( quantity ) from sales_order_items soi3 where soi3.prod_id = soi1.prod_id ); This has now been fixed. |
557955 | Calls the function SQLGetInfo() would have incorrectly returned SQL_CB_NULL for SQL_CONCAT_NULL_BEHAVIOR. As the result of the server concatenating a string and NULL is the string, calls to SQLGetInfo() have now been corrected to return SQL_CB_NON_NULL for SQL_CONCAT_NULL_BEHAVIOR. |
557960 | The UltraLite Unload utility (ulunload), when run with the -s option "Unload schema as SQL statements", would have generated invalid unique constraints when they contained more than one column. This has been fixed. |
557973 | If an index already existed on a particular set of columns, attempting to create a unique index over the same set of columns might have failed, if the index contained deleted, but not cleaned, entries. This has been fixed.
Note, a work around would be to call sa_clean_database manually before creating the index. |
558001 | Under certain circumstances, the server could have computed, and displayed, incorrect statistics, For example, the selectivity may have been reported as infinite. This were likely no side effects on query performance related to this defect, which has now been corrected. |
558084 | A new tailoring of the Japanese UCA collation has been added which defines primary-level differences between all Hiragana letters, as well as primary-level differences between all Katakana letters. This new tailoring will permit correct equality comparisons of Hiragana and Katakana letters in case-insensitive collations. The new collation is used by specifying a collation of UCA(locale=ja;sorttype=direct;...). |
558085 | The MobiLink server now supports two new command options,
-vR show the remote ID in each logging message -vU show the ML user name in each logging message When both -vR and -vU are specified, the MobiLink server will add the remote ID and the MobiLink user to each message logged: yyyy-mm-dd hh:mm:ss. <sync_id> ({remote_id},{user_name}) When started with -vR and without -vU, the prefix will be just the remote_id: yyyy-mm-dd hh:mm:ss. <sync_id> (remote_id,) and the MobiLink user name will be empty. When started with -vU and without -vR, the prefix will be just the user name: yyyy-mm-dd hh:mm:ss. <sync_id> (,user_name) and the remote ID will be empty. The new feature may be useful for MobiLink users who are running the MobiLink server with the command options -on or -os, as the logging messages for a synchronization can span multiple MobiLink server logging files, which makes it is hard to find out the remote ID and MobiLink user name for a given sync ID from such logs. This extra logging information will only apply to the synchronization threads. For the main thread of the MobiLink server, the logging messages will still contain the following prefix, yyyy-mm-dd hh:mm:ss. <Main> because there is no remote ID or MobiLink user name for the main thread. These two command line options will not be affected by the -v+ option, that is, the MobiLink server will not add the remote ID or the ML user name into its logging messages, even if the -v+ option is used. Therefore, the description for the -v+ option has been changed to - "show all verbose logging specified with lower case letters". |
558108 | Calling the function SQLGetTypeInfo() would have returned an incorrect AUTO_UNIQUE_VALUE column value in the result set for non-numeric types. The value return would have been 0, but according to the ODBC specification a NULL should have been returned.
ODBC specificatrion for AUTO_UNIQUE_VALUE : Whether the data type is autoincrementing: SQL_TRUE if the data type is autoincrementing. SQL_FALSE if the data type is not autoincrementing. NULL is returned if the attribute is not applicable to the data type or the data type is not numeric. The behaviour has been corrected to follow the ODBC specification. |
558232 | The MobiLink Monitor has a default filter which highlights failed synchronizations in red. Failed synchronizations logged by the MobiLink Server were not being shown in the Monitor in red as the server was telling the Monitor that every sync was successful. This has been fixed. |
558286 | A query may have taken a very long time to execute if it contained an uncorrelated subquery in an ANY or ALL predicate that referenced a procedure that was not inlinable. The problem was due to the subquery plan that was generated not having a work table above the procedure call, so every repeated subquery execution caused the procedure to reexecute. This has been fixed. |
558446 | Executing an insert statement of the form: 'INSERT INTO <remote table> ON EXISTING UPDATE SELECT * FROM <table>', would have caused the server to correctly return an error; but, if the application attempted to execute an insert statement of the form: 'INSERT INTO <table> ON EXISTING UPDATE SELECT * FROM <remote table>', the server would have crashed. The problem has now been fixed and the server now correctly returns an error in both cases. |
558481 | The Interactive SQL utility (dbisql) could have crashed when executing a statement which returned a result set, if the redirection operator ( ">#" ) was used to save the result set to a file. This has been fixed.
Note, this problem only affected graphical operation of the program. |
558510 | A table in the QAnywhere for Ultralite schema could have been created improperly, resulting in a failure to initialize the message store with the error (-131) "param 1: timestamp". This has been fixed |
558554 | If a user-defined domain was created with char-length semantics, the Unload utility (dbunload) would not have preserved this attribute. This has now been fixed. |
558580 | Incorrect results could have been obtained with queries containing a temporary table on left side of a LEFT OUTER JOIN. This has been fixed. |
558713 | If a simple SELECT statement was executed with the option Row_counts set to 'on', the returned row count value on open may have incorrectly been zero. This has been fixed |
558739 | After deploying a synchronization model with logical deletes to a DB2 consolidated database, and then synchronizing, either of the following synchronization errors would have occurred for the MobiLink server (depending on the database setup):
[IBM][CLI Driver][DB2/NT] SQL1216N Graphic data and graphic functions are not supported for this database. SQLSTATE=56031 [IBM][CLI Driver][DB2/NT] SQL0104N An unexpected token "N''" was found following ", ?, ?, ?, ?, ''". Expected tokens may include: "<space>". SQLSTATE=42601 This has been fixed. A workaround is to deploy to a file and edit the consolidated SQL file to change instances of four single quotes to two single quotes. |
558753 | Attempting to cancel an external environment request while the server was very heavily loaded may have caused the server to crash. Note that this problem would have been quite rare. The problem has now been fixed. |
558756 | Attempting to execute a query that referenced a view containing a remote query, could have crashed the server. The crash would have occurred if the remote query had both GROUP BY and HAVING clauses, and/or aliases. This problem has now been fixed. |
558915 | When deploying a Synchronization Model to file, any characters in .SQL files that are not supported by the OS console code page would be changed to a substitution character, even though the character would have been displayed correctly in the MobiLink plug-in. This has been fixed so that .SQL files now use UTF-8 character encoding. The generated .bat or .sh file is still written using the console code page, since it must run in a console, but the UTF-8 character encoding is now specified when the Interactive SQL utility is invoked in the .bat or .sh file. |
558953 | Executing a CONNECT statement could have caused the Interactive SQL utility (dbisql) to connect to the wrong database if a connection had been already made to a database, and the CONNECT statement did not specify an engine name (ENG) or database name (DBN). This has been fixed. |
558973 | Using the ATLER EXTERNAL ENVIRONMENT ... LOCATION statement to set the executable path to a MBCS string, could have caused the server to subsequently fail to launch the external environment. When fetching the external environment location from the catalog, the server was not subsequently converting the string to the OS charset. This has now been fixed. |
558984 | The JDBC sample applications incorrectly contained references to the SQL Anywhere 10 ODBC driver. This has been fixed.
Comments were also added that explain the DriverManager.registerDriver and DriverManager.getConnection code. |
559185 | Attempting to execute a CONNECT statement could have crashed the Interactive SQL utility (dbisql) if it was started without an initial connection. This has been fixed. |
559192 | If an application fetched columns of type NUMERIC, DATE, TIME, or TIMESTAMP, and the column was bound as a string in the client application, then performance could have decreased. The slowdown was most apparent in statements where a large number of rows were fetched with relatively little server processing per row. This has now been fixed. |
559197 | When creating a new user, or changing an existing user's Profile authority setting, Sybase Central would not have always updated its group memberships in the Users & Groups folder. This has been fixed. |
559258 | The stored procedure debugger failed to report information about the size of string and numeric data types when debugging a stored procedure. This has been corrected. |
559360 | Sybase Central allowed for explicitly adding members to, or removing members from, the diagnostics group, but in some instances the members would not have actually been added or removed. This has been fixed by no longer permitting this. Now members can be added to, or removed from, the diagnostics group implicitly by granting or revoking Profile authority via the user's properties dialog. In addition, Sybase Central no longer allows deleting the diagnostics, rs_systabgroup and SA_DEBUG groups, nor change any of these groups to users. |
559372 | If an application used one of the connection scoped external environments (i.e. PHP, PERL or one of the external C environments); and the external environment failed to start up due to high server load or time-out, then there was a chance the external environment executable would not have ended. This problem has now been fixed. |
559383 | When configuring an ODBC FileDSN on Windows, NEWPWD=* incorrectly showed up in the Advanced tab of the configuration dialog. The NEWPWD=* parameter was not actually added to the FileDSN though. This has been fixed. |
559399 | If the deleted_length of a text index was greater than 50% of the doc_length, the server should refresh the text index. However, it was possible to get into a state where the pending length was very small and the deleted_length was very large, yet refreshes still did not occur. The check for the pending_length was occurring too early and prevented the server from ever checking the pending length. As a result, the index was never being refreshed. This has been corrected so that the server now checks that one condition or the other is true to continue to the refresh code. |
559402 | In previous versions of SQL Anywhere, a password connection parameter was not written to a FILEDSN (.dsn file). Beginning with version 11.0.0, the password is written to the .dsn file in the format "Password={some pwd}". This behavior is not in keeping with the spirit of the ODBC specification which states, "the PWD keyword is not stored in a .dsn file". This change in behavior occurred as a result for a change to the SQL Anywhere ODBC driver to return "Password={some pwd}", instead of "PWD={some pwd}" in the connection string. Also, "Userid=user" was returned instead of "UID=user". The Microsoft driver manager only recognizes the UID and PWD forms of the connection parameters, which caused it to add the Password parameter. This problem has been corrected. The SQL Anywhere ODBC driver will now return "UID={user};PWD={some pwd}" in the connection string, as it did in earlier versions. This will result is the Driver Manager no longer including the password. |
559403 | If a connection with a Configuration object failed, for example due to an incorrect password, a connection then with a corrected configuration object would have caused a SQLE_CONFIG_IN_USE error to have been thrown. This has been fixed. |
559412 | The OUTPUT USING statement could have failed to export the results of a DESCRIBE statement. This has been fixed. |
559413 | If many connections made concurrent external environment requests, and some of these requests failed due to thread deadlock, then attempting to close one of these connections may have caused the client to hang. This problem has now been fixed. |
559431 | Attempting to execute an INPUT USING statement would have cause the Interactive SQL utility to crash if the connection string was empty or missing. This has been fixed. |
559440 | When run on Linux systems, a server that had been handling TCP/IP connections could have displayed the message "epollerr: Bad file descriptor" in the console on shutdown. Also, under very rare circumstances on all UNIX platforms, the server could have experienced problems handling TCP/IP connections. Both of these problems have now been fixed. |
559446 | If a server running on Linux systems with GTK libraries installed was auto-started, or started by the Start Server utility (dbspawn), in an X Window environment, an empty window titled "SQL Anywhere Developer Edition" would have remained visible until the server was shut down. This has been fixed. |
559481 | Executing an ALTER TABLE statement could have caused unneccessary database growth. |
559600 | Executing a "MESSAGE .. TO CLIENT FOR CONNECTION conn-id IMMEDIATE" statement shortly before the target connection abnormally disconnected could have resulted in the message callback being called after an API request returned an error. The abnormal disconnect could have been caused by a liveness timeout, idle timeout, DROP CONNECTION, server shut down, or other conditions. Depending on the application's message callback routine, this could have resulted in a crash or other incorrect behaviour. This has been fixed so that the message callback will not be called after an API request has returned an error due to an abnormal disconnect. |
559632 | An embedded SQL PREPARE or OPEN request could have caused the application to crash in rare cases, if the connection was dropped before, or during, the request. This has been fixed. |
559636 | MobiLink clients, except UltraLiteJ, now support a new network protocol option on Windows Mobile and desktop, 'network_adapter_name', which allows clients to explicitly specify the name of the network adapter to be used to connect to a MobiLink server. Example: "network_adapter_name=Serial on USB". |
559653 | When connected to an authenicated SQL Anywhere database from the MobiLink plug-in in Sybase Central using the "Generic ODBC DSN" option, the connection would have been read-only. This has been fixed. |
559678 | Incorrect results could have been obtained with queries containing IF search expressions, aggregate functions, or references to columns not specified in the GROUP BY clause. These are now diagnosed as errors. |
559694 | The persistent store was not being properly closed on open failure (such as authentification failure) with write-at-end configuration. This could have lead to problems reconnecting to the database. The store is now closed on an open failure. |
559810 | If an INSERT statement inserted a string into a CHAR or VARCHAR column with character-length semantics, then it was possible for the server to fail with the following assertion failure:
100914: string too long when recording operation in transaction log. In order for the failure to occur, the inserted string must have had byte-length semantics and it must have contained more characters than the column definition. Further specific characteristics of the database and statement were needed to reproduce the problem. This problem has been fixed. |
559813 | The server would have reported the number of processors detected and some imposed limits. The messages have been changed so that they will now report:
- number of processors detected (changed format) - processor limits imposed by Edition, licenses purchased, and -gt option - max number of processors that will be used Also, the Edition limit that is imposed during licensing is now also imposed by the server itself. For some Unix systems, the number of processors used can not be limited. If the number to be used exceeds the per-processor license limitation, an additional message is reported, and is unchanged from previous versions. |
559822 | If the optimizer selected a parallel execution plan for a query with a GROUP BY operator on the right hand side of a nested loops join, and the group by contained an AVG or other composite aggregate function, then it was possible for the statement to incorrectly generate the error: "Field unexpected during compilation". In this case the server would have continue to process other requests. This problem has been fixed.
A workaround is to disable parallel plans by setting Max_query_tasks=1 as a connection option, or in the query OPTIONS clause. |
559844 | If a query execution plan used a multiple index scan with an Except Merge operator (EM), then it was possible for the statement to fail with an assertion failure such as the following:
Assertion failed: 106502 - NULL in not-NULL work table column In order for the failure to occur, one of the indexed columns in the query must have been declared not-NULL. This has been fixed. |
559864 | Connecting, disconnecting, and reconnecting using the same connection handle would have caused error -298 "Attempted two active database requests" in dbcapi.
For example: conn = sqlany_new_connection(); sqlany_connect( conn, <connection_string> ); sqlany_disconnect( conn ); sqlany_connect( conn, <connection_string> ); The last sqlany_connect() call would have returned error -298. This has been fixed. The workaround is to call sqlany_free_connect() and allocate and new handle. |
559897 | If a critical error occurred and an application then called db_fini, without first closing the connection, the database could have become corrupted. This has been fixed. |
559898 | If an application made use of one of the Remote Data Access JDBC classes, and the application then disconnected abnormally, then the connection to the remote server was never closed. The problem did not exist if the application used one of the Remote Data Access ODBC classes instead. This problem has now been fixed. |
559941 | NULL values were not being handled properly in single-valued SELECT queries. The value was treated as if it was not null, and an unpredicatable value was used. This has been corrected. |
560044 | In some cases, an error was generated for expressions that contained only values that were known at open time.
For example, the following generated a "division by zero" error: select if 1=0 then 1/0 else 42 endif val This problem occurred because the expression '1/0' was evaluated as part of building the access plan for the query. Constant expression trees were evaluated at open time in a bottom-up fashion so that the value can be used at execution time (avoiding multiple evaluations and supporting optimizations). In some cases, the expression was not actually needed, as in the above example with an IF expression. In these cases, the constant folding process could have generated an error that would not have been returned if the constant literals were replaced with field references. This has been changed. Errors generated during constant folding are no longer returned at open time. Instead, the constant expression tree is left in its original structure and evaluated at execution time if the value is needed. This execution-time evaluation will generate the related error if the value is actually needed. |
560045 | When the QAnywhere consolidated database contained a large number of messages that satisfied a delete rule, and there were QAnywhere clients synchronizing frequently, it was possible that delete rules would have always failed because of database deadlock errors such as:
Error: [QA] Problem evaluating transmission rules for user ianywhere.server.deleteRules: Problem updating object in repository using key "delete from ml_qa_repository from ml_qa_repository mbr where msgid in (select msgid from ml_qa_messages ml_qa_messages where status > 20 and (syncstatus = 1 or originator in ('ianywhere.connector.beajms','ianywhere.server')))": java.sql.SQLException: [Sybase][ODBC Driver][Adaptive Server Anywhere]Deadlock detected: [Sybase][ODBC Driver][Adaptive Server Anywhere]Dea Error: dlock detected This has been fixed. It is possible that some deadlock errors will still occur, but the errors will not prevent delete rules from deleting old messages. |
560056 | If a connection was forcibly closed by the server (via DROP CONNECTION, liveness or idle timeout), or was closed by the client libraries because of a liveness timeout, the client application could have crashed if the next operation it attempted was to open a cursor
without preparing it. This has been fixed. |
560069 | When executing a VALIDATE statement, or running the Validation utility (dbvalid), table validation would have failed to report errors when an index did not contain all the rows in the table. This has now been corrected.
Note, when validating a database with a 10.0.1 server between 3920 and 3930 inclusive, it was also possible for errors to be reported, when in fact there were no error. I this case, the 10.0.1 server should be updated to a build number of 3931 or higher, and the validation rerun to see if the errors are still reported. |
560080 | If a user-defined function was created with the DETERMINISTIC keyword, the parsed version of the CREATE FUNCTION sstatement that was placed in the catalog did not contain this keyword. The function may not then have been treated as deterministic, and if it was unloaded, the CREATE FUNCTION statement would also not have contained the keyword. This has been fixed.
Note, to fix existing user-defined functions created with DETERMINISTIC, the function will need to be recreated. |
560107 | Table names in case insensitive databases are required to be unique under case insensitive comparisons, e.g., names FOO and foo refer to the same table. In some cases, the server may have allowed multiple tables with the same name that differed only in case to be created. This has been fixed so that the server will now generate the expected error.
Note, once a database contains multiple tables with the same names, all variations of the name will refer to the same (somewhat non-deterministic) instance of the table. The situation can be corrected by dropping and recreating the tables. Any existing data needs to be saved and restored as necessary. |
560109 | A reboot was required after the SQL Anywhere Monitor was installed when it was to be used as a service. This problem has now been fixed, and a reboot should no longer be required. |
560351 | Columns of type UNIQUEIDENTIFIER were being fetched in binary format in the SQL Anywhere C API (php, Perl, Python and Ruby), where as they should have been returned as strings. This has been fixed. |
560678 | If a database's CHAR collation was a tailored UCA collation with a sorttype specified, then comparisons for catalog strings (such as table names and user names) would have incorrectly ignored the sorttype. For example, the Swedish collation UCA(locale=swe; sorttype=phonebook) considers 'v' and 'w' to be different characters at the primary level; however, those letters would have been considered equal during catalog string comparisons, as if the catalog collation were UCA(locale=swe) with no sorttype specified. This problem has been fixed. |
560902 | Complex queries involving proxy tables may have cause the server to crash. Some known instances of this issue have been fixed. |
560908 | When the UltraLiteJ Database Transfer tool was run on a BlackBerry device or simulator, a user may have left the password field blank assuming that the utility would use the default password "dba". However, leaving the password field blank would have resulted in a failure to connect to the database. This has been corrected. If the password is now left empty, the default password will be used to connect to the specified database. |
560924 | Executing an ALTER TABLE statement could have caused unneccessary database growth. |
560935 | Restoring a database from a backup archive using the RESTORE DATABASE command with the RENAME option could have corrupted the transaction log associated with the restored database. Translating the transaction log file using the dbtran.exe utility would have resulted in an error indicating that the log was missing a CONNECT operation. This has been fixed. |
560943 | The dbmlsync ActiveX component was not able to launch the dbmlsync application properly on Windows if some or all of the dbmlsync options are given by a file, and the dbmlsync command line contained the option @filename. This problem has now been fixed. |
561067 | The QAnywhere Agent (qaagent) now attempts to reconnect to the message store database when the connection is dropped.
Notes: - The initial database connection will be retried a given number of times if the first connection fails - Command line options for connection retries and retry delay: -cr <n> (n is the number of retries to connect after a failure) -cd <n> (n is delay, in seconds, between retries) - The defaults are 3 retries with a 10 second delay between retries - If all retries fail, the QAnywhere Agent displays an error and waits to be shut down - If a database connection fails during operation, the QAnywhere Agent will go through termination steps, including finalizing connections, terminating threads and external processes, and then re-starts. |
561095 | Incorrect results could have been obtained with queries containing IF search expressions, aggregate functions, or references to columns not specified in the GROUP BY clause. These are now diagnosed as errors. |
561118 | The persistent store was not being properly closed on open failure (such as authentification failure) with write-at-end configuration. This could have lead to problems reconnecting to the database. The store is now closed on an open failure. |
561122 | The .NET QAManagerBase class now supports ExceptionListener delegates, which allows for applications to be notified of QAExceptions that occur while receiving messages on the background thread.
The following are the relevant APIs: /// <summary> /// ExceptionListener delegate definition. /// </summary> /// <param name="ex">The exception that occurred.</param> /// <param name="msg">The message that was received, or null if the message /// could not be constructed.</param> public delegate void ExceptionListener( QAException ex, QAMessage msg ); /// <summary> /// Sets an <see cref="ExceptionListener"/> delegate to receive QAExceptions /// when processing QAnywhere messages asynchronously. /// </summary> /// <param name="address">The address of messages.</param> /// <param name="listener">The exception listener to register.</param> public void SetExceptionListener( string address, ExceptionListener listener ); In 10.0.x and later, the .NET and Java QAManagerBase class now supports exception listeners. The .NET and Java QAManagerBase class now supports a property, RECEIVER_INTERVAL, that represents the maximum wait interval (in milliseconds) in the background receiver thread for receiving messages. The default is 60000 milliseconds. As with other QAManager properties, this property must be set before calling an Open() method. The .NET and Java QAManagerBase class now supports a ReOpen() method that can be called in an ExceptionListener or MessageListener to re-establish connections to the message store database. Following is the API description. /// <summary> /// Reopens the QAManagerBase. This re-establishes connections to the message /// store, without releasing any resources. This method may called in a /// message or exception listener, and in that case it is not necessary to /// call Start() again. This method simply executes Close() then Open() if /// not called in a listener, and in that case Start() must be called to /// restart receiving of messages. /// </summary> /// <exception cref="iAnywhere.QAnywhere.Client.QAException"> /// if there is a problem reopening the manager. /// </exception> public void ReOpen(); |
561127 | By default, the reload.sql script generated by the Unload utility (dbunload_) includes calls to a temporary procedure (sa_unload_display_table_status) to display progress messages when loading tables and creating indexes. The -qr command line option will now suppress generation of these calls. |
561311 | Executing a MESSAGE ... IMMEDIATE statement shortly before a connection was disconnected, could, in rare timing dependent cases, have caused the application to crash, or the message callback to run after the connection was disconnected. This has been fixed. |
561321 | When aggregate functions processed a NULL value for one or more rows, they generate the following warning: (SQLCODE 109) "Null value eliminated in aggregate function". If the aggregate function was specified with DISTINCT for its argument, this warning was not set for execution plans that used the SingleRowGroupBy or OrderedGroupBy execution algorithms. This has now been corrected. |
561378 | The Relay Server Outbound Enabler could have logged one of the following error messages in the log file:
"Failed to retrieve session[x]" or "Session mismatch: session[x].snum=y instead of z" or "Session mismatch: session[x].sfp=y instead of z". when a client unexpectedly disconnected from a Relay Server in the middle of sending a request, or receiving a response. These errors would have happened in a Relay Server farm environment with more than one Relay Servers in the farm and in particular, in the general case when using an Afaria client or a QAnywhere client running a listener. This has now been fixed. |
561524 | Under very specific and rare memory conditions, the server could have crashed while performing a sort. This has been fixed. |
561553 | When a query of the form "SELECT f(c) from t where t.c < 5", where f() was a user-defined function and t was a proxy table, was executed the server would have attempted to push the "where c < 5" to the remote server in order to reduce the number of rows being returned. Unfortunately, due to the fix for Engineering case 555959, this behaviour was changed such that the WHERE clause was no longer getting pushed to the remote, resulting in more rows being fetched from the remote than necessary. Note that the fix for case 555959 resulted in a performance degradation only, the resulting result set was still correct. Nevertheless, this has now been resolved and the WHERE clause will now properly be pushed to the remote server when it is safe to do so. |
561554 | It was possible for the server to crash while processing a specific builtin function in the context of a procedure. This has been fixed. |
561596 | Incorrect values were being used by the SQL scanner for some hexadeciml constants. This was corrected |
561603 | Synchronizing with UltraLiteJ, through the Relay Server to a MobiLink server farm with more than one server, would have caused erratic behaviour. This has been fixed. |
561616 | Application errors could have occurred after opening and closing more than 255 connections. Each .NET connection allocated two SQLCAs, but only one was freed when the connection was closed. The other would not have been freed until the connection was garbage collected. This has been fixed.
A workaround for this problem is to call GC.Collect() regularly. |
561801 | In rare circumstances, selecting a table in the tree and clicking its Data tab, would either have caused an "Invalid ORDER BY specification" error or the table's rows would not be sorted by the primary key. This has been fixed. |
561813 | The MobiLink server could have crashed when using the -xo option ("specify network protocol and options for version 8 and 9 clients"). Monitoring pre-10.0.0 synchronizations would also have had erratic behaviour. These issues have been fixed. |
561816 | The Relay Server State Manage (rshost) would have crashed if its configuration file was missing or invalid, or if a non-switched command line argument was used (i.e. one that was not preceded with '-' in Unix, or '-' or '/' in Windows). This has been fixed. |
561820 | The iAS ODBC driver for Oracle could have leaked memory when fetching binary data (CLOB, BLOB, NCLOB, LONG VARCHAR, and LONG RAW) from an Oracle database. This problem would only have occurred when sending the fields as part of the MobiLink download stream to the remote. This has now been fixed. |
561825 | The PHP external environment did not expose all of the $_SERVER fields during an HTTP request, as specified by the CGI/1.1 specification. This has been fixed. |
561831 | The PHP external environment, when used in the HTTP context, was not sending the appropriate HTTP status code back to the client. This has been fixed. |
561839 | There was a possibility, although small, that a busy SQL Anywhere server may have truncated HTTP response data. This has been fixed. |
561989 | The Interactive SQL utility (dbisql) would have failed to launch on Windows machines when run as a console application, if a connection parameter was given and the parameter value contained a space. This has been fixed. |
562026 | Using the UltraLiteJ Database Load utility (ULjLoad) with the -a, -i or -f options may have caused the tool to crash or produce incorrect results. The rows loaded without the -i switch would still be synced to the server. The -a switch would not load schema information from an existing database file. The -f switch would crash the tool. These problems have now been fixed. |
562027 | When running on Sun SPARC systems, the MobiLink client (dbmlsync) would have complained about "missing transaction log files", if there were any offline transaction log files bigger than 2GB. This problem now been fixed. |
562037 | When using the UltraLiteJ Database Load utility (uljload) with the -d option, in combination with the -a option, in order to load data into an existing database with the schema information in it, no data was loaded into the database. This has been fixed. |
562039 | The start times for synchronizations reported by the MobiLink Monitor and the MobiLink Server, when used with the -vm option, could have been incorrect if the MobiLink Server had been running for several days. Also, the output for the -vm option could have been incorrect if a request used non-blocking download acks, and phase durations reported by -vm option could have been slightly different than phase times reported by the MobiLink Monitor. These issues have now been fixed. |
562083 | The MobiLink server could have silently ignored bad HTTP requests. In particular, subsequent requests received by MobiLink server B, for a session started in MobiLink server A, would have been silently ignored. The error was particularly likely to appear if an HTTP intermediary was misbehaving and sending different HTTP requests for the same session to different MobiLink servers. This has been fixed, and this case will now issue an error. |
562171 | The SQL Anywhere server generates "expression error" messages for generic semantical problems in queries. Under certain circumstances, the server could have generated an expression error with a parameter that did not point to the correct problematic part of the query.
For example, the following query: select manager_id, sum(emp_id), max(manager_id) over (order by manager_id rows between manager_id preceding and salary following) as max_mgr from employee where manager_id > 5 group by manager_id, salary, max_mgr would have resulted in an error "Expression error near 'employee.manager_id > 5'", rather than the more appropriate "Expression error near 'max(employee.manager_id) over( ... ) ... as max_mgr". The real problem with this query is that the alias 'max_mgr' cannot refer to a window aggregate expression, as the alias is part of the group by list. This problem has been resolved. |
562181 | The UltraLite M-Business component was missing the following methods:
Class SyncParms: String getPublications() setPublications( String publication_list ) These methods are used to set the publications that will be used for synchronization (publications control which tables get synchronized). The publications are specified as a comma separated string. Earlier versions of the UltraLite M-Business API used a "publication mask" to identify the publications for synchronization. A mask was an internal number representing a set of publications. The publication mask methods were removed in version 11.0, and these methods were meant to replace them. |
562216 | Using database files with empty filenames like ".db" or " .db" caused various problem. different kind of problems. Now, for database, dbspace, transaction log and mirror log files, the server no longer allows file names like this. |
562227 | Aggregates in sub-queries, containing outer references, were not always handled correctly. This could have resulted in:
- bogus diagnostics regarding misplaced aggregation - some illegal usages were not diagnosed - incorrect results in some cases This has been corrected. |
562235 | When a new column is added in the table editor, the column now defaults to allowing or prohibiting nulls, depending on the value of the PUBLIC allow_nulls_by_default option.
as well,changing a column's data type to a domain (either in the table editor or in the column property sheet) now updates the column's nulls setting to allow or prohibit nulls, depending on the chosen domain's nulls setting. If the domain does not explicitly allow or prohibits nulls, then the column's nulls setting is not updated. |
562236 | In some cases, client applications running on Solaris systems may have hung while communicating with the server through shared memory. Other symptoms may also have included communication errors between the client and the server. This was more likely
to happen on multi-processor machines. This has been fixed. |
562245 | Using the MobiLink file-based download to transfer files on Palm devices to a VFS volume, could have failed. The error reported would have been STREAM_ERROR_INTERNAL. On some devices, VFSFileSeek returns an EOF error when seeking to the end of file, but the seek actually succeeds. A work around for this problem has been implemented. |
562258 | On Windows 2003, and sometimes on Windows XP, it was possible to start both a personal server and network server which listened on the same TCPIP port. If this occurred, clients could unexpectedly, and unreliably, get "Database server not found" errors. This has been fixed As part of this change, network servers on Windows Vista and Windows 2008 no longer start a TCPIP listener on the 127.0.0.1:<port> address by default. Connections to this address are still accepted by the TCPIP listener which starts on the 0.0.0.0:<port> address. |
562318 | A column check constraint's property sheet did not show the constraint's column, while a table check constraint's property sheet showed a "Column:" label with an no column name. A boolean test on the constraint type was inverted. This has been fixed. |
562398 | Aggregates in sub-queries, containing outer references, were not always handled correctly. This could have resulted in:
- bogus diagnostics regarding misplaced aggregation - some illegal usages were not diagnosed - incorrect results in some cases This has been corrected. |
562414 | In exceptionally rare circumstances, the server could have hung during startup. This hang would only have occurred when the server was run on a multi-processor machine. This has been fixed. |
562456 | Changing a column's data type via its property sheet would have been reflected immediately in the Table editor when switching pages in the property sheet. As well, the change would not have been reverted if Cancel was clicked in the property sheet. This has been fixed. |
562534 | Executing a query of the form "select ... into #temp ...", or a query with a stored procedure in the FROM clause, may have caused the server to crash. This would have occurred if the statement contained a CONVERT or CAST function call to a user-defined type, or a WITH( column-name <user-defined type>, ...) clause. This has been fixed. |
562535 | The server may have crashed when trying to build a plan containing a hash filter. This has been fixed. |
562605 | If more than one of the dblocate filtering options (-p, -s, -ss) was used and a hostname or IP address was specified, only one was used. There was an implicit ordering and only the first of the ordering that was specified would have been used; the second and subsequent options would have been ignored. The ordering was:
hostname/IP address specified on command line -p -s -ss This has been fixed. If more than one of these options is specified, they are all now applied. |
562619 | Incompatible configurations could not have been used for connections. For example, a database created with shadow paging would not have permited a connection using a configuration that specified "at end" processing. This has been corrected. Now, the physical configuration from the database, not the configuration, is used when connecting to the database. |
562627 | SQL Anywhere supports the "UPDATE( colname )" condition that can be evaluated by trigger code to determine if the value of the specified column has been modified from its current value in the row. The server was failing to evaluate the condition correctly when the column value was modified internally during statement execution. As one example, if the user statement did not modify the column value, but a BEFORE trigger did, then the condition in an AFTER trigger failed to evaluate to TRUE when it should. This has been fixed so that the server will now evaluate the condition correctly, regardless of when the column value is modified, |
562656 | Attempting to fetch data from a proxy table, when connected using a non-DBA user, would have failed if the remote server was one of SAJDBC or ASEJDBC. A permissions problem on the global temporary table used to hold the rows fetched from the remote server has now been fixed in newly created databases. For existing databases, log in with a DBA user and execute the following statement:
grant select,insert,update,delete on dbo.omni_rset_fetch_table to PUBLIC |
562689 | Using the concatenation operator '+' with VARCHAR and UUID did not produce correct results. This has been fixed. |
562826 | When backing up a database with no transaction log, a client-side transaction-log only backup (i.e. using the Backup utility) would have caused the server to crash. A transaction-log only server side backup (i.e. using the BACKUP statement) did not cause a crash. Although a server side backup did not cause a crash, the SQL error that was issued in this case gave no indication as to what the failure actually was, i.e., it reported "Syntax error near 'backup option'". As well as fixing the crash, a more useful SQL error code/message for the server-side case is now displayed: "Error during backup/restore: No files are part of this backup". |
562827 | Using the concatenation operator '+' with VARCHAR and UUID did not produce correct results. This has been fixed. |
562829 | When querying a proxy table mapped to a remote ASE or Microsoft SQL Server table, if the remote table had a varchar(255) column, then fetching data from that column would have resulted in data truncation. This was due to an off-by-one error, which has now been corrected. |
562833 | When the MobiLink Server had a large number of synchronizations running concurrently (in the range of 10000), a MobiLink Monitor connected to it could have become unresponsive, and not displayed new information in a timely manner. This has been fixed. |
562838 | Applications using the Broadcast Repeater utility were not able to find servers running on Linux machines on a different subnet using broadcasts. The server's broadcast response was being malformed. This has now been corrected. |
562951 | If a database was created with the DBA user specified as "dba" (or Dba, DBa, DbA, dBA, dBa, dbA), unloading the database would have failed. This has been fixed. |
562957 | The server may have crashed when executing a Group By Indexed strategy for a SELECT
statement. This has been fixed. |
562962 | The QAnywhere message transmission status code which formerly displayed as "Local", is now displayed as "Do_not_transmit". This change was made to match the documentation. |
562971 | Attempting to export data from a SQL Anywhere database into an UltraLite database would have failed if a value being exported was null and the target column in the UltraLite database was a unique identifier column. This is now fixed. |
562972 | Attempting to export data from a SQL Anywhere database into an UltraLite database could have failed if a value being exported was a Date. This would happen when the option return_date_time_as_string was set to 憃ff�. This is now fixed. |
563040 | If an application used the CURRENT TIMESTAMP constant in an insert into a proxy table, there was a possibility that the server would have crashed. Note that the remote server needed to be either ASE, SQL Server, Oracle or generic ODBC, for this problem to occur. This problem has now been fixed. |
563117 | When the Relay Server Outbound Enabler (rsoe) was started with http instead of https (i.e. -cr https=1;... ), it would not have been able to communicate with a newly added relay server. The workaround is to restart rsoe. This has been fixed. |
563118 | If a communication error occurred at an early stage of the Relay Server Outbound Enabler (rsoe) attempting to establish the up channel with the Relay Server, the RSOE would have continued to fail to reconnect forever. This has been fixed. The workaround is to restart the RSOE. |
563132 | An adddition fix was needed to avoid a boundary mis-routing problem introduced by the original fix for Engineering case 561378. |
563143 | When a QAnywhere consolidated database contained a large number of messages that satisfied a delete rule, and the MobiLink server was shut down, the server would not have actually terminated until all messages had been deleted, which could have been a very long period of time. When delete rules are executed, old messages are deleted in batches of 100 at a time until there are no more messages satisfying the delete condition. However, there was no mechanism to stop the execution of delete rules on MobiLink server shutdown. Such a mechanism has now been added for delete and archive rules. |
563171 | The MobiLink server would have failed synchronizations from version 10.0.1 and later clients, when they connected via HTTP. The error would have been 'HTTP error 404' (not found), and most clients would have reported this as the error. This has been fixed. |
563202 | The Interactive SQL utility (dbisql) would have reported an internal error when attempting to use the Import Wizard to import data from a SQL Anywhere database while connected to an UltraLite database. This has been fixed. |
563319 | When creating or upgrading a database, the server looks for a file called authenticate.sql, which is used to set the database_authentication option. The file should reside in the <install_dir>\scripts directory, but the server would continue to look elsewhere if it was not found there. This has been fixed so that it looks for this file only in the scripts directory. |
563344 | In certain situations, the server could have crashed while processing a hash join. This has been fixed. |
563352 | Prebuilt binary libraries for PHP 5.2.8 have now been added. |
563394 | Execution of LOAD TABLE statement will now use asynchronous IO in order to improve performance. Actual performance gains will vary depending on hardware and database configuration but tests have shown an approximate doubling of performance. Asynchronous IO is only used when accessing a local data file (not a client file, etc). |
563404 | Synchronizations could have failed with protocol errors when some, but not all, of the parameters for a delete command in the .NET irect row API were set to DBNull.Value or null. This has been fixed so that an exception will be thrown when attempting to execute the command. |
563405 | The MobiLink server could have crashed if a IDataReader returned by MLUploadData was not closed. If the server didn't crash it would have leaked memory. The crash would have occurred at a random time after the synchronization completed. This has been fixed.
Note that enclosing the use of the IDataReader in a 'using' block will automatically close it. |
563499 | When processing a GROUP BY statement with a specific number of aggregates, it was possible for the server to crash. This has been fixed. |
563533 | Transactions could have failed with the error SQLSTATE_PREEMPTED being incorrectly returned to the application. |
563535 | Worker threads are created to process the stream data from clients, and perform the database activities for each synchronization. Two sets of workers were being created, one set for pre version 10 clients, and another set for current clients (version 10 and later). Now, when the -xo switch is not specified, the MobiLink server no longer creates the threads to process the old client requests. |
563541 | The server could have used an incorrect selectivity estimate for a predicate containing IS [NOT] TRUE, IS [NOT] FALSE, or IS [NOT] UNKNOWN. This could have lead to ineffecient access plans. This has been fixed. |
563545 | When executing several remote queries, if the remote queries contained NChar variables in the WHERE clause, then some of the queries may have returned an incorrect result. This problem has now been fixed. |
563592 | When run on Windows systems, both the MobiLink server and the Relay Server Outbound Enabler (RSOE) could have held onto sockets for longer than necessary. This would have caused both to use up sockets faster than necessary, possibly exhausting system socket limits. With the RSOE, needless timeouts could also have occurred. This behaviour was particularly evident with non-persistent HTTP/HTTPS connections, and appeared to be very much OS and machine dependent. This has been fixed. |
563693 | n some cases, it was possible for the server to report an error when processing a statement that explicitly, or implicitly, used sys.dummy. The error would have been reported as SQLCODE -300: '*** ERROR *** Assertion failed: 106105 (11.0.x.xxxx) "Unexpected expression type dfe_FieldOrigRID while compiling"'
For example, the following statement could have caused this behaviour: select TE1.xidx from (select * from sys.dummy) as D, TE1 where exists ( select * from TE2 where TE2.x = TE1.xidx and TE2.xidx <= 1 ) For the incorrect behaviour to have occurred, the statement must have had a reference (explicit or implicit) to sys.dummy, where the dummy_col field was not referenced, and there must have been an exists join optimization used, where a generated distinct on rowids was needed. This has now been fixed. |
563736 | If an ODBC DSN explicitly specified an isolation level, and that DSN was then used within the Interactive SQL utility (dbisql), then the isolation level specification would have been ignored. This problem has been fixed. |
563832 | The Windows makefiles for the PerformanceFetch, PerformanceInsert, and PerformanceTransaction SQL Anywhere samples could not have been used to build the sample applications, as they referenced directories that no longer existed in the version 11.0 installation. This has now been fixed. |
563835 | The server uses column statistics to aid with query optimization. The statistics are stored in the database catalog and are loaded into memory on demand, and unloaded when not used for a period of time. Under very rare circumstances, when running on multi processor systems, it was possible for the server to think that no statistics existed for a specific column. The problem was likely to have been self correcting over time and there were no correctness issues. However, it was possible that the absence of column statistics may have caused some queries to run inefficiently. This problem has been resolved. |
563839 | The SQL Passthrough feature was originally written as a plugin to the MobiLink server in Java. A number of issues were found, including using extra database connections, which needed to be addressed. The feature has now been re-written as a core part of the MobiLink server, so it no longer requires a Java VM on startup.
When SQL Passthrough was being used, ie. when there was at least one row in the the ml_passthrough_script table, the MobiLink server could have used twice the number of consolidated database connections than necessary, (ie. up to twice the -w value). When creating these extra connections, the MobiLink server would, during a synchronization, make another consolidated database connection, perform some work, disconnect that connection, then resume the synchronization. In other words, penalizing each synchronization with the time/cost of connecting and disconnecting to the consolidated database. Besides the performance and database connection penalties, these connects/disconnects could also have made the MobiLink server reach OS socket limits faster, potentially causing failures. Most MobiLink clients (ie. dbmlsync, dbtools sync interface, dbmlsync ActiveX integration component, and all UltraLite runtimes -- except UltraLiteJ, which doesn't support SQL Passthrough) have been updated as part of this fix. This change will cause newer clients to fail if run against an the 11.0.1 GA server. Thus MobiLink clients of version 11.0.1 2156 or later will require a MobiLink server of version 11.0.1 2156 or later. |
563844 | The MobiLink client (dbmlsync) would have occationally reported the error:
Failed writing remote id file to '<filename>' Despite the error, synchronizations would have continued successfully, and the remote id file would have appeared on the disk in good order. This problem has been fixed. |
563848 | If an ODBC application called SQLColAttribute() on a long varchar, long nvarchar or long binary column, with an attribute value of SQL_DESC_DISPLAY_SIZE, then the ODBC driver would have incorrectly returned the value 65535. This problem has been fixed and the driver now returns the value 2147483647. |
564010 | The server may have crashed if a floating point value was converted to a string, and then subsequently cast to a string with a too small size. This has been fixed. |
564025 | Messages generated by the MESSAGE ... TO EVENT LOG statement were not printed to the system event log when the server was started with the -qi switch. This has been fixed. |
564046 | The changes for Engineering case 559413 introduced a problem where attempting to cancel a Java call could have caused the Jave VM to stop responding. This has now been fixed. |
564066 | When an HTTP connection that had made an external environment call was closed at the exact same time that the external environment exited, there was a chance that the server would have crashed. This problem has now been fixed. |
564277 | If a simple statement was processed and bypassed the optimizer, it was possible for the server to choose an index that was less efficient than the best one, leading to poor performance. This problem would have occurred if the WHERE clause contained equality and range predicates. This has been fixed.
A workaround can be achieved using the following command line switch on the server start line or the "OPTIONS(FORCE OPTIMIZATION)" in the query text. -hW AllowBypassCosted |
564304 | The server may have crashed when simple SELECT statements are executed against the utility database. This has been fixed. |
564435 | In an ADO/OLE DB application, when a UNIQUEIDENTIFIER (or GUID) was used as a parameter in a query, an error message like "Cannot convert 0x to a uniqueidentifier" may have resulted, or the query may simply have failed to return any results. This problem has been fixed.
Sample schema: create table uuidtable( pkey int, uuid uniqueidentifier, stringform uniqueidentifierstr ); Sample query: select * from uuidtable where uuid = ? The following .NET/OLE DB example shows typical uniqueidentifier parameter binding: OleDbCommand cmd = new OleDbCommand(txtSQLStatement.Text.Trim(), _conn); OleDbParameter param1 = new OleDbParameter(); param1.ParameterName = "@p1"; param1.DbType = System.Data.DbType.Guid; cmd.Parameters.Add(param1); cmd.Parameters[0].Value = new Guid("41dfe9f9-db91-11d2-8c43-006008d26a6f"); |
564472 | The Interactive SQL utility (dbisql) could have reported an internal error if, when connected to an UltraLite database, the text completer was opened in a SELECT statement and the caret was immediately after a period. This has been fixed. |
564475 | When in the new Watch dialog, when selecting 'user' or 'sync' as a property to set a condition for, if 'Add' was pressed, nothing would have happened. This has been fixed. |
564479 | When run on BlackBerry devices, the download of a large download_delete_cursor of a table with many columns, UltraLiteJ could have reported an out of memory error when the BlackBerry ran out of object handles. This would have occurred even when many of the deletes were to be ignored by the client. The handles used by a download are a factor of the number of rows times the number of columns in each row. This has been fixed. UltraLiteJ normally applies the download after all rows have been received, however, now it immediately rejects deletes for non-existant client rows, and reduces significantly the handles used by all other download deletes. In an ideal situation, the download_delete_cursor script would reduce the number of rows sent by not sending any download deletes if the last download timestamp was the newer value, or if the row corresponding to the delete was never on the client (creation date greater than last download timestamp). |
564639 | When MobiLink servers with QAnywhere messaging were set up in a server farm, push notifications could have stopped working in some circumstances. In particular, if the MobiLink server(s) handling synchronization requests from QAnywhere clients were different from the server that initiated the push notification (as would have been the case if the notifications were the result of outbound JMS messages in a server running a JMS connector), only the first push notification would have been sent, and no further notifications would have been sent. This has now been fixed.
It should be noted that, in a MobiLink server farm deployment, there could be a latency of at most the automatic rules evaluation period to send a push notification to a client as a result of an outbound message to that client. This is due to scalabilty factors in a situation where there is a high volume of outbound messages being processed by the MobiLink server. |
564677 | A failed COMMENT ON PROCEDURE statement could have prevented the procedure from being dropped. This has been fixed.
Note, a workaround is to stop and restart the database before attempting to drop the procedure. |
564679 | An INPUT ststement, with multiple references to the same host variable, could have been handled incorrectly when the leftmost reference was the host variable by itself in the VALUES list, and another reference occurred in an expression that was more complicated than just the host variable by itself.
For example, INPUT INTO tab( pk, col1 ) VALUES( :hv, 100 - :hv ) This has been fixed so that the final substitution for non-leftmost host-variable references is delayed so that the type of the first reference can be established. |
564701 | Executing a CREATE TABLE IF NOT EXISTS ... statement would have failed if the table existed, but had not yet been used since the database was started. This has been fixed. |
564828 | Following a cursor OPEN for a simple select statement that bypasses optimization, the SQLCOUNT value could have been incorrectly set to 0, when the number of rows was to be exact (ie. Row_counts was 'on'), and the number of rows was estimated to be 0 . This has been fixed so that the correct setting is now -1 in these cases. |
564829 | When the MobiLink server was listening for HTTP and/or HTTPS requests, and a load balancer or any other utility (eg. the RSOE) performed a simple TCP/IP connect, then an immediate close without sending any bytes, the MobiLink server would have taken four minutes to time out the socket. If too many such connections happened in a short time, the MobiLink server could have run out of sockets earlier than necessary. This has been fixed. |
564857 | In very rare circumstances, SQL Anywhere .NET provider could have crashed the work process in IIS. This problem has been fixed |
564866 | An INPUT ststement, with multiple references to the same host variable, could have been handled incorrectly when the leftmost reference was the host variable by itself in the VALUES list, and another reference occurred in an expression that was more complicated than just the host variable by itself.
For example, INPUT INTO tab( pk, col1 ) VALUES( :hv, 100 - :hv ) This has been fixed so that the final substitution for non-leftmost host-variable references is delayed so that the type of the first reference can be established. |
565050 | The Import wizard could have crashed if the "Next" button, on the page which asks for a destination table name, was clicked before the page has initialized. This has been fixed. |
565054 | Calling the ODBC functiom SQLColAttribute( ..., SQL_DESC_BASE_COLUMN_NAME, ... ) could have incorrectly returned the correlation name, instead of the base column name. This has been fixed so that the base column name is returned. If there is no base column, the column alias is returned.
Note, this fix requires both an updated ODBC driver and server. |
565061 | Dbisqlc would have reported an error, and then crashed, if there was a version mismatch with the language DLL (e.g., dblgen11.dll). This problem has been fixed. |
565097 | The metadata returned for a query with a UNION operator, could have been incorrect. This has now been corrected |
565102 | If an application executed a PHP external environment procedure, and the PHP procedure subsequently called exit, then the server would have taken up to 5 seconds to return control to the application, and would then have displayed a dropped connection message in the console. This problem has now been fixed. |
565104 | The php process may have crashed after completing a php external environment call. This has been fixed. |
565110 | When binding a column in ODBC, the column type, a buffer and a length are specified. For static types (int, long, double, time, etc) the ODBC driver ignores the length specified because the length is constant. The ODBC driver should have been treating SQL_GUID columns as static as well, but was incorrectly respecting the length specified, which sometimes resulted in truncated values. This has been fixed. |
565232 | In very rare circumstances, if a complex view which cannot be unflattened (e.g., a grouped view) was used multiple times in the same statement, the optimizer may have generated an access plan which computes an incorrect result set. One of the conditions for this to have occurred was for a predicate of the form " V.X theta [ANY|ALL] ( select aggregate(e) from V as V1 where ... )" to be present in one of the query blocks of the statement. This has been fixed. |
565244 | The SQL Anywhere HTTP server will generate error responses that may be classified into two categories: System and User error messages. System error messages are generated for the following conditions: protocol errors, time-out and cancel. User error messages are generally caused by a SQL error. It is recommended that the application handle SQL errors within an EXCEPTION clause and render application specific error responses. By default a User error message is output in the body of the response as HTML or plain-text when the SERVICE is configured as TYPE 'HTML' or 'RAW' respectively. User error messages may have been returned using chunk-mode transfer encoding, while keeping the connection alive. In the event that the web service encountered an error when outputting its response, or was explicitly canceled by dropping its database connection, the response message was prematurely truncated. A change has been made to make the default behaviour more consistent, SQL errors explicitly handled by the application are not affected by these changes. By default System and User error messages:
- do not use chunk mode transfer encoding - explicitly set 'Connection: close' response header - shutdown the HTTP connection once the error message is sent Any pending (pipelined) requests following the request encountering the error are terminated. Also, an error response is guaranteed to close the HTTP connection. Interrupting a response (already underway such that the response headers have already been sent) will truncate the output and close the HTTP connection. User error messages that are explicitly caught by the EXCEPTION clause may also CALL SA_SET_HTTP_HEADER('Connection', 'close') prior to issuing the error page to force the HTTP connection to close after the response has been sent. |
565255 | A multi-threaded embedded SQL application could have crashed if db_fini was called with the last active SQLCA at the same time as db_init was called with another SQLCA. The crash was very timing dependent. A race condition has been corrected. |
565257 | In rare situations, access to a mirrored database could be blocked, making the mirroring servers appear to hang. This has been fixed. |
565283 | When evaluating predicates outside of DML statements (for example, in SET or IF statements in procedures, triggers, events, or batches), the server could have improperly treated UNKNOWN as FALSE. For example, the following statement should set @str2 to NULL, but it was incorrectly being set to FALSE:
SET @str2 = if NULL like 'a' then 'TRUE' else 'FALSE' endif; This has been fixed. |
565286 | The server could have released locks on rows prematurely. Data corruption, crashes, unexplained deadlocks and incorrect query results were all possible. For this to have occurred though, there must have been a significant amount of contention for a particular row. This has now been corrected. |
565441 | Changes have been made to the MobiLink client to accomodate the changes made to the MobiLink server for Engineering case 563839. Therefore, running the 11.0.1 GA MobiLink server with SQL passthrough enabled (i.e. rows have been added to the ml_passthrough_script table), with 11.0.1 MobiLink clients (dbmlsync) from an EBF will cause synchronizations to fail with the message:
This client is newer than your MobiLink server. You must upgrade your MobiLink server before you can synchronize. In order to resolve this problem, the MobiLink server must be upgraded as well. As a temporary work around, SQL Passthrough can be disabled by deleting all the rows in the ml_passthrough_script table and restarting the Mobilink server. |
565447 | Index corruption was possible if an index contained many (more than 64,000) consecutive entries that differed by the same constant amount. A check to ensure that the count value does not overflow when merging pages was missed. This has been corrected. |
565474 | An HTTP client procedure may have hung when receiving chunk mode encoded data. For this problem to have occurred, the client needed to identify itself as an HTTP/1.1 version client (by default it identifies itself as HTTP/1.0). This may be done in the following ways:
SET 'HTTP(VER=1.1)' TYPE 'HTTP:POST' and length of the values for input parameter equal or exceed 8192 bytes TYPE 'HTTP:POST' SET 'HTTP(CH=ON)' This has been fixed. |
565624 | Under certain non-deterministic conditions, a server-side backup could have blocked other tasks, such as remote procedure calls, HTTP requests, and external environments from running. As well, in certain very rare and timing sensitive conditions, it is also possible that a backup could have hung indefinitely while starting. Both of these problems have now been fixed. |
565651 | If an application executed a query like "select ... for t where c = v', where c was a char or varchar column, v was as variable of type nchar or nvarchar, and t was a proxy table to a remote table in Microsoft SQL Server, then the query would have failed with SQL Server reporting the error "The data types varchar and ntext are incompatible in the equal to operator." This problem has now been corrected. |
565663 | The German (DE), French (FR), and Chinese (ZH) language help files were missing for Sybase Central 6.0.0. This has now been corrected. |
565664 | When run on machines with only one network adapter, checking the box "Only show local servers" in the "Find Servers" dialog would not have displayed local servers. This has been fixed. |
565667 | The methods QAManagerBase.SetMessageListener and QAManagerBase.SetExceptionListener would have throw a QAException with error code COMMON_NOT_OPEN_ERROR, when called before an Open() call. This has been fixed. Now, SetMessageListener and SetExceptionListener can be called any time after the creation of a QAManagerBase object, as in earlier versions of QAnywhere. |
565678 | When the server was started with the -fips command line option ('All strong encyption done using FIPS approved modules'), attempting to create an unencrypted database would have failed with the error "The simple algorithm is not available in FIPS mode". This has been fixed |
565835 | The server may have crashed if the procedure debugger's connection, and the debugged connection, stopped at the same time. This has been fixed. |
565837 | When using the INPUT statement with dbisqlc, column inputs may have failed if the length of the input record exceeded the capacity of the input buffer. This failure could have been signalled by a conversion error, or it could have gone undetected (the remaining columns having been truncated or set to the null value. This problem has now been fixed. |
565839 | If an application used one of the connection scoped external environments (i.e. PHP, PERL or one of the external C environments) and the SA server was running on a non-Windows platform, then there was a chance the external environment process would not have gone away once the application disconnected. This problem was introduced by the changes made for Engineering case 559372, and has now been fixed. |
565844 | When using MobiLink servers in a server farm (by specifying the -ss command line option), servers could have crashed and/or unexpectedly caused failed synchronizations. The problem was more noticeable in environments with poor network quality or where retries after synchronization failures occurred very quickly after the original synchronization. This has been fixed. |
565874 | If an alias or correlation name was entered in the Query Editor, and then the "OK" button was clicked while the editor for the alias or correlation name was still open, the editor's value could have been ignored. This has been fixed.
Note, a workaround is to press ENTER after typing in the alias/correlation name, and then click the "OK" button. |
565880 | If an application used either the C_ODBC32 or C_ODBC64 external environments, then the server may have reported a connection dropped error when the application disconnected. This problem has now been fixed. |
565891 | When run on Unix systems, the server would have crashed or hang if a client application attempted to connect and disconnect in a tight loop. Another symptom may have been that the client would have received the following error:
-832 Connection Error: Found server but communication error occurred. For this to have occurred, the connection must have been via shared memory, the application must have previously connected and disconnected successfully so as to unload the client libraries (ODBC, DBLIB, or DBCAPI), and the time between the last disconnect and the new connect was within 10ms. This has been fixed. |
566033 | When running the SQL Anywhere Deployment wizard, the MSM installer type option actually created an MSI installer type. This has been fixed. |
566043 | When working with .NET data sources and the OLEDB adapter using Visual Studio, the Configure Dataset with Wizard dialog may have resulted in "Dynamic SQL generation is not supported against a SelectCommand that does not return any base table information." or theTableAdapter Query Configuration Wizard dialog may have resulted in "Failed to get schema for this query". The SQL Anywhere OLE DB provider has been corrected. |
566046 | If the maximum value in an autoincrement column after performing a LOAD TABLE statement was a negative value, the SYSTABCOL.max_identity value for that column would have been set to a negative value. This would have caused subsequent inserts into the table, which did not provide a value for the autoincrement column, to generate errors. This situation could have arisen when rebuilding a database having a table with an autoincrement column and only negative values in the column. Note that the use of negative values with autoincrement columns is discouraged. This has been fixed so that the max_identity value in this situation will now be set to zero after the LOAD TABLE statement completes. |
566058 | Under very rare circumstances, a query plan using a hash join in an EXISTS subquery could have caused the server to crash. This has been fixed. |
566071 | If an application used either the C_ODBC32 or C_ODBC64 external environments, then returning result sets from the external environment could have taken a long time, and resulted in thread deadlock errors due to the fact that the C_ODBC external environments were not turning autocommit off. This problem has now been fixed. |
566165 | In very rare circumstances, the server could have crashed if the procedure debugger run a 'step into' or 'step over' request at the end of a procedure or trigger. This has been fixed. |
566207 | The QAnywhere plug-in for Sybase Central now supports the connection retry command line options for the Agent (see Engineering case 561067). |
566372 | Data inserted into a compressed column may have caused a decompression error when retrieved. This would only have occurred if the data was already compressed so that compression would result in increased data length, the column was created with the NO INDEX clause, and the data length was very close to a multiple of 8 times the database page size. An error in calculating the maximum possible length for the compressed data has been fixed. |
566450 | When executing queries involving index scans, the boundary values for the scans could, in some cases, have been evaluated incorrectly causing the queries to fail to return any results. This has been fixed |
566651 | A SERVICE may invoke a procedure that explicitly sets the 'Connection' and 'Content-Length' HTTP response headers using the SA_SET_HTTP_HEADER system procedure. The setting of the 'Content-Length' was ignored, and the setting of 'Connection:close' implicitly disabled chunked-mode transfer encoding. Changes have been made to provide greater control over SQLAnywhere HTTP server responses. The following is a summary of the new behaviour:
Client is HTTP/1.0: The server does not support Keep-Alive and Chunk-mode operation for this HTTP version. By default the server never sets the 'Transfer-Encoding' header and always sets 'Connection: close' header, shutting down the connection once the response has been sent. A SERVICE procedure may set the 'Content-Length' header but setting the 'Connection' header is ignored. Client is HTTP/1.1: By default the server responses use chunked-mode transfer encoding and automatically set the 'Transfer-Encoding: chunked' header. If the SERVICE procedure explicitly sets a 'Content-Length' header to some value, then the 'Content-Length' header is sent in place of the 'Transfer-Encoding' header and the response body is not chunk-mode encoded. Note: It is an error for a SERVICE procedure to set both a 'Content-Length' and 'Transfer-Encoding' header. The server will assume 'Connection: keep-alive' if the client does not send a 'Connection' request header. If a client explicitly sends a 'Connection: close' request header and/or the SERVER procedure explicitly sets 'Connection: close' the server will shutdown the connection once the response has been sent. Setting Content-Length In most cases data will need to be buffered in order to calculate the Content-Length. Therefore, it is recommended to use chunk-mode transfer encoding whenever possible. If 'Content-Length' must be set, then care must be taken to ensure that the result-set is not character set translated when the response is composed. It is recommended that the 'CharsetConversion' http option is set to off when returning textual data. Also, setting 'Content-Length' should only be done within a TYPE 'RAW' SERVICE since some services (i.e. 'HTML', 'JSON') add content to the response. A check has been added to ensure that the actual length of the response matches the value of 'Content-Length' header. If the values do not match then the server will shutdown the connection, once the response has been sent, regardless of whether or not a 'Connection: keep-alive' response header has been sent. |
566673 | Exporting data from a SQL Anywhere database to a MySQL table could have failed if the Interactive SQL utility (dbisql) was asked to create a table for the data, and the data contained any of the following SQL Anywhere types: TINYINT, UNSIGNED SMALLINT, UNSIGNED INT, UNSIGNED BIGINT, or TIMESTAMP. The mapping of data types between SA and MySQL was incorrect, this has been fixed. |
566685 | If a simple statement was processed by the server and bypassed the query optimizer, it was possible for the server to choose an inefficient plan if the statement contained a specific form of contradiction. For example, the following statement could have generated a plan that would have read all rows from TRange:
select * from TRange where x1 = 3 and x2 between 2 and 1 A more efficient plan would recognize that the BETWEEN predicate is never true (2 > 1), and uses a prefilter to avoid fetching any rows from TRange. This has been fixed so that the more efficient plan is selected. |
566688 | Prebuilt binary libraries for PHP 5.2.9 have now been added. |
566689 | Importing a table into an UltraLite database may have failed if it contained NCHAR or NVARCHAR columns. This has been fixed so that the importer converts NCHAR and NVARCHAR columns into VARCHAR columns. The operation may still fail if the UltraLite database cannot represent the characters being imported, so this is guaranteed to work only if the UltraLite database is created with a UTF8BIN collation sequence. |
566693 | On certain processors other than x86 and x86_64 (64 bit HP-UX for example), the server may have crashed in extremely rare conditions when using a connection number to get connection information. Examples of getting this type of connection information include getting a connection property for another user, or calling sa_conn_info. This has now been fixed. |
566703 | The PHP external environment was passing strings as LONG VARCHAR, which was causing character set conversion between the server and the PHP process. This would have corrupted binary data. This has been corrected so that all strings are now passed as LONG BINARY, which means that no character set conversion will be done. |
566705 | In the PHP external environment, calling phpinfo() would have showed no useful information for the sqlanywhere_extenv module. This has been fixed. Now, server version information, as well as the names of the server, database, and user are displayed. |
566711 | The PHP external environment process would have crashed if the system procedures sa_http_php_* were called from the Interactive SQL utility, or anywhere outside of an HTTP server request. This has been fixed |
566805 | Creating a string object shorter than, but within roughly a database page size of, the 2^31-1 (2GB) upper length limit could have incorrectly resulted in the SQL error MAX_STRING_LENGTH_EXCEEDED. This has been fixed. |
566828 | Errors that occurred while running a SQL passthrough script in schema-diffing mode were not being marked as critical, which could have caused the database schema to become corrupted. This has been fixed. |
566830 | It was not possible to export NUMERIC values to a new MySQL table if the precision of the source column was greater than 15. This has been fixed.
Note that exporting data into an existing table did not have this problem. |
566957 | The server may have crashed when executing a DML statement that modified tables in an additional dbspace while a lazy checkpoint was in progress. This problem was introduced by the changes for Engineering case 547392, and has now been fixed. |
566970 | When rebuilding a QAnywhere database, the reload of the ml_qa_status_history table could have failed with the error: "No primary key value for foreign key". This has been fixed. |
566986 | The version of OpenSSL that is used in the RSA implementation on the Mac has been upgraded to version 0.9.8k. This was done because of a bug in OpenSSL, described here:
http://www.openssl.org/news/secadv_20090325.txt. Note that only the third bug listed affected SQL Anywhere, and only on 64-bit Mac. |
567017 | When using the SQL Anywhere Support utility to check for updates (dbsupport -iu), it may have returned "Error checking for updates. Please try again later." Subsequent retries by the same dbsupport instance would also have failed. A counter variable was not being reset. This has now been fixed. |
567157 | In very rare circumstances, the server could have crashed during startup while recovering a database that used a mirror transaction log file. This has been fixed. |
567163 | If an application attempted to start an external environment on a server that was busy stopping or starting external environments for other connections, there was a chance the server would have returned a thread deadlock or 'main communication thread not found' error. There was also a chance, although small, that the server would have crashed in this situation. This problem has now been fixed. |
567222 | Previous releases of QAnywhere relied on timestamp based synchronizations for message transmission. As a result, modifying the system time on a device could have interfered with the QAnywhere synchronization scheme, and in some cases caused QAnywhere to cease message transmission. This synchronization scheme has now been replaced with a progress counter based scheme in order to improve the reliability of synchronizations by removing the dependency on the device system clock. |
567328 | When using an UltraLiteJ database with auto checkpointing and persistent indexes, if two connections were open on separate threads it was possible that changes committed to the database by the second connection may have been lost, and space in the database lost. This would have occurred when one connection was synchronizing (Connection.synchronize()) and the second connection was commiting changes to the database (inserts, updates and/or deletes), and the application terminated abnormally (power lost, crash). If the Connection.synchronize() call completed successfully, or with an ULjException, changes would not have been lost. This has now been fixed. |
567336 | If response headers were added, modified or deleted by the external environment, the (calling) SQL procedure had no way of inspecting and identifying changes to the response headers. This deficiency has been corrected by adding the functions HTTP_RESPONSE_HEADER( header_name ) and NEXT_HTTP_RESPONSE_HEADER( header_name ) for value retrieval and iteration of response headers. Response headers may be modified directly within a SERVICE procedure by calling SA_SET_HTTP_HEADER() or may be modified through an external environment process such as a PHP call through via SA_HTTP_PHP_PAGE.
The usage semantics of HTTP_RESPONSE_HEADER() and NEXT_HTTP_RESPONS_HEADER() are the same as for HTTP_HEADER() and NEXT_HTTP_HEADER() respectively, which are used to inspect the request HTTP headers. |
567347 | If an application connected to a server via Open Client, using a newer version of Open Client 15, then it was likely that cancelling a request would have given a protocol error on the next request to the server. This problem has now been fixed. |
567361 | On some non-Windows platforms, pressing CTRL+C when the Interactive SQL utility (dbisql) was running in console mode could have caused spurious error messages which reported an unexpected signal 11, or "SIGSEV" error. This has been fixed so that these messages no longer appear when CTRL+C is pressed. |
567409 | If a CREATE TABLE statement was executed using EXECUTE IMMEDIATE and a declared temporary table with the same name already existed, an error was not given. This has been fixed. |
567417 | The DBLib client library could have crashed if there was a language resource problem, such as a missing language dll or .res file. In order for this crash to have occurred, db_init must have been called at least twice, and then another dblib call must have been made (such as db_string_connect or EXEC SQL CONNECT). This has been fixed, and db_init will now return 0 on language resource problems. |
567427 | If a transaction running under snapshot isolation attempted to update or delete a row that had been deleted and committed by another transaction, the update or delete would have failed with the wrong error. Typically the error would have been "Unable to find in index 't' for table 't' (SQLCODE: -189; SQLSTATE: WI005)", or it could have failed silently. This has now been fixed. |
567541 | As a result of changes made for Engineering case 545640, SQLAnywhere DISH services were not sending HTTP response headers. This has been fixed. |
567543 | If the WHERE clause of a query block contained many predicates using host variables, it was possible that the PREPARE or OPEN times would have been unnecessarily long. The server was not recognizing the two expressions with host variables were the same. his has been fixed. |
567556 | If a SQL Remote user was copied to the clipboard and the Message Types tab was selected, and then right-clicked within the right pane, a Paste menu item would have been shown. This menu item would never have been enabled after a SQL Remote message was copied to the clipboard. This has been fixed so that the menu item is no longer present. |
567570 | It was possible for the server to enter a loop while processing some statements that included an implicit or explicit use of the table SYS.DUMMY. This has been fixed. |
567590 | The SQL Anywhere Monitor was setting redundant HTTP headers which would have caused the browser-based interface to function incorrectly when using SSL on Internet Explorer. This has been fixed by removing the redundant HTTP headers. |
567699 | There were two scenarios where non-collected metrics could have been displayed by the SQL Anywhere Monitor. The two scenarios were:
- If a user was viewing a tab with only one metric on it, went to administration and disabled collection of that metric, and went back to the monitoring tab, that metric's graph would still have been displayed, even though the tab itself was hidden. - If a user disabled collection of a metric that was displayed on a tab with several other metrics, the disabled metric would still have been displayed on the tab along with all the other metrics. These have both been fixed so that only the collected metrics are now displayed. |
567754 | When providing a list of DER-encoded trusted root certificates to a MobiLink client for TLS synchronization, the client only accepted the first item in the list and ignored the rest. There was no problem if the list of certificates was PEM-encoded. This has been fixed.
Note that this problem affected all MobiLink clients except UltraLiteJ. |
567778 | Some of the files required to enable Windows Accessibility features were being installed in the wrong directory. This could have resulted in the Administration tools (eg Sybase Central)not running. This has been fixed. |
567790 | Incorrect results, including bogus error messages, could have been obtained when aliases (from the SELECT list) were referenced in a GROUP BY clause. This has been corrected. |
567794 | If the MobiLink Server was connected to an Oracle consolidated database, and an event was defined that called a stored procedure within a package, it was possible for a crash to have occurred in the iAnywhere Oracle ODBC Driver, which would in turn crash the MobiLink Server. This problem has now been fixed. |
567800 | If an alert email was sent that contained non-ASCII characters (i.e. multi-byte characters), this email would have arrived mangled if the machine running the SQL Anywhere Monitor was using a single-byte character set. This problem has now been fixed. |
567906 | The MobiLink server could have crashed when multiple -x options were specified on the command line, with at least one being HTTP and another being HTTPS. This could have happened, for example, when a VPN connection was created or dropped in the middle of a non-persistent HTTP/HTTPS synchronization, and the network intermediaries were set up such that one path resulted in HTTP and the other resulted in HTTPS. This has been fixed. |
567932 | Client-side certificates can now be used to authenticate MobiLink clients to third party server and proxies. The following two synchronization parameters have been added to provide support for this feature:
identity - Indicates the file that contains the client's identity. An identity consists of the client certificate, the corresponding private key, and, optionally, the certificates of the intermediary certificate authorities. This parameter is equivalent to MobiLink server's 'identity' parameter. identity_password - An optional parameter that specifies the password used to encrypt the private key found in the identity file. It is only required if the private key in the identity file is encrypted. This parameter is equivalent to MobiLink server's 'identity_password' parameter. Note that MobiLink clients cannot authenticate directly to the MobiLink server using client-side certificates. They can only be used to authenticate to third-party servers and proxies which have been configured to accept client-side certificate authentication and are sitting between the client and MobiLink server. Also note, this feature is not supported in UltraLiteJ, and because of ECC compatibility issues between different versions of Certicom's Security Builder libraries, it is also not supported when using ECC TLS. It is only supported for RSA TLS. |
567942 | If a query was processed using a parallel execution plan, it was possible for the statement to exceed the setting of the Max_temp_space option by a factor of the number of branches in the plan. This has been fixed. |
567944 | Incorrect results, including bogus error messages, could have been obtained when aliases (from the SELECT list) were referenced in a GROUP BY clause. This was corrected. |
568091 | Under rare circumstances, if starting a database that truncates the transaction log at a checkpoint (i.e., WITH TRUNCATE AT CHECKPOINT clause to the START DATABASE statement or on a server started with the -m command line option) failed, the server may have crashed. This has been fixed. |
568216 | On Advanced Edition servers, the value of the ServerEdition server property was incorrect. This has been corrected. |
568217 | On Mac OS X systems, an archive restore could have failed with an "insufficient space" error, even when enough space to complete the restore was available. This has been fixed. |
568219 | If the amount of available physical memory during an archive restore was low (the threshold is around 20 MB), but this was not the case during the archive backup, then the operation would have failed with an "insufficient memory" error, regardless of the amount of available swap space. This has been fixed. |
568233 | If a query had multiple uses of a function such as now() and one of the uses was within a COALESCE expression, then it was possible for the query to unexpectedly give different values for the two uses. For example, the following query could return different values for time1 and time2:
create temporary function T_W( x int ) returns timestamp begin waitfor delay '00:00:00.500'; return NULL; end select coalesce( T_W(0), now() ) time1, coalesce( T_W(1), now() ) time2 In addition to now(), the following expressions also had this behaviour: getdate() today() current date current time current timestamp current utc timestamp In addition to coalesce() expressions, the same problem could occur with the now() or related function used within these expressions: ISNULL() IFNULL() IF CASE ARGN This has been fixed. |
568263 | A database could have been corrupted by an ALTER TABLE statement which changed the nullability of a column. Because the nullability of a column affects the internal storage format of row, all rows in the table must be reformatteded when the nullability changes. This has been implemented. |
568264 | The server could have hung, consuming CPU, while attempting to shutdown a database if all workers were busy servicing other requests on different databases. This has been fixed.
A workaround is to increase the -gn value of the server. |
568421 | Remote server capabilities were accidentally set OFF during a rebuild of a case-sensitive database. This has been fixed. |
568422 | Under rare circumstances, a server participating in a mirroring system may have crashed on database shutdown. This has been fixed. |
568426 | When browsing permissions for tables and views, a user might have been listed more than once on the Permissions page of the property sheet for a table or view. Similarly, a table or view might have been listed more than once on the Permissions page of a user's property sheet. When fetching permissions, rows with the same grantee but different grantor, were not properly grouped. This has been fixed. |
568431 | If an application executed an external environment stored procedure, and the external process terminated in the middle of the external call, then there was a chance the server would have crashed. This problem has now been fixed. |
568436 | When running on a Windows machine configured to use the 1252 code page, if the Interactive SQL utility (dbisql) attempted to open a file which contained a Euro sign (€), it would have asked for which code page to use to interpret the file. Now, dbisql recognizes that the Euro sign is part of the Windows 1252 code page, and reads the file without prompting. This change also fixes similar behavior when a file contains any of the following characters:
€ U+20AC Euro sign � U+017D Latin capital letter Z with caron � U+017E Latin small letter Z with caron |
568455 | If an application executed a statement of the form IF EXISTS( SELECT ... FROM proc(), remote_tab ...) where proc() was a stored procedure that returned a result set and remote_tab was a proxy table, then itwas likely that the server would have crashed. This problem has now been fixed. |
568460 | All database resources were not completely freed when an ALTER TABLE DROP INDEX statement was executed. In particular, the database pages for the rows and indexes of the table, before the table is rebuilt, were not being freed. This has been corrected. |
568468 | The SQL Anywhere server supports the "UPDATE( colname )" condition that can be evaluated in statement-level trigger code to determine if the value of the specified column has been modified from its original value in any of the rows in the row set affected by the UPDATE/INSERT/MERGE statement being executed. The server would have failed to evaluate the condition correctly for multi-row sets under certain circumstances. This has been corrected so that the server will now evaluate the condition correctly. |
568475 | On the Basic Dbmlsync page of the Synchronization Profile's property sheet, only a single publication could have been specified. In addition, if a synchronization profile was created with multiple publications via the Interactive SQL utility, then the publications would have been lost when the property sheet was used to modify the synchronization profile. Now the property sheet supports multiple publications. |
568632 | When viewing table data for a SQL Anywhere database, Sybase Central could have reported an internal error. This has been fixed. The problem was highly timing dependent. |
568641 | Attempting to insert a large long binary value into a MicrosoftS SQL Server proxy table, would have failed with a "wrong precision" error. This problem was introduced by the fix for Engineering case 565651, and has now been fixed. |
568645 | On very rare occasions, the server may have failed to start on Solaris systems. This has been fixed. |
568652 | Adding two columns with default values to a global temporary table would trigger assertion 100712 (page level logging already in progress). |
568657 | Signed and unsigned short values were not being translated properly by the SQL Anywhere Python interface. Attempting to use short values would have resulted in errors like "struct.error: bad char in struct format" or "struct.error: unpack requires a string argument of length 1". This has been fixed. |
568660 | Referential integrity constraints (i.e. primary keys, foreign keys or unique constraints) involving long values may have resulted in unexpected errors. This problem has now been fixed. |
568663 | The server could have crashed during Application Profiling if any variables or host variables were present in the workload. This has been fixed. |
568674 | Attempting to execute an CREATE ENCRYPTED DATABASE statement to create a database encrypted with simple encryption, or the CREATE DECRYPTED DATABASE statement to decrypt a database encrypted with simple encryption, without having specified an encryption key, would have returned the error (-131 "Syntax error near '(end of line)' on line 1"). This has been fixed.
As a workaround, add "KEY 'unused'" to either statement; whatever key is specify will be ignored. |
568821 | Querying the deprecated server property MaxMessage, would have caused the server to crash if the property MessageCategoryLimit was set to 0. This has been fixed. |
568831 | A server running in a database mirroring system could have hung while log pages were being sent from the primary server to the mirror server. The primary server periodically sends a "catchup" request to the mirror to ensure that the mirror does not get too far behind in applying log operations that it has received from the primary and written to disk. It was possible for this request to cause a hang if it was received at the same time as an operation for a new connection was being processed in the transaction log. This has been fixed. |
568836 | Incorrect results could have been obtained when using an index which had nullable columns In some cases, fewer rows were returned than were required. This has been fixed.. |
568866 | The UltraLite Initialize Database utility (ulinit) is used to create an UltraLite database, based on information in the SQL Anywhere database that it is connected to. If the schema being extracted from the SQL Anywhere database contained elements that UltraLite did not support (like column datatypes or default values), the utility would have failed. Ulinit has been changed so that by default, it will attempt to create an UltraLite database that comes as close as possible to the SQL Anywhere database. For example, if a column in the SQL Anywhere database included the DEFAULT TIMESTAMP clause (a default that UltraLite does not support), a warning is generated and a default of CURRENT TIMESTAMP is generated instead. In particular, if a default in the SQL Anywhere database is not supported in the UltraLite database, the default value is ignored and creation continues. This enhancement was made because, in some cases, it抯 possible the SQL Anywhere tables cannot be modified, and yet a reasonable UltraLite alternative is available. The ulinit utility also now has a 杅 switch that can be used to make the utility fail if the exact schema does not match (in other words, the old behavior is given and the utility will fail).
This fix also addressed a problem where warnings were emitted into the SQL file if the ulinit utility was run with 杔. |
568972 | In cases where the standalone version of the SQL Anywhere Monitor and the regular SQL Anywhere Monitor were installed on the same machine, the SQL Anywhere Monitor could have loaded the wrong ODBC driver. This has been fixed. The old incorrect behaviour would, in the vast majority of cases, not have had any noticeable impact on the SQL Anywhere Monitor. The application would still have worked normally. So, the SQL Anywhere Monitor EBF should also be applied when applying a SQL Anywhere EBF. Applying the SQL Anywhere EBF without the SQL Anywhere Monitor EBF could cause the SQL Anywhere Monitor to stop working. |
568976 | In rare, timing dependent circumstances, the server may have hung when executing queries using intra-query parallelism. This has been fixed.
A workaround is to disable intra-query parallelism by setting the max_query_tasks option to 1. |
568984 | If an application connected via HTTP and executed a PHP external environment stored procedure with a long varchar or long binary argument, then there was a very small chance the server would have crashed if the HTTP connection was cancelled at exactly the same time that the PHP external environment call was made. This problem has now been fixed. |
568986 | Performing a PutMessage operation from the Java QAnywhere Client using UltraLite, or from the Standalone Java QAnywhere Client, would have resulted in a memory leak equal to the size of the content of the message. This has been fixed. |
568991 | Connecting to the server using Open Client and attempting to describe the input parameters of a dynamic statement, would very likely have cause the application to hang. This problem has now been fixed. |
569012 | The "UserAgent" HTTP header for QAnywhere/MobiLink communications previously only specified "QAnywhere/11.0.1", and "QAnywhereUL/11.0.1", for SQL Anywhere and UltraLite clients respectively. It did not differentiate between data synchronization and listener components. This has been fixed. Now, the header specifies "QAnywhereSync/11.0.1" for a SQL Anywhere data sync client, "QAnywhereULSync/11.0.1" for a UltraLite data sync client, and "QAnywhereLsn/11.0.1" for a MobiLink listener client. |
569013 | MobiLink clients and the certificate utilities would have failed to read PEM-encoded trusted certificates files which contained blank lines before the first PEM header. The PEM parsing code has now been modified to skip leading white space characters. |
569020 | 1. When two separate connections (including one that might be synchronizing) are accessing the database in parallel, some lock row conflicts or download conflicts may not have been detected.
For example: Connection 1 deletes row with primary key value 2 but does not commit Connection 2 inserts row with primary key value 2 - here there was an undetected row locked or download conflict if connection 2 was synchronizing When connection 1 was rolled back, a database corruption mau have occurred. This has been fixed. 2. Duplicate primary keys during a download were not detected. If the download contained two or more rows with the same primary key, the last row would be kept (this is not neccessarily correct if the download_cursor script does not have an ORDER BY clause). This has been fixed. UltraLiteJ will now report the SQLE_DUPLICATE_ROW_FOUND_IN_DOWNLOAD error when this is detected. Like UltraLite, this error is only reported for duplicate rows in the download_cursor - no detection is done for duplicate rows in the download_delete_cursor, or if the same primary key is in both the download_cursor and download_delete_cursor. 3. The all database synchronization would not have included new tables if the database was synchronized before the table was added (unless the application was restarted). This has been corrected. |
569114 | The SQL Anywhere Monitor, when installed by the standalone installer, was not able to monitor MobiLink servers. The standalone installer was not installing the library mljstrm11.dll as part of the SQL Anywhere support component. This problem does not exist in the edition of SQL Anywhere Monitor included with SQL Anywhere. This has been fixed. |
569122 | When deploying a synchronization model to an UltraLite remote database, the batch file generated to run ulsync had an example CONNECTION string that incorrectly used my_db.db, rather than my_db.udb. A correct CONNECTION string in the batch file is now generated. |
569124 | When a Synchronization Model was modified to include either handle_DownloadData or handle_UploadData events, the model file could not have then been re-opened. An error message would have been displayed stating "unknown or missing event ID handle_DownloadData" or "unknown or missing event ID handle_UploadData". This has been corrected. |
569127 | The result set returned from calling the system procedure dbo.sp_jdbc_primarykey() may have contained more rows than it should. This problem was introduced by the changes made for Engineering case 531119, and has now been fixed. |
569298 | In some cases, it was possible for recursive UNION queries to give incorrect results. This has been fixed. |
569307 | A SQLAnywhere service requiring authorization returned realm information based on the request URL. This has been fixed. The realm is now always set to the database name (or its alias) regardless of the request URL. |
569314 | The datepart() function could have returned an incorrect result for the CALWEEKOFYEAR and CALYEAROFWEEK date parts for dates greater than December 29 of years for which January 1 of the following year falls on Tuesday, Wednesday or Thursday. The first week of a year is defined as the week containing the year's first Thursday. All days in that week should have the same CALWEEKOFYEAR and CALYEAROFWEEK values, even for days in the previous year. This has been fixed. |
569316 | If an application connected using the iAnywhere JDBC driver and created a very large batch, containing either long binary or long varchar parameters, then executing the batch may have given a strange out of memory error dialog after which the application would have crashed. The driver has now been modified to allow such large batches to be executed; however, any such batches that require a very large amount of contiguous memory to be allocated will be executed one row at a time, instead of being batched. In addition, whenever the driver decides to execute a batch one row at a time, a SQLWarning will be returned on the executeBatch() call indicating that the "batch was executed in single row mode due to memory limitations". |
569323 | If the disk that the SQL Anywhere Monitor was resident on was in a low disk space situation, the Monitor would have generated disk space low alerts every 5 minutes instead of the default of generating the alerts every 30 minutes. This has been fixed. |
569327 | If an application made an external environment call to a connection scoped external environment process, and that process then set an error and exited, then there was a chance the server would have crashed. This problem has now been fixed. |
569330 | The server could have crashed, or failed an assertion, if a materialized view had been disabled soon after an update. This has been fixed. |
569509 | The MobiLink Listener would have gone into an infinite loop light weight polling continuously, without respecting the polling interval, when communication errors continue to occur. This has now been corrected. |
569510 | HTTP light weight polling may have failed with communication errors. This has been fixed. |
569513 | When an error or a timeout was detected between request phases of an http request-response cycle, the Relay Server outbound Enabler was not disconnecting the backend in a timely manner. This has been corrected. |
569516 | The Relay Server Outbound Enabler (RSOE) may have produced bad http requests. While relaying a packet of a http request, the RSOE would have reconnected to the backend server when the connection was lost, even if it was at the request boundary, producing a bad http request. This has been fixed by introducing a reconnect retry at request boundaries to improve robustness, and replace reconnect with an error for non-boundary packets. |
569520 | Dynamically added backend server farms, or servers, may have been incorrectly disabled. This is fixed. |
569543 | The SQL Anywhere Monitor could have reported "too many errors" or "too many failed syncs" alerts when it should not have. This has been fixed. |
569704 | Very complex queries, with more than 20 tables being joined, that were being optimized using the 'FIRST-ROW' optimization goal, may have had inefficient access plans. This has been fixed. |
569753 | A database server acting as the mirror server in a mirroring system, could have hung in rare cases. This has been fixed. |
569759 | Executing the CREATE ENCRYPTED DATABASE or CREATE DECRYPTED DATABASE statement would have caused assertion 100202 if the source database was already running and the filename given in the statement did not contain the '.db' suffix. This has been fixed. |
569776 | When processing a SIMILAR TO, REGEXP or REGEXP_SUBSTR expression and the request_timeout option was set, incorrect results could have been returned. If the request_timeout option was not set, it was possible for a cancelled expression to have taken several seconds, or more, to respond. This has been fixed. |
569778 | If an application made a PHP external environment call that generated a large message, and then called exit(), there was a small chance that the server would have crashed. This problem has now been fixed. |
569784 | If a procedure definition did not contain a RESULT clause, and returned its results from a SELECT statement with a TOP n clause that used variables, describing a query of the form:
SELECT * FROM proc() could have been incorrectly described by the server as having a single column with the name "expression". The result set returned by the statement would have had the correct schema. This has been fixed. Calling the procedure directly (i.e. call proc()) was not affected by this problem, and would be correctly described, so this statement can be used as a workaround. Describing the schema of the result set using a RESULT clause is also a workaround. To fix procedures created with older servers, an ALTER PROCEDURE <proc> RECOMPILE has to be executed for each such procedure. |
569797 | When unloading or extracting a database into a new database that was created with strong encryption, the Unload and Extract Database wizards would have display the encryption key in plain text in the Unload or Extract Database Messages Dialog. This has been corrected so that now the encryption key is displayed as "***". |
569931 | If a user-defined function using the Transact-SQL dialect issued a RAISERROR statement, and that function was called from another Transact-SQL function, the calling application could have failed to receive the error. In some cases, this would result in the application hanging. This has been fixed. |
569932 | While performing certain operations that require sorting large amounts of data, such as creating an index, established temporary space limits that were set using the "max_temp_space" database option, could have been violated. This has been fixed. |
569934 | The server has been improved such that queries of the form:
SELECT [...,]contents[,...] FROM dir_table WHERE [...AND] file_name=[string|variable] [AND...] now execute much faster. In the above example, dir_table is a proxy table to a directory access server, the WHERE clause contains zero or more AND clauses and no OR clauses, and one of the predicates in the WHERE clause is of the form file_name=[string | variable]. |
569942 | If an application that was connected using Open Client executed a query that generated a large column name, then there was a chance the application would have exited with a TDS protocol error. This problem has now been fixed. |
569951 | The number of rows affected was not being reported following the execution of a TRUNCATE TABLE statement. This has been fixed.
Execution of a TRUNCATE TABLE statement would have failed with an SQLE_UNCOMMITTED_TRANSACTIONS error ("You cannot synchronize or upgrade with uncommitted transactions <table name>"), if there were any uncommitted transactions, even on the current connection. This has been fixed. The TRUNCATE TABLE statement will now only report an error if there are uncommitted inserts and updates on another transaction. With this respect, TRUNCATE now behaves exactly like DELETE. |
569952 | If an error occurred in the middle of the execution of a TRUNCATE TABLE statement (11.0.1) or API (11.0.0, 11.0.1), a rollback of the deletes would not have been done. This has been fixed.
Synchronizations with the special truncate table download_delete_cursor may have resulted in a fatal error if a second connection did a commit after the truncate was applied, but before the the synchronization completed. This would have occurred only if there were more than a few rows in the table being truncated (248 for 1K page size). This has been fixed. |
570093 | If a SELECT statement contained the clause FOR UPDATE BY LOCKS, and a cursor was opened without specifying updatability cursor flags from the client application, then the BY LOCKS specification could have been incorrectly ignored by the server. This would only have happened if the statement was a simple query that was processed bypassing optimization. The consequence of this was that intent locks would not have been taken on the table being scanned. The only API affected by this problem was Embedded SQL.
Also, if a statemented executing at isolation 3 used an index scan for a table marked for update, then the rows of the table could have incorrectly been locked with exclusive (write) locks, instead of intent locks. The consequence of this was that other connections attempting to read the row could have blocked, even if the row was ultimately not modified. These problems have now been fixed. |
570094 | The server would have crashed when parsing a procedure that contained a CASE statement with a WHEN clause which had an unary search condition other than ISNULL. When unparsing the WHEN clause the server was expected a binary search condition and crashed when attempting to access the second operand. This has been fixed. |
570098 | In some circumstances, a 10.x server could have hung at shutdown if a parallel backup had been performed, or an outbound HTTP connection (SOAP, etc) had been used. When those features were used on an 11.x server, the server would not have hung at shutdown, but unpredictable behaviour (crash, hang) could have occurred at runtime. This problem has been fixed.
Note that the likelihood of encountering the problem with 11.x servers is extremely small. |
570115 | Character set translation wasn't being done properly by the SQL Anywhere Python driver. Unicode encoding and decoding errors were possible, as well as incorrect translations. This has been fixed so that conversions are based on the connection's CharSet property. |
570116 | The mirror server in a mirroring system could have hung while processing log pages received from the primary server. This has been fixed. |
570128 | A small amount of memory was being leaked when a CREATE ENCRYPTED DATABASE or CREATE DECRYPTED DATABASE statement was executed. This has been fixed. |
570140 | Attempting to insert a binary or varbinary variable, or host variable, into a Microsoft SQL Server proxy table with an image column would have failed with an 'invalid precision' error when the length of the binary value was between 8001 and 32768 bytes. This problem has now been fixed. |
570141 | In rare cases, the mirror server in a mirroring ssystem could have crashed at shutdown. This has been fixed. |
570144 | The Relay server's configuration file has a 64k size limit that, if exceeded, can caused the Relay Server to fail on start up. This limit has been removed. This limit was not affecting dynamic growth of configuration. |
570308 | Attempting to return a result set from within a BEGIN ATOMIC block would caused a memory leak in the server. This has been fixed.
Note that returning a result set from within an atomic block is not allowed, and an error is issued in this case. This behaviour has not changed. |
570369 | The listener may not have substituted action variables properly in some cases. The light weight polling handler would have substituted the variables $ml_user, $ml_password and $ml_connect with undefined values, as they were thought to be irrelevant in unauthenticated light weight polling. This has been fixed. They will be substituted properly into the action string and, if they are not specified, the values will be empty. Action variables in irrelevant contexts would have been substituted with undefined values as well. This is too is fixed, by not not be substituting them at all. For example, using $poll_key in the action string of a non-light-weight-polling handler will now result in $poll_key without substitution instead of an undefined result. |
570468 | When attempting to create a proxy table, if the connection was subsequently cancelled, either explicitly or implicitly, by shutting down the database or server, then there was a small chance the server would have crashed. This problem has now been fixed. |
570473 | On Linux systems, it was possible that the SQL Anywhere Monitor would have failed to start. When the Monitor starts up, it explicitly sets the location of the installed Java VM to ensure it always uses the Java installation shipped with the Monitor. Unfortunately, because of the case-sensitive nature of paths in Linux, it was possible that the path set was not being picked up properly. This has been corrected so that the Monitor now uses the correct case for the path on Linux. |
570476 | A SQLAnywhere service, processing an x-www-urlencoded (standard GET or POST) HTTP request which calls HTTP_VARIABLE() with an @BINARY attribute, will return %-encoded (URL encoded) data. This has been fixed. An @BINARY attribute will now implicitly decode the value without character set translation. A new attribute, @TRANSPORT, has been added to allow the return of data in its raw HTTP transport form. With this change, HTTP_VARIABLE may retrieve x-www-form-urlencoded values in three different forms:
* No attribute - return a value that is %-decoded and character set translated to the database character set encoding. %-encoded UTF-8 decoding is supported. This should be the default usage for retrieving textual x-www-form-urlencoded data. * @BINARY should be used to retrieve x-www-form-urlencoded binary data values. The value is %-decoded with no character set translation, UTF-8 %-encoded data is not supported in this mode since %-encoded data are simply decoded into their equivalent byte representation. * @TRANSPORT will return the raw HTTP transport form of the value, where %-encodings are preserved. This change does not impact the usage of @BINARY for multi-part/form-data form based uploads. The use of @TRANSPORT in this case is identical to @BINARY. Prior to this change, the work-around was to HTTP_DECODE the value returned by the HTTP_VARIABLE function when it was called with an @BINARY attribute. |
570493 | In very rare cases, if an event fired while a database was being shutdown, the server could have crashed. This has been fixed. |
570503 | When using secure streams and an invalid TLS handshake occured, the MobiLink server could have waited for a full network timeout period before disconnecting. This has been fixed. The MobiLink server will now immediately terminate the network connection with a "handshake error" error message. |
570650 | Using the TRANSACTION LOG TRUNCATE clause on the BACKUP DATABASE statement could have lead to the error "Assertion failed: 100910 Error renaming transaction log file before deleting it." This would have occurred when the user under which the server was running did not have delete permissions on the directory where the transaction log was located. Now, the server no longer deletes and re-creates the transaction log file, instead it truncates the file to one page. This should also prevent any interaction with virus scanners and disk defragmenters, which was often the case when files were being created. |
570652 | If a version 10.x or later database had a torn (ie "partial") write in the checkpoint log, the server could have reported assertion failures, including 201866 (only on 10.x servers), 201869 (only on 11.x servers), 200502, 200505, or 200512. In the case of a single torn write, these failures should not have been reported, and the database should be recoverable once the server is upgraded to include this fix. If upgrading the server does not resolve the assertion failures, the database is likely corrupt and does not just have a torn write. |
570656 | If a MobiLink synchronization script included the two characters "ui" inside an {ml ...} structure for named parameters, and the "ui" characters were not part of a named parameter, then MobiLink would have incorrectly replaced the "ui" with a question mark when it sent the command to the consolidated database. For example, the following script would have had no problem, since the "ui" in this case was part of the named parameter "build":
INSERT INTO t1(pk,build) VALUES ( {ml r.pk}, {ml r.build}) However, the following script would have failed, because the "ui" in the column list for the insert would have been replaced: {ml INSERT INTO t1(pk,build) VALUES ( r.pk, r.build )} This has now been fixed. |
570690 | The "Longest Active Synchronization Time" and the "Longest Active Wait for a Database Worker Thread" metrics were incorrect in the SQL Anywhere Monitor, and the monitoring values printed by the -ppv options LONGEST_SYNC and LONGEST_DB_WAIT, would have been incorrect. These metrics in the Monitor had the incorrect sign, but the absolute values were correct; essentially the graph was drawn upside down. A side effect of this is that the alert on these metrics would never be raised. These issues have been fixed. |
570738 | In very rare, timing dependent cases, a server backup could have hung while starting up. This has been fixed. |
570799 | When exporting to an UltraLite database using the Export wizard, the corresponding OUTPUT statements added to the command history would have been incomplete if no password was given for the UltraLite database. This has been fixed. |
570884 | The FIPS module is now supported by the SQL Anywhere server and clients on 64-bit Windows, and 32-bit and 64-bit Linux. |
570896 | In rare circumstances the server may have crashed when a new HTTP connection was created. This has been fixed. |
570903 | In very rare circumstances it was possible for the SQL Anywhere JDBC driver to have caused a crash in the Java VM. The Hotspot log generated for the crash would most likely have indicated that the crash occurred while attempting to construct a class cast exception. This has been fixed. |
570915 | When the iAS ODBC driver for Oracle was used by the MobiLink server to upload multiple CHAR type columns to a consolidated database running on an Oracle 9.2.0.8 server, it could have failed with the error;
"ORA-01461: can bind a LONG value only for insert into a LONG column" This problem has now been fixed. |
570923 | If a database error occurred when trying to install or update the MobiLink System Setup, the error message would have included the SQL statement that was being executed, which could have lead to the message box being too large for the screen. This has been fixed. Now the SQL statement is only shown when the Details are shown. |
570928 | If a statement was executed with a hash group by operator, and there was an aggregate function AGG( DISTINCT x ) for a blob value x, it was possible in some situations for the server to have crashed. This has been fixed. |
570940 | On Japanese Linux systemss, the Service utility (dbsvc) would not have output any messages. This has been fixed. |
571029 | If an application attempted to execute a batch with a long binary or long varchar column, and the values within the long columns were large, and the batch size was also reasonably large, then the iAnywhere JDBC driver may have given an 'out of memory' dialog, even though the Java VM still had lots of memory available. This problem has now been fixed. |
571215 | If two grouped queries appeared in different outer joins with an unquantified expression in the group-by list, it was possible for NULL to be substituted for the unquantified expression value elsewhere in the query. For example, the following query could have returned NULL incorrectly for columns A1, A2:
select today(*) A1, D2.A2, D3.A3 from dummy D1 left join ( select today(*) A2 from sys.dummy group by A2 ) D2 on 1=1 left join ( select today(*) A3 from sys.dummy group by A3 ) D3 on 1=0 This fault could have lead to the following (non-fatal) assertion failure: Run time SQL error -- *** ERROR *** Assertion failed: 102501 (10.0.1.####) Work table: NULL value inserted into not-NULL column SQLCODE=-300, ODBC 3 State="HY000" This has been fixed. |
571233 | When the -pi option 'ping MobiLink server' was used on the MobiLink client (dbmlsync) command line, dbmlsync would have returne an exit code of 0 (indicating success), even if it was unable to contact the Mobilink server. This has been fixed, and a non-zero exit code will now be returned in this case. |
571242 | If a non-existent stored procedure was called with argument names in the CALL statement, the server would have returned the misleading error message: "Parameter '' not found in procedure '???'". This has been fixed so that a prcedure not found error is returned. |
571252 | The INPUT USING, or Import Wizard, was not able to import REAL values from a SQL Anywhere database to an UltraLite database. This has been fixed. |
571253 | When installing only the MobiLink components on Linux systems using the 1.0.1 GA install, the dbfhide utility was not installed. This utility should be installed, as it is used for both MobiLink and Relay Server setup. This has been corrected. |
571267 | In the SQL Anywhere Monitor, the 'Total CPU Time' displayed for MobiLink resources would have been unreasonably large. This was due to the values being scaled as milliseconds, rather than as seconds. This has been fixed and the values are now correctly displayed in seconds. |
571282 | When creating a synchronization model, if a custom download subset was choosen, without specifying one or more tables to join, then the download_cursor events would not have been generated. Instead errors like the following would have appeared as comments in the Events editor:
/* * ERROR: Unexpected error encountered while generating event. * Error for: RHS of #set statement is null. Context will not be modified. table-scripts\download_cursor.vm * [line 59, column 8] */ This problem only happened in the New Synchronization Model wizard, not when custom download subset was enabled in the Mappings editor. The problem has been fixed for new synchronization models. To work around the problem, in the Mappings editor change the Download Subset (Dnld. Sub.) to None and then back to Custom, then switch back to the Events editor. |
571284 | The server may have crashed following execution of an ALTER TABLE statement that added or modified columns with a DEFAULT or COMPUTE clause, if all materialized views had been dropped since the last server start. This has been fixed. |
571436 | A statement that used subsumed ORDER BY clauses in aggregate functions would have failed with a syntax error. This type of statement was executed without an error in version 9.0.2, and has now been fixed.
For example: select list(e1 ORDER BY e2, e3 ), list( e4 ORDER BY e2,e3,e5) from .... The first ORDER BY clause 'e2, e3' is subsumed by the second ORDER BY clause 'e2,e3,e5'. |
571460 | On Linux systems, the Service utility (dbsvc) would not have honored the -pr (nicelevel) and -a (user) command line options. This has been fixed. |
571465 | If a network error occurred in the MobiLink Monitor, the SQL Anywhere Monitor, QAnywhere, or the Notifier, there could have been garbage characters trailing the error string.
For example: "The server monitor was unable to contact the MobiLink server. The host 'mlstress02' is still available. Error: Timed out trying to read 128 bytes.rWms" This has been fixed. |
571611 | On Linux systems, the server could have used larger amounts of memory than intended under some circumstances. Affected functionality included external function calls, the Java external environment, outbound HTTP connections, and remote data access. This has been fixed. |
571620 | OEMs now have the ability to prevent users from saving connection passwords with favorites. To do this, add the (new) "allowPasswordsInFavorites" directive to the "dbisql" section of the OEM.INI file:
[dbisql] allowPasswordsInFavorites=false Allowable values for this directive are "true" and "false". The default is "true". If this directive is added to OEM.INI, and its value is "false", the visible change is in the "Add to Favorites" window: the checkbox called "Save the connection password" will not be visible, and will be assumed to be unselected. |
571624 | If an application executed a query that generated a warning, and that warning was attached to a Statement, PreparedStatement, CallableStatement or ResultSet object, and the object was subsequently closed without calling clearWarnings() first, then the JDBC driver would have leaked memory. This problem has now been fixed. |
571625 | If an application called DatabaseMetaData.getCatalogs(), DatabaseMetaData.getSchemas() or DatabaseMetaData.getTableTypes(), then the JDBC driver would have leaked a very small amount of memory. This problem has now been fixed. |
571628 | If an application called a stored procedure which in turn called a proxy procedure, and the local stored procedure generated a warning prior to calling the proxy procedure, then the server may have returned the error: "remote server not capable". This problem has now been fixed. |
571643 | When editing a table's schema with the table editor, typing a Ctrl or Alt key combination could have initiated editing of the focused cell and either selected a menu item or opened a menu. This has been corrected so that typing a Ctrl or Alt key combination now performs the latter operation,and does not initiate editing. |
571671 | When editing a synchronization model's mappings with the table or column mapping editors, typing a Ctrl or Alt key combination could have initiated editing of the focused cell and either selected or opened a menu. This has been corrected so that typing a Ctrl or Alt key combination only performs the latter operation, and does not initiate editing. |
571806 | The server may have returned the nonfatal assertion error 102605 "Error building columns" when a query used a complex subselect on the Null supplying side of an outer join.
For example: select V1.N1 from T1 V0 left outer join ( select 'M' as N1 from ( select V4.c as xx from T2 as V4,( select count(*) as N3 from T3 ) V3 where V4.b = V3.N3 ) V2 ) V1 on V0.a = V1.N1 This has now been fixed. |
571810 | MobiLink clients (except for UltraLiteJ) now cache the host socket address to avoid extra calls to socket methods, such as getaddrinfo, inet_addr, and gethostbyname, for non-persistent HTTP and HTTPS synchronizations. |
571817 | NCHAR, NVARCHAR, and LONG NVARCHAR values from a SQL Anywhere database were exported as CHAR to an Oracle database if DBISQL had to create a table in the Oracle database to hold the data. This has been fixed. |
571957 | The server could have generated a dynamic memory exhausted error when trying to execute
a very complex statement. This has been fixed. The server will now return the SQL error SQLSTATE_SYNTACTIC_LIMIT. |
571988 | Fetching the connection property 'ServerNodeAddress', would have incorrectly returned the client's node address rather than the server's. This has been fixed. |
572122 | When a Synchronization Model was created and deployed on Unix systems, the created .sh files had statements like "if [[ value == value ]] ". The "[[", " ]]" and "==" were syntactically incorrect, causing error messages. This has been fixed.
Also when running an mlsrv.sh file with an argument that contained spaces, such as "dsn=SQL Anywhere 11 Demo", would have failed. The connection string is now quoted within the file to correct this. |
572123 | When deploying a Synchronization Model on Unix systems, generated .sh files were not created with executable permissions set. A workaround was to run "chmod a+x" on all of the .sh files. This has been fixed. Now executable permission is set for everyone when .sh files are generated. |
572124 | Opening a previously deployed and saved Synchronization Model file with a new remote database, and then trying to deploy it using the last settings, would have failed with a file error while recreating the remote database. This has now been fixed.
A workaround is to manually delete the remote database and transaction log before redeploying. |
572158 | After application of an EBF, Sybase Central, and/or the Interactive SQL utility, may not have been able to connect to a database. The Sybase Central and dbisql fastloaders were not being terminated during the install of the EBF, resulting in a reboot prompt due to locked files. If the reboot prompt was ignored, the locked files are not updated which could result in various connection failures. This has been fixed. |
572179 | On Linux systems, the Service utility (dbsvc) would not have stopped MobiLink services correctly. This has been fixed. The correct command was correctly echoed to the console but not actually executed. A workaround is to execute the command that was echoed. |
572187 | Multi-index scans which return very few rows were having their cost underestimated during query optimization. This may have resulted in multi-index scans being chosen incorrectly, which may have impacted the performance of the query execution. This has been fixed. |
572196 | It was possible for the MobiLink client (dbmlsync) to have sent an incorrect last download timestamp up to the MobiLink server, if dbmlsync had been running on a schedule, and ALL of the following had occurred during the last synchronization :
1) All of the data in the download stream had been applied, but had not yet been committed to the remote database. 2) An SQL Error had been generated by dbmlsync before the download had been committed. Examples of errors that could have occurred include an error occurring in the sp_hook_dbmlsync_download_ri_violation or the sp_hook_dbmlsync_download_end hooks, or an error occurring as dbmlsync had attempted to resolve referential integrity issues. 3) Another hook had been defined in the remote database that would have executed on another connection. For example, the sp_hook_dbmlsync_download_log_ri_violation or the sp_hook_dbmlsync_all_error hooks would have executed on a separate connection. This problem has now been fixed, and the proper last download timestamp is now sent up to the MobiLink server in the synchronization when this situation occurs. |
572347 | For specific classes of the UPDATE statement, it was possible for the server to consume too much memory while processing the request. In extreme cases, the server could have failed with an out-of-memory error. This has been fixed. |
572544 | During full text searches using a text index with a GENERIC term breaker, if a CONTAINS query contained a phrase with a term longer than MAXIMUM TERM LENGTH, the positional
information for the term could have been lost. This could have caused incorrect results to be returned. This has now been fixed. Example: Consider a text index on col1 of table t, built using a text configuration with MAXIMUM TERM LENGTH equal to 7, MINIMUM TERM LENGTH equal to 1: SELECT t.* FROM t CONTAINS( col1, '"there is an elephant at the zoo"' ); Before this fix, the query above would be equivalent to: SELECT t.* FROM t CONTAINS( col1, '"there is an at the zoo"' ); and would miss documents containing the phrase "there is an elephant at the zoo". |
572547 | When resetting a SQL Anywhere resource from the SQL Anywhere Monitor, it was possible that the reset dialog would have been dismissed before the reset operation had completed. This has been fixed. |
572549 | On Solaris systems with a non-UTF8 locale (eg. GB18030), when installing SQL Anywhere to a path containing MBCS characters, the installer would have failed to register the Sybase Central plugins. This has now been fixed. |
572556 | If the command line options -nogui and -onerror exit were used, and a connection could not be opened, when there was no command tail and connection parameters are given, dbisql did not quit and entered interactive mode. This has been fixed so that dbisql now quits with error code 9 ("could not connect"). |
572935 | If an UNLOAD ... INTO VARIABLE or UNLOAD ... INTO CLIENT FILE statement was used to unload either a table or a query containing an NCHAR column, the database server could crashed if the NCHAR character set was did not match the destination character set. This problem has been fixed. |
572936 | After running for several days, it was possible that the SQL Anywhere Monitor would have stopped checking if SQL Anywhere resources had updates available. This has been fixed. |
572961 | When the SQL Anywhere Monitor starts, it starts monitoring all the resources that are defined. If many resources were being monitored, this startup process could have taken several minutes, and caused degraded performance on the computer running the Monitor. A change has been made that attempts to alleviate these problems by having the Monitor be more conscious of limited system resources when the it starts. This improves the startup time of the SQL Anywhere Monitor when it is monitoring many resources. |
572968 | A small amount of memory was being leaked on every synchronization by the QAnywhere Agent for Ultralite. This has been fixed. |
572973 | During a large download, an out of memory error could have occurred on BlackBerry devices and simulators. This has been fixed. The row limiting algorithm has been improved, increasing the capacity of large downloads. To enable row limiting, first enable lazy loading of indexes, then use ConfigPersistent.setRowMaximumThreshold() and ConfigPersistent.setRowMinimumThreshold() to appropriate values (try 50,000 / (maximum cols per table + 1)). |
573160 | If an initial database size was specified in a CREATE DATABASE statement or with the -dbs option on the Initialization utility (dbinit), the resulting database would have been slightly larger (about 2MB) than the requested size. This has been fixed. |
573172 | The server could have become deadlocked if the 'wait after end' option was used when performing a backup. This has now been fixed. |
573208 | Full text searches, where both arguments to the NEAR operator were the same token, would have matched documents containing a single copy of the token. This has been fixed. |
573222 | Support for FIPS 140-2 certified encryption has now been added to 64-bit Windows for UltraLite (except UltraLiteJ) and MobiLink clients .
If the "FIPS-approved Strong Encryption" feature is not already installed, proceed as follows after applying the EBF: - From Add & Remove Programs, select SQL Anywhere 11 and click the Change button. - Select the Add option and enter the Add-on Registration Key and click Next. - In the dialog, ensure that the "FIPS-approved Strong Encryption" feature is selected and proceed. If the "FIPS-approved Strong Encryption" feature is already installed, proceed as follows after applying the EBF: - From Add & Remove Programs, select SQL Anywhere 11 and click the Change button. - Select the Modify option and de-select the "FIPS-approved Strong Encryption" feature, to temporarily remove it, and proceed. - Again from Add & Remove Programs, select SQL Anywhere 11 and click the Change button. - Select the Modify option and select the "FIPS-approved Strong Encryption" feature and proceed. |
573228 | When concurrent connection requests were made to servers running on multi core or multi processor Unix systems, connections could, in rare cases, have hung, received communication errors, or otherwise failed. This has been fixed. |
573427 | When creating, duplicating or renaming an object, Sybase Central would have performed a case-sensitive comparison to determine if an object with the same name already existed in the database. Now, a case-insensitive comparison is performed. |
573452 | Fetching a result set may, on rare occasions, have caused an application that connected using a newer version of Open Client 15 to hang or give a protocol error. In addition, cancelling a request may also have caused the application to hang or give a protocol error. These problems have now been fixed.
Please note that if an application does use Open Client 15 to connect to SQL Anywhere, then it will be necessary to update the version of Open Client 15 once this fix is installed. |
573456 | On Windows x64 systems, attempting to start the MobiLink server with the -xo command line option (specify network protocal and options for version 8 and 9 clients), would have failed with a missing dll error if HTTPS was requested. The dll mlhttps11.dll was missing from the install. This has been corrected. |
573614 | If requests were made to close several connections at the same time, then the server may have taken much longer than necessary to close all the connections. This problem was very rare and not very noticeable, but has been fixed. |
573625 | If an application asked for the connection status through the following ODBC API
SQLGetConnectAttr( hdbc, SQL_ATTR_CONNECTION_DEAD, ... ) after an error occurred, the iAnywhere Solutions ODBC driver for Oracle could told the application that the connection was still alive, even though the connection had actually been killed, or had timed out. If this problem occurred for the MobiLink server main connection, in most cases, the server would have displayed the following messages: [10009] MobiLink table 'ml_scripts_modified' is damaged [-10020] Unable to flush scripts and refused any synchronization requests. This MobiLink server would then have needed to be be restarted in order to carry on any synchronization. This problem is fixed now. |
573636 | After performing a database backup, a warning message of the form "Unable to open backup log '...'" could have been sent to the client and console. Note that this warning came as a "message" to the client, not as a warning SQLCODE from the BACKUP statement. The problem was far more likely to have occurred on Windows Vista or later when running as a non-elevated process, as the server typically tried to write the log into the SQL Anywhere installation directory which is not typically writable by non-elevated pocesses. This problem was fixed by properly detecting which of the possible directories for placement of backup.syb were writable, and adding the %ALLUSERSPROFILE%\SQL Anywhere XX (XX=version number) directory to the list of possible directories. On Vista and later, the %ALLUSERSPROFILE% directory is typically C:\ProgramData. On earlier versions of Windows, it is typically C:\Documents and Settings\All Users\Application Data. |
573824 | The 32-bit Unix versions of the SQL Anywhere ODBC Driver Manager (libdbodm) would have leaked a very small amount of memory for every statement handle that was allocated and subsequently freed. The memory leak problem has now been fixed.
Note that the memory leak does not exist with the 64-bit Unix versions of the SQL Anywhere ODBC Driver Manager, and that the SQL Anywhere ODBC Driver Manager does not exist on Windows platforms. It should also be noted that several SQL Anywhere components on Unix platforms use the SQL Anywhere ODBC Driver Manager implicitly, and are therefore impacted by this problem. In particular, the server will use the SQL Anywhere ODBC Driver Manager for performing Remote Data Access operations; as well, the Mobilink Server uses the SQL Anywhere ODBC Driver Manager to talk to the consolidated database. Also, the iAnywhere JDBC driver uses the SQL Anywhere ODBC Driver Manager to make connections. |
573839 | In the Synchronization Model wizard, when creating a model using a consolidated database and an existing remote database, the mapping editor's column headings could have been incorrect. In particular, the "Consolidated Table" column would have incorrectly been labelled "Mapping Direction". This has been fixed. |
573841 | When starting a database created by a backup, particularly one created using BACKUP ... WAIT BEFORE START ... WITH CHECKPOINT LOG NO COPY, the server could have failed with an error of the form "Database cannot be started -- <log file name> not expecting any operations in transaction log". This problem has been fixed.
As a workaround, add "-a <log file name>" to the server's command line. When recovery completes, the server will shut down. Afterwards, restart the server normally (without the "-a <log file name>" option). |
573843 | In an UPDATE statement, no diagnostic error message was issued when a SET clause was not followed by a name. Thisn has been fixed so that an eroor message is now issue for this situation. |
573990 | When calling the SADataReader.GetBytes method into a binary or varbinary column with a null buffer, it would have thrown the exception "no current row of cursor". This problem has been fixed. |
574014 | In some circumstances, it may have taken longer than expected to shutdown a database when it was started and then immediately stopped. This would only have been noticeable if the following three conditions were true:
a) cache collection was enabled on the previous run of the database, b) cache warming was enabled on the current run of the database, c) the server accessed a large number of pages during the cache collection interval, i.e., the first queries executed against the database referenced a large number of pages (as may be the case in a scan of a large table or set of tables). This has been fixed. Note, cache collection is on by default, and is controlled by the -cc server command line option. A workaround is to disable cache warming using the -cr- server command line option. |
574022 | When editing a table's schema using the table editor, the Cut, Paste, Delete and Undo toolbar button enabled states would not have been updated if the Ctrl key accelerators were used to perform these operations. This has been fixed. |
574222 | During a full text search, with a very long query containing conjunctive or disjunctive expressions only, the server could have failed with the error: "Text query parser error: parse stack overflow at or before character <n>". This has been fixed.
Examples of queries that would failed: CONTAINS( col, 'apple & banana & tomato & cucumber & ..... & parsley' ) CONTAINS( col, 'dog | cat | camel | .... | chipmunk' ) where ... is a list of terms separated by the & or | operator. |
574314 | Attempting to modify a service that was already running using the Service utility (dbsvc) with the -w "create service" command line option would have failed. The utility would have deleted the server, but would not have been able to re-create it. This has been fixed. If the service is running, dbsvc will now report an error and will not delete the service. |
574337 | If MobiLink servers were running in a server farm against a very busy consolidated database, some of the MobiLink servers may have shutdown automatically, due to the fact that they were no longer able to maintain their liveness to the consolidated database. To fix this problem, a new MobiLink server command line option to supply server farm database connection parameters has been added:
-ca "keyword=value;..." This new option can be used to let the MobiLink servers connect to another database that is running on a less busy database server, and then the MobiLink servers will use this second database to maintain their state information for the server farm. This second database can be running on an SA, ASE, Microsoft SQL Server, Oracle, DB2, or MySQL database server. However, it must contain the MobiLink server system objects. Note, the -ca command line option must be the same for all the MobiLink servers across the same server farm, otherwise, redundant synchronizations may not be detected and data inconsistency can happen. |
574348 | When deploying a Synchronization Model, and using a secure stream, the Deploy Wizard's Secure Stream Server Certificate page incorrectly referred to an "Identity certificate file" and the File dialog opened by the Browse button only showed certificate files (with .crt and .cer extensions). The wizard should have listed identity files (with a private key as well as a certificate, and .id file extension by iAnywhere convention). This has been fixed. Now the page is called "Secure Stream Server Identity", which refers to an "identity file", and the File dialog by default shows only identity files with .id extension, although listing .crt and .cer files is still an option (in case the .id extension is not used). A workaround is to change the filter to show all file types and choose an identity file. |
574352 | If a Synchronization Model was deployed to a location that contained a space in the name, or the deployed model contained a space in the name, then the remote and consolidated script files would not have functioned correctly. This has now been corrected. A workaround is to manually edit the files and quote any file paths that contained spaces. |
574354 | The iAS ODBC driver for Oracle could have crash in a stored procedure call, if the stored procedure contained char or varchar type INOUT parameters, and the data length of these parameters was greater than 2000 bytes (1000 bytes for driver versions, 9.0.2 and 10.0.1). This has now been fixed. |
574364 | If an application accessed a connection-scoped external environment via an HTTP request or from an event, then the external environment would have shut down when the HTTP request finishes or when the event completed. As a result, the next HTTP request or event that accessed the external environment required that the external environment be restarted. The server has now been improved such that starting an external environment is between 20% to 25% faster. Note that applications that use a database-scoped external environment (i.e. Java or CLR) will see a very modest performance improvement. |
574473 | The conflict() function, used with SQL Remote in RESOLVE UPDATE triggers, did not return correct results. The result of the function was always FALSE. This has been fixed. |
574475 | Under very rare circumstances, a client-side backup that truncates or renames the log may have hung the server. This has now been fixed. |
574693 | The QAnywhere Agent for UltraLite would have given a misleading error message if an invalid username or password was specified in the connection string. The error message that was being generated looked like:
Internal error: SQLCODE: -108, SQLSTATE: [] Source statement: SET OPTION isolation_level=read_committed QAnywhere Agent failed to initialize message store This has been fixed so that the agent now returns error code -103 as expected |
574697 | If a NUMERIC INOUT parameter was bound as SQL_PARAM_INPUT_OUTPUT, the result that was returned to the caller was always 0.
For example: CREATE PROCEDURE _TEST_PROC ( @IN_VAL1 NUMERIC(7, 0), @IN_VAL2 NUMERIC(7, 0), @OUT_VAL NUMERIC(7, 0) OUTPUT ) AS BEGIN SET @OUT_VAL = @IN_VAL1 + @IN_VAL2 END If the statement "CALL PROCEDURE _TEST_PROC( 100, 200, ? )" was prepared, and the third parameter was bound as SQL_PARAM_INPUT_OUTPUT, the result after execution was 0. It should have been 300. If the parameter was bound as SQL_PARAM_OUTPUT, the result returned was correct.This problem has been fixed. Note that in the above Transact SQL procedure, OUT_VAL is an INOUT parameter, since Transact SQL parameters are always INPUT and the addition of the OUTPUT clause makes them INOUT. |
574698 | The QAnywhere Java clients could have gone into an endless loop, with 100% CPU usage, if it attempted to uncompress a message whose content has become somehow corrupted. This has been fixed so that the clients now return a suitable error message to indicate that it failed to retrieve the message. |
574707 | If an application made an external environment request, and the server was under heavy load, then there was a chance the external environment would have taken too long to respond to the request. In such situations, the server would have timed out the request and returned control back to the application. If the external environment responded to the request at exactly the same time the server timed the request out, then there was a very small chance the server would have hung. This has now been fixed. |
574708 | Executing a query that required a result set to be fetched from a remote table, could have in very rare situations, caused the server to crash. This problem has now been fixed. |
574710 | When the SQL Anywhere Monitor was run on Linux systems, and used to monitor a large number of resources, there is a very good possibility that the Monitor would have performed poorly. This problem only existed after applying the 11.0.1 build 2222 EBF. This problem has now been fixed. |
574746 | If an unknown connection parameter was provided to the ODBC driver, the driver would have given the error: "Parse Error: Invalid or missing keyword near '<unknown parameter>'". Some applications (for example, Crystal Reports in some cases) generate connection parameters which are unknown to SQL Anywhere, which resulted in connection failures. This has been fixed so that unknown connection parameters are now ignored. This returns the ODBC driver to the Adaptive Server Anywhere 9.x and earlier behavior. |
574912 | If a database contained a DISCONNECT event handler called E, and a transaction log containing a DROP EVENT E statement was applied to the database, recovery could have reported failed assertion 100904 ("Failed to redo a database operation ... Event E in use"). This has been fixed. |
574920 | A client side backup of a database with a path and filename length greater than 69 bytes in the client character set, could have failed or truncated the filename. This has been fixed. |
574929 | When an UltraLiteJ client did a ping-only synchronization to a MobiLink server, the authenticate_user connection event was not fired. This has been fixed. A work around is to sync a single table (download only) with a different script version, where that script does not have any upload or download scripts. |
575116 | The changes for Engineering case 569934 enhanced performance for directory access queries of the form:
SELECT [...,]contents[,...] FROM dir_table WHERE [...AND] file_name=[string|variable] [AND...] These quesries now execute much faster as the "file_name=" predicate evaluation is now pushed down into the directory access server. Unfortunately, if the "file_name=" was specified as a fully qualified reference as in "dir_table.file_name=", then the predicate would not have been pushed down. This problem has now been fixed. |
575121 | n exceptionally rare circumstances, the server may have crashed when using user-defined data types with a DEFAULT clause. This has been fixed. |
575142 | Invalid metadata could have been constructed for a UNION DISTINCT operation. The Interactive SQL utility uses this metadata for display purposes when connected to an UltraLite database. This could have resulted in abnormal terminations for statements such as: "SELECT 1 UNION DISTINCT SELECT 2". This has now been corrected. |
575149 | The changes made for Engineering case 556453 introduced a bug that caused the Interactive SQL utility (dbisql) to crash when attempting to edit a DATE value in a result set. This has been fixed. |
575181 | If an UltraLite application had more than one open table or result set, and an attempt was made to execute the SQL SYNCHRONIZE statement, the UltraLite runtime would have returned the error SQLE_SCHEMA_UPGRADE_NOT_ALLOWED (-953). This has now been fixed. |
575323 | When executing a query that referenced a proxy table in another SQL Anywhere database, and made use of the newid(), strtouuid() or uuidtostr() system functions, it may have executed much slower than expected. This problem has now been fixed. |
575325 | When doing concurrent database operations during a synchronization, uploaded LONG VARCHAR or LONG BINARY columns could have been corrupted in the consolidated database. This is now fixed. |
575490 | Wide-fetching a query that referenced a proxy table could have returned the last row multiple times, instead of returning no rows and the SQLE_NOTFOUND warning. This has been fixed. |
575493 | The Unload Database or Upgrade Database wizards in the UltraLite plugin for Sybase Central could have failed if the XML file was located in a path that contained spaces. This has been fixed. |
575495 | When an INSERT or UPDATE was pending upload on a row, and there was a no-sync DELETE on the same row, there may have been a row left in the row page store for the table after the clean-up that is done after a successfull upload.
Had Index Persistence been turned off for the database and a row with the same primary key been inserted or downloaded afterwards, there would have been a primary key violation the next time the database was shutdown and re-connected to. Also, primary key violations could have occurred on databases with Index Persistence tuirned off after error recovery from failed synchronizations. These problems have now been fixed. |
575516 | When editing a Synchronization Model, deleting the "timestamp column name" (or another text box's contents) and then trying to switch to another Synchroniation Model without saving changes, would have caused an error to occur. This has been fixed. |
575517 | When using the Table Mapping editor, changed the sorting order of table mappings in the GUI may have displayed a prompt to save the model, even though no changes were made. This has been fixed. |
575538 | When the Relay Server Outbound Enabler's attempts to re-establish its channels to a Relay Server failed (for example, RelayServer still down), it could have occasionally quit further attempts. This has been fixed. |
575539 | If the Relay Server Outbound Enabler (RSOE) was connected to an Apache RelayServer, and then RSHOST was shutdown through a command line (rshost -s), then this would have caused the RSOE's up channel to enter a loop and issue an "Invalid opcode!" error message. This has been fixed. |
575556 | Executing queries with full outer joins or Transact SQL outer joins could have caused the server to crash, or behave unexpectedly, if a CONTAINS clause was present in the same query block as the join. This has been fixed.
Note, with Transact SQL outer joins, a CONTAINS clause is permitted only in the WHERE clause, and can only reference the preserved side of the join, not the null-supplying side. |
575755 | The Maintenance Release and EBF installs were not correctly updating the product version number in the .NET configuration file 'machine.config'. This has been fixed. |
575760 | When there is only one connection, the maximum number of prefetch rows has been increased to 10000. If there is more than one connection, the maximum number of prefetch rows remains unchanged at 1000.
Performance may improve when all of the following conditions are met: - an application has only one connection - fetching a result set with many thousands of rows - each row in the result set has small number of columns - the data size of the fetched columns is small - prefetch is enabled - the connection is over TCP/IP (shared memory connections are not likely to see a significant performance improvement) |
575782 | Under certain rare circumstance, a mirror server may have crashed on shutdown when processing a transaction log rename request. This has been fixed. |
575783 | When adding a SQL Anywhere resource to the SQL Anywhere Monitor, it was possible for the authorization dialog could have appeared twice. This has been fixed. |
575787 | The transaction log on the mirror server in a mirroring system may have become corrupt under rare circumstances. One example would be the mirror server processing a log rename request when the primary server disconnects. Should corruption occur, the database on the mirror server would have failed to start with the error "Can't use log file since it is shorter than expected." This has been fixed. |
575790 | If an application connected using the iAnywhere JDBC driver and fetched a large number of numeric values, then the fetch could have taken a long time. The iAnywhere JDBC driver has now been improved to fetch numeric values in a much quicker fashion if the numeric column has a precision that is less than or equal to 18 and a scale of 0. No performance improvements have been made if the scale is nonzero or if the scale is zero but the precision is greater than 18. |
575983 | When editing a DATE or TIMESTAMP value in a result set, the editor would not have accepted dates in the ISO format (YYYY-MM-DD). This has been corrected so that the ISO format is now accepted. |
576008 | If a query contained a LIKE predicate with a non-string value (Integer, Date, etc.), then it was possible for the predicate to evaluate a little more slowly than it could have. The non-string value was converted to NCHAR before the comparison, and this imposed additional overhead that was not present in previous versions. It is equivalent and faster to perform the comparison using VARCHAR, which is now how the comparison is done. |
576009 | The size of the stack used by some database server threads was not governed by the -gs and -gss server command line options. Some of these threads used stacks that were excessively large (1MB) for a CE environment, and could have lead to problems loading DLL's on some CE systems. These stack sizes have been reduced to 64K or less. The default stack size for request tasks is unchanged at 96K. Some versions did not allow a -gss value of less than 96K, but now values as low as 64K are permitted. |
576016 | Use of the "-f" command line option did not behave consistently when the fast launcher option was on. It would work correctly the first time, but subsequently running "dbisql -f filename" with a different file, would have opened the first file again. This has been fixed. |
576120 | The MobiLink server would have reported [-10001] 'Protocol error' during synchronizations, if a DROP INDEX had been issued against the UltraLite remote database. This has been fixed. |
576213 | If a SELECT statement included an alias specified as a single-quoted string, and the string contained a double quote or backslash, a syntax error should have been given, but was not. This has been fixed; an error will be reported in this case. |
576252 | Support for SQL Anywhere Explorer and SQL Anywhere Toolbar has been disabled for Visual Studio 2010. They still support Visual Studio versions 2005 and 2008. |
576257 | Changes have been made to the iAnywhere JDBC driver in order to improve fetch times for Date, Time and Timestamp values. Applications that are fetching a large number of Date, Time and/or timestamp values from the same ResultSet object, will now see a large improvement. |
576263 | If the CREATE DATABASE statement was used to create a database with a filename that contained a \n (for example CREATE DATABASE 'c:\\new.db'), the file_name column in the SYSFILE system table could have been incorrect. An incorrect file_name value would only have occurred if the CREATE DATABASE statement was issued when connected to a database other than the utility_db. This has been fixed.
Note, this problem did not affect the Initialization utility (dbinit), or applications calling the dbtools library. |
576447 | The SQL Anywhere Python support module (sqlanydb.py) did not set the rowcount attribute for UPDATE, INSERT or DELETE statements. This has been corrected. |
576448 | When run on Unix systems, if the redirector was configured to route to more than one backend, and one of the backend servers went down, the redirector could have failed to route requests to the live backend. In this case, the redirector would have added the error message "No machine is available to handle request" to the error log. This has been fixed. |
576500 | When a Synchronization Model was being generated for a MySQL database, columns that had been defined as nchar and nvarchar in the MySQL database, would have been mapped as char and varchar in the Synchronization Model. This has been fixed. |
576501 | If a Synchronization Model had a table mapping that was upload-only or download-only, then attempting to synchronize would have caused a warning that some scripts were missing. This has ben fixed by generating ignored scripts for the unneeded upload or download scripts, which suppressed the warnings. A workaround is to disable the warning, or create dummy scripts. |
576669 | Executions of a BACKUP DATABASE TO ... archive backup statement, using the "with checkpoint log no copy" clause, would have been slower than necessary, particularly when the transaction log file was large. This has been fixed. |
576689 | SQL Anywhere HTTP client procedures defined with a PROXY clause would have caused the server to crash. This has been fixed. |
576709 | A mirror transaction log file could have become corrupted after the file was grown. The error received would have been "Error: Cannot open transaction log file -- <mirror file name> is an invalid transaction log mirror." The server was failing to update the mirror log file size at the appropriate time. This has been fixed. |
576913 | If an application executed a remote query that must be handled in NO PASSTHRU mode, and the query contained many tables, then it was possible for the server to fail assertion 101508, instead of giving the "syntactic limit exceeded" error. This problem has now been fixed, and the error is now properly returned. |
577092 | Previously, the SQL Anywhere Python driver (sqlanydb.py) raised an OperationalError for all database errors. The driver now raises an IntegrityError for the following SQLCODEs:
SQLCODE Error -193 Primary key for table '%1' is not unique : Primary key value ('%2') -194 No primary key value for foreign key '%1' in table '%2' -195 Column '%1' in table '%2' cannot be NULL -196 Index '%1' for table '%2' would not be unique |
577109 | If an application maked use of the Java in the database feature, and a JAVA stored procedure wrapper was defined such that the number of SQL arguments in the stored procedure was greater than the number of arguments defined in the Java method signature, then calling the Java stored procedure may have crashed the server. This problem has now been fixed, and a Java signature mismatch error will now be returned. |
577129 | On some Linux distributions (eg Suse 11), the server may have taken an exceedingly long time to write out a mini-core dump. This has been fixed. |
577142 | The MobiLink server would not have skipped a script that was defined to be ignored, if the script contained white space (spaces, tabs, and/or line-breaks) before the special prefix, '--{ml_ignore}'. This problem is fixed now. |
577297 | If a procedure was used in the FROM clause of a query, it was possible for the server to crash if the procedure result set had a particular form. This has been fixed. |
577321 | The MobiLink server with messaging (-m command line option) could have crash when used with an ASE 12.5.3 consolidated database server and the ASE ODBC driver version 15.0.0.140. This problem was introduced by the changes for Engineering case 560045, and has now been fixed. |
577334 | When using the SQL Anwhere C API (drivers for PHP, Perl, Python, and Ruby), applications executing RAISERROR with a user-defined error, would have seen the correct error code returned, but the error message was returned as "Unknown error". This has been fixed. |
577512 | Sybase Central plugins for Ultralite & QAnywhere were not being registered when deployed by the Deployment wizard. This has now been corrected. |
577532 | An application running under a Java VM in server mode, and fetching a large result set, will now retrieve the result set much faster. |
577548 | It was possible for the server to apply stale values in an UPDATE statement if concurrent requests issued UPDATE statements at isolation level 0 or 1. This would occur with particular timing when the UPDATE statements did not bypass the query optimizer, and neither UPDATE statement contained a join, or a subquery converted to a join. This has been fixed. |
577714 | The ADO.Net sample program LinqSample was not working correctly. This has now been fixed. |
577928 | It was possible for the server to crash when executing an UPDATE or DELETE statement for particular execution plans. This has been fixed. |
577932 | When deploying SQL Anywhere using the Deployment wizard, the PHP Extenv DLLs were being deployed (php-<PHP version>_sqlanywhere_extenv11.dll), but not the PHP SQL Anywhere DLLs (php-<PHP_version>_sqlanywhere.dll). These have now been added to the list of files deployed. |
577938 | Sybase Central could have occasionally reported an internal error on startup, when the Fast Launcher option was turned on. This has been fixed. |
577974 | Using an ADO.NET Entity Data Model object with an ASP.NET Web Site project did not work correctly. This has been corrected. |
577984 | When the Relay Server Outbound Enabler (rsoe) was shutdown, the message "<UpChannel-xxxx> networkRead: interrupted error errCode: 218, sysCode: 0" was written to the log file. This is a lower level error indicating the blocking read operation had been interrupted. This error message is redundant and confusing, and has been removed. An informational message will still be printed at a higher level. |
578001 | If an ODBC escape sequence was used that was preceded by a keyword, it was mangled by the Interactive SQL utility. The first and last characters were stripped off. This has now been fixed. |
578130 | If LOAD TABLE, or OPENSTRING were used, and all of the following conditions were true:
- ENCODING 'UTF-8' was specified - the destination table has both CHAR and NCHAR columns - the CHAR encoding was not UTF-8 - file data that was destined for a CHAR column contained illegal characters or characters which could not be converted losslessly to the CHAR encoding the server could have crashed. This problem has been fixed. |
578153 | If a database created with a version 9 or earlier server was backed up via the Backup utility (dbbackup), or the BACKUP DATABASE statement, the backup copy could not have been unloaded using the Unload utility from version 10 or later. This has been fixed. |
578172 | Calls to the methods SADataReader and SADataAdapter would not have returned any data for temporary tables. An AutoCommit when opening a data reader would have dropped temporary tables. This has now been fixed. |
578191 | If a server had request-level logging enabled (eg -zr sql command line option) while the stored procedure debugger was being used (ie Sybase Central was in "Debug mode"), the server could have crashed. This problem has been fixed. |
578292 | If a scheduled event was defined, and the event made a CLR external environment call, then the server's, and the CLR external environment's, memory usage would have continued to grow in size with each execution of the event. Note that this problem was specific to the CLR external environment. The problem has now been fixed such that the server will now grow and shrink as needed, and the CLR external environment will shrink whenever garbage collection kicks in. |
578346 | On parallel systems, highly concurrent (tens of connections) temporary table modifications are now faster. |
578365 | In extremely rare circumstances, the internal representation of the lower bound of an index scan could have become corrupted for servers run on 32 bit systems. The problem could have manifested itself in many ways, although the most likely would have been an incorrect result set being returned. This has now been corrected. |
578385 | Following an initial install of version 11.0.1, the installer would have left incorrect information as to the version of the documentation that was installed, 11.0.0 instead of 11.0.1. Any method of checking for documentation updates, via the web page, at the end of install, using dbsupport, or using the Admin Tools, would then have used the incorrect version. This has now been corrected. |
578401 | The iAnywhere Solutions ODBC driver for Oracle could have held the socket descriptor and service handle, even when the database connection had been disconnected. This could have resulted in the driver running out of service handles with the following error: "ORA-12519: TNS:no appropriate service handler found". The OCI function, OCIServerDetach, was missing in the logoff function. This has now been corrected. |
578612 | An INSERT statement, with a VALUES clause containing subquery expressions, could have caused a crash. This has been corrected. |
578616 | If a server had a large number of connections making external environment calls, to the same database-scoped external environment, and the external environment process crashed due to heavy load, out of memory or some other reason, then there was a small chance the server would also have crashed. This has now been fixed. |
578617 | On Unix systems, an ANSI-only (no wide call support) ODBC driver is now available. The name of the driver is libdbodbcansi11_r. Only a threaded variant is provided. On Mac OS X, in addition to the dylib, the driver is also available in bundle form (dbodbcansi11_r.bundle). Certain frameworks, such as Real Basic, do not work with the dylib and require the bundle. The regular SQL Anywhere ODBC driver treats SQLWCHAR strings as UTF-16 strings. Starting in SQL Anywhere 10, when Unicode support in the Unix ODBC drivers was first introduced, the driver could not have been used with some ODBC driver managers, such as iODBC, which treated SQLWCHAR strings as UTF-32 strings. When dealing with Unicode-enabled drivers, these driver managers would translate narrow calls from the application to wide calls into the driver. An ANSI-only driver gets around this
behaviour, allowing the driver to be used with such driver managers, as long as the application does not make any wide calls. Wide calls through iODBC, or any other driver manager with similar semantics, remain unsupported. |
578636 | Support has now been added for the SQL statements CREATE PUBLICATION, ALTER PUBLICATION and DROP PUBLICATION. This change also includes support for publication predicates. |
578818 | A busy server could have crashed, or given an error, when updating a text index defined with the IMMEDIATE REFRESH clause. This has been fixed. |
578859 | The GUI launchers for the 11.0.1 Administration Tools no longer worked after Java for Mac OS X v10.5 Update 4 was installed. The following error messages would have appeared in the logs:
[JavaAppLauncher Warning] Java application launched from PPC or bad stub. Relaunching in 32-bit, and tagging sub-processes to prefer 32-bit with $JAVA_ARCH=i386. [JavaAppLauncher Error] This process is [i386] and was re-exec'd from [i386], but for some reason we are trying re-exec to []. [JavaAppLauncher Error] unable to find a version of Java to launch This has been fixed. There are two workarounds: 1. Use the command line launchers instead of the GUI launchers. 2. Run the following from a terminal: . <SQL Anywhere 11 Installation Directory>/System/bin64/sa_config.sh for TOOL in DBConsole.app InteractiveSQL.app MobiLinkMonitor.app SybaseCentral.app ; do chmod +w "$SQLANY11/../$TOOL/Contents/MacOS/ JavaApplicationStub" ; cp /System/Library/Frameworks/JavaVM.framework/ Versions/A/Resources/MacOS/JavaApplicationStub64 "$SQLANY11/../$TOOL/ Contents/MacOS/JavaApplicationStub" ; done Note, the portion of the script from "for" to "done" should be one single line. |
578933 | The FORWARD TO statement could have truncated the forwarded statements to roughly a database page size in length. This has been fixed. |
578975 | Under certain conditions, it was possible for the server to hang when performing operations with long strings. This has been fixed. |
578990 | If an application called DatabaseMetaData.getSystemFunctions(), the string returned would have contained the functions named dbname and username. The correct function names are database and user. This problem has now been fixed. |
578998 | When an application connected using the iAnywhere JDBC driver and attempted to describe the metadata of a table or result set that contained a char column, the metadata would have returned the type name of the column as Char, but the SQL type would still have come back as Types.VARCHAR. If a JDBC application wanted to get the JDBC driver to return the SQL type of Char columns as Types.CHAR, then the application was required to set the "odbc_distinguish_char_and_varchar" database option. As of SQL Anywhere 12 the new SQL Anywhere JDBC driver, and the deprecated iAnywhere JDBC driver, now return the type name Char and SQL type Types.CHAR for table and result set columns of type Char, and the typename Varchar and the SQL type Types.VARCHAR for columns of type Varchar, regardless of the database option setting. |
579018 | If an application created a proxy table and specified the remote owner in the location clause, then attempting to access the proxy table would have failed with a syntax error if the remote owner name was a keyword. This problem has now been fixed. |
579150 | The server may have crashed if a statement that referenced a proxy table was very complex and used alias names that depended on many other alias names. This has been fixed. |
579215 | The SQL Anywhere Python driver (sqlanydb.py) would have failed to load on Mac OS X systems as a result of failing to load the SQL Anywhere C API runtime library. The driver was looking for dbcapi.dll or libdbcapi_r.so, whereas on Mac OS X the file name is libdbcapi_r.dylib. This has now been corrected. |
579219 | Calling the function SQLGetInfo() function with the SQL_SQL92_STRING_FUNCTIONS information type returns a bitmask indicating which SQL 92 functions are supported by the database server.
The following bits should not be returned: SQL_SSF_CONVERT SQL_SSF_SUBSTRING SQL_SSF_TRIM_BOTH SQL_SSF_TRIM_LEADING SQL_SSF_TRIM_TRAILING as SQL Anywhere does not support the above SQL 92 functions (e.g., SELECT TRIM(BOTH ' ' FROM ' abc '). Only the following following bits should be returned. SQL_SSF_LOWER SQL_SSF_UPPER This problem has been fixed. |
579233 | When using the SQL Anywhere Python database interface (sqlanydb.py) the Cursor.rowcount attribute value was inaccurate under when calling executemany. The rowcount attribute was set to the number of rows affected/returned by the last execute in the series. This has been fixed. The rowcount attribute will now contain the sum of the row counts of the executes (or -1 if unknown).
Also, when the server returned an estimated, rather than an exact row count, Cursor.rowcount was set to a negative number, the absolute value of which was the estimate. Cursor.rowcount will now be set to -1 in this case. |
579404 | If MobiLick Client (dbmlsync) had been running as a server, and a client application had executed the ShutdownServer() method, the exit code from the dbmlsync executable would have been EXIT_FAIL, which indicated a general failure. This would also have resulted in the progress message text changing to "Synchronization Failed" on shutdown, although it was difficult to see on a desktop system. The dbmlsync executable now returns EXIT_OKAY in this situation, which also results in the progress message text changing to "Synchronization Succeeded" on shutdown. |
579816 | A new connection parameter has been added to the ODBC driver. This parameter (ESCAPE) allows you to specify the escape character used in the LIKE clause of SQL statements generated by the ODBC driver when returning a list of tables or columns.
By default the ODBC driver uses the tilde character (~), but some applications do not properly query the ODBC driver to see what escape character is used, and assume that it is the backslash character (\). With this new connection parameter, users can specify the escape character in the connection string to make these applications work properly. "DSN=My Datasource;UID=xxx;PWD=xxx;ESCAPE=\;ENG=myserver" |
579826 | It was possible for an INSERT statement to fail with an inappropriate error "Invalid host variable". This error could have been given if a wide insert was performed on a table, followed by a procedure or batch statement issuing an INSERT to the same table. This has been corrected.
The problem can be avoided using "options(force optimization)" on the INSERT statement. |
579837 | The iAnywhere Solutions Oracle ODBC driver could not recognize synonyms of stored procedures. Thus an application, such as the MobiLink server, that uses this driver was not able to execute procedure synonyms if the DSN used by the application was configured with the "Procedure returns results" check box checked. This problem has now been fixed. |
579948 | The system procedure sa_index_density(), could have reported 'Cannot convert' errors. This has been fixed by changing the datatypes of the result set columns "density" and "skew" from numeric(8,6) to double. As a result, the definition of the sa_index_density procedure in the database must be replaced for the fix to take effect. This can be accomplished by executing: ALTER DATABASE UPGRADE PROCEDURE ON
A workaround is to rebuild the database prior to running sa_index_density. Re-creating or reorganizing the offending index may also be a workaround. |
579981 | The second argument for the system function get_identity() is the number of values to allocate. If this value was 0, the function did not adjust the next available value for the table. If no inserts into a table defined with a DEFAULT AUTOINCREMENT column had been made, get_identity('<table-name>',0) returned NULL. This has been fixed. A value of 1 will now be returned in this case. |
580004 | When describing arguments of a stored procedure called with non-positional arguments, no information was returned from the server.
For example: CREATE PROCEDURE foo ( IN a INTEGER, OUT b INTEGER ) BEGIN SET b = a * 2 END No information was returned when describing input arguments for the statement "call foo( b=?, a=?)". This has been fixed. |
580012 | The changes for Engineering case 576257 resulted in a substantial performance improvement within the iAnywhere JDBC driver when fetching a large number of Date, Time or Timestamp values. New changes, which build on these earlier changes, make fetching Date, Time and Timestamp values even faster, when using the iAnywhere JDBC driver. |
580016 | Unexpected behavior could have occurred when IN predicates were used in subqueries in INSERT, UPDATE, and DELETE statements. This has been corrected. |
580057 | Using Sybase Central to triggering an event in a 9.x database, would have produced the error "Procedure 'sa_conn_list' not found" after the event was triggered. This has
been fixed. |
580133 | The OUTPUT USING statement's ability to export results to Excel files has been improved:
1. The CREATE TABLE ON clause is now supported. Previously, consistently creating tables was not possible, although exporting to existing tables worked. 2. If the table name was quoted with backticks, the output operation would have failed. This has been fixed. 3. The OUTPUT statement would not have worked at all if the USING clause contained "driver=" rather than "dsn=". This has been fixed. 4. Exporting a result set which contains primary key columns with the CREATE TABLE ON clause would have failed, as the Excel ODBC driver does not support the required SQL to designate primary keys. This limitation has now been worked around. For datatypes that the OUTPUT statement cannot handle, such as BINARY or LONG BINARY, the user must do the conversion to a supported type explicitly. Note that the Interactive SQL utility in version 10 and earlier did allow exporting BINARY columns, although it simply treated bytes as characters when it wrote them to the Excel file. It's unclear whether that was a "good thing" in general. To emulate that behavior in now, use the following: SELECT ID, Name, Description, Size, Color, Quantity, UnitPrice, CAST(Photo AS LONG VARCHAR ) FROM Products; OUTPUT USING 'DSN=MyEXCELDSN' INTO tabProducts CREATE TABLE ON Also note that the Microsoft Excel ODBC driver treats the file as read-only by default. To write to the file, turn off the "Read only" flag in the DSN or, if not using a DSN, include "ReadOnly=0" as a connection parameter in the OUTPUT statement. For example: SELECT * FROM Departments; OUTPUT USING 'Driver=Microsoft Excel Driver (*.xls); dbq=c:\test\test.xls;ReadOnly=0' INTO Departments CREATE TABLE ON |
580146 | If an application attempted to drop a user that had externlogins defined, then the server would have given an error indicating that externlogins were defined. The server behaviour has now been changed to quietly drop externlogins as part of dropping a user. |
580168 | When a NUMERIC or DECIMAL column with precision greater than 47 was fetched using OLE DB, ODBC, or JDBC, a memory buffer overrun would have occurred. This would have resulted in a corrupted heap. The client application may then terminate unexpectedly due to the corrupted heap. This problem has been fixed. |
580174 | If an application using the iAnywhere JDBC driver, created a scrollable, updateable Statement or PreparedStatement, created a ResultSet object off of the Statement or PreparedStatement object, called ResultSet.updateRow() to perform a positioned update of a row in the ResultSet, and then positioned the ResultSet to a row before the updated row, attempting to call next() to go beyond the updated row would have failed. A similar problem exists if the application positions the ResultSet beyond the updated row and then tries to call previous(). Both problems have now been fixed. |
580186 | An INSERT statement, with a VALUES clause containing subquery expressions, could have caused acrash. This has been corrected. |
580190 | If an error had occurred while the MobiLink client (dbmlsync) was applying a download, and there had also been referential integrity errors that dbmlsync could not resolve, then dbmlsync would have reported that the download had been committed, even though it had been rolled back. This has been corrected so that dbmlsync now correctly reports that the download was rolled back. |
580191 | Spacy tokens need to be quoted with double quotes. If the quoted token further contains spacy sub token then nested double quotes are need, and they need to be escaped with escape sequence. This was not working correctly when used in a MobiLink Listener (dblsn) configuration file. For example:
-l "subject=$remote_id; content=sync cardealer; action='run dbmlsync.exe -c \"filedsn=c:\my fdsns\CarDealer.dsn\" -ot dbmlsync.log -k -e sa=on';" This works correctly on the command line, because the tokenizer of the commandline processor in the OS supports escaping double quotes using a backslash, but using the same command in a configuration file would have failed. This problem has been fixed by improving the common configuration file parsing routine to support <slash><slash> and <slash><double quote> as escape sequences for <slash> and <double quote> respectively. The escape mechanism is effective only inside a quoted token. |
580222 | If the MobiLink Server had been started with "-s 1" command line option, to indicate that the server should always apply changes to the consolidated database one row at a time, then the MobiLink Server would still have executed SAVEPOINT commands. SAVEPOINT commands are not needed when running in single row mode, so they are no longer executed when the MobiLink Server had been started with "-s 1". |
580353 | Queries with TOP or START AT clauses were incorrectly flagged with an error when they exceeded 64K. This restriction has now been removed. |
580390 | If both a BEFORE UPDATE and a BEFORE UPDATE OF trigger were defined on the same table, and the BEFORE UPDATE OF trigger was not the first to fire when an update was performed using INSERT ... ON EXISTING UPDATE, then the BEFORE UPDATE OF trigger would not have fired at all. This has now been fixed. |
580391 | The fix for Engineering case 529193 was not complete, which meant spurious referential integrity constraint violations could have been reported. This has been corrected. |
580538 | When connected to a slow server, immediately doing something to modify the contents of the "SQL Statements" field, would have cause the Interactive SQL utility to crash with the exception "java.lang.IllegalStateException: Attempt to mutate in notification". This has now been fixed. |
580569 | On some Linux systems, if the SQL Anywhere Monitor had been configured as a service to be started automatically after a reboot, monitoring could have failed. Automatic services wwere being installed with a priority "09". Some distributions install the network service with priority "10" and the network service would not have started until after the SQL Anywhere services had started, which led to the failure. This has now been fixed.
A workaround to correct this problem is to execute the following commands (requires administrator priviledges): /opt/samonitor11/bin32/samonitor.sh uninstall /opt/samonitor11/bin32/samonitor.sh install |
580574 | The Apache Redirector is now available for Apache 2.2 on Linux. The new file is named mod_iaredirect.so, and is located in <install-dir>/mobilink/redirector/apache/v22. |
580590 | The SQL Anywhere Python Database interface now supports the ability to register callbacks to control how database types are mapped into Python objects when results are fetched from the database server. Callbacks are registered using the new module-level "register_converter" method. This method should be called with the database type as the first parameter, and the conversion function as the second parameter. For example, to request that sqlanydb.py create Decimal objects for data in any column described as having type DT_DECIMAL:
import sqlanydb import decimal def convert_to_decimal(num): return decimal.Decimal(num) sqlanydb.register_converter(sqlanydb.DT_DECIMAL, convert_to_decimal) Converters may be registered for the following database types: DT_DATE DT_TIME DT_TIMESTAMP DT_VARCHAR DT_FIXCHAR DT_LONGVARCHAR DT_STRING DT_DOUBLE DT_FLOAT DT_DECIMAL DT_INT DT_SMALLINT DT_BINARY DT_LONGBINARY DT_TINYINT DT_BIGINT DT_UNSINT DT_UNSSMALLINT DT_UNSBIGINT DT_BIT DT_LONGNVARCHAR |
580598 | Tools such as the Data Source utility (dbdsn), which need to run as an elevate process to perform privileged operations on Windows Server 2008 R2, failed to do so and would have reported errors when run in an unelevated command shell. This has been fixed. |
580599 | The SQL Anywhere JDBC driver getTimeDateFunctions() call did not return the correct names for the CURRENT_DATE, CURRENT_TIME, and CURRENT_TIMESTAMP functions. It returned "current date,current time,current timestamp" instead of "current_date,current_time,current_timestamp". The same problem also existed in the iAnywhere JDBC driver. These problems have now been fixed. |
580607 | User Impersonation on IIS caused Win32Exception "Access is denied". This has been fixed. |
580636 | The Relay Server can be started automatically by the first Relay Server Outbound Enabler (RSOE) connection, but the connection may have failed within 1.5 seconds if the Selay Server's configuration file was too big. Thhe Relay Server will eventually have finished starting, but the RSOE would not have attempted to reconnect to the Relay Server. This has been fixed by allowing 15 seconds for the Relay Server to startup before giving up the the RSOE connection. RSOE reconnect attempts will be fixed in a separate issue. |
580647 | Setting a TIME column from a java.util.Date, with only time information filled in, could have failed with the Java 2 Micro Edition (J2ME). This has been corrected. |
580735 | In rare circumstances, transaction log corruption could have occurred, or the server could have haved assertion 100918 ('Invalid redo log page header'), shortly after restarting a database. The probability of this happening on any given database restart was approximately 1/pagesize (ie. for 4K pages, the probability is approximately 0.0002). The corruption was likely to go undetected, and the assertion was unlikely to fire in most cases. However, sites using Mobilink or SQL Remote would have been alerted to the presence of such corruption by errors occurring during synchronization. This has now been fixed. |
580743 | Editing a table on the "Data" tab in Sybase Central, or in the "Results" panel of the Interactive SQL utility, could have left the table locked until the tool disconnected from the database. The table lock could in turn have prevented other operations in Sybase Central from completing (e.g. the Unload Database wizard in the SQL Anywhere plug-in, or the Deploy wizard in the MobiLink plug-in). This has been fixed. |
580744 | When applying a software update (EBF), the attempt to migrate data from an old SQL Anywhere Monitor database to a new SQL Anywhere Monitor database could have failed with an "Authentication Error". This has been fixed. |
580772 | Executing a remote query that involved the use of the ROWID() function, where the table specified to ROWID was a remote table, would very likely have caused the server to crash when the query was processed in partial passthru,. This problem has now been fixed. |
580773 | The server could have hang in some very rare circumstances, when there was considerable temporary file growth. This has now been fixed. A workaround is to pre-grow the temporary file using the ALTER DBSPACE statement, or to create a DiskSpace event to periodically grow the temporary file. |
580788 | The EBF installers for Linux are now capable of installing FIPS components. To initially install the components, the setup script must be invoked with the -regkey (alias -k) command line option, and be passed a registration key that entitles the installation of the FIPS componenents.
e.g., ./setup -k <FIPS registration key> or ./setup -regkey <FIPS registration key> It is not possible to specify the registration key through the EBF Installer UI itself. Subsequent invocations of the EBF install will then update previously installed FIPS components without needing to specify a registration key. |
581029 | The fix for Engineering case 571029 would have caused the Interactive SQL utility to give an "optional feature not implemented" error when exporting data to Excel. This problem has now been fixed. |
581032 | The result set returned by the system procedure sp_sproc_columns() has been changed to include information about parameter modes. The "column_type" column was previously an integer value and was always 0. Now it is a varchar(5), with values 'IN', 'OUT' or 'INOUT'. Also, for functions, the column_name will be returned as @RETURN_VALUE for the function return value; a row for this value was not previously returned. |
581036 | Sybase Central running on Windows systems with the zh_HK locale would have defaulted to zh_CN instead of EN. This occurred because jdk1.6 added a new country code for Hong Kong.
The problem hass now been fixed. |
581046 | A procedure with the statement
MESSAGE ... FOR CONNECTION ... IMMEDIATE did not contain the IMMEDIATE clause in the stored definition of the procedure. This has been fixed. A workaround is to execute the MESSAGE statement using EXECUTE IMMEDIATE. |
581050 | Under certain circumstance, execution of a MERGE statement could have caused the server to raise assertion 100905 ("Articles on the table use do not match those on the table"). The server will now execute the statement correctly. |
581249 | If an application attempted to create a proxy table using the CREATE EXISTING TABLE statement, and the remote server specified in the location clause does not exist, then the server may have given a strange syntax error instead of giving the "remote server not found" error. This problem has now been fixed and the proper error will now always get returned. |
581269 | There were no implementations for the datatypes LONG BINARY and LONG VARCHAR. These have now been added. |
581403 | It is now possible to specify the ESCAPE connection parameter in the "Connect" dialog when connecting to SQL Anywhere servers.
Note, this new feature is actually available for use with all the graphical administration tools. |
581417 | Light weight polling against a secondary MobiLink server that is in a MobiLink server farm, may have failed. This is now fixed. |
581426 | When the number of concurrent synchronizations was greater than the maximum number of concurrent active synchronizations specified by the -sm command line option, the MobiLink server would have quietly rejected any synchronization requests without showing any error or warning messages. This has been fixed. The MobiLink server will now issue the following warning message:
[10101] Synchronization request from client '?' was rejected where ? is the rejected remote ID. A more complete description of this warning code can be found in the documentation. |
581454 | The following improvements/fixes have been made related to exporting data from a SQL Anywhere database to Excel files, via the Microsoft Excel ODBC driver:
1. Attempting to export CHAR, LONG VARCHAR, NCHAR, NVARCHAR or LONG NVARCHAR values, would have failed with a message that the type was unsupported. Now, these types are mapped to VARCHAR (the closest type supported by the Excel driver). Note that the Excel ODBC driver only supports text column widths up to 255. Attempting to export longer values, will still get an error message. 2. The driver portion of the OUTPUT USING string had to be specified as "Driver=" or "driver=". Now, that part of the string is treated without respect to case, so "DRIVER=" is also accepted. 3. REAL, FLOAT, and BIGINT values could not have been exported due to limitations in the Excel ODBC driver. These limitations have been worked around. 4. Numbers that were not MONEY or SMALLMONEY were exported as CURRENCY (i.e. they were displayed with a dollar sign in the Excel spreadsheet). Now they are exported as numbers. MONEY and SMALLMONEY are still exported as CURRENCY. 5. The Export Wizard would consistently have failed when exporting to tables it had to create. The error message was "Syntax error in the CREATE TABLE statement". This has been fixed. |
581542 | If a database had a schema with a very large number of columnsa, it was possible that when dbxtract was run, that the select statement generated to extract the data from some of the tables would have used an incorrect column order. This would likely have resulted in the rebuild failing, since the data types of the columns in the new database would not match the data that have been extracted from the remote database. The problem has now been fixed.
Note that this problem only affected dbxtract, and not dbunload. |
581580 | The server may have crashed if a Transact SQL SELECT INTO statement referenced an OPENSTRING expression. This has been fixed. |
581586 | If the -dt server command line option was used to specify a directory where temporary files were to be created, the server did not use that location when attempting to clean up old temporary files previously left behind when a server did not shut down cleanly. This has been fixed.
A workaround is to specify the temporary file location using one of the SATMP, TMP, TMPDIR or TEMP environment variables. |
581613 | When deploying a Synchronization Model that added a timestamp column to a MySQL consolidated table for timestamp-based downloads, existing rows would never have been downloaded because of MySQL bug #17392. This bug caused the new timestamp column to have values of 0, instead of the column default. A would around for this problem has been implemented. An UPDATE statement is now generated to follow the generated ALTER TABLE statement that adds the timestamp row.
A manual workaround is to update the timestamp column for each row where it is zero, after the column is added. |
581622 | If multiple Java classes, or external environment objects, were selected in the right pane and File -> Print... was select from the menu, then multiple Print dialogs would have been shown. Now a single Print dialog is shown. |
581709 | During optimization process, the SQL Anywhere Optimizer optimizes subqueries by considering different alternative strategies for computing the result of the subquery. During othis process, the optimizer doesn't perform any transformations which correspond to each alternative subquery strategies. Instead, the estimated costs of different strategies are used to decide which execution technique will be executed for this SQL statement in the final access plan. The final best access plan is built to reflect the execution strategy chosen for the subquery. In certain cases, when WINDOW subquery strategy was chosen (see Strategy 4 and Strategy 5 below) the final best access plan was missing the rowid expression of the table pushed into the derived table (in the example below, the rowid of the table "sales_order_items soi" from the main query block). This has been fixed.
For example: The subquery optimization process supported by the SQL Anywhere Optimizer since version 9.0, is described in the patent [1]. The example below illustrates the five execution strategies considered during the optimization process for a SQL statement using a grouped subquery. This issue is related to a bug introduced in version 10.0.0 when two rowids must be built for each base table to support Snapshot isolation. The bug would have manifest itself if and only if Window Strategy 4 or Window Strategy 5 was chosen in the best access plan. [1] System and Methodology for Cost-based Subquery Optimization Using a Left Deep Tree Join Enumeration Algorithm", Anisoara Nica, US Patent 20040220923, awarded August 2009 Original query Q0: SELECT so.id, so.order_date, p.* FROM sales_order so, sales_order_items soi, product p WHERE so.id = soi.id AND soi.prod_id = p.id AND p.quantity = (SELECT max(soi1.quantity) FROM sales_order_items soi1 WHERE soi1.prod_id = p.id ) SQL Anywhere Optimizer subquery execution strategy 1, Q1, evaluate subquery as an expression: SELECT so.id, so.order_date, p.* FROM sales_order so, sales_order_items soi, product p WHERE so.id = soi.id AND soi.prod_id = p.id AND p.quantity = (SELECT max(soi1.quantity) FROM sales_order_items soi1 WHERE soi1.prod_id = p.id ) SQL Anywhere Optimizer subquery execution strategy 2, Q2, evaluate subquery as an uncorrelated derived table: SELECT so.id, so.order_date, p.* FROM sales_order so, sales_order_items soi, product p, (SELECT max(soi1.quantity), soi1.prod_id FROM sales_order_items soi1 GROUP BY soi1.prod_id ) as DT2 (max, prod_id) WHERE so.id = soi.id AND soi.prod_id = p.id AND p.quantity = DT2.max AND p.id = DT2.prod_id SQL Anywhere Optimizer subquery execution strategy 3, Q3, evaluate subquery as a derived table with Bloom-filter predicates: SELECT so.id, so.order_date, p.* FROM sales_order so, sales_order_items soi, product p, (SELECT max(soi1.quantity), soi1.prod_id FROM sales_order_items soi1 WHERE soi1.prod_id IN Bloom-filter( p.id) GROUP BY soi1.prod_id ) as DT3 (max, prod_id) WHERE so.id = soi.id AND soi.prod_id = p.id AND p.quantity = DT3.max AND p.id = DT3.prod_id SQL Anywhere Optimizer subquery execution strategy 4, Q4, evaluate subquery as an uncorrelated derived table with WINDOW functions: SELECT so.id, so.order_date, p.* FROM sales_order so, product p, //// <<-- NOTE that "sales_order_items soi" was moved inside to the DT4 (SELECT max(soi1.quantity) OVER (PARTITION BY soi1.prod_id ), soi1.prod_id, soi1.id FROM sales_order_items soi1 ) as DT4 (max, prod_id, id) WHERE so.id = DT4.id AND DT4.prod_id = p.id AND p.quantity = DT4.max AND p.id = DT4.prod_id SQL Anywhere Optimizer subquery execution strategy 5, Q5, evaluate subquery as a derived table with WINDOW functions, with Bloom-filter predicates: SELECT so.id, so.order_date, p.* FROM sales_order so, product p, //// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<------------------------------------------NOTE that "sales_order_items soi" was moved inside to the DT5 (SELECT max(soi1.quantity) OVER (PARTITION BY soi1.prod_id ), soi1.prod_id, soi1.id WHERE soi1.prod_id IN Bloom-filter( p.id) FROM sales_order_items soi1 ) as DT5 (max, prod_id, id) WHERE so.id = DT5.id AND DT5.prod_id = p.id AND p.quantity = DT5.max AND p.id = DT5.prod_id |
581747 | If a statement of the form "SELECT columns FROM table WHERE index_col = value" was opened more than once by a connection, an OPEN or CLOSE request could have failed with one of the following errors: "Cursor already open", "Cursor has not been declared", or "Cursor not open". The statement must have only involved one table, and the where clause must have had one or more predicates of the form col = value which can all be satisfied by one index. This has been fixed. |
581752 | If the mirror server in a mirroring system failed to start (e.g. due to a TCPIP port conflict), it could have crashed when shutting down. This has been fixed. |
581755 | An undocumented feature could have prevented a MobiLink server from starting when multiple MobiLink servers were trying to start at the same time, against the same consolidated database. The error displayed would have been:
<main> [-10002] Consolidated database server or ODBC error: ODBC: [Sybase][ODBC Driver][SQL Anywhere]Primary key for table 'ml_property' is not unique: Primary key value("'ML','server_info','release_version''") (ODBC State = 23000, Native error code = -193) when the consolidated database was running on a SQL Anywhere server. This problem has now been fixed. |
581768 | If the SQL Anywhere Monitor could not send an email alert, a generic "Email server for alerts not configured" alert was raised. This alert has been replaced by a new "Could not send email" alert which includes more descriptive error messages. This was done in an effort to provide more clues for diagnosing issues with email alerts. |
581793 | If a SQL_NUMERIC or SQL_DECIMAL value had a precision sufficiently greater than the bound precision, then an internal buffer would have been overrun. For example, if a bound column was defined as DECIMAL(10,2), and the precision described by the input SQL_NUMERIC_STRUCT parameter value was 40, then an internal buffer would have been overrun. This problem has been fixed. |
581829 | The MobiLink Listener (dblsn)would have failed to query an optimal polling interval from secondary MobiLink servers, as the primary notifier was not broadcasting the polling interval to secondary servers. This affected a light weight poller dblsn, but not application using the light weight poller API directly. This has now been corrected. |
581830 | The implementations of CreationParms::AddRef and CreationParms::Release, contained confusing casting. Both methods cast the POD object to a ConnectionParms object, which has now been fixed. |
581957 | The database option, divide_by_zero_erro, was removed in version 11.0.0. It has now been re-instated. The default setting for the option is On (as it was in version 10), which gives the same behavior as before this change, i.e. an attempt to cause division by zero results in an error. |
581958 | When monitoring several resources, there was a chance that the SQL Anywhere Monitor could have failed with an 'Out of Memory' Exception. The frequency of this error was dependent on the machine the SQL Anywhere Monitor is running. Also, Linux machines would have seen this error slightly more often than Windows machines. This has now been fixed. |
581979 | Retrieving property('Platform') on a system running Windows 2008 R2 RC3, would have returned "Windows7". This has been fixed, the property now returns "Windows2008R2". |
581980 | If an application executed a statement of the form:
SELECT ... INTO LOCAL TEMPORARY TABLE localtemptab FROM extenv_proc() where extenv_proc() was an external environment procedure that returned a result set, then the SELECT ... INTO statement would have succeeded, but attempting to subsequently access the newly created localtemptab would have resulted in a 'table not found' error. This problem has now been fixed. |
581986 | Executing certain illegal operations on catalog tables could have caused the server to crash after the statement was rejected with an appropriate error. This has been fixed so that the server now works correctly. |
581990 | The ODBC function SQLTables() can be used to get a list of all schemas (users) by calling the function with the SQL_ALL_SCHEMAS argument. The list of users returned by this function only included users that owned a table. In a newly initialized database, this excluded some users, and in particular the DBA user. Now the complete list of schemas is returned, including those that do not own a table. |
581991 | In some cases it was possible for a database to become corrupted if the last write to disk was only partial completed, due to a power loss before the write to disk finished. This would have been extremely rare on a desktop machine or laptop using a conventional disk, but would have been much more likely with flash memory on handheld devices. In either case, corruption was more likely if the database file was encrypted. In order to prevent this corruption it is necessary to change the physical format of the database file. With this change in file format, the database should automatically recover from a partial write.
WARNING: When choosing to use a database with the new file format described below you give up the ability of being able to use older software that is not aware of the file format change. Therefore, once you create this database you will not be able to start an old server with such a database file. Any attempt to start the server with a build prior to this fix will generate an error "server must be upgraded to start 'database' ( capability 37 missing)". Syntax has been added to dbinit and the create database statement to allow for the creation of databases with this new file format. In order to create a database with this new format, use either: - dbinit -xw mydb.db // -xw (creates a database with the new file format) - CREATE DATABASE mydb.db CAPABILITY 'TORNWRITEFIX' ... Syntax has also been added to dbunload to rebuild databases so that the new database will be created with the new file format. In order to rebuild a database with the old format to one with the new format use: - dbunload.exe -c 'your connection string to your old db' -xw -ar // this will replace your old database with a new one - dbunload.exe -c 'your connection string to your old db' -xw -an new.db // this will create new.db in the new file format while maintaining your old database in the old file format NOTE: make sure to have a backup of your database file before attempting this. Also if your database is strongly encrypted then you'll need to provide the encryption key for both the old database and the new database file using the -ek command line parameter. In order to upgrade a database with this new file format from version 9 to version 10 or version 11 you'll need to use 10.0.1 3930 or greater or 11.0.1 2278 or greater. |
582144 | There were no implementations for the datatypes LONG BINARY and LONG VARCHAR. These have now been added. |
582152 | When using the the SQL Preprocessor (sqlpp) command line tool to generate code for UltraLite, the -eu command line option was supposed to flag SQL that UltraLite cannot handle. When this option was on, the following UltraLite-supported statements would have been incorrectly flagged as Disallowed language extensions:
CREATE SYNCHRONIZATION PROFILE ... ALTER SYNCHRONIZATION PROFILE ... DROP SYNCHRONIZATION PROFILE ... SYNCHRONIZE ... This has been corrected. The workaround is to not use the -eu command line option on SQLPP. |
582186 | The "View Data in Interactive SQL" menu item was not always enabled or disabled appropriately. Specifically, for views owned by SYS, the menu item was disabled, rather than enabled; for invalid, disabled and uninitialized views, the menu item was enabled, rather than disabled. Now, the menu item is only enabled for non-materialized views which are valid, and materialized views which are both enabled and initialized. |
582405 | When processing a simple query that bypassed the query optimizer, in some cases it was possible for the server to crash if. This may have occurred when the query contained the SELECT TOP n clause, and 'n' was was a host variable, rather than a literal constant. This problem has now been corrected. |
582589 | If 10 MobiLink Monitors or SQL Anywhere Monitors connected to the same MobiLink server, and the last to connect then disconnected, then the MobiLink server could have crashed. This has been fixed. |
582756 | The changes for Engineering case 544187 caused the server to have a limited number of temporary files that it could create in the lifetime of the server process (64K on non-UNIX systems, 4G on UNIX systems). The problem would have shown up as an error writing to an invalid handle, and a fatal "disk full" error would have been reported. On Windows, the message in the server console would have looked like the following:
A write failed with error code: (6), The handle is invalid. Fatal error: disk full when writing to "???" This problem has been fixed. A related problem was also fixed where failure to create a temporary file for the utility_db would have cause the server to crash. |
582778 | Calling the system procedure sa_get_histogram(), which is used to obtain the current state of a histogram on a specified column, could have caused the server to deadlock. The probability of such a deadlock taking place was extremely low and depended upon a number of factors. This problem has now been resolved. |
582782 | When a consolidated database was running on an Oracle RAC, the MobiLink server could have skipped rows being downloaded to remote databases in a time-based download. In the following situations, rows modified in the Oracle database could be missed from the download stream:
1) the MobiLink server connected to one node on an Oracle RAC; 2) another application, A connected to another node on the same Oracle RAC; 3) application A modifies rows in a synchronization table without commit; 4) a MobiLink client, R1 issues a synchronization request that contains a time-based download from this table; 5) the MobiLink server completes the synchronization request successfully; 6) A commits its transaction; Then the rows modified by application A would not be down loaded to remote R1. This problem has now been fixed. Note, as a result of this change, the Oracle account used by the MobiLink server must now have permission for the GV_$TRANSACTION Oracle system view instead of V_$TRANSACTION. Only SYS can grant this access. The Oracle syntax for granting this access is: grant select on SYS.GV_$TRANSACTION to <user-name> |
582789 | The MobiLink server would still have tried to access the ml_scripts_modified table in the consolidated database, even when it was running with MSDTC on and its system objects were installed on an MLSD database specified by the -cs command line switch. This would then have resulted in the MobiLink server reporting the error message:
Table "ml_scripts_modified" not found during each synchronization, when a pooled database connection was reused.This problem has now been fixed. |
582799 | The server could have crashed during a LOAD TABLE statement if the DEFAULTS ON clause was used, and a load-time error occurred when evaluating or assigning the default expression. This has been fixed.
The workaround is to fix the column default definition so that no error occurs. |
582808 | The Apply button on a property sheet could have become enabled even when no changes had been made on the property sheet. For this to have occurred, the property sheet had to contain a formatted text field or spinner control. This is now fixed. |
583189 | The server could have crashed in some circumstances after a table definition was
reloaded. This has been fixed. |
583194 | The QAnywhere Standalone Clients were not adhering to the synchronization policies as they are defined in the documentation. In several scenarios, the clients would trigger synchronizations even though the policy requirements were not satisfied, although it was never the case that a synchronizations didn't occur when one should have. This has been fixed so that the clients now synchronize only at the appropriate times as defined by the policies. |
583241 | Under some specific circumstances, the server could have crashed while updating tables with triggers. This has been fixed so that execution of UPDATEs now takes place correctly.
A workaround is to recreate the table under question. |
583353 | The version of samonitor.sh included with the development version of the SQL Anywhere Monitor on Unix platforms provided a start() method to spawn the database server, but did not provide a stop() method to shut it down. This has been fixed.
Note: if the desktop environment has a system tray supported by Java 1.6, it is possible to shut down the server monitor cleanly by right clicking on the SQL Anywhere Monitor logo and choosing "Shutdown" |
583380 | The server may have returned the error "-890: Statement size or complexity exceeds server limits", or needed a very long time to complete, for very complex statements that used proxy tables and alias names that depend on many other alias names. During the Describe Output or Open of the statement, the server may have consumed a large amount of cache space and blocked other requests. This has been fixed. |
583393 | When right-clicking the SA Monitor tray icon and selecting "Exit SQL Anywhere Monitor", nothing would happen. This problem has now been fixed, and the SQL Anywhere Monitor now shuts down as expected. This problem was introduced by the changes for Engineering case 575525. |
583560 | If an application that was connected to a local server, either via the SQL Anywhere ODBC driver or the iAnywhere JDBC driver, attempted to perform a wide or batched insert into a proxy table and the insert subsequently returned with a conversion or some other error part-way through the insert, then the rows leading up to the error would have been inserted into the proxy table twice. This problem has now been fixed. |
584125 | Specifying an IPv6 address with a port number for the HOST option, eg. LINKS=tcpip(host=(<ipv6 address>):<port>) would give an SQLE_CONNECTION_ERROR (-832) with the text "Unexpected error 10" or "Mismatched braces near '???'". This only happened when parentheses were used for both the TCP parameter and the HOST option. This has been fixed.
As a workaround, use braces to specify the TCP options, eg. LINKS=tcpip{host=(<ipv6 address>):<port>}". |
584152 | A statement-level "after update of" trigger would not have fired if the columns in the "of" list were modified by another trigger, but were not present in the set clause of the originating query. This has been fixed.
Note, row level triggers do not have this problem. |
584304 | If an application executed an external environment procedure and subsequently canceled the external call, then all other external environment requests would have blocked until the external procedure being cancelled acknowledged the cancel request. This problem has now been fixed. |
584310 | Download performance of the MobiLink server has been improved for tables that contain no BLOB columns, when the consolidated database is running on Microsoft SQL Server. |
584322 | The following new features have been added to the iAnywhere Solutions ODBC driver for Oracle:
1) In order to determine if a stored procedure returns a result set, or if a procedure uses Oracle VARRAYs, the iAnywhere Solutions Oracle ODBC driver needs to describe the stored procedure through Oracle OCI functions. The driver now provides an extra connection parameter, ProcOwner (long form) or POwner (short form), which is used to by tyen driver to describe all the stored procedures invoked by the application. This parameter can be given as followis: -c "uid=...;pwd=...;procowner=my_procedure_owner;..." 2) The iAnywhere Solutions ODBC driver for Oracle now supports VARRAYs used by packaged procedures. |
584327 | In some very rare cases, the SQL Anywhere Monitor could have caused a Java process to consume 100% of the CPU. This has been fixed. |
584466 | The server was only looking at the groups that a user was a direct member of when verifying authorities acquired via group inheritance. This has been corrected so that the server now checks for inheritable authorities through all group memberships, direct and indirect. For example, if 'group1' is a member of 'group2' and 'user1' is member of 'group1', 'user1' will obtain all inheritable authorities of group2 also. |
584478 | BlackBerry devices with OS 4.2 or later, may now read and write UltraLiteJ databases to either the internal flash or the SD (media) Card, in addition to the previously supported persistent store. While the persistent object store of BlackBerry devices is faster, it has limited capacity and is shared with RAM and program storage. Newer devices such as the Bold, Storm and Tour have internal flash (Bold and Storm have almost 1GB) and many devices support SD Cards. Persistent store is 3-4 times faster than internal flash, and internal flash is faster than SD cards. Databases stored on internal flash (URIs begining with "file:///store/") or media cards ("file:///SDCard/") can keep more rows in memory, and/or use a bigger cache to improve performance.
Databases names must follow the format for a fully qualified, absolute path file name as described in the file URL format as part of IETF RFCs 1738 and 2396. That RFC dictates that a file URL takes the form: file://<host>/<path> In the form above, <host> is the fully qualified domain name of the system on which the <path> is accessible, and <path> is a hierarchical directory path of the form: <root>/<directory>/<directory>/.../<name>. For BlackBerry devices, the internal flash is accessed using URIs starting with file:///store/ (case sensitive) while the SD media card is accessed using URIs starting with file:///SDCard/ (case sensitive). File paths are case insensitive except for the host portion which is case sensitive. Percent (%) characters have special meaning and relative paths (directories "." and "..") are not allowed. For more information on file name restrictions, please consult the BlackBerry JDE (4.2 or later) API Reference for the javax.microedition.io.file package. The following example creates a configuration for using the media card. The database is store in the directory "ulj" and is called "test.ulj". // BlackBerry media card Sample - use file:///store/ulj/test.ulj // for internal flash Connection conn; ConfigFileME config = DatabaseManager.createConfigurationFileME( "file:///SDCard/ulj/test.ulj" ); try { conn = DatabaseManager.connect(config); } catch(ULjException ex) { conn = DatabaseManager.createDatabase(config); // Create the schema here. } To maintain support for BlackBerry 4.1 devices, a new distribution directory UltraLite\UltraLiteJ\BlackBerry4.2 has been added which contains files for 4.2 or later devices. BlackBerry 4.1 devices and simulators should continue to use the UltraLite\UltraLiteJ\J2meRIM11files. BlackBerry 4.2 and later devices can use either distribution if they do not require SD card or internal flash storage. The UltraLiteJ Database Transfer tool has not been updated. |
584486 | Unloading a SELECT statement into a compressed variable could have caused a server crash. This has been fixed. |
584512 | When validating databases, using the VALIDATE DATABASE statement or the Validation utility 'dbvalid -d'), spurious errors could have been reported under rare circumstances. This has been fixed. |
584517 | When validating a database, either using the VALIDATE DATABASE statement, or with the Validate utility (dbvalid -d), an error would not have been reported if a transaction log page was encountered in the database file. This has been fixed.
Note, this situation would have been due to file corruption on the disk. Transaction log pages are not stored within the database. |
584691 | A new "IF NOT EXISTS" clause can now be optionally specified in CREATE TABLE, CREATE INDEX, and CREATE PUBLICATION statements. If this clause is present, and the object named in the statement already exists, then executing the statement will not modify the database and no error will be returned.
The complete syntax for the new clause in the various statements are: - CREATE TABLE [IF NOT EXISTS] table-name (...) - CREATE [UNIQUE] INDEX [IF NOT EXISTS] index-name ... - CREATE PUBLICATION [IF NOT EXISTS] publication-name ... |
584721 | When using the SQL Anywhere C API, no error information was returned when a connection attempt failed. This problem was introduced as part of a previous fix to dbcapi, and has now been corrected. |
584722 | When installing EBFs on Unix systems, the installer would not have applied the updates if the destination directory included spaces. This has been fixed. |
584873 | If the QAnywhere Agent for Ultralite was running using the automatic policy, and a message was sent during a loss of communication with the QAnywhere server, then the message would not have been sent upon re-establishing communication. This has now been fixed so that and unsent messages will be sent shortly after that connection is re-established.
A workaround for this problem is to perform an action that will trigger a synchronization (eg. send another message, call triggerSendReceive, etc.) |
585013 | If an application executed Connection.prepareStatement(), or Connection.prepareCall(), on one connection, and the prepare request took a long time, then attempting to execute Connection.createStatement(), Connection.prepareStatement(), or Connection.prepareCall() on a different connection would have ended up blocking until the original prepare returned. This problem has now been fixed. |
585015 | Exporting numeric values to an Excel spreadsheet would have failed when running the Interactive SQL utility on Windows systems which were configured to use something other than a period for the decimal separator in numbers. This has been fixed.
Also, it is now possible to consistently export TIME, DATE, and TIMESTAMP values to Excel spreadsheets. |
585018 | Calling the function SetParameter(), could have caused the UltraLite runtime to crash when the database had no base tables. This has been fixed. |
585024 | When inserting or updating a row using a table on the "Result" tab, values read from a file were silently truncated at 1,000,000 characters. This limitation has been removed.
Note, this bug affected both the Interactive SQL utility, and the "Data" tab in Sybase Central. |
585030 | The "C" and "P" command line options for SQLPP cause the flagging of SQL syntax during precompilation. The use of "C" is to verify conformance to the core language features of a particular SQL standard, and "P" is to verify conformance to the complete ANSI language, as supported by SQL Anywhere, including optional packages. However, the use of "P" erroneously reported conformance for core language features only, duplicating the output generated by the use of "C". This has been fixed. Using "P" now reports language conformance, including optional ANSI standard packages, as described in the documentation. |
585035 | The QAnywhere server could have stopped sending/receiving messages with an Enterprise Messaging Server, through its JMS connector, when a SQLException was thrown by the JDBC driver. This has been fixed.
Where possible, the QAnywhere server should recover gracefully from exceptions thrown by the JDBC driver and continue processing messages. |
585046 | Consider an UltraLite database with a table as follows:
CREATE TABLE tbl1(a INTEGER, PRIMARY KEY (a)) INSERT INTO tbl1 VALUES (10000000) Fetching the results using the Interactive SQL utility (dbisql) in command-line mode as follows: dbisql -ul -c "uid=dba;pwd=sql;dbf=c:\temp\test.udb" select a from tbl1 would have returned the value 1000. The value was truncated in the display, and was only an issue when displaying the results to the command shell. This is now fixed. |
585056 | If the database option Escape_character was set to OFF, attempting to change a user's password via the NEWPWD connection string parameter would have failed silently. This has been fixed. A workaround is to leave the escape_character setting at its default (ON). |
585077 | The Database Transfer utility would have failed to transfer some databases. After establishing the connection, the utility would have immediately finished the transfer, and the progress bar on the client would still have indicated 0%. The log on the desktop utility would have shown a negative value for chunks of data expected. This has been fixed. |
585258 | The MobiLink server would not have shown any script contents, if the scripts were written in Java or .NET, even when the verbose option (-vc) was specified in its command line. This problem is fixed now. |
585282 | If an application connected via Open Client or jConnect, and requested a packet size greater than 512 bytes, the SQL Anywhere server would have restricted the packet size to a maximum of 512 bytes. This restriction has now been relaxed such that the maximum Open Client or jConnect packet size is now 4096 bytes for a version 11.0.1 or above server, and 1024 bytes for a version 10.0.1 server. |
585306 | Reading a blob (long binary) value from the database would have taken 7 times longer than it did to write the blob (as tested on a BlackBerry Bold). This has been fixed. |
585456 | The queue lengths in the Utilization Graph of the MobiLink Monitor could have been incorrect and the RAW_TCP_STAGE_LEN, STREAM_STAGE_LEN, HEARTBEAT_STAGE_LEN, CMD_PROCESSOR_STAGE_LEN metrics printed by the -ppv option could also have been incorrect. These issues have now been corrected. |
585530 | The changes for Engineering case 568426 broke the Table and View permissions grid support for 9.x databases. This has now been fixed. |
585713 | Under rare circumstances, the server may have hung when run on Solaris systems. This was more likely to have occurred on machines with greater parallelism (e.g., Niagara chips) under a highly concurrent load. This has been fixed. |
585735 | For some queries, a result set row could have indicated that a column value was not null, even if the value is null. Retrieving this value could then have returned misleading, or invalid data. This has now been fixed. |
585979 | Using the BCP utility to insert data into a table could have failed with a protocol error, if the version of Open Client that BCP used was older. This problem has now been fixed. |
586180 | Under certain circumstances, the server could have failed an assertion, or crashed, while
processing queries containing large strings. This has been fixed. |
586188 | Opening the Events folder could have caused a "Can't decode condition name" error if an event was created via Interactive SQL utility, instead of via Sybase Central. This has been fixed. |
586217 | Methods in the SADataReader clase could have returned an incorrect fraction for datetime and time columns. This has now been corrected. |
586362 | If an application made use of a global temporary table in an external environment via a server-side connection, then there was a chance that the server may have failed an assertion, hung, or crashed, when the application connection closed. This problem has now been fixed. |
586414 | When running the Interactive SQL utility in a command window, if the output was redirected to a file, and the "-q" command line option was not specified, error messages would not have been displayed in the command window. This was a problem because the user had to press ENTER to continue the script, but the message saying to do that was redirected to the file. This has been corrected spo that the error output is now sent to the STDERR device, which is displayed in the console .
To workaround this problem, use the "-q" command line option. That will print the error message in the console and will not prompt the user to press a key to continue. |
586427 | A typo in the message displayed when connecting to an unsupported database type has been fixed. |
586596 | The SQL Anywhere server allows specification of the isolation level for a query as part of query text via the OPTION clause. This specification is valid only for the current statement and is meant to override other specifications of isolation level, e.g., those provided by the setting for the database option isolation_level, and cursor flags provided by the application at PREPARE and OPEN times.
The server failed to honour the per statement specification for isolation level and used instead other specifications. This problem has been resolved. Now the isolation level specified in the query text is given the highest precedence. |
586604 | On Solaris systems, if the directory /usr/ucb precedes /bin and /usr/bin in the PATH, the installer could have failed. Fixed by prepending /bin and /usr/bin to our local copy of PATH. |
586629 | OPENXML namespaces may have caused the server to crash. This has been fixed. |
586829 | UPDATE and DELETE statements could have acquired intent locks on tables that were not modified by the statement, possibly introducing concurrency or deadlock problems to an existing application. This has been fixed. |
586837 | On Unix systems, the 64-bit server may have failed to start when the virtual memory user limit (ulimit -v) was low relative to the sum of the physical memory and swap space. This has been fixed. |
586868 | When using SMTP to send email alerts, an incorrect error message could have been reported when an error occurred. This has been fixed. |
587028 | The fix for Engineering case 581991 could have inadvertently turned on the feature for a new database architecture even if it was not requested. This has now been fixed. This could only have affected a database that was created using 9.0.2 build 3867-3880 or 10.0.1 build 3930-3948. The query:
select * from sa_db_properties() where propname = 'HasTornWriteFix'; can be used to determine if the setting is ON or OFF. Turning the setting OFF requires a rebuild of the database using an engine with this fix. |
587036 | If a LONG VARCHAR column containing multi-byte data was fetched by the OLE DB provider, the resulting string may have contained appended null characters. As a result, the Length attribute of the string (e.g., strTxt.Length) may have been larger than expected. This problem has been fixed. |
587040 | If the SQL Anywhere Monitor encountered an internal error and attempted to restart data collection, there was a chance that data collection would not have restarted correctly. This has been fixed. |
587193 | Under certain circumstances, the server could failed an assertion, or crashed, while
processing queries containing large strings. This has been fixed. |
587214 | When HTTP client debugging was turned on, calling the HTTP client procedure would have resulted in a request time-out. This problem was introduced by the changes made for Engineering case 565244, and would have occurred when client logging was initiated, either with the -zoc command line option, or by calling the system procedure sa_server_option(), to set the 'WebClientLogFile' file name. This has now been fixed. |
587246 | If a synchronization model was created that contained mappings with errors, and then the mappings were deleted or disableds, the sync model could still not have been deployed. The workarounds to this were to either recreate or enable the mapping, or manually edit the sync model file and remove the scripts with errors. This has been fixed. |
587256 | If a database with a foreign key declared as "NOT NULL" was unloaded or rebuilt, the resulting reload.sql or database contained the foreign key without "NOT NULL" declared. This has been fixed. |
587308 | The UltraLiteJ runtime would have crashed if a SQL statement had too many terms (exceeding 150). UltraLiteJ used a fixed size stack to store the tokens of the statement when parsing it. The problem has now been resolved by growing the stack when necessary. |
587396 | If two or more connections, or two or more events, that made CLR calls closed or completed simultaneously, then there was a chance the CLR external environment may have hung. This problem has now been fixed. |
587402 | If an application made an external environment call, and another connection that also made an external environment call closes at the exact same time, then there was a very small chance that the server would have incorrectly returned a thread deadlock error, rather than allowing the external environment call to go through. This problem has been fixed. |
587404 | If an application made repeated calls to the CLR external environment, then the CLR environment (not the server) would have leaked memory. This problem has now been fixed. |
587429 | No limit on the size of a CONTAINS query was imposed. This has been fixed.
After this change, a CONTAINS query cannot contain more than 300 valid terms (terms that are not in the STOPLIST and are within permitted term length range). |
587671 | The server may have crashed when trying to find matching materialized view candidates. This would have happened when a materialized view candidate had a very complex SELECT clause, and the server was close to stack overflow or had too little cache space. This has been fixed. |
587699 | If the DBTools function DBSynchronizeLog() was called when no callback routines (errorrtn, msgrtn, warningrtn, logrtn, progress_msg_rtn, progress_index_rtn, msgqueuertn, confirmrtn) were defined, it would have crashed. This problem has been fixed. It is no longer necessary to define all callback routines.
A workaround is to define each of the callback routines. Example: a_sync_db sync; . . . sync.confirmrtn = (MSG_CALLBACK) ConfirmCallback; |
587795 | Updates or deletes to temporary tables may have caused the engine to crash if the temporary file had corrupted pages. This has been fixed. |
587856 | An application that was connected via jConnect or Open Client, that attempted to insert or retrieve a date value prior to January 1,1753, would have been incorrectly received an invalid date value error for the insert, and would have been returned the date January 1, 1753 for the fetch. This problem has now been fixed. Note that application must use newer versions of jConnect or Open Client in order to get date support for dates prior to January 1, 1753. Also, the restriction of January 1, 1753 using jConnect or Open Client still exists for datetime values. |
587873 | If an application made a CLR external environment call and then subsequently cancelled the CLR request, there was a chance that the CLR external environment would crash. This problem has now been fixed. |
587888 | Previously, if an application connected to a Web Edition server and attempted to make use of a directory access server, the Web Edition server would fail the request with a "this server is not licensed to support the 'Remote Data Access' feature" error. This problem has now been fixed. Note that attempting to make use of other remote data access server classes will still give the "not licensed" error when the application is connected to a Web Edition server. |
588055 | When running the CREATE ENCRYPTED/DECRYPTED DATABASE '<newdb>' FROM '<sourcedb>' statement, if the transaction or mirror log name stored in the source database file was unqualified, we would have tried to locate it with respect to the engine's current working directory rather than the location of the database file.
For example, if the engine was running in the directory /foo, the statement CREATE ENCRYPTED DATABASE 'new.db' FROM '/bar/source.db' was issued, and the transaction log name stored in source.db was 'source.log,' we would have tried to open /foo/source.log. If the current working directory had a version of the log file that was incompatible with the source database, the operation would fail. This has been fixed. |
588076 | If a proxy table existed in a case-sensitive database, and the proxy table had an index on it, unloading and reloading the database would have failed with the error "Cannot create item (<index_name>) in the specified dbspace". This has been fixed. |
588253 | A database upgrade would not have added execute permissions to "public" on the recreated procedure sp_password. This has been fixed. |
588329 | If an application connected via jConnect used the method CallableStatement to execute a stored procedure, then there was a chance the connection would have terminated with a protocol error. This problem would only have occurred if the stored procedure had an argument named @p# where # was an integer between 0 and n-1 with n representing the number of arguments in the stored procedure. For example, if an application connected via jConnect used CallableStatement to execute a stored procedure named test, and if test had 3 arguments, and if one of the arguments in test was named @p0, @p1 or @p2, then the server would have dropped the connection with a protocol error. This problem has now been fixed.
It should be noted that this problem does not affect applications using the iAnywhere JDBC driver. |
588497 | Execution of the MERGE statement within SQL Anywhere could have caused the server to crash under some specific circumstances. This problem has now been resolved. |
588498 | If a server attempted to abandon or cancel a request to start an external environment, due to the server being extremely busy or overloaded, then there was a very small chance the server would have hung. This problem has now been fixed. |
588499 | The server would have stopped the TCP listener and printed the message "TCP Listener shutting down (130)" to the console log, if it has accepted a new client connection but the client side has already gone. This has been fixed. |
588539 | If an application attempted to access a JDBC based Remote Data Access server, and the tsql_variables option was set to ON, then the server would have failed the request with a syntax error. This problem has now been fixed. |
588692 | On Unix systems, if the transaction log for a primary server was not located in
the server's current working directory, and was renamed when the mirror server was unavailable and the primary server was restarted, synchronization would have failed when the mirror server then became available again. This has been fixed. |
588720 | If an application started Java, then subsequent connections to the server may have found that the option settings for date_format, time_format, timestamp_format and date_order were different than expected. This problem has now been fixed. |
588740 | We learned that in the interest of improved performance, Microsoft Windows explicitly prevents certain documented methods of guaranteeing that data has been written to the physical storage medium from working on IDE/SATA/ATAPI drives (SCSI drives are unaffected). Recoverability after a power outage could be compromised. The database server now performs additional operations to flush data to disk to improve recoverability. In testing, there was no measurable performance degradation by this change.
Relevant third-party articles: http://perspectives.mvdirona.com/2008/04/17/DisksLiesAndDamnDisks.aspx http://msdn.microsoft.com/en-us/library/dd979523%28VS.85%29.aspx http://research.microsoft.com/apps/pubs/default.aspx?id=70554 http://groups.google.com/group/microsoft.public.win32.programmer.kernel/browse_frm/ thread/4590ed3a4133828f/406cfb3a9deae044 |
588917 | The policy file for .NET 2.0 was installed incorrectly. This has now been corrected. |
588921 | If an application attempted to query a non-nullable bigint column from a proxy table, and the remote server class was asejdbc, then the request would have failed with a strange conversion error. This problem has now been fixed. |
588924 | If a timestamp column was defined with "not null default [utc] timestamp", and an insert specified a null value for that column, then the insert would have failed with a SQL error. In version 9 and earlier, the insert used the default instead and did not fail. This behaviour has now been restored. |
588940 | When using the Import Wizard to import data from a file, if the file specified did not exist, an incomplete error message was displayed. This has been corrected so that the message is now complete. |
588950 | The Import Wizard could have crashed when clicking the Back button on the "Where do you want to save the data" page, if "In an existing table" was selected but no table was selected in the list. This has been fixed. |
589219 | If many connections attempted to make CLR external environment calls simultaneously, then there was a chance that some of the requests would have failed with a strange unhandled exception error. These unhandled exception errors would come from the CLR external environment, and not from the server itself. This problem has now been fixed. |
589236 | The MobiLink server could have crashed following a failed synchronization. This has now been fixed. |
589406 | Creating a text configuration object, or creating a text index from a text configuration, did not qualify object names when they were logged in the transaction log. This has now been corrected. |
589437 | A single-value SELECT could have produced incorrect results when the select list involved non-trivial expressions (such as function calls). This has been corrected. |
589624 | Some string operations, involving concatenation and substring on compressed columns, may have caused the fetch request to hang forever. This has been fixed. |
589646 | The number of bytes required to store a bitstring column value could have been under reported. This could then have potentially caused buffer overruns in client applications. This has been fixed so that the correct byte suze is now reported. |
589655 | No limit on the size of a CONTAINS query was imposed. The query length was not checked, and number of terms was not counted. This could have lead to queries that would have taken very long to execute, or to server crashes. This has been fixed. Now, a CONTAINS query cannot contain more than 300 valid terms (terms that are not in the STOPLIST
and are within permitted term length range). |
589666 | When converting NUMERIC values to a VARCHAR, the server could have truncated the results when the precision of the NUMERIC value exceeded 30. This has been fixed by changing the conversion to produce a VARCHAR with size 2 plus the precision of the source NUMERIC value. |
589762 | The server would have crashed if the system functions db_property('LogFileFrangments') or sa_db_properties() were executed against the utility database. This has been fixed. |
589802 | Applications would have been able to connect to a database using the database's alternate server name, and then create, stop, and drop other databases on the same server. This has been fixed, all of these operations are now disallowed when connected through an alternate server name. |
589821 | If the remainder() function was used with DECIMAL arguments and the value of the second argument was zero, then NULL would have been returned and an error was not generated when the divide_by_zero_error option was set to On (the default value). This has been fixed. |
589829 | Selecting the Data tab for either an invalid or disabled view, or a disabled or truncated materialized view, would have caused Sybase Central to crash when attempting to recompile and/or refresh the view. This has been fixed. |
589848 | SQL Anywhere server could have generated a spurious "cardinality violation" error when executing the MERGE statement if the statement being executed did not contain any WHEN MATCHED clauses, or none of the specified WHEN MATCHED clauses were unconditional, and there were at least two rows in the input data set that matched a single target row and don't qualify for any of the WHEN MATCHED clauses. This has been corrected so that the server will now silently ignore these duplicate rows instead of generating a cardinality violation error. |
590017 | When converting NUMERIC values to a VARCHAR, the server could have truncated the results when the precision of the NUMERIC value exceeded 30. This has been fixed by changing the conversion to produce a VARCHAR with size 2 plus the precision of the source NUMERIC value. |
590020 | When run on Unix systems, queries of the form "SELECT ... FROM directory_access_table WHERE file_name=...", where directory_access_table was a proxy table to a directory access server, would have returned an empty result set. This problem would only have occurred if the server had been updated to include the fix for Engineering case 569934. This problem has now been fixed and the server will now properly return a result set. |
590030 | A new "OR REPLACE" clause can now be optionally specified in the CREATE SYNCHRONIZATION PROFILE statement. If this clause is present, and the profile named in the statement already exists, then it will be replaced. Otherwise, it will be created. |
590041 | If query optimization with matching materialized views generated an error while processing a materialized view candidate, the error was still returned to the application. For example, if a materialized view candidate contained additional tables for which the user did not have SELECT permissions, the error "Permission denied: you do not have permission to select from "tablename" would have been returned. This has been fixed. Now, if an error is encountered while processing a materialized view candidate, the error is ignored and the view is not used in the view matching process. |
590045 | When executing a SELECT DISTINCT query against a newly created table with no data, the runtime would have crashed with a NullPointerException. This has been fixed. |
590048 | The "SYNCHRONIZE OFF" table constraint in a CREATE TABLE statement may have failed when the same statement had column defaults specified as well. For example, the statement "create table t ( id int primary key default autoincrement, c2 int, synchronize off)" would have crashed the runtime. This has been corrected. |
590061 | If a MobiLink server had a connection from a MobiLink Monitor, or a SQL Anywhere Monitor, it could have hung while printing warning 10082, "MobiLink server has swapped data pages to disk ... ". This was due to a deadlock between the thread printing the warning and a thread sending a monitor event. This has been fixed. |
590098 | A server crash could have occurred while running the Index Consultant. This has been fixed. |
590156 | The server may have incorrectly rewritten WHERE, ON, or HAVING clauses, causing no rows, or too few rows, to be returned. This would have happened when the server found redundant conjuncts and try to remove them. This has been fixed.
A sample of this type of query: select 1 from T where a = 1 and ( b = 2 or c = 8 ) and ( d = 4 or e = 10 ) and ( a = 1 or e = 7 or c = 9 ) |
590210 | The SQL Anywhere OLE DB provider implementation of IMultipleResults::GetResult() returned an incorrect 'rows affected' count for inserts, updates, and deletes. In this situation, the result returned by OleDbCommand.ExecuteNonQuery(), which called the GetResult() method, was -1. This problem has now been fixed to return the correct 'rows affected' count. |
590215 | Database corruption was possible in certain rare circumstances. This has been fixed. |
590243 | Sorting a list of messages on the "Messages" and "Archived Messages" tabs by the "Status Time" column, would not have sorted the messages correctly. The comparator for the date column had been based on the string representation of the date, rather than the date itself. This has been fixed. |
590374 | Calling the QAManager.close() method, immediately after receiving a message asynchronously, could have caused the manager to hang indefinitely. This has been fixed |
590383 | On UNIX systems, there were directories left in the temporary directory, with names of the form __SQLAnyCli__X_Y, where X is a process number and Y is an alphanumeric number. This usually happened when a SQL Anywhere client application was terminated abnormally. An example of this was the PHP driver running within the Apache web server. This has been fixed. |
590401 | If an application used a JDBC based Remote Data Access class, and the application subsequently changed the setting for quoted_identifier or ansinull, then the new setting would not get sent to the remote server. This problem has now been fixed. |
590468 | When opening a database's ER Diagram tab and creating, modifying or deleting a table or foreign key, the ER Diagram would not have been updated automatically. The ER Diagram tab had to be manually refreshed via View -> Refresh Folder, or View -> Refresh All, in order to see the changes. Now the ER diagram is kept up-to-date automatically. |
590471 | When the set of tables shown in the ER Diagram was limited (by selecting File -> Choose ER Diagram Tables...), and then subsequently renaming one the tables that had been selected in the Choose ER Diagram Tables dialog, the table would then no longer have appeared in the ER Diagram. This has been fixed. |
590569 | Only users with DBA authority should be able to execute COMMENT ON DBSPACE statements, but the server was failing to check for this permission. This has been fixed. The server now ensures that the user has DBA authority before executing a COMMENT ON DBSPACE statement. |
590591 | If the server was started on Netware, and multiple connections that had made Java calls shut down at the same time, then there was a chance the server would have crashed. This problem has now been fixed. |
590602 | Executing a SQL statement, immediately followed by an OUTPUT statement and nothing else, would have cause an internal error if the "Show separate Messages pane" option was set on. This has been fixed. |
590607 | Incorrect results may have been obtained for functions with a variable number of arguments, when NULL was specified as the first argument. This has been corrected. |
590633 | Symbols from the Dbmlsync C++ API could pollute the user's default namespace. These symbols are now segregated into their own namespace named "DbmlsyncClient11". Existing Dbmlsync C++ API applications will still be able to compile without modification, since the dbmlsynccli.hpp header file now also includes "using namespace DbmlsyncClient11". Those wishing to exclude the USING command, and be forced to reference the symbols using the namespace, can define a macro called MULTIPLE_DBMLSYNC_API_VERSIONS in their source code. |
590692 | The server may have modified the wrong table when executing an UPDATE or DELETE on a view, if the view was specified in the FROM table-list as well. This has been fixed. |
590702 | In some cases, executing query plans with a HashGroupBy and a Distinct could have required up to twice as much CPU time than necessary. This has been fixed.
The presence of this issue can be identified by examining a graphical plan with statistics. If the estimated number of rows coming out of a HashGroupBy or a Distinct is small (less than 100), and the actual number of rows is large (many thousands or more), the hash operator may be operating less efficiently than possible. The performance penalty for a query suffering from this problem is unlikely to exceed 100% (i.e twice as slow). |
590803 | When using the debugger in Sybase Central, sometimes a breakpoint was hit and the error "The source code could not be displayed for the <procedure/event/trigger> because the database filter is excluding it." was incorrectly shown. This has now been fixed. |
591001 | In very rare circumstances, the server may have crashed when it should have returned the sql error SQLSTATE_SYNTACTIC_LIMIT. This may have occurred when loading very compley view definitions, or executing a SELECT INTO into table statement. This has been fixed. |
591002 | The changes for Engineering case 582782 could have caused the MobiLink server to be much slower for small sync than servers without the fix. This problem would have occurred when a consolidated database was running on an Oracle RAC. The slowness is in the Oracle server: fetching the minimum starting time of the open transactions from gv$transaction can take as much as a couple of seconds and it is much slower than from v$transaction. This has now been corrected. |
591061 | If a database had a partial write to the checkpoint log, then it was possible that database recovery could have failed in a case which was actually recoverable. This only affected encrypted databases. This has now been fixed. |
591275 | The JDBC based Remote Data Access classes are generally not recommended due to their higher resource requirements and significantly lower performance, when compared to the ODBC based Remote Data Access classes. However, for those applications where an ODBC based Remote Data Access class is not an option, improvements have now been made to increase the performance of fetching results from a remote server using a JDBC based Remote Data Access class. Nevertheless, even with these performance improvements, the recommendation is still to use ODBC based Remote Data Access classes instead of the JDBC based classes whenever possible. |
591301 | The server may have returned too many result rows if the query contained a DETWEEN predicate with constants, and a parallel index-only scan was used. This has been fixed. |
591546 | When the server executed a CREATE VIEW statement, and the view's SELECT statement referenced a materialized view that was not yet initialized, the statement would have failed with the error "Cannot use materialized view 'viewname' because
it has not yet been initialized". The script generated by dbunload -n could have failed trying to recompile views. This has been fixed. |
591824 | When running on Windows Vista, menu items that toggle a property on or off would not always have shown the check mark next to the menu item's text. Similarly, menu items that choose a value from a mutually exclusive set of values would not always show a sphere next to the currently selected value. Both of these problems have now been fixed. |
591832 | When using the debugger in the Sybase Central, a NullPointerException could have been thrown when leaving debugging mode. This would likely have occurred infrequently, but has now been fixed. |
591833 | The ADO.NET provider could have failed to unpack and load dbdata.dll. A race condition has been fixed. |
591837 | The Index Consultant in the Interactive SQL utility would have failed to process queries containing line-terminated comments (ie -- or //). This has been fixed.
As a work around, removing the comments allowed the analysis to proceed. |
592018 | It was possible for the Interactive SQL utility (dbisql) to have crashed when clicking the File/New menu item, or by pressing CTRL+N, when connected to a database and the contents of a file was being displayed. The problem was timing dependent, and was more pronounced the longer the database latency was. This has been fixed. |
592035 | Clicking the "Get Plan" button in the Plan Viewer window could have caused the Interavtive SQL utility to crash if it, or another Plan Viewer window, was executing a statement at that time. This has been fixed. |
592269 | Very large dates or timestamp values, such as "9999-12-31", would not have synchronized. The synchronization would have failed, possibly due to the exception "UltraLiteJ Error[-85]: Communication error Unexpected end of file from server", and the MobiLink sync log may have shown an error like "[-10308] Upload data for column 15 of table 'SalesOrder_1_0_getlist' is invalid"; however the column identified was not the column causing the problem. It was also possible that no error was detected, but that subsequent columns may have been corrupted. This has been fixed. |
592421 | Executing the utility SASetupAspNet.exe would have caused an unhandled exception "Could not load file or assembly iAnywhere.Data.SQLAnywhere" to be thrown. This problem has been fixed. |
592425 | When the server starts, the port numbers on which the server is listening are displayed on the console, but only if they were not supplied on the command line (using the -x tcpip(port=xxx) switch). This has been fixed - the port numbers are now always displayed. |
592454 | If left running for a long time, there may be a gradual degradation in responsiveness of the SQL Anywhere Monitor. For this to have occurred, a SQL Anywhere resource would have had to be unavailable at the time the Monitor was started. The performance degradation would not normally have been noticeable until sufficient time had passed. There were no other visible symptoms of this problem. |
592467 | There was an arbitrary limit of 1000 on the number of messages which could be shown on the "Messages" or "Archive Messages" tabs for a message store. That limit has now been relaxed. If there is enough memory to display all the messages, they will be displayed. Under low memory conditions, only the last 1000 messages will be displayed, but a warning message will now be displayed in this case. |
592589 | Some computed bitstring values (i.e. those produced as a result of a set_bit, &, |, ^ or ~) might not have hashed properly. Operations that can hash bitstring values during their execution (for example, select distinct of a bit column) could have returned incorrect results. This has been fixed, but existing tables containing affected values will require an unload/reload. Alternatively, if c is an affected column in table t, "update t set c = ~c" can be run twice with a server containing the fix. |
592638 | Some DELETE operations may corrupted the database. This occurred when a row was deleted from a multi-level index which was sufficienly full that no index-page reduction was required, and no subsequent operations modified the database page in question. This has been fixed. |
592670 | A connection failure could have occurred following an application crash. This would have occurred when there was an active temporary table and a commit or rollback had been executed following the first fetch using the temporary table. This has been corrected. |
592728 | The list of TCP/IP protocol options in the Connect dialog was incorrect. The list should not have contained the options 'TDS' or 'BroadcastListener', and the option 'SendBufferSize' was missing. These have been fixed.
Note, these issues affected the Connect dialog when connecting to SQL Anywhere, regardless of which program was being used -- DBISQL, Sybase Central, or DBConsole. |
592784 | Calls to the ODBC function SQLGetTypeInfo() always returned 0 in the CASE_SENSITIVE metadata column for the XML data type. For case-sensitive databases, string comparisions of columns and variables of type XML is case sensitive. Therefore, SQLGetTypeInfo() has been fixed to returned 1 in this case. |
592860 | On Unix systems, starting the server as a daemon could have hung if a fatal error occurred while starting up. This included Linux Standalone and Network services installed with the Service utility (dbsvc) as 'automatic on startup'. This has been fixed. |
592873 | By specifying the primary key in a separate clause of the CREATE TABLE statement, the UltraLite runtime allowed tables to be created with Long column types (ie. BLOBS, CLOBS) as primary keys.
For example: 'CREATE TABLE t1( v1 LONG VARCHAR, PRIMARY KEY(v1))' The use of long datatypes in indexes is not supported by UltraLite, and inserting into the resulting table would have resulted in a crash. This has been corrected, long datatypes are now flagged as invalid when used in an index. |
592887 | Some database corruptions could have caused the cleaner to attempt to reference pages beyond the end of the database. This situation is now caught, and the server will halt with assertion failure 201301. |
592912 | In some cases, the database server was not able to fully recover from a crash, and displayed an assertion failure message. The server console would have shown that the server was able to recover the database, and a checkpoint was completed successfully, but then assertion failure 100920 was displayed: "Transaction log page X is corrupted." This problem has now been fixed. |
592976 | When using the debugger in the Sybase Central, right-clicking in the Editor to show the popup menu would have make the cursor disappear. This has now been fixed. |
592981 | Generating SQL procedures using the iAnywhere WSDL compiler (WSDLC) may have failed if the target WSDL (Web Services Description Language) contained an operation with a message referencing a complex fault type. This has been fixed. Generating fault stubs for WSDLC -l sql ... is not supported. The fault message type is now ignored and the SQL for the SOAP procedure is generated as expected. |
593118 | Only users with DBA authority should be able to reset a login policy, even if it is for themselves. The server was failing to check for this permission. This has been fixed. The server now ensures that only users with DBA authority can reset a login policy. |
593120 | The QAnywhere server could have stopped sending and receiving messages with an Enterprise Messaging Server, through its JMS connector, when connectivity to the EMS was interrupted and subsequently restored. This has been fixed. |
593135 | The server could have become deadlocked soon after starting a database. For this to have occurred, the database in question must have had a large dbspace, which must have been rapidly growing, and recent inserts and updates must either have failed, or have been undone by another transaction. This problem has now been fixed. |
593143 | When running the database transfer tool on a BlackBerry Bold, the buttons were too small to display all text. Only the first character, plus some ellipses showed up on all buttons. This has been fixed.
Now, all buttons display normally. However, the layout of the buttons is affected. They are aligned to the left, instead of in the center. After the fix, buttons on other models of the BlackBerry remain legible. |
593273 | The server could have crash when attempting to execute a statement having a WHERE clause with a disjunction on sargable predicates, such that each predicate can be used for a partial index scan. This has been fixed.
For example: select * from R left outer join T where R.X = 10 OR R.Y = T.Y Both "R.X = 10" and "R.Y = T.Y" are sargable. An index must exist for on R<X> and R<Y>. |
593329 | When a database was run on a server started in "in-memory" mode (-im connand line option), and a checkpoint was performed during recovery, the server could have hung on shutdown. This has been fixed. |
593334 | The error "Fatal error: Could not write to file" could have been returned from the server when attempting to write to a file in a clustered environment. While the clustering service was performing some tasks, it was possible that the database server would be given an error ERROR_NOT_READY when attempting to perform an operation on the file. The server now retries the operation several times in this circumstance. |
593347 | An application connected using the iAnywhere JDBC Driver, and calling the method PreparedStatement.setBlob() to insert a blob of length between 64M and 256M, would have seen the insert take much longer than if the application used the method PreparedStatement.setBinaryStream() instead. This problem has now been fixed, and in addition, also improves the performance of using PreparedStatement.setBinaryStream().
Note that using setBlob() requires significantly less memory than using setBinaryStream(), and also, for blob values greater than 256M in size, setBlob() may actually be the only option. |
593428 | If an application executed a query containing a large number of proxy tables on a 64-bit server, and the query ended up being executed in NO PASSTHRU mode, then there was a chance the server would have failed assertion 101508 instead of giving the "syntactic limit exceeded" error. This problem has now been fixed, and the "syntactic limit exceeded" error is now properly returned. |
593472 | If a subquery contained an equality predicate with an outer reference, and the left and right expressions of the equality predicate had different domains, then the computed result set may have been incorrect. The equality predicate must have been of the form "local column = outer reference column". This problem has now been fixed.
For example: select * from R, S where R.X NOT IN ( select T.X from T where T.N = S.I) where the column T.N is of type numeric and the column S.I is of type integer. |
593523 | The addition of fractional days to a timestamp value would have been incorrect. This was corrected. |
593676 | When using the SQL Anywhere ODBC driver, the transaction isolation level can be set with a call to the ODBC function SQLSetConnectAttr(). The following is an example for setting the transaction isolation level to "readonly-statement-snapshot":
SQLSetConnectAttr( dbc, SA_SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SA_SQL_TXN_READONLY_STATEMENT_SNAPSHOT, SQL_IS_INTEGER ); The following isolation level options are available. SQL_TXN_READ_UNCOMMITTED SQL_TXN_READ_COMMITTED SQL_TXN_REPEATABLE_READ SQL_TXN_SERIALIZABLE SA_SQL_TXN_SNAPSHOT SA_SQL_TXN_STATEMENT_SNAPSHOT SA_SQL_TXN_READONLY_STATEMENT_SNAPSHOT When any of the "snapshot" isolation levels were selected, the ODBC driver would have set the transaction isolation level incorrectly upon connecting to the server. The following is an example of a SET statement that was executed: SET TEMPORARY OPTION isolation_level = readonly-statement-snapshot; This would have resulted in a syntax error and the server options would not have been changed. This problem has been fixed. The ODBC driver will now generate the following correct syntax with quotes around the isolation level value. SET TEMPORARY OPTION isolation_level = 'readonly-statement-snapshot'; |
594121 | The value of property('StartTime') could have been returned as NULL if used in an event that was fired immediately after the server was started. This has been fixed. |
594130 | If the Interactive SQL utility, Sybase Central, or DBConsole reported an internal error, and the link to check for software updates was clicked, it would not say that updates were available, even if they were. This has been fixed. |
594288 | The message for SQLE_INDEX_NOT_UNIQUE errors did not contain the index or table names. This has been fixed so that the error is now set with the appropriate parameters. |
594317 | If a synchronization had failed during the download, but before MobiLink had been able to generate any data for the download, then the MobiLink server would have placed the synchronization in the restartable state. When the same remote database synchronized again, there was a chance that the MobiLink server would not have been able to find the previous synchronization to cancel it, preventing the remote database from synchronizing. This problem has now been fixed.
A workaround to this problem would be to stop and start the MobiLink server. |
594327 | If an application called the method DatabaseMetaData.getDatabaseProductVersion() on a closed Connection object, then the iAnywhere JDBC Driver would have thrown a NullPointerException, instead of returning the appropriate SQLException. This problem has now been fixed. |
594373 | When used with a BIGINT argument, the INTTOHEX function could have returned an incorrect value. This has been corrected. |
594463 | The server could have crashed if the definition of a declared temporary table used in a procedure was modified. This has been fixed. |
594465 | The addition of fractional days to a timestamp value would have been incorrect. This was corrected. |
594470 | Attempting to call the system procedure sa_performance_statistics(), could have resulted in the failure of assertion 109510 on machines with many CPUs. This has been fixed. |
594476 | On Linux systems, invoking the Service utility (dbsvc) with the options "-l -cm" would have given unexpected results. In particular, it would not have displayed the service creation command. This has been fixed. |
594479 | On Linux systems, the Service utility (dbsvc) did not accept localized confirmations for overwrite or delete. For example, in the German version, when dbsvc asked to confirm overwriting or deleting a service, it showed the language specific options (J/N), but it expected a 'Y' for confirmation. This has been fixed. |
594492 | In rare cases, a database mirroring server could have crashed at shutdown. This has been fixed. |
594528 | In very rare situations, the server could have failed assertion 104908 at shutdown. This has been fixed. |
594568 | Queries executed with a plan that involved parallel hash joins that caused a run-time error (for example, a conversion error) could have occasionally hung. This has been fixed.
A workaround is to disable parallel plans (i.e. set MAX_QUERY_TASKS = 1). |
594666 | If an application called the ODBC function ResultSet.getCursorName(), then the iAnywhere JDBC Driver would have returned a truncated cursor name. The JDBC driver was incorrectly assuming that the returned length from SQLGetCursorNameW was in bytes, when in fact the value returned is in characters. This problem has been fixed, and the full cursor name is now properly returned. |
594708 | When a SQL Anywhere database that was being monitored by the SQL Anywhere Monitor, had a percentage of cache used that was over the user-set threshold in the Monitor, the Monitor could have failed to raise the corresponding memory usage alert. This has been fixed. |
594711 | The cardinality estimation of an index having more than one sargable equality predicate on a prefix column could have been incorrectly set to 0%. At least one of the sargable predicates must have been an equality with a constant and at least one of the sargable predicates must have been an equality with a non-constant expression. This has been fixed.
For example: There exists an index on T <X,Y>: create index T_xy on T (X,Y) Select * from T, R where T.X = 1 and T.X = R.X and T.Y > 10 |
594888 | The performance of ODBC metadata functions, such as SQLPrimaryKeys, SQLTables, and SQLColumns, has been improved for case-sensitive databases. This performance improvement will not occur for case-sensitive databases if SQLSetStmtAttr is called to set the SQL_ATTR_METADATA_ID attribute to SQL_TRUE. However, by default, this attribute is set to SQL_FALSE. When set to SQL_FALSE, case-sensitive databases will now enjoy the same performance as case-insensitive databases.
Please note that when the SQL_ATTR_METADATA_ID attribute is set to SQL_TRUE, the string arguments to metadata functions are treated as identifiers, not strings (or patterns like "co%"). Identifiers can be delimited, in which case leading and trailing spaces are removed. Identifiers need not be delimited, in which case trailing spaces are removed. |
594897 | The initial directory used by the file browsing windows in the graphical administration tools was "C:\Windows\System32" on Vista and Windows 7. The inappropriate initial directory was chosen only when the application was launched from an icon (e.g. in the "Start" menu.) This has now been changed to the system-defined user home directory, which is the initial directory used on Windows XP. |
594913 | UltraLite primary key constraints must be named "primary". This requirement was not being enforced when the primary key was defined. This has been corrected so that now it is. Databases that have primary key constraints not named "primary" should be rebuilt. |
594914 | The Relay Server had been relying on standard http cookie reflection or header reflection from the client to maintain affinity of the http session. However, some mobile devices suffer from thin http support, where both cookie and header reflection are not supported. So, the Relay Server Outbound Enabler (RSOE) now injects an IAS-RS-AFQ header at the first HTTP request of all session. The value of the header is the affinity token for the rest of the request belonging to the session. The backend server is responsible for transporting the affinity token to their client in their application protocol. The client is responsible for inserting the following query parameter to the query string of the subsequent responding URL.
IAS-RS-AFQ=<affinity_token> The relay server will respect this affinity control when affinity information was not found in standard cookie nor in proprietary header. |
594916 | In some circumstances, the server may have failed to recover a database with assertion failure 201135 - "page freed twice". Some newly allocated database pages were not being initialized. This has been fixed. |
594917 | Backend farm Outbound Enabler security requirements and client security can be specified by client_security and/or backend_security properties of the backend farm in the Relay Server configuration file. These setting were not enforced though until the first Relay Server configuration update. This problem has now been fixed so that these setting are enforced immediately after Relay Server startup. |
594922 | The Relay Server at log level 3+ will produce packet header logging in the RS-OE protocol. The Relay Server at log level 5+ will also produce packet header logging plus the hex dump of the payload. This has been changed to now suspress level 3 packet header logging when verbosity level is 5 or above. |
594929 | If an application called a CLR stored procedure at exactly the same time that another connection or event that made a CLR stored procedure call terminated, then there was a small chance the server would have incorrectly returned a thread deadlock error instead of completing the CLR call. This problem has now been fixed. |
595100 | The Connect to Database dialog had strings overlapping text boxes. The "Connection String:" string and the "Specify Custom User" string overlapped their text boxes. This has been corrected. |
595104 | The Relay Server may be set up to autostart by the first RSOE connection. Concurrent autostarts were unnecessarily failing some of the RSOE connections that attempted to spawn the state manager (rshost.exe), but lost the race. This left those losing RSOE connections in an idle failed startup state, requiring users to restart them. The following error message would have been shown on the RSOE console and log file:
400 Auto started rshost.exe but it exited with return code <?>. This has been fixed by suppressing the startup error for the failed connections, as long as the connections can attach to the stage manager started by others. |
595276 | Procedures containing XML generation functions (XMLAGG, XMLELEMENT, etc.) that were simultaneously executed by large numbers of connections, could have caused the server to crash. This has been fixed.
A workaround is to rewrite procedures that cause this behaviour to use the XML generation functions as EXECUTE IMMEDIATEs with a trim. For example, : CREATE PROCEDURE FOO() BEGIN SELECT XMLELEMENT('foo'); END; could be rewritten as: CREATE PROCEDURE FOO() BEGIN EXECUTE IMMEDIATE trim('SELECT XMLELEMENT(''foo'')'); END; Note that such rewritten procedures will no longer be able to take advantage of plan caching. |
595294 | The install or uninstall process could have left the machine.config file in a bad state. This has been fixed. |
595416 | Support has now been added for Mac OS X 10.6 |
595494 | When running on Windows Vista or later, if the server encountered a fatal error it was possible to see a Windows crash dialog as well as a "Send Error Report" dialog. This has been fixed. |
595502 | The Relay Server may have incorrectly reported that shared memory was exhausted and then failed to relay further traffic after a rare memory abuse. This fix improves the memory manager by detecting and reporting incidents when a block of shared memory is freed by more than one process, and will allow the Relay Server to continue following the abuse. The detection was added without introducing extra computational overhead. The error report has the following format in the relay server log:
E. 2009-10-22 14:39:32. <1036.440.ShmDebug> Internal Error! Freeing already freed memory!: 00011390 The error message is useful in reporting issue to tech support so that we can identify defects in the higher level logic and eliminate the source of the rare abuse. |
595504 | If an authenticated application connected to an authenticated database and executed an external environment call, then there was a chance the external call would fail with an authentication violation error. This problem has now been fixed. |
595624 | The Relay Server Outbound Eeabler (RSOE) will verify routing of the relayed packets, and issue session mismatch errors when a routing issue occurs. One of the verifications was checking against a session finger print (sfp). The error message contained useful elements like session index, observed sfp and expected sfp, but the message being logged in the RSOE log was mangled so that it was not possible to use the detail information in the message to diagnose routine issues effectively. This has now been corrected. |
595699 | In very rare cases, the Windows and Linux server may have hung and stopped processing requests if request level logging was turned on. This has been fixed. |
595744 | After an HTTP request failure, the Relay Server Outbound Enabler (ROSE) would have unnecessarily failed an HTTP client retrying an HTTP request on the session using the acquired session cookie. This has been fixed by adding support in RSOE for this kind of resume. |
595745 | After a session was interrupted due to client disconnecting from the Relay Server, the Relay Server Outbound Enabler (RSOE) may have logged cancelled operations on the session using incorrect backend connection context information. This has been fixed. Along with this fix, a typo was corrected where sfp was being logged as spf. |
595746 | If the Interactive SQL utility executed a DROP statement which included an "IF EXISTS" clause, subsequent statements in the same batch would not have been parsed correctly. The symptom was that an unexpected error message would have been displayed, which referred to more than one of the statements which followed the DROP statement. This has been fixed. |
595878 | Under rare circumstances, the server could have crashed when processing an INSERT ... SELECT statement. This has been fixed. |
595997 | When using a Synchronization Model with a Microsoft SQL Server consolidated database that had a table with a UNIQUEIDENTIFIER or TIMESTAMP primary key column, and using snapshot download and downloading of deletes, the following error would have occurred for the generated download_delete_cursor script:
[-10002] Consolidated database server or ODBC error: ODBC: [Microsoft][ODBC SQL Server Driver]Restricted data type attribute violation This has been fixed. |
595999 | With versions of the server that included the changes made for Engineering case 555808, queries with a recursive union could have failed to match rows on the recursive passes. Although there was nothing wrong with the fix itself, the changes exposed the underlying problem, which has now been fixed.
A workaround is to drop indexes on the table(s) being queried recursively, although there may a performance implications to doing this, which could be significant. |
596021 | Database recovery using in-memory mode would have failed with assertion 201865. The database must have had multiple dbspaces for this assertion to have occurred. This has been fixed.
A workaround is to recover without in-memory mode, but thist will cause the database on disk to be modified. |
596034 | Attempting to run a silent install using an MSI file created by the Deployment wizard, could have failed with the error:
Error 2769: Custom Action CAD_writeStrings did not close 3 MSIHANDLEs. This has been corrected by no longer using MSIHANDLEs in custom actions, but rather using PMSIHANDLE variables, which are automatically freed when they go out of scope. |
596235 | When deploying a Synchronization Model to a new UltraLite database, if the remote schema had LONG NVARCHAR columns, an error would have occurred because UltraLite does not support LONG NVARCHAR columns. This has been fixed so that a warning is now given, and a LONG VARCHAR column is used instead in the new UltraLite database. |
596417 | There was a scenario, although rare, where an UltraLiteJ client may have hung and no longer have been able to synchronize when MobiLink server farms are involved. This has been fixed. |
596419 | When autostarting a database, database-specific options (such as -ds) which had values containing quotation marks were not handled correctly. For example, the following would not have worked correctly:
dbisqlc -c "dbf=my.db;dbs=\"d:\tmp\spacey path\"" This problem has now been corrected. Note that using quotation marks on the command line to start a database server worked correctly: dbeng11 my.db -ds "d:\tmp\spacey path" A related problem was found and fixed in dbisqlc which handled the START DATABASE statement itself, and constructed a connection string containing a "dbs=-ds ..." parameter, rather than passing the START DATABASE statement to the server. Dbisqlc was not putting quotes around a -ds parameter that contained spaces. |
596641 | If all of the following conditions were met, then SQL Remote would have continued to hold locks in the database until the next time that it needed to send the results of a SYNCHRONIZE SUBSCRIPTION to a remote database:
1) SQL Remote was running in send-only mode (-s) 2) SQL Remote was running in continuous mode 3) SQL Remote was satisfying a resend request for user "X", and was forced to re-scan the transaction logs 4) While scanning the transaction log, a SYNCHRONIZE SUBSCRIPTION operation was scanned for a user "Y" 5) User "Y" had already been sent the results of the SYNCHRONIZE SUBSCRIPTION operation in a previous run of SQL Remote. This has been fixed by releasing the locks when the send phase of dbremote reaches the end of the transaction log and determines that the SYNCHRONIZE SUBSCRIPTION operation does not need to be sent to the remote user. The problem can be worked around by stopping and starting the dbremote process that was running in send-only mode. |
596656 | If an application made an external environment call, and the external environment procedure subsequently made a server-side call that required acquiring a lock that was already held by the connection making the external environment call, then there was a chance the application would hang. This problem has now been fixed. |
605029 | When the Relay Server Outbound Enabler (RSOE) loses a connection to the Relay Server, it will attempt to recovery the connection at a rate controlled by the -d switch. The reattempt may have unnecessarily failed, causing more reattempts before the service was restored. This has been fixed. The fix also improves error reporting on the RSOE so that it will report the HTTP response code and message in an error in cases when the web server rejects the request before it reaches the Relay Server extension. |
605032 | Under rare situation, the Relay Server may have notified the Relay Server Ooutbound Enabler (RSOE) to disconnect a stale backend connection when the HTTP response had been completed, but the RSOE didn't indicate that the backend server connection had been completed within a tolerable latency. When this happened on a request that was not the first one of a HTTP session, the Relay Server didn't fill in available OE and session indexes to optimize the lookup of the backend session, and caused the RSOE to perform extra work to lookup the session. The RSOE was also logging misleading invalid indices because of this. This problem has now been corrected. |
605039 | When using using the "-im nw" command line option (in-memory, no-write mode ), the server does not use a temporary file for the database; however, sa_disk_free_space() was returning a row for the temporary dbspace. This has been fixed. |
605058 | If a client-side cursor UPDATE was performed using the SQL Anywhere OLE DB provider, and the column was of type VARCHAR(n), where n was greater than or equal to 256 and the column value was originally NULL, then an error message similar to the following would have been issued by ADO:
Row cannot be located for updating. Some values may have been changed since it was last read. The OLE DB provider was failing to return DBSTATUS_S_ISNULL for the column value and returned an empty string instead. This caused ADO to generate an UPDATE statement with a WHERE clause expression of the form "column = ?" and a bound value of '' (a zero-length string). This problem has been fixed. ADO will now generate an UPDATE statement with a WHERE clause expression of the form "column IS NULL". A workaround is to use a server-side cursor. |
605071 | The Relay Server, in general, is not forward compatible with future versions of the Relay Server Ooutbound Enabler (RSOE). Changes have now been made which will allow future version of RSOE to fallback to a protocol version that is compatible with the Relay Server in use at the time. New Relay Servers will no longer reject connections from newer RSOEs, but will request a protocol version adjustment. This fix also contains an independent change that allows the RSOE to work with legacy 11.0.x Relay Servers without patching the Relay Server with the capability to request a protocol version adjustment. Heterogeneous Relay Server farms, with a mix of new and old Relay Servers, has also been enabled by this change. This can be useful in progressive Relay Server farm upgrades. Here is the compatibility matrix following this change:
RS RS 11.0.0.ga-1529 11.0.0.1530 and up 11.0.1.ga and up 12.0 beta and up RSOE 11.0.0.ga-1529 YES YES RSOE 11.0.0.1530 and up NO YES 11.0.1.ga and up 12.0 beta and up |
605250 | It was possible that for a long running query alert to have been generated with "null" as the query text in the alert. In most circumstances, this was caused by the server option "RememberLastStatement" being turned off. This has been corrected so that when this situation now occurs the alert text has been updated to suggest that the user turn on RememberLastStatement, rather than presenting the unhelpful query text of "null". |
605253 | Sybase Central would have throw an exception on startup on Windows 7 systems. The Windows XP theme that Sybase Central used did not work poperly in JDK 1.4.2. That theme is no longer used on a Windows 7 system, the classic Windows theme is used instead. |
605385 | When installing 11.0.1 on Mac OS X 10.6 (Snow Leopard), the registration key panel had problems displaying the key as entered. Sometimes, nothing would have been displayed, other times mangled characters would have been displayed. This has been fixed. |
605386 | When any of the Java based administration tools (Interactve SQL, Sybase Central,
Mobilink Monitor, DBConsole) were launched on Mac OS X systems, two copies of the admin tool icons were being displayed on the Dock. This has been fixed. |
605393 | The value being maintained for the CacheFree property was not as documented and was of limited use. The value now returned is the number of cache images that contain no useful data. The values for the properties CacheFree+CachePinned+CacheFile should give the current cache size (i.e. number of images currently in the cache). The values for the properties CacheFile+CacheFree should give an upper bound on the number of pages immediately available for reuse (without resorting to growing the cache). |
605412 | If client_security (or server_security) was set to 'on' in the Relay Server for Apache running on Linux, the Relay Server may have unnecessarily failed the client's (or Outbound Enabler's) HTTPS requests. This has been fixed. |
605413 | If the server attempted to open a database file concurrently with antivirus software, the database could have failed to start, or the server could have failed with an assertion error. This has been fixed by adding a retry for sharing violations on a file open. |
605414 | On very rare occasions, if the number of allowed connections was exceeded, the HTTPS server may have sent the "Service temporarily unavailable" 503 response in plaintext. This has been fixed. |
605417 | The QAManagerFactory.getInstance() method of the QAnywhere .NET client would have thrown the exception System.DllNotFoundException when the native library qany9.dll or qany10.dll was missing. This exception may have been unexpected by a QAnywhere application, and has now been fixed. A QAException is now thrown in this situation, with ErrorCode 1000 (QAException.COMMON_INIT_ERROR) and Message containing the System.DllNotFoundException. |
605433 | If an application attempted to execute an UPDATE statement that updated a local table, but had a subquery in the SET clause that accessed a proxy table, then the server would have crashed. This problem has now been fixed. |
605645 | On rare occasions, the execution of a VALIDATE DATABASE statement could have reported spurious orphaned page errors. This has been fixed. |
605651 | The MobiLink server would have thrown the exception IllegalCastException when assigning the null reference to the Value property of an IDataParameter when using the MobiLink Direct Row API to download data. This has been fixed.
A work around is to assign DBNull.Value instead. |
605653 | If a REORGANIZE TABLE statement failed due to the table having been locked, then subsequent attempts to execute a REORGANIZE TABLE syatement would have also failed. The error would have been that a reorgorganize was already in progress. This has been fixed. |
605668 | If an application that was connected via jConnect or Open Client attempted to insert or retrieve a datetime or time value, then the date portion of the value was limited to January 1, 1753 or later, and the time portion was restricted a precision of 1/300th of a second. Now, if an application uses newer versions of jConnect and Open Client, then the date portion of datetime values will span the full range from 0001-01-01 to 9999-12-31, and the time portion will now be handled in microsecond precision. |
605675 | For a MySQL synchronization model, any events with comments would have had the comments lost when deploying the model directly to a MySQL consolidated database. Thus the special "--{ml_ignore}" comment to ignore a script, would have been lost. This has been fixed.
A workaround is to deploy to a file, and then run the deployed file. |
605792 | If an internal connection was the cause of a diagnostic message, it might have been identified with the phrase 'another user'. A more descriptive string identifying the connection will now be used. For example, one might now get a diagnostic message such as: User 'Cleaner' has the row in 'x' locked (SQLCODE: -210; SQLSTATE: 42W18) |
605803 | When uploading data into a SQL Anywhere database from Microsoft SQL Server using the Linked Server mechanism, SQL Server could have reported that it had received inconsistent metadata information and failed the upload. This was due to the SQL Anywhere OLE DB provider returning inconsistent column lengths for VARCHAR and NVARCHAR columns when using the UTF8 character set collation. For example, an NVARCHAR(100) column length would have been reported as 400, which is the octet length for this column using the UTF8 collation, but the "ulColumnSize" field of the DBCOLUMNINFO structure should contain the maximum length in characters for DBTYPE_STR and DBTYPE_WSTR columns, not the maximum length in bytes. This problem has been corrected. |
605818 | The Relay Server Outbound Enabler (RSOE) may not have issued timely liveness packet on the down channel when the backend server was loaded. This may have caused a down channel read timeout on the Relay Server. Also, the Relay Server may not have issued timely liveness packets on the up channel when the it was loaded, This may have caused an up channel read timeout on the RSOE. Both of these problems are now fixed. |
605823 | For an IBM DB2 synchronization model, any events with comments would have had the comments lost when deploying the model directly to a DB2 consolidated database. Thus the special "--{ml_ignore}" comment to ignore a script, would have been lost. This has been fixed. A workaround is to deploy to file and run the deployed file. |
605843 | When non-persistent http was used, and there was a significant latency for the backend server to close the socket after writing all response bytes and before the next request of the same session come into the Relay Server Outbound Enabler (RSOE), the RSOE may have mistakenly failed the new request when the Relay Server timed out waiting for the close of the previous request. This has been fixed. |
605873 | Two minor problems have been corrected:
1) The logging of unilitialized session indexes has been fixed 2) Reword logging of backend socket closing activities to "DoneReceive EOF" instead of "disconnecting" or "socket close" |
605874 | When the Relay Server Outbound Enabler (RSOE) timed out an up channel connection, the RSOE would have recovered the connection, but it may have resulted in an invalid opcode being received in error from the Relay Server, and then cause the RSOE to disconnect both the up and down channels and restart. This is now fixed so that the RSOE will handle the reconnect properly without causing a more substaintial restart before restoring the service. |
606014 | When the script sqlanydb.py was run, it would not have propagated some fetch-related errors to the application. This has been fixed.
Support has been added for Connection and Cursor .messages and .errorhandler attributes as outlined in PEP 249. Support has been added for SPARC 64 (and other platforms where sizeof(c_void_p) != sizeof(c_int)). |
606024 | A logic bug in the server may have caused database indexes to become corrupt under certain circumstances. The corruption would typically have manifest itself by generating SQLCODE -189 when deleting from an indexed column, followed by raising assertion 106200 - "Unable to undo index changes during rollback". The possibility of corruption was greater when using large page sizes with non-unique indexes over a small number of short columns. This problem has now been fixed. The corruption can be eliminated by dropping the affected index and recreating it with a server with this fix. |
606038 | If an application attempted to create a proxy table to a Micosoft SQL Server table that contained a varchar(max) or nvarchar(max) column, then the server would have incorrectly mapped the varchar(max) columns to varchar(1) and the nvarchar(max) columns to nvarchar(1). This problem has now been fixed and the server now correctly maps varchar(max) columns to long varchar and nvarchar(max) columns to long nvarchar. |
606227 | When running running on HPUX, Solaris or AIX systems, it was possible for the server to
crash while receiving IPv6 traffic. This has been fixed. |
606229 | When using the SQL Anywhere OLE DB provider, a memory leak cpuld have occurred when fetching data LONG VARCHAR or long VARBINARY columns. This problem has been fixed. |
606247 | When unloading VARCHAR or LONG VARCHAR data, the special characters "(double quote) and `(apostrophe) were not replaced by their escaped counterparts " and ' in XML. This may have caused the unloaded XML file to be invalid.
In addition the characters \r(carriage return), \n(line break) and \t(tab) were not replaced by the character references and . As a result the these characters were being treated exactly the same as empty spaces in the unloaded XML file. These problems have now been fixed. |
606273 | When the SQL statement ALTER TABLE ADD FOREIGN KEY was executed, the system table sysfkcol did not contain the foreign columns for the new foreign key. This meant that the foreign key relation would have been corrupt once the database reboots. This has been fixed. |
606440 | If a DSN was created using the Data Source utility (dbdsn), attempting to modified the userid or password of the DSN using the ODBC Administrator would have reported no errors, but it would have failed to change either of these fields. This has been fixed. |
606445 | When setting up a download subset in a synchronization model, either by Mobilink user or remote id, the list for choosing a column to match included columns with incompatible types. This has been corrected so now columns with incompatible types are not listed. |
606464 | Queries with null-supplying derived tables, which have constants in the select list, may have failed with "Run time SQL error -- *** ERROR *** Assertion failed: 106105". This has been fixed. |
606465 | If the "kerberos" connection parameter, or its short form "krb", was given on the command line, the Interactive SQL utility would not have connected to the database unless a userid was also given. This has been fixed. |
606626 | When using the Interactive SQL utility (dbisqlc) to connect, and attempting to use integrated logins or kerberos, (i.e. dbisqlc -c "integrated=yes" or dbisqlc -c "kerberos=yes"), it would have displayed the connection dialog without first attempting to connect. Similarly, the the statements CONNECT USING 'integrated=yes' and CONNECT USING 'kerberos=yes' with dbisqlc, would also have displayed the connection dialog without first attempting to connect.
This has been fixed so that a connection with be attempted in these cases and if the connection attempt is successful, the connection dialog will not be displayed. |
606629 | When the XML input to ULjLoad contained one of the two following scenarios, ULjLoad would have rejected the file, even when it should have accepted it.
1. If a foreign key constraint comes before the definition of the primary table; 2. If the order of the tables in the data part does not follow the order of the tables in the schema part; These problems have been fixed, but rearranging the schema definition or the data in the XML will workaround these problems.. |
606642 | If a division by zero error occurred in a result set, the SQL Anywhere OLE DB provider would have returned DB_S_ENDOFROWSET instead of 0x800a000b (divide by zero). For example, the following SELECT statement will result in a division by zero error if the column value for "num" is 3:
SELECT num/(num-3) FROM divisionby0 This problem has been fixed. ADO will now set the correct error number (11) and description (Division by zero) from the error code returned by OLE DB. |
606651 | The creation of a proxy procedure for a procedure on a remote server may have caused a server crash, or failed assertion 201503, if a proxy procedure with the same name had been dropped as part of the execution of a DROP REMOTE SERVER statement. This has now been fixed.
A work around for the problem is to drop all proxy procedures belonging to a remote server before executing the DROP REMOTE SERVER statement. |
606658 | When shuting down the Relay Server for Apache on Linux, one persistent System V semaphore for IPC was being leaked between Relay Server components. This has been fixed. |
606660 | When working with clients that don't support communication liveness, such as MobiLink 9.x clients, the Relay Server will timeout a client after being idle for 8 minutes, if the web server has not timed out the client earlier. Increasing the web server liveness timeout will not resolve the situation. The solution is to use the IAS-RS-App-Timeout-Minute header in the http request. For example, to set a 20 minute timeout for a big download with a MobiLink version 9.x client, simply add custom_header=IAS-RS-App-Timeout-Minute:20 to the HTTinkP synchronization communication option. This timeout header is an existing but undocumented feature in all released version of the Relay Server. There is no software change involved. |
606678 | If a database contained BINARY type data that ended with one or more bytes of 0's, the 0's would have be truncated by ULjUnload when written to the output. This has been fixed. |
606683 | The build number on policy.11.0.iAnywhere.Data.SQLAnywhere.dll is incorrect. This has been corrected. |
606726 | If the Table editor or the Column property sheet was used to change a column's data type and its unique setting to 'not unique', then the change from 'unique' to 'not unique' would have been ignored. This has been fixed. |
606823 | The date at the beginning of the connection attempt information generated by the LogFile connection parameter was not necessarily in the locale format. This also affected the information in the Show Details dialog when using the ODBC Administrator's Test Connection feature. This has been fixed so these dates are now in the locale format. |
606826 | An incomplete startup of the Relay Server on Linux due to resource limitations, may have left many persistent System V semaphores behind. This would have caused a permanent semaphore resource drain to the system until they were either manually deleted, or the system was rebooted. This issue has now been fixed. |
606828 | When creating a Synchronization Model with a Sybase ASE consolidated database, the following error may have occurred when installing the MobiLink system setup:
[Sybase][ODBC Driver][ASE] Foreign key table qualifier must be name of current database This has been fixed. |
606833 | Malformed or unexpected HTTP and HTTPS requests would sometimes have been closed by the MobiLink server without issuing a response. This has been corrected so that the MobiLink server now issues an HTTP or HTTPS error prior to closing the socket. |
606835 | The reason reported by the server for failing to start a database may have been incorrect. When attempting to open a file, the server will retry on certain errors. If it retries too many times it just reports 'database not found'. This behaviour was much more likely with the changes for Engineering case 605413, as sharing violations were now retried. This behaviour has now been changed so that the server reports the last OS error when it fails to open the database file. |
606840 | When running on Windows Vista or Windows 7 systems, menu items that toggle a property on or off would not always have shown the check mark next to the menu item's text. Similarly, menu items that choose a value from a mutually exclusive set of values would not always have shown a sphere next to the currently selected value. Both of these problems have been fixed. |
606841 | When using the Table wizard to create a new table, if the F5 key was pressed before saving the table, and answering 'No' to the "Do you want to save changes" dialog, would either have caused Sybase Central to crash or have caused the dialog to have been displayed repeatedly. This has been fixed. |
606848 | Executing a REORGANIZE TABLE statement on a table having an IMMEDIATE text index would have caused the index size to double. Additionally, under some rare circumstances, incorrect results could have been returned for subsequent full text queries. This has been fixed.
Note, if there exists a text index in a database affected by this problem, it should be dropped and recreated to reclaim the space and avoid possible wrong results for full text queries. |
606858 | A possible, but unlikely, security hole involving secure communications on MacOS systems has been fixed. |
606882 | When the MobiLink client's startup/options dialog was used to enter options, such as the publication or MobiLink password, it was possible that the synchronization would complete successfully, but the client would then crash when shutting down. This has been fixed. |
606888 | When redeploying a synchronization model to a SQL Anywhere remote database using the wizard initialized with the last settings, the extended options for the SQL Anywhere client could have been corrupted. This has been fixed. |
606991 | Starting a database, which had been backed up on a Windows CE device, could have caused "Assertion Failed: 201129 (version.build) File is shorter than expected". This problem was introduced in Engineering case 576669. This has now been fixed. |
607048 | When using the Table Editor for SQL Anywhere or UltraLite, or when using the Table Mapping Editor for MobiLink, a check box would sometimes have required two single clicks to change its value. This has been corrected so that only a single click is sufficient. |
607061 | The DBTools function DBCreatedVersion() was not able to handle databases that used strong encryption. This has been fixed. |
607117 | Use of the WEEKS() and DAYS() functions could have erroneously thrown an OVERFLOW exception. This has now been corrected. |
607234 | The SQL Anywhere Python database interface, now works with Python 3.x. |
607303 | If F5 was pressed, or View -> Refresh Folder was selected, while creating a new table in the Table Editor and Yes was answered when prompted to save the table, right-clicking to display a popup menu would have failed. This has been fixed. |
607330 | The SQL Anywhere C API was fetching the TINYINT data type as a signed value. This has been fixed. |
607425 | The number of nullable columns in a table is limited. This limitation is based on the page size of the database. For 4K pages, the limit is approximately 32000 columns. Attempting to add too many nullable columns to a table using ALTER TABLE would have resulted in a failed assertion, rather than an error message. This has been fixed. |
607636 | Under virtually all circumstances, the Database Information utility (ULjInfo) would have terminated abnormally when opening a valid database file. The error message would have been "getOrdinal(string) not supported". This has been corrected. |
607651 | In extremely rare circumstances, fetching a string from a table could have caused the server to hang. This would only have occurred if the string was longer than the prefix size of the column, but less than the page size of the database, and a string manipulation function such as TRIM() was being used, and another connection was attempting to update the string at the same time. This has been fixed. |
607874 | The SQL Anywhere C API version of DBD::SQLAnywhere perl driver did not fetch floating point/double values correctly (incorrect values would have been returned). This problem has been fixed. |
607881 | The MobiLink server would have reported error -10152 if a Java class loaded for scripting contained overloaded methods, and would have failed with an AmbiguousMatchException if a .NET class contained overloaded methods. This restriction has been lifted. This is most useful for the authenticate_parameters script, as now remotes can send different numbers of authentication parameters and the MobiLink server will choose the method that most closely matches those parameters.
For example, suppose a class Test exists: public class Test { public static String auth( InOutInteger status, String user_name, String p1, String p2 ) { return "insert into j_authparm_T2 (pk, c1, c2, c3) values (?,?,?,?)"; } public static String auth( InOutInteger status, String user_name, String p1, String p2, String p3 ) { return "insert into j_authparm_T2 (pk, c1, c2, c3, c4) values (?,?,?,?,?)"; } } Then the auth method can be registered as the script for the authenticate_parameters event: call ml_add_java_connection_script( 'the version', 'authenticate_parameters', 'Test.auth' ) and invoking dbmlsync with different -ap switches will give different behaviour: "-ap parm1,parm2" will call the first 'auth' overload "-ap parm1,parm2,parm3" will call the second 'auth' overload "-ap parm1" will print the error, "[-10362] No overload matching 'auth(ianywhere.ml.script.MLInOutInteger, java.lang.String, java.lang.String)' was found in class 'Test'", because there are not enough parameters to call any of the overloads "-ap parm1,parm2,parm3,parm4" will invoke the second 'auth' overload, but the returned SQL will cause error "[-10094] Expecting 3 authentication parameter(s) from client, but received 4 for script insert into j_authparm_T2 (pk, c1, c2, c3, c4) values (?,?,?,?,?)" because the MobiLink server will accept a Java or .NET authentication_parameters script if it has the same number of parameters or fewer, but SQL authentication_parameters scripts must match the exact number of parameters. Some future version of the server may place that restriction on Java and .NET authentication_parameters scripts as well. |
607934 | The system functions DAYS() and WEEKS(), when called with a single argument under J2ME, could have generated incorrect results that were off by one. This was now been corrected. |
607936 | When a nullable column had a column default specified, and a row with that column set to null was inserted, the null value is ignored and the column default value was inserted instead. This behaviour was incompatible with UltraLite and SQL Anywhere. More seriously, when a nullable column had a column default specified, and the table with that column was altered by an ALTER TABLE statements, all the rows with null values in that column would have been replaced by the column defaults. The following SQL statements were affected. In all these cases, null values would have been replaced by column defaults.
1. INSERT () VALUES (); 2. INSERT () select-statement; 3. ALTER TABLE ADD column-definition; 4. ALTER TABLE DROP column-name; 5. ALTER TABLE ALTER column-definition. This has been corrected. Now all the null values are preserved in these scenarios. |
608095 | When continually making ODBC connections/disconnections, using SQLConnect()/SQLDisconnect(), a memory leak would have occurred in the application. The process heap would continue to grow as the application looped. This has been fixed. |
608101 | When processing a synchronization download, rows with VARCHAR columns that had the total size exceeding the database page size would still have been downloaded and processed. Following the synchronization, if these rows were deleted, the database would have been in an error state. For example, if the page size is 256, then the maximum size of VARCHAR columns is 243, due to page overhead. However, UltraLiteJ would have accepted a VARCHAR of 244 bytes long during download. This has been fixed. Now UltraLiteJ will properly reject rows that are too big due to VARCHAR columns' sizes, which means the synchronization will fail. |
608106 | If an application called ResultSet.getObject() on a tinyint column, and the column value ranged from 128 to 255, then the JDBC driver would have incorrectly thrown a SQLException with a conversion error. This problem has now been fixed. |
608314 | When the Application Profiling wizard was run on an encrypted database, it would have failed with the error: "This database does not support encrypted tables." This has now been fixed. |
608321 | A host variable used by itsself as an item in an IN list could have caused a crash (Null pointer exception). This has now been corrected. |
608332 | When executing a SQL statement that lead to an internal conversion between Numeric types, the source Numeric value may have been corrupted by the conversion. For example, if a value 5.12 in a Numeric(5,2) column was converted to a Numeric(5,1) column, the source value would have been changed to 5.10 after the conversion. This has been fixed. |
608339 | On 11.0.1, builds 2309 through 2312 inclusive contained the fix for Engineering case 588740; however, builds 2313 through 2354 inclusive accidentally reverted back to the old behaviour. This regression has been fixed.
Note, testing has shown that the new correct behaviour can cause a significant performance degradation for server running databases without a transaction log (where every commit becomes a checkpoint). The amount of degradation will depend on the application, and on the hardware in use. |
608342 | A server participating in a mirroring system may, on rare occasions, have crashed if an
outgoing connection to another server participating in the mirroring system failed. This has now been fixed. |
608354 | The use of a host variable as the right operand of a LIKE operator, could have given incorrect results when an index was used to optimize the search condition. This was corrected. |
608552 | In rare cases, the executing the ATTACH TRACING statement could have caused the server to crash. This has been fixed. |
608728 | If a connection string was made up of parameters coming from different sources (i.e. the connection string itself, DSNs or file DSNs, SQLCONNECT environment variable), and the UID and PWD/ENP parameters were not specified in the same source, the PWD/ENP would have been ignored. For example, if DSN "foo" contained a UID but no PWD, then the connection string "DSN=foo;PWD=secret" would ignore the PWD field. This has been fixed. |
608737 | When utilities or applications attempt to connect to a database with 10000 or more rows and 5 or more indexes, the exception 'java.lang.OutOfMemoryError: Java heap space exception' could have occurred if lazy index loading was disabled. This has been fixed. The handling of large numbers of indexes has been improved and utilities now use lazy loading, but it is possible for this exception to still occurr for large databases.
A work around is to increase the heap space in the java starting line by adding the VM option -Xmx256m. This also applies to the batch file that starts uljunload, uljload and uljinfo. |
608742 | The following statements were added e added in version 11.0.1:
CREATE ENCRYPTED [TABLE] DATABASE newfile FROM oldfile KEY newkey [ALGORITHM alg] [OLD KEY oldkey] CREATE DECRYPTED DATABASE newfile FROM oldfile KEY oldkey Execution of either of these statements in the Interactive SQL utility would have left the values of "oldKey" or "newKey" in plain text in the command history. This has been corrected so that these values are now obfuscated. |
608743 | When installing an MSI created by the Deployment wizard which contained Sybase Central and one or more plugins, on Windows Vista or Windows 7, it would have failed with the error: "The exception unknown software exception (0xc000000d) occurred in the application at location 0x10001d3d." The install would have completed, but the plugins were not correctly registered. This has been fixed. |
608747 | The Relay Server Outbound Enabler may have reported session mismatch errors when an Afaria client disconnect their POST channel. This has been fixed. |
608750 | If an application called ResultSet.getObject() on an unsigned smallint, int or bigint column, then the JDBC driver may have given a conversion error. This problem has now been fixed such that calling ResultSet.getObject() on an unsigned column will now promote the datatype. Hence, calling ResultSet.getObject() on an unsigned smallint column will now return an int; similarly, an unsigned int column will now return a long, and an unsigned bigint column will now return a BigDecimal. It should be noted that most applications prefer to have full control on the column object so it is always better to use one of the getShort(), getInt(), getLong() and getBigDecimal() methods explicitly rather than using an implicit method like getObject(). |
608751 | If an application called IBlob.getBytes() with a position value <= 0, or a length value < 0, then the getBytes() method would have incorrectly returned NULL. The JDBC driver now correctly throws a SQLException for these cases. |
608904 | Additional drive flushing was added to improve recoverability (see Engineering case 588740); however, this flushing could have made the server significantly slower when no transaction log was present due to every commit causing a checkpoint. This performance issue has been addressed by reverting to the old flushing behaviour when no transaction log is being used. |
609049 | Some server, database, or connection properties may have shown values that were too large, or that have rolled over. This would only have happened on single core machines running the Personal server (dbeng11) on Unix platforms (but not Linux). This has been fixed. |
609050 | Query execution strategies that required the materialization of intermediate results (e.g. DISTINCT) may have used excessive memory when strings or blobs longer than the PREFIX length, but shorter than a page size, were involved in the query. This may have caused the query execution engine to switch to a low-memory strategy causing poor performance. This has been fixed.
Note, using compressed columns will avoid the bad-code path and is a suitable work-around for this problem. |
609062 | The MobiLink client (dbmlsync) was leaving a small fixed amount of memory unfreed on shutdown. This should not have been visible to users, and has now been fixed. |
609096 | Rows containing non-ascii7 characters in VARCHAR() columns (but not LONG VARCHAR columns) would have resulted in strings padded at the end with '\u0000' characters.
For example (using SQL escape sequences) the string 'Ann\u00E9e' would have downloaded as 'Ann\u00E9e\u0000' the and string 'Enqu\u00EAte qualit\uooE9 deux' would have downloaded as 'Enqu\u00EAte qualit\uooE9 deux\u0000\u0000'. This has been fixed. |
609310 | The fix for Engineering case 570493, in very rare cases, could have caused the server to hang with one CPU at 100% usage when shutting down a database with many events. This has been fixed. |
609449 | FIPS 140-2 certified encryption is now supported by the MobiLink server on 64-bit (x64) Windows.
If the "FIPS-approved Strong Encryption" feature is not already installed, proceed as follows after applying the EBF: - From Add & Remove Programs, select SQL Anywhere 11 and click the Change button. - Select the Add option and enter the Add-on Registration Key and click Next. - In the dialog, ensure that the "FIPS-approved Strong Encryption" feature is selected and proceed. If the "FIPS-approved Strong Encryption" feature is already installed, proceed as follows after applying the EBF: - From Add & Remove Programs, select SQL Anywhere 11 and click the Change button. - Select the Modify option and de-select the "FIPS-approved Strong Encryption" feature, to temporarily remove it, and proceed. - Again from Add & Remove Programs, select SQL Anywhere 11 and click the Change button. - Select the Modify option and select the "FIPS-approved Strong Encryption" feature and proceed. |
609454 | When trying to bind null values for string or blob columns, the SQL Anywhere C API would have crashed in the call to sqlany_execute(). This has been fixed.
Also, when binding null values, dbcapi required a valid type to be specified. This is no longer required. |
609701 | The sample ECC certificate eccroot.crt shipped with versions 9.x and 10.x expired on November 17, 2009. As a result, the sample server certificate sample.crt has also expired, since it was signed by eccroot.crt. These have been replaced by new sample ECC certificates. The new server certificate is called eccserver.crt, and its password is "test". The file name for the signing certificate is still eccroot.crt but the certificate itself is different. |
609704 | When calling the SQL Anywhere C API function sqlany_clear_error() the resulting SQLSTATE value would have been set to the empty string instead of "00000". This has been fixed. |
609706 | When running, the database cleaner could have interfered wth transactions by causing locking attempts to fail. This has been fixed by having the requesting transaction wait for the cleaner. |
609707 | When running the MobiLink server in a server farm, it was possible for the MobiLink server to have printed errors to the MobiLink log that dealt with problems on operations to the ml_active_remote_id table. These errors are now suppressed, and more meaningful warnings or errors are printed to the MobiLink log. |
609708 | When using the SQL Anywhere C API and binding parameters for prepared statements and calling sqlany_execute() multiple times, the second and subsequent calls to sqlany_execute() would have failed with the error "Cursor already open". The problem was introduced as part of the changes for Engineering case 560351. This has now been fixed. |
609736 | If an application had a connection that was holding on to table locks, and the same application had other connections that were blocked in the server waiting for the table locks to be released, then there was a chance the application would have hung if the connection holding on to the table locks subsequently called Connection.createStatement(). This problem has now been fixed. |
609739 | When an application retrieved a Blob object by calling ResultSet.getBlob(), and the application subsequently retrieved the Blob's InputStream by calling Blob.getBinaryStream(), the applications performance would have been severely impacted if the application called InputStream.read( byte[] ) or InputStream.read( byte[], int, int ) on the Blob InputStream. This problem has now been fixed.
Note that a workaround is to use Blob.getBytes() directly, instead of using the Blob InputStream. |
609944 | When running the Relay Server Outbound Enabler (ROSE) and the backend server on slow machines, the RSOE may have failed to notify the Relay Server (RS) that the backend connection for a non-persistent http request had been closed, which would have caused the RS to hold on to resources for an extended period of time, making the RS less scalable. This problem has been fixed. |
609953 | The HTTP server may have crashed due to certain circumstances. This has been fixed. |
610115 | The database server was vulnerable to a particular type of denial-of-service attack. This has been fixed. |
610118 | When using the UltraLiteJ Database Transfer desktop application for USB transfer, the utility may have crashed with the error "A fatal error has been detected by the Java Runtime Environment". This would have been seen when the desktop application started ("Start" is pressed in the GUI) before the BlackBerry application was started("Next" is pressed on the final screen). This problem occurs with BlackBerry Desktop Manager 5.0.1, but it could have occurred in other versions as well. In order to function properly, the BlackBerry application must start before the desktop application. This has been resolved. The BlackBerry application's on-screen instruction of the correct order of starting the two pieces has been updated. |
610141 | When the Relay Server State Manager was run on Linux with the -os command line option, it would have generated many small archive output log files once the archiving process had started. The logger's size counter wasn't being reset after successfully generating the first output archive file. This has now been fixed. |
610279 | The use of a host variable in the left operand of a LIKE operator could have given incorrect results. This was corrected. |
610505 | Attempting to renaming an index (or text index) to an invalid name, would have resulted in unexpected behaviour of following statements related to the index. This has been fixed. |
610520 | The STRING() SQL function would have returned NULL when any of the parameters were null.
This has been corrected so that if any parameters passed to the STRING() function are non-NULL, then any NULL parameters are treated as empty strings. This now conforms with the SQL Anywhere server. |
610533 | If an application retrieved a ResultSet via a DatabaseMetaData call, and the application subsequently retrieved the underlying Statement object of that ResultSet by calling ResultSet.getStatement(), then attempting to close that DatabaseMetaData Statement object could have crashed the application. The problem with closing DatabaseMetaData Statement objects has now been fixed.
Note that in general, applications do not explicitly need to close DatabaseMetaData Statement objects; hence the chances of an application crashing due to this problem are rare. Closing the ResultSet of a DatabaseMetaData call is not uncommon and not affected by this. |
610718 | If an application executed an UPDATE statement, and the UPDATE statement involved proxy tables, then the server may have crashed when the UPDATE statement could not be handled in full passthrough mode. This problem has now been fixed, and a proper error message is returned. |
610723 | If the Data Source utility (dbdsn) was used to create an ODBC data source, but the -c
option was not specified, a data source would have been created containing "LINKS=ShMem,TCPIP". This has been fixed, the -c option is now required when -w is used. |
610724 | Problems with an LDAP server could have caused a SQL Anywhere server, or a client application using it, to hang. Calls to the LDAP library were synchronous, so if the LDAP server was hung and did not respond, the SA server would have waited forever for a response. This has been fixed by making the LDAP library calls asynchronous and adding a timeout. |
610948 | Attempting to execute an ALTER TABLE statement that added a primary or foreign key would have returned a Runtime SQL error (SQLCODE -300) if the option row_counts had been turned on. The workaround is to temporarily turn the option off. This has been fixed. |
610974 | If a REFRESH MATERIALIZED VIEW staement was executed with the WITH ISOLATION LEVEL SNAPSHOT clause, and database recovered was later attempted using the transaction log, recovery would have failed when attempting to access the view. This has been fixed. |
610982 | When installing SQL Anywhere on a Windows system that used a multibyte character set as the ANSI code page, the SQL Anywhere performance monitor counters may not have been registered correctly and no error message would have been displayed. At startup, the server would have displayed the message "Unable to initialize NT performance monitor data area; server startup continuing". This problem has now been fixed. |
611017 | When the OLE DB provider's GetNextRows method was called, the next row would not have been read if the previous row had NULL column values. This problem was introduced by the changes for Engineering case 605058, and has now been fixed. |
611168 | ODBC drivers support standard escape sequences in bound data as a driver-independent way to specify date and time literals, outer joins and procedure calls. The SQL Anywhere driver was failing to recognize these escape sequences when embedded in a bound parameter that contained a Unicode string. This has been fixed. |
611184 | Attempting to convert a string to a UUID when the string included braces as the first and last characters, would have resulted in a conversion error. This has been fixed. |
611227 | The MESSAGE statement did not allow specifying the EVENT, SYSTEM LOG and DEBUG ONLY clauses at the same time. This has now been corrected. |
611262 | Customer try to setup Mobilink Server with Consolidate Database ASE Cluster Edition using
the SDK15 ODBC driver. According to SDK document, the SDK ODBC Driver "libsybdrvodb.so" require third party Driver Manager. With the ODBC DSN, Mobilink Server try to load the ODBC driver when the client sync. request, then Mobilink Server will crash. |
611350 | The server may have hung while generating a cache dump. This has been fixed. |
611361 | Using Sybase Central to cancel a system message that resided in a QAnywhere Client database would have resulted in an unhandled Null Pointer Exception. This has been fixed |
611368 | The Interactive SQL utility (dbisql) was using only the "sqlconnect" environment variable when connecting from the command line, where it should have been using "SQLCONNECT", as it did in version 10 and earlier. Now, dbisql will look for "SQLCONNECT", and if that variable is not set, it will look for "sqlconnect". This is the same algorithm used by the non-graphical command line tools (e.g. dbping).
Note, the "ULSQLCONNECT" environment variable is now treated the same way. This change only affects machines running non-Windows operating systems. |
611373 | The MobiLink server could have occasionally given the following error:
A downloaded value for table 'table_name' (column #column_number) was either too big or invalid for the remote schema type and then aborted the synchronization, when a client was trying to download data from a table that contained NCHAR, NVARCHAR or LONG NVARCHAR columns, even when NCHAR, NVARCHAR or LONG NVARCHAR data was uploaded in a previous synchronization. This problem has now been fixed. |
611414 | When using the iAS Oracle ODBC driver, attempting to execute an INSERT, UPDATE, or DELETE statement with SQLExecDirect immediately after executing a SELECT statement with the same statement handle, would have failed with the following error message:
ORA-24333: zero iteration count This problem is fixed now. |
611611 | If an application executed a query similar to the following:
select * from T where price * (1 - discount) > 500 and the table T was a remote table, then it was possible the query would have returned the wrong result. This was due to fact that the Remote Data Access layer sometimes failed to include the parenthesis when generating queries to be executed on remote servers. This problem has now been fixed. |
611877 | The Listener utility (dblsn) was failing to recognize the operating system when run on Windows 6.x systems, which may have resulted in crashes. This has been fixed.
Note, the Listener utility now tracks the following new Windows 6.x versions: Windows Server 2008 Windows Vista Windows 7 Windows Server 2008R2 Future versions will be tracked as "Unrecognized Windows NT ?.?" |
611985 | Software installs that were built using merge modules (MSM files) created by the SQL Anywhere Deployment Wizard would have failed to generate the .jpr files needed to register plugins for Sybase Central. Consequently, the following error would have occurred:
Error - EXCEPTION: java.io.FileNotFoundException: C:\Program Files\SQL Anywhere 11\java\SQLAnywhere.jpr (the System cannot find the file specified). A similar error message would also have appeared for the file Mobilink.jpr This has been fixed, so that MSMs now work correctly as well. Note, MSI installs built with the Deployment Wizard did not exhibit this behavior. |
--EOF--