SAP SQL Anywhere的所有已知BUG列表(4)
随着Sybase被完全整合到SAP下,Sybase原来的支持网站被SAP Support Portal取代。
只有购买了SAP服务的用户才能使用账号登录SAP Support Portal进行介质下载、补丁升级、报Incident等。
考虑到Sybase数据库的初学者或者没有购买原厂服务的Sybase客户情况,现提供SAP ASE/IQ/RS/SDK/SQL Anywhere/PB等产品的BUG信息。
在SAP Support Portal网站或者google上搜索Targeted CR List for ASE,可以看到针对不同版本的CR(CR表示Change Request)简单描述信息列表。
需要注意的是:Targeted CR List for ASE列出的CR虽然绝大多数是BUG,但有一些是更改需求。
以下提供SAP ASE/IQ/RS/SDK/SQL Anywhere/PB等产品的BUG信息!
不仅仅包括BUG的详细描述信息,还包括首次报告BUG的平台、数据库版本以及BUG修复历史过程;有些BUG还提供了Workaround来临时解决该BUG带来问题。
SQL Anywhere的所有已知BUG列表(1)
SQL Anywhere的所有已知BUG列表(2)
SQL Anywhere的所有已知BUG列表(3)
SQL Anywhere的所有已知BUG列表(4)
SQL Anywhere的所有已知BUG列表(5)
SQL Anywhere的所有已知BUG列表(6)
SQL Anywhere的所有已知BUG列表(7)
SQL Anywhere的所有已知BUG列表(8)
CR Number |
Description |
463608 | When generating sortkeys for the following collations, the generated sortkeys were default UCA keys, rather than the keys appropriate to the language or region:
47 scandict 48 scannocp 58 rusdict 59 rusnocs 63 cyrdict 64 cyrnocs 65 elldict 69 hundict 71 hunnocs 70 hunnoac 72 turdict 74 turnocs 73 turnoac 1 thaidict This has been corrected so that appropriate keys are now generated. It is highly recommended that any columns which store SORTKEY values using these collations be recomputed, as comparisons and sort order will be affected. |
463613 | Opening online help in Sybase Central may not have worked the first time it was asked for, although subsequent requests would have succeeded. The problem was timing and operating system dependent. It has been fixed. |
463614 | When attempting to add a row to a table that had constraints that were not checked until the transaction was committed, and the new row violated those constraints, it was not possible to cancel the insertion. The same problem affected table row modifications. This has been fixed. |
463662 | In general, the optimizer enumerates all valid plans which compute the correct result set for a given query. For each such plan, the optimizer estimates an execution cost measured in microseconds. The plan with the smallest estimated cost is then chosen as the execution plan for a query (aka the 'best plan' for a query). If the database option Optimization_goal is set to FIRST-ROW, the estimated cost for a plan enumerated by the optimizer is the estimated time to compute the first row of the result set of the query. If the optimization goal is set to ALL-ROWS, the estimated cost for a plan enumerated by the optimizer is the estimated time to compute all the rows in the result set of the query. The optimizer was not enumerating plans with complete index scans on the right hand side of a MERGE JOIN. This has now been fixed. |
463668 | A memory leak would have occurred in the MobiLink client when synchronizing BIT strings. This has been fixed. |
463669 | If the database option Percent_as_comment was set to 'OFF', statements such as:
select 11 % 2 would have incorrectly reported an error, instead of the correct result of 1 being returned. This has been fixed. |
463733 | The server may have hung on shutdown if it was running an HTTPS server. This has been fixed. |
463734 | A complex query (e.g. a join of many tables) may have taken a long time to be optimized, and would have appeared to be hung. This has been fixed. |
463740 | Interactive SQL could have reported an internal error (ClassCastException) when importing UNIQUEIDENTIFIER data into UltraLite databases. This would only have happened when running the Import wizard if there was already a result set showing. This has now been fixed. |
463741 | When clients using an HTTP non-persistent connection synchronized, the synchronizations could have ended with the errors: (SQLCode -10279) "Connection was dropped due to lack of network activity.", or: (SQLCode -10256) "This synchronization was canceled due to a new synchronization...". The synchronization of rows was not interrupted by these errors. The MobiLink server did not consider a synchronization closed until it sent the last few bytes. MobiLink clients did not always read these last few bytes, which lead to the errors. This has been fixed, the MobiLink server now accounts for this. |
463747 | Pipelined HTTP requests may have caused the server to crash under certain circumstances. This has been fixed. |
463748 | On Unix systems, attempting to connection without including a UserID in the connection string would have failed with the error "User ID '???' does not exist". This has been fixed to give the error "Invalid user ID or password". |
463763 | When using BCP IN to populate a table which had a nullable date or time column, the BCP utility would have given a 'NULLs not allowed' error if the data file inserted a NULL into the date or time column. The server was was incorrectly describing all date and time columns to the BCP utility as non-nullable, even if they were nullable. This problem has now been fixed. |
463776 | A backup of the database could have been made that would have failed to start with the database assertion, 201502, "Inconsistent page modification counter value". This would not have occurred when the BACKUP DATABASE statement used the clause "WITH CHECKPOINT LOG NO COPY" or the Backup utility used the "-k nocopy" command line option, or if the database file did not grow from insert activity during the backup. This problem was more likely to occur if a backup was made while the database was growing in size, as the database would have to have had a large number of pages allocated for the checkpoint log, and have been both modifying (updating) existing database pages, as well as growing the database file during the course of the backup. If all of these conditions existed, then there was a small window of opportunity where the backup operation could have incorrectly read database pages. This has been fixed. |
463781 | The Java utilities (and potentially any Java application) on Mac OS X could not connect to ODBC data sources that were created with the ODBC Administrator utility (found in /Applications/Utilities/) that ships with Mac OS X 10.4. Specifically, applications fail with SQLCode -620 and SQLState IM003: "Could not connect to the database. Unable to load driver". The ODBC Administrator utility produces odbc.ini files that have white space around the equals sign, which confused the parser. The parser has now been fixed. |
463882 | If an application, connected via the iAnywhere JDBC Driver, fetched a timestamp value using the ResultSet.getTimestamp() method, then the fractional portion of the returned timestamp would have been incorrectly truncated to millisecond precision. This problem has now been fixed and the fractional portion of the timestamp is now the expected nanosecond precision. |
463887 | Deployment Wizard installs containing ADO.Net components would have failed without a good error message when trying to register the .Net components on a system with no .Net framework installed. This has been fixed so that the install now checks for the framework if it is required, and issues a warning. |
463910 | The MobiLink server could have incorrectly displayed the message "Ping complete" when a MobiLink Monitor session disconnected. This is now fixed. |
463912 | A query with an ordered GroupBy operator immediately above an Exchange operator in the plan could have returned incorrect results. This has been fixed. |
463915 | Sybase Central did not distinguish between CHAR or VARCHAR columns with byte-length or character-length semantics, nor did it allow for the creation of CHAR or VARCHAR columns with character-length semantics. Both of these problems have been fixed. Now, CHAR and VARCHAR columns with character-length semantics are displayed as "char(nn char)" and "varchar(nn char)" respectively.
In addition, when editing a column in the table editor or Column property sheet, or creating a domain or function in the corresponding wizards, it was possible to specify a size value that would exceed the database maximum (32767/maximum_character_length for CHAR and VARCHAR; 8191 for NCHAR and NVARCHAR). This problem has also been fixed. |
464155 | Attempting to use the Create Procedure wizard to create a Transact-SQL procedure, would have caused Sybase Central to crash. This has been fixed. |
464158 | A new statement, ALTER DATABASE SCHEMA FROM FILE, now allows for alteration an UltraLite database schema. This statement replaces the 9.0.2 schema upgrade feature that was implemented with the UpgradeSchemaFromFile() / ApplyFile() methods from this previous release.
Because Ultralite error callback is active during the upgrade process, the application is notified of errors during the conversion process. For example, SQLE_CONVERSION_ERROR reports all values that could not be converted in its parameters. Errors do not mean the process failed. The final SQL code after the statement returns is a 130 warning in this case. These warnings describe operations of the conversion process and do not stop the upgrade process. Note: There is no mechanism to support the renaming of tables, columns or publications. Also, renaming a table is processed as a DROP TABLE and CREATE TABLE operation. Caution: Resetting the device during the upgrade process leaves the database unusable. To upgrade the schema with this new statement: 1. Define a new schema by creating a SQL script of DDL statements. The character set of the SQL script file must match the character set of the database you want to upgrade. The UltraLite utilities ulinit or ulunload can be used to extract the DDL statements required for this script. Use these utilities to ensure that the DDL statements required are syntactically correct. - For ulunload, use the 杗 and 杝 [file] options. - For ulinit, use the 杔 [file] option. See the UltraLite Database Management and Reference documentation for details. 2. Review the script and ensure that: - That non-DDL statements have not been included. Including non-DDL statements does not have the expected effect. - Words in the SQL statement are separated by spaces. - Only one SQL statement can appear in each line. - Comments are prepended with '--' and only occur at the start of a line. 3. Backup the existing database. 4. Run the new statement using the following syntax: ALTER DATABASE SCHEMA FROM FILE �<filename>� For example: ALTER DATABASE SCHEMA FROM FILE 'MySchema.sql' 5. The existing database is upgraded with the new schema using the following process: - Both the new and existing database schemas are compared to see what differs. - The schema of the existing database is then altered accordingly. - Rows that do not fit the new schema are dropped. When this occurs, a SQLE_ROW_DROPPED_DURING_SCHEMA_UPGRADE (130) warning is raised. For example, if a uniqueness constraint was added to a table, and there are multiple rows with the same values, all but one row will be dropped. Alternately, if an attempt to change a column domain causes a conversion error, then that row will be dropped. That is, say a VARCHAR column is converted to an INT column, if the value for a row is 揂BCD�, then that row is dropped. Lastly, if the new schema has new foreign keys where the foreign row doesn't have a matching primary row, these rows are also dropped. If dropping rows is not the desired behavior of the schema upgrade, detect the warning and restore from backup. |
464201 | The runtime server does not support execution of procedures; however, it still attempted to execute a login procedure if one was defined using the PUBLIC.login_procedure option. That attempt would always have failed and caused a message to be displayed in the server console window for each connection:
Login procedure 'sp_login_environment' caused SQLSTATE '0AW04' Triggers and procedures not supported in runtime server This has been corrected so that the runtime server will no longer attempt to invoke the login procedure. A workaround would be to execute: set PUBLIC.login_procedure='' |
464299 | Installing the Runtime version of SQL Anywhere, using the "Add" option during SQL Anywhere Install Maintenance, would have uninstalled some previously installed components. This has been fixed. |
464303 | When determining where to begin scanning the transaction log, dbmlsync will now ignore subscriptions if they do not contain any of the tables that are currently being synchronized. Previously when building an upload, dbmlsync scanned the log from the lowest progress value of any subscription involving the MobiLink user who is synchronizing.
To take advantage of this optimization, you should now define your publications as disjoint (not sharing any tables) whenever possible. This will result in a major performance improvement when one subscription is being synchronized more frequently than another. For example, suppose publications P1 and P2 share no tables. P2 is synchronized daily and P1 is synchronized hourly. Each time P1 is synchronized, its progress is advanced by 1000. The following table shows the segment of log scanned for each synchronization based on the old and new behavior: log scanned log scanned Action P1's progress P2's progress (old behavior) (new behavior) sync P1 1000 1000 1000-2000 1000-2000 sync P1 1000 2000 1000-3000 2000-3000 sync P1 1000 3000 1000-4000 3000-4000 sync P1 1000 4000 1000-5000 4000-5000 You should be able to define your publications as disjoint except where two publications contain the same table but with different WHERE clauses. Defining disjoint publications should never limit functionality because the dbmlsync -n option can accept a comma separated list of publications which causes the union of the publications to be synchronized. For example, suppose table T1 is to be synchronized throughout the day, and tables T1 and T2 are to be synchronized at the end of the day. Previously, you might have defined your publications as follows: - P1 contains T1 - P2 contain T1 and T2. - Synchronize during the day with the dbmlsync option -n P1 - Synchronize at the end of the day with the dbmlsync option -n P2 In order to take advantage of the new optimization, two publications should be defined: P1 contains T1, and P2 contains T2. During the day dbmlsync will synchronize using the -n P1 option. At the end of the day dblmsync will synchronize using -n P1,P2. This does the same thing, but is much more efficient with the new log scanning behavior. |
464307 | The QAnywhere Agent may have displayed the errors on startup:
... Failed to start QAnywhere Agent (register with DBLsn) ... Error registering with DBLSN code: -1 This was due to the MobiLink Listener crashing, and has been fixed. |
464321 | It was possible for the server to terminate the connection when an attempt was made by the application to cancel a request. This has been fixed so that the request is correctly cancelled and the connection is not terminated. |
464341 | Cancelling a statement containing a long-running function call would have appeared to succeed (i.e. the "Execute" menu item and toolbar button were enabled), but the statement might have been left running if the function was executed as a result of fetching rows from the statement's result set. This has been fixed. |
464348 | The following predefined variables, ias_Originator and ias_StatusTime, were missing from the list of predefined variables listed in the Rule dialog used when composing deletion or transmission rules. This has been fixed. |
464442 | The iAnywhere JDBC Driver could have leaked memory, and exhausted memory heaps, if an application causes many SQLWarnings to be generated. This problem has now been fixed. |
464446 | Connecting to a version 10 server with a version 9 or older client, could have caused the server to ignore the Language connection parameter, or in rare cases, caused the server to crash. The language used by the connection would then have been the server's default language. This has been fixed. |
464473 | When executing the statement ALTER TABLE ADD FOREIGN KEY there was not check that the new foreign key rows all had matching primary rows. A check has been added so that the statement will now fail if a primary row is missing. |
464474 | On Mac OS X systems only, items in the menu bar for Sybase Central were enabled even when a modal dialog was open. If one of these menu items was clicked while the dialog was open, the program could have crashed. This has been fixed.
Note, this problem affected the Interactive SQL utility, DBConsole, and the MobiLink Monitor as well, which have also been fixed. |
464477 | After the execution of an ALTER TABLE [ADD | DROP | MODIFY ] COLUMN statement, the server would have failed to reload trigger and stored procedure definitions. This reload should have caused a recompile of the trigger or procedure definitions, which would have altered the semantics of their statements if they depended upon the ALTERed column. As an example, if a query in a trigger definition used the syntax "SELECT *" and referenced the modified table, an incorrect number (or type) of columns would have been returned in the query's result. This oversight has been corrected. |
464488 | The MobiLink server now buffers pending writes more efficiently during HTTP synchronizations. This change allows the server to use significantly less memory, which may make for less swapping to disk. |
464640 | The IAnywhere Oracle ODBC driver could have crashed if the following ODBC API functions were called in this order:
SQLAllocHandle( ..., SQL_HANDLE_STMT, ...) (returns SQL_SUCCESS) SQLExecDirect( ..., "select ...", ... ) (returns SQL_SUCCESS) SQLExecDirect( ..., "insert...", ...) (returns SQL_ERROR) SQLFreeStmt( ..., SQL_UNBIND) with the same statement handle. The number of columns of the result set was not reset to zero when the same statement handle was reused. This problem has now been fixed. |
464669 | In a database mirroring environment, an operational server may have crashed when first establishing a connection to another partner or the arbiter. This has been fixed. |
464681 | Servers running on Unix systems, and experiencing a high volume of HTTP connections, may have hung. This has been fixed. |
464828 | Calling the system procedure xp_sendmail with a non-ASCII character (i.e., character greater than 0x7f) in the Subject, would have caused a server crash. This has been fixed. |
464834 | The "Start Agent" menu item associated with a .QAA file was missing a keyboard mnemonic. This has been correct so that it now has one. |
464837 | A synchronization would have failed if it used publications, and the runtime did not know if the MobiLink server had received the upload of the previous synchronization. This has been fixed. |
464838 | It was possible for the Interactive SQL utility to crash (NullPointerException) if the window was closed while editing table data. This has been fixed. |
464849 | When a column for an INSERT statement was bound in a Java application as follows:
stmt.setTimestamp( pnum, new java.sql.Timestamp(System.currentTimeMillis()) ); executing the INSERT statement would have failed with a SQLE_CONVERSION_ERROR. The microseconds were not scaled into nanoseconds, and vice versa. This has been fixed. |
464881 | If an application initialized, finalized, and then re-initialized a client library, making a connection could possibly have caused the application to crash. How the client library is initializing and finalizing varies from API to API. For DBLib, this is done with db_init and db_fini. For ODBC with a Driver Manager, this is done when connecting when there are no existing connections from the application, and when disconnecting, when the connection being disconnected was the only connection from the application. This has now been fixed so that the application will not crash when making a connection. |
464885 | When the MobiLink server was configured to support synchronization requests from version 9 clients using the -xo option, the following error could have occurred at shutdown: "[-10117] Stream Error: Unable to open a 'tcpip' network connection. An error occurred during shutdown.". This has been fixed so that the error no longer occurs. |
464889 | If the -sl option (set Java options) was used more than once on the MobiLink server command line, an error such as "unrecognized argument" could have occurred. This has now been corrected.
For example "mlsrv10 -sl java ( opt1 ) -sl java (opt2 ) ..." now correctly parses as "mlsrv10 -sl java( opt1 opt2 ) ..." |
465003 | If multiple connections using Remote Data Access attempted to read from the same set of tables in a Microsoft SQL Server database, then the connections would have been serialized. This was due to the fact that Remote Data Access always used pessimistic locking when connecting to Microsoft SQL Server. This has now been fixed so that connections to Microsoft SQL Server are no longer serialized. |
465040 | When the server was converting the WHERE, ON or HAVING clauses to Conjunctive Normal Form, and discovered at least one simplified or implied condition, then it was possible that the resulting query was not equivalent to the original query and therefore did not return the same result set.
For example, the following should return 1 row, but did not return any rows: create table T1 ( d int, e int, f char(5) ,g char(5) ); insert into T1 values ( 5, 2, '4E', 'N' ); select * from T1 where ( d is not null or d is NULL ) and ( e = 2 or e is NULL ) and ( g <> 'Y' or g is null ) and e = 2 This has been fixed. |
465042 | The way destination aliases are handled by the QAnywhere server changed in version 10.0.1 in a way that the plug-in didn't handle correctly. The list history entries for multi-addressed messages were including all of the messages sent to the alias members. This has now been fixed so that only those history entries whose addresses match the destination address shown in the Messages panel are shown. |
465151 | The UltraLite runtime would have accepted the empty string as a valid script version. This has been fixed. The empty string is now rejected, just like if it had been set to NULL. |
465161 | While rare, the server could have crashed on shutdown. This would only have been seen if more than one external function had been called, and the calls were either cancelled before the functions completed, or the database tasks servicing the request had received a thread deadlock error before the functions completed. This has been fixed. |
465168 | Pipelined HTTP requests may have prematurely exceeded the MaxRequestSize protocol option limit, resulting in a 413 - 'Request Entity Too Large' HTTP status. This has been fixed. Now, by default, the MaxRequestSize limit is 102,400 bytes per request. |
465178 | As of version 10.0.0, Remote Data Access no longer worked with an ODBC driver that did not support UNICODE. This has now been resolved, and Remote Data Access is now possible with non-UNICODE ODBC drivers. It should be noted though that data coming from non-UNICODE ODBC drivers will not undergo any character set translation. |
465368 | If the Timeout synchronization parameter was set to a value that was too low, and a TLS or HTTPS synchronization was being done over a slow channel, the runtime may have attempted to send a liveness packet before the TLS handshake had been completed, causing the synchronization to fail in a number of different ways. The MobiLink server may have reported a handshake or protocol error, or the client could have crashed. This has been fixed |
465371 | If a procedure, trigger, batch or event contained a string which was continued across multiple lines, and there was a syntax error in the procedure at some point after the string, the wrong line number would have been reported in the error message. This has been fixed. |
465383 | A web services procedure attempting to make a secure connection to a remote web service may have failed with the error "Unable to connect to the remote host specified by '<URL>'". This has been fixed. |
465385 | Copying cells from results tables always copied the data as comma-delimited form, with character data quoted with quotation marks, without respecting the Interactive SQL options: isql_field_separator, isql_quote, and isql_escape_character. This has been corrected.
Note, this fix now makes it easier to paste data from dbisql into Excel: Set the default field delimiter to a tab ("\t" -- a backslash followed by the lower-case letter T), then copy the data from the table in the usual way. |
465388 | Inserting a row that contained a zero-length binary value for a long binary column would have caused the UltraLite engine to crash. This has been fixed. |
465405 | The Edit/Select All menu item would only have operated on the contents of the "SQL Statements" field. The intended behavior is that this operation select the contents of the active pane. This has been fixed so that if a result table has focus, the Edit/Select All menu item selects all of the rows it contains. |
465530 | If the filename of a transaction log, including its full path, was exactly 70 bytes, and the Backup utility was used to do a backup, the server would have failed to truncate the log when the -x option (delete and restart the transaction log) was specified. This has been fixed.
A workaround would be to use the BACKUP DATABASE statement with the TRANSACTION LOG TRUNCATE clause to truncate the log. |
465693 | If the ExecuteQuery method detected an error, a non-null ResultSet could still have been returned. This was corrected. |
465695 | After connecting using embedded SQL, some user options may not have been respected until the first SET OPTION was performed. Public options may have been used instead of any user options (i.e. options set with "SET OPTION user.option = value" may not have been respected.)
After executing a SETUSER WITH PERMISSIONS userid statement, some of the current options for userid may not be respected. Similarly, the next SETUSER command which should have set the options back, may have caused the original options to not be respected. Both of these problems have now been fixed. |
465708 | After it has started all necessary processes, the QAnywhere Agent now prints a line like this to the console window and log file:
I. 2007-04-11 11:21:54. There are 23 processes running This is useful in diagnosing problems on Windows CE devices with Windows Mobile 5, and previous OSes, because there is a fixed limit of 32 processes that can be running at once. After that, the OS will start shutting down applications in a not completely deterministic way. |
465712 | When running the consolidated database on a server that uses snapshot isolation (Oracle 10g for example), it was possible that MobiLink would have redelivered messages to QAnywhere clients that were previously received and acknowledged. This problem would have occurred when there was a long-running transaction on the consolidated database, which caused the last_download_timestamp to stay fixed at the time that the transaction began. It has now been fixed. |
465733 | Attempting to create a a tracing database would have caused Sybase Central to crash. This has been fixed. |
465814 | Performing a LOAD TABLE into a temporary table that already contained rows could have crashed, if the table had no primary key. This has been fixed. |
465848 | On MacOS systems, trying to connect to a server running on the same machine as the client over the IPv6 loopback address would have failed. This has been fixed. |
465947 | MobiLink clients that use TLS or HTTPS would have crashed if they were not able to load the appropriate TLS stream dlls (mlcrsa10.dll, mlcecc10.dll, mlcrsafips10.dll and sbgse2.dll). This has been fixed. They will now report the error "Failed to load library x" (STREAM_ERROR_LOAD_LIBRARY_FAILURE). |
465964 | If a web service had a SQL statement associated with it, the web service property sheet was used to change the web service's type to 'DISH', then the SQL statement would have been deleted without warning. Now a warning message appears when 'DISH' is selected in the "Service type:" drop down list, with an opportunity to select Cancel without deleting the SQL statement. |
466044 | If the server was started with the -qw ("do not display database server screen") or -qi ("do not display database server tray icon or screen") command line options, certain messages, such as checkpoint messages, would not have been written to the output log or to the internal message list (which can be queried with the property functions). Services on Windows Vista, as well as services on XP which did not allow interaction with the desktop, may have behaved as if -qi was specified. This has been fixed so that all messages now always go to the server output log and internal message list.
On Windows, the -qw switch now completely suppresses the creation of the server window. As before, a systray icon is created but that icon is now created immediately upon startup. Previously, a minimized server window was created momentarily before the systray icon was created. In 9.0.2, the menu for the systray icon allowed the user to open the server window via the "Restore" menu item but "Restore" has now been disabled (which is consistent with 10.x & the fact that -qw is supposed to prevent the creation of a server window). On UNIX, the -qw switch suppresses all messages from going to the console after the 'press q to quit' message has been displayed. |
466058 | A new option has been added to the CE Deployement Installer, which allows for excluding the default QAnywhere database in the .CAB file. |
466070 | Connection attempts to the utility_db would have failed, throwing an exception that setting options was not allowed in the utility_db. As the SET OPTION statement is not valid in the utility_db, the AsaConection method now checks if the database is the utility_db before issuing a SET TEMPORARY OPTION statement. |
466074 | Certain x.509 server certificates would have been erroneously rejected by the client during the TLS handshake, causing the connection to fail. Certificates generated by 10.0 gencert were particularly likely to be rejected. This problem has been resolved by upgrading to newer versions of the Certicom TLS libraries. |
466091 | The Unload utility (dbunload) may have crashed when attempting to rebuild a database prior to version 10, if a version 10 server that disallowed connections to the utility_db was already running. Thia has been fixed.
Note, in general it is good practice to insure that no version 10 server is running when rebuilding databases prior to version 10. |
466169 | The method QAManagerBase.GetQueueDepth() could have returned a queue depth of 0 when there were untransmitted outgoing messages in the message store. This was due to a race condition between the GetQueueDepth method and the message transmission process in the QAnywhere Agent. This has been fixed by changing the behaviour of GetQueueDepth so that uncommitted outgoing messages are included in the queue depth count. |
466188 | When unloading a database created using a version prior to 10, using the version 10.x Unload utility , the unload may have failed with the error "SQL error: Not enough memory to start". This would only have occurred if one of the dbunload command line options -ac, -ar or -an was used, either the unload engine or the reload engine (or both) had to be autostarted and was the 32 bit server, and the machine had sufficient RAM such that when dbunload requested a cache size of 40% of available memory, this was greater than the maximum allowable non-AWE cache size on the given platform. This would have meant a memory size of about 8 GB on Unix and 32-bit Windows platforms, and 10 GB on 64-bit Windows. This has been fixed.
A workaround is to specify the undocumented dbunload options -so and -sn, to set the options for the unload and reload servers respectively, as follows: dbunload -so " -ch 40p" -sn " -c 40p" ... Note the space before the -c switches, these are required. Mnemonic: -so sets the additional switches for the "Old" server, -sn sets the additional switches for the "New" server. |
466202 | The maximum number of active SQLCA variables (i.e. SQLCAs that have been initialized and used to call into the runtime, but not finalized) supported by the UltaLite engine has been increased from 31 to 63.
For .NET applications, the SQLCA limit also represents the database connection limit, since a new sqlca is used for each connection. Also, an internal SQLCA is used by each .NET application, so the effective connection limit for .NET apps is 63 minus the number of running .NET clients. Note that the runtime's connection limit is 64. |
466203 | If a trigger encountered an error due to a statement referencing a table that was exclusively locked by another connection, a subsequent execution of the trigger could report "Invalid statement". This has been fixed. |
466209 | The QAnywhere Agent (qaagent) now has an option to control where the listener tracking store is created. The option is -z <path> and corresponds to the dblsn -z option documented in Engineering case 460718. |
466265 | When unloading a database, either with the Unload utility or the UNLOAD statement, DDL statements to create a non-primary key index on a global temporary table would not have been written to the reload.sql file. This has been fixed and proper DDL to re-create the index is now written to the reload file. |
466293 | A server with active HTTP connections could have hung indefinitely during shutdown. At the point of the hang, the server had completed stopping all databases. This has been fixed so that the server shutdown will not hang, although in rare cases it could still take up to about 20 seconds after the databases have been stopped to complete the shutdown process. |
466319 | An IF expression, with one branch of type XML and one of type VARCHAR, would have returned type VARCHAR and therefore special characters would be quoted in a SQLX function. This has been corrected so that the IF expression now returns type XML in this case. In the following example, the e1 element is quoted before the fix, but not after:
select xmlelement( name e, IF 1=1 THEN cast( '<e1/>' as xml ) ELSE '' ENDIF ) A workaround to avoid the quoting without the fix is to make all branches of the IF the same type: select xmlelement( name e, IF 1=1 THEN cast( '<e1/>' as xml ) ELSE cast( '' as xml ) ENDIF ) |
466442 | The changes for Engineering case 449577 introduced a problem with the Developer and Evaluation Editions. When run on Unix systems, the server could not be autostarted, and therefore utilities that auto-start servers, such as dbinit or dbunload, would have failed. On Linux systems, the server would have started to the point where the GUI splash screen / license prompt was brought up. This has been fixed. |
466446 | Two command line options have been added to the MobiLink listener (dnlsn) for controlling ip tracking behavior.
1. The -gi option controls the ip tracker polling interval. The default is 10 seconds. example: dblsn.exe -gi 30 2. The -ga option is for asynchronous ip tracking. The -gi option is ignored when -ga is used. example: dblsn.exe -ga |
466456 | If an application had an open cursor, and another transaction deleted a row that affected that cursor, it was possible for the cursor to have been positioned on the wrong row. This has been fixed. |
466474 | When synchronization tables on an ASE database server were created with the 'datarows' locking scheme, the MobiLink server could have silently skipped rows that were inserted by other connections without a commit. The ASE server doesn't block any other connections that are trying to query the rows from a table that were created with 'datarows' locking scheme, even when there are uncommitted inserts for this table. The MobiLink server now work around this behaviour properly to ensure that no rows are skipped.
By default, the MobiLink server now queries the minimum transaction starting time from master..systransactions and then sends this timestamp to the client as the last download timestamp. In the next synchronization for this client, the MobiLink server will use this timestamp as the last download time for download. In order to get the starting time, the user ID the MobiLink server uses to connect to an ASE server must have select permission and the master..systransactions table. If the user does not have proper permissions, the MobiLink server will present a warning message and get the download time from the ASE function getdate(), reverting to the old behaviour where rows could be missed in the download. With this change, it's now possible that the MobiLink server may send duplicate data to clients, if there are any open transactions that modified any tables in the synchronization database or any databases on the ASE database server when MobiLink server is doing a download. Although the clients are able to handle duplicate data, this behavior may reduce MobiLink server performance. The MobiLink server now includes two new command line switches so you can the behaviour of the MobiLink server with respect to tables with the 'datarows' locking scheme. The -dr switch can be used to tell MobiLink that none of the synchronizing tables use the 'datarows' locking scheme. The -dt switch can be used to force MobiLink to detect transactions only within the current database when determining the last download time that will be sent to the remote database. The -dt switch should be used if all the synchronizing tables are located in a single database, as this could reduce duplicate data sent by the MobiLink server to the clients. |
466491 | The server could have failed with various assertion failure errors when rebuilding a database with an invalid foreign key definition. For example, if the foreign key trigger action had the column being set to NULL, based on some event and the column definition did not allow NULLs, then this could have occurred. A database could have gotten into this state if at the time the foreign key was created the definition was valid but the column definition changed at a later date. The proper error is now returned indicating the reason the key is now invalid. |
466513 | Executing an SQL statement with input parameters could have caused a memory leak. This problem has been fixed. |
466559 | If a LOAD TABLE statement attempted to load a NUMERIC value that was too large for the target column, an invalid value would have been loaded. Now a conversion error is reported. |
466560 | Using 2.0 ADO .Net provider could have caused the exception TypeLoadException. The 2.0 provider was built as an x86 specific assembly, but the assembly binding policy file was not updated. This has now been fix by adding processorArchitecture="x86" to the assembly binding policy file. |
466566 | If a cursor was opened on a statement containing a comparison predicate of the form "T.x = val", where val was NULL, and, further, the statement was opened with the Rowcounts option ON, or scrolling forward and backward was performed, then the server could have given the wrong answer (rows that did not match the predicate), or in some cases a crash was possible. In order for the problem to appear, the value had to have specific characteristics (for example, variable within a stored procedure, or an unquantified function). This problem has been fixed. |
466683 | The runtime could have crashed at the end of an HTTPS synchronization. This has been fixed. |
466685 | When synchronization tables on an ASE database server were created with the 'datarows' locking scheme, the MobiLink server could have silently skipped rows that were inserted by other connections without a commit. The ASE server doesn't block any other connections that are trying to query the rows from a table that were created with 'datarows' locking scheme, even when there are uncommitted inserts for this table. The MobiLink server now works around this behaviour properly to ensure that no rows are skipped.
By default, the MobiLink server now queries the minimum transaction starting time from master..systransactions and then sends this timestamp to the client as the last download timestamp. In the next synchronization for this client, the MobiLink server will use this timestamp as the last download time for download. In order to get the starting time, the user ID the MobiLink server uses to connect to an ASE server must have select permission and the master..systransactions table. If the user does not have proper permissions, the MobiLink server will present a warning message and get the download time from the ASE function getdate(), reverting to the old behaviour where rows could be missed in the download. With this change, it's now possible that the MobiLink server may send duplicate data to clients, if there are any open transactions that modified any tables in the synchronization database or any databases on the ASE database server when MobiLink server is doing a download. Although the clients are able to handle duplicate data, this behavior may reduce MobiLink server performance. The MobiLink server now includes a new command line switch so you can the behaviour of the MobiLink server with respect to tables with the 'datarows' locking scheme. The -dr switch can be used to tell MobiLink that none of the synchronizing tables use the 'datarows' locking scheme. The -dt switch on the MobiLink server has also been enhanced to include Adaptive Server Enterprise in addition to Microsoft SQL Server. The -dt switch can be used to force MobiLink to detect transactions only within the current database when determining the last download time that will be sent to the remote database. The -dt switch should be used if all the synchronizing tables are located in a single database, as this could reduce duplicate data sent by the MobiLink server to the clients. |
466696 | When a MobiLink server was started with the Java VM loaded, an error related to network issues could have caused the server to crash when shutting down. This has been fixed. |
466700 | When using the IBM DB2 ODBC driver with the iAnywhere JDBC driver to try to fetch rows from a result set, the iAnywhere JDBC driver would have have crashed if the result set had a CLOB column. This has now been fixed. |
466735 | If an application connected to the server using jConnect 6.x, and attempted to query a nullable long nvarchar column, then is was very likely the server would have hung. The TDS datatype map was incorrectly resolving nullable long nvarchar columns to itself, rather than resolving to nullable long binary as per the TDS specification. This has now been fixed. |
466790 | If a query contained at least two predicates "T.col = (subselect1)" and "R.col = (subselect2)" and both predicates could be used as fence posts for index scans on the tables T and R respectively, then the optimizer would have under estimated the cardinality of the joins which may have resulted, for complex queries, in unoptimal plans. This has been fixed. |
466812 | HTTP synchronizations through third party web servers, or proxies that use cookies, could have failed with stream error STREAM_ERROR_HTTP_HEADER_PARSE_ERROR. Also, if the server used the "Set-Cookie2" header, the client would never have sent the cookie back up to the server. These problems have now been fixed. |
466829 | If the server was in the process of starting up or shutting down when the machine was put into the hibernate state, the server may then have crashed when the machine came out of hibernation. This has been fixed. |
466873 | If an application made a remote procedure call to a stored procedure in a Microsoft SQL Server database, and one of the arguments to the stored procedure was a string argument of type Input with the value of '' (empty string), then the RPC would have failed with an 'invalid precision value' error. This problem has now been fixed. |
466887 | Using encrypted streams could have resulted in failed synchronizations, particularly on Mac systems. This has been fixed. |
466968 | Repeated concatenation of a string to another concatenation expression, could have caused the server to use excessive amounts of cache memory, eventually resulting in a stack overflow or a crash. For this to have occurred, a concatenation expression must have repeatedly been performed as the right hand argument of a concatenation expression.
For example: declare @var long varchar; declare @counter integer; set @counter = 1; set @var = space(30); calcloop: WHILE @counter < 100000 LOOP set @var = 'string' || @var; set @counter = @counter + 1; END LOOP calcloop; The error did not occur if only the left hand argument of a concatenation expression was a concatenation expression, i.e., set @var = @var || 'string'; This has been fixed. |
466989 | When running on HP-UX Itanium, the server did not search the LD_LIBRARY_PATH when trying to locate shared libraries, instead the SHLIB_PATH is searched. Now both locations are searched.
Note that in most cases the script sa_config.sh or sa_config.csh, that is included in the install, is used to set the environment for SQL Anywhere. When sa_config is used, both SHLIB_PATH and LD_LIBRARY_PATH are set, and hence SQL Anywhere will be able to find any libraries it requires. If sa_config is not used, users should work around this issue by setting both SHLIB_PATH and LD_LIBRARY_PATH. |
466996 | It was possible for a dbmlsync synchronization to fail with the following error messages:
... Communication error occurred while sending data to the MobiLink server ... Internal error (???!s). ... Communication error occurred while sending data to the MobiLink server ... Unspecified communication error This problem was most likely to have occurred when a slow network was being used. With a slow network, dbmlsync could have become blocked on a network write. which prevented the sending of a liveness message. To correct this problem, dbmlsync will no longer attempt to send liveness messages when it is blocked on a write. A possible workaround for this problem would be to use the timeout communication parameter to increase the liveness timeout. |
467100 | When very rare, a client application using a shared memory connection could have hung forever while executing a statement. This has been fixed. |
467122 | The execution time of the CREATE TABLE statement did not scale very well as the number of columns being created increased. The statement could have taken a significant amount of time to create tables with thousands of columns. The performance of the server has been improved so that the CREATE TABLE statement behaves more gracefully as bigger tables are created.
Note, this also addresses the problem where deleting a column from a table via the ALTER TABLE statement would have caused a syntax error for values that already existed in other columns. |
467128 | The following system stored procedures no longer require DBA authority by default:
sa_dependent_views sa_get_dtt sa_check_commit sa_materialized_view_info |
467145 | The keybaord accelerator for the "SQL/Stop" menu item was displayed as "Ctrl+Clear", even though there is no "Clear" key on most keyboards. This text has been changed to read "Ctrl+Break". |
467246 | When there were a large number of messages in the message store that were ready for transmission (eg. 200 12KB messages), and the QAnywhere Agent was started on a Windows Mobile 5 device, the synchronization process would have consumed 100% CPU for a significant period of time (eg. 1 minute). Further, if the upload failed after it had started, for whatever reason, each subsequent synchronization would have consumed CPU for a longer period each time. This performance problem has now been significantly alleviated so that synchronizations with QAnywhere will not get progressively longer after upload failures. |
467259 | The server could have crashed when a large number of connections were concurrently executing INSERT or UPDATE statements on tables with CHECK constraints. This was more likely to occur on multi-processor machines. This has been fixed. |
467268 | Synchronizations that took longer than ten minutes could have been timed-out by the MobiLink server, if the synchronization parameter 'timeout' was set to zero. MobiLink clients send keep-alive bytes to the MobiLink server at an interval of half the timeout value to keep the connection active, UltraLite was not sending these bytes if the timeout value was set to zero. This has been fixed. |
467269 | For some input values, the UNISTR() function could have entered an endless loop. This has been fixed. |
467274 | When a QAnywhere application (using SQL Anywhere as the message store) queued messages in time zone A, and then the time zone of the device was changed to time zone B with time earlier than time zone A, the queued messages would not have been transmitted until the time in time zone B reached the time that the messages were queued in time zone A. This has been fixed so that the messages queued in time zone A are now sent immediately when the device is online in time zone B.
Note that the issue of time zone independence with QAnywhere has not been completely addressed. All time values used in transmission rules refer to local time. Also, the special variable ias_StatusTime, used in transmission rules, refers to local time. |
467276 | The SQL Anywhere OLE DB provider may have failed an assertion if called by ADO with an incorrect set of parameters to Rowset::ReleaseRows. This problem only exists in the 64-bit version of MSADO15.DLL for Windows Vista. It does not exist in the 32-bit version of Vista, nor does it exist in the 64-bit version of Windows 2003. It occurred when ADO calls the SQL Anywhere OLE DB provider to release rows in a rowset that it has not previously fetched rows from. The symptoms include a request to release a rowset with a single row and a pointer to a row handle that is invalid.
A work around has been added to the SQL Anywhere OLE DB provider such that a request to release a rowset when no rowset exists will be ignored. The following VBScript sample will fail on 64-bit Windows Vista without the provider workaround: query = "SELECT * FROM Employees" Set recordset = connection.Execute(query) For Each field in recordset.Fields WScript.Echo field.Name propCount = 0 For Each prop in field.Properties 'crashes on 64-bit Vista ... Next Next |
467437 | Referencing a column as "IDENTIFIER" .. "IDENTIFIER" (note: two dots) could have caused the server to hang. In cases where the server did not hang, the first identifier would have been ignored. A similar problem existed for columns referenced as "IDENTIFIER" . "IDENTIFIER" .. "IDENTIFIER".
For example, the following script would have caused a server hang: CREATE TABLE T1 ( x char(4) NOT NULL, y char(13) NOT NULL, z char(5) NOT NULL, ); CREATE TABLE T2 ( w char(5) NOT NULL, ); SELECT a.x as x, a.y as y, count(b.w) FROM T1 a, T2 b WHERE a.z = b.w Group by a.y, a..x ; -- Note extra '.' Now, the server will generate an error if a query contains a column expression of the form "IDENTIFIER" .. "IDENTIFIER" or "IDENTIFIER" . "IDENTIFIER" .. "IDENTIFIER". |
467441 | The built-in MobiLink authentication classes that authenticate to external LDAP, POP3 and IMAP servers were unable to read a property if the ScriptVersion of the property was defined as 'ml_global'. It is now possible to define both the authenticate_user connection script and MobiLink properties needed for authentication using the special 'ml_global' connection script.
Note that the ml_global property can be over-ridden with a script version specific property, similar to the way connection scripts work. |
467446 | If auditing of database activity was enabled, certain failed connection attempts could have caused the server to crash. This has been fixed. |
467468 | The server could have crashed, or became deadlocked, when using snapshot isolation. This could only have happened if the snapshot transaction made use of a long index value. This has now been fixed. |
467495 | It was possible for an UPDATE or DELETE statement executed at isolation level 0, to have been blocked on a row lock for a row that was not actually affected by the statement. For this to have occurred, the row of the table must have matched all of the local simple predicates for the table, but be rejected by a later subquery or join predicat, or a predicate involving a user defined function. This behaviour has been changed. Now, UPDATE and DELETE statements at isolation level 0 will only take INTENT or EXCLUSIVE locks on the rows that are actually modified by the statement. Further, this change adjusts the locking behaviour at isolation level 1 so that it is less likely for an INTENT or EXCLUSIVE lock to be taken on a row not affected by an UPDATE or DELETE statement, but this is not guaranteed at isolation level 1. With isolation levels 0 and 1, update anomalies may occur and not all anomalies are prevented by the locking mechanism. Application developers should use caution when using isolation level 0 or 1 with UPDATE and DELETE statements to ensure that the semantics are acceptable to them. |
467502 | A warning message output by the UltraLite Database Initialization utility may have been misleading. When column subsets in a table T that were referenced in a publication PUB, were used to build an UltraLite database, the following warning was displayed:
ignoring column subset for publication 'PUB', table 'T' -- all columns will be added Actually, the column subset was being used to build the UltraLite table, it's just that columns not in the subset were being properly excluded from the UltraLite table schema. The message was intended to warn the user in regard to synchronization publications, as UltraLite always synchronizes all of the rows of a table that is specified in a sync publication. Part of the confusion is due to overloading the concept of a publication as a set of tables plus columns to be included in the schema, with the concept of a publication as a set of tables to be synchronized. In order to make this clearer, the warning has been changed to: ignoring column subset for synchronization publication 'PUB', table 'T' -- UltraLite synchronizes entire rows" |
467507 | When using SQL Server Business Intelligence Development Studio, the Data Flow Task "Preview" and column list functions would have failed when using the SQL Anywhere OLEDB Provider to connect to a SQL Anywhere server. This problem has been fixed. |
467522 | When making a remote procedure call to a stored procedure in a Microsoft SQL Server database, if one of the arguments to the stored procedure was a string argument of type Input with a value of NULL, then the RPC would have failed with an "Invalid precision value' error. This problem has now been fixed. |
467528 | Applications running on AIX systems, and providing the CPORT option in the connection string, would have failed to connect if IPv6 was enabled. This has now been fixed. |
467580 | If a function was declared non-deterministic and it was used in a SELECT INTO (variable) statement, then the function could have been executed extra times. For this to have occurred, the function reference must not have contained any column references. This problem could also have occurred for SELECT statements, if a column were fetched using GET DATA requests. This problem has been fixed. |
467586 | After a failed integrated login, calls to the system function EVENT_PARAMETER( 'User' ) in the ConnectFailed event, could have returned garbage characters. This has been fixed so that calls to EVENT_PARAMETER( 'User' ) will now return the empty string if the user is not known. |
467587 | The server may have crashed if it was not able to get the network interfaces from the operating system. This has been fixed. |
467590 | If concatenation was performed in procedural code (either using the concatenation operator or string() function), and one of the arguments had an error, then the server could have crashed. This has been fixed. |
467594 | Calling SADataReader may have caused extra characters to have been returned for string values. A miscalculation of the strings length has been fixed. |
467621 | The Server Licensing utility, dblic, is used to modify the server's licensing information. In version 10.0.1, with the introduction of license files, dblic operates on the license file instead of the server executable. As an extension, it is possible to still specify the name of the server executable as the argument to dblic. When doing this though, the contents of the license file was being written out over top of the server executable, rendering it unusable. This has been fixed so that it is now possible to specify either the name of the license file or the server executable and dblic will modify only the license file. |
467652 | If a procedure had a query that referenced a table that was then modified by an ALTER TABLE statement, later execution of the procedure could have caused the server to crash. This has been fixed.
See also Engineer case 443016 |
467712 | A .NET application would have crashed when trying to send a text message, if the QAManager is closed. Problems with detecting that message repository objects were open have been corrected. Now, the message: "The QAManager is not open." (error code 1021) will be returned. |
467733 | When editing a stored procedure which had more than about 1000 lines, CPU usage could have gone to 100%, even without doing anything. This same problem affected the Interactive SQL utility dbisql as well, when editing large SQL files. The problem was caused by the amount of tokenizing being done for syntax highlighting. This has been fixed. |
467737 | When SQL Anywhere was installed in a directory path containing non-ASCII characters, on a system for which the ANSI code page was different from the OEM code page (such as a typical English Windows installation), the server and client libraries may not have been able to access Unilib data files. The problem could show up as an "invalid parameter" error from SORTKEY/COMPARE, or failure to create certain character set converters. The path was erroneously being converted from the OEM codepage to UTF16, rather than from the ANSI codepage to UTF16. This has now been corrected. |
467747 | A second situation similar to Engineering case 467468 was found where the server could have crashed, or became deadlocked, when using snapshot isolation. As with the previous issue, this could only have happened if the snapshot transaction made use of a long index value. This has now been fixed as well. |
467783 | When executing a statement, the "Execution time" message displayed in the "Messages" pane could have been displayed before all of the asynchronous messages caused by a statement had been displayed. This has been corrected to that the execution time message follows the asynchronous messages. Asynchronous messages are those generated explicitly by the MESSAGE statement, or implicitly by CREATE DATABASE. |
467789 | Interrupting a SQL statement would not have also aborted any subsequent statements which were pending execution. For example, if a number of statements were entered in the "SQL Statements" field each separated by the command delimiterand then executed, attempting to abort them by clicking the "interrupt" toolbar button, would only have aborted the statement currently executing when the button was aborted; the remaining statements would have continued to be executed. This has been fixed so that the remaining statements are not executed. |
467800 | Attempting to create a proxy table to a table that has a computed index on a remote Oracle server, would have failed with the error "column not found". As part of creating a proxy table to an existing remote table, the server will also attempt to create indexes on the proxy table to match the indexes on the remote table. In this case, the name returned for the computed column was not an actual column name, but an expression name. The server now verifies that the column name truly is the name of a column in the proxy table when automatically creating indexes on proxy tables. |
467861 | OLEDB driver retuns error when executing stored procedure with parameters |
467873 | The dblib functions db_change_char_charset() and db_change_nchar_charset() may not have set the error correctly if they failed, and an error was already set from the last request. This has been fixed so that the error is now set correctly. |
467970 | In the presence of a thread deadlock error, an HTTP or SOAP stored procedure or function could have caused the server to appear to hang indefinitely. This problem would only have occurred if the HTTP or SOAP procedure or function being initiated happened to be the last unblocked database request task (i.e., on a server with a -gn value of x, x-1 request tasks would need to be blocked already). This has been fixed. |
468023 | When performing a 10.0.1 upgrade of a 10.0.0 install on Windows, when the FIPS option was selected the dbfips10.dll is not updated. This has been fixed. EBFs with this change will now update the dbfips10.dll. |
468031 | Under some conditions, the qastop utility would have failed to shutdown the QAnywhere Agent. When this occurred, qaagent would hang and the process would have to be terminated. This has been fixed. |
468033 | Inout parameters were not returned by SADataAdapter.Update when using SADataAdapter and stored procedures to update data. This problem has now been fixed. |
468129 | When an error occurs during synchronization, the MobiLink server should display the full details of the error, including the MobiLInk user name, remote ID, script version, row values (if available), etc. However, if no -vr command line option was specified, the row values were not displayed in the error context by the MobiLink server. This has been corrected. |
468148 | In some cases, executing queries that contained more than one procedure in the FROM clause could have caused the server to crash. This has been fixed. |
468319 | It was possible, although very unlikely and timing dependent, that the server could have hung, or even less likely crashed, when a connection was disconnected. This has been fixed. |
468343 | If an application attempted to connecting using the TCP parameter DoBroadcast=None and specified an alternate server name, rather than the real server name, in the ENG parameter, the connection would have failed. This has been fixed.
Note that the fix requires both an updated server and updated client library. |
468347 | MobiLink clients would never have timed-out a connection if the timeout synchronization parameter was set to zero. This has been fixed so that connections will now timeout after the maximum timeout period of 10 minutes if the server has not responded in this period. |
468358 | If the server returned the error "Dynamic memory exhausted", it will be followed by diagnostic information about the cache usage that is printed to a file. During this diagnostic printing the server may have crashed. This has been fixed. |
468456 | For certain MobiLink server errors, such as authentication failure, a second error may have appeared later in the log: "Download failed with client error xxx" when download acks had been turned on. This could have been confusing, since it suggested the error originated on the client, when the true error was reported further up in the server log. This has been corrected; the second error message will no longer appear. |
468462 | If BCP IN was used to populate a table owned by a user other than the connected user, it would have failed with either a 'table not found' error, or the server could have crashed. In some cases, if the connected user also owned a table with the same name as the table being populated, then the server would have attempted to add rows to the wrong table. This problem has now been fixed. |
468558 | The MobiLink plug-in may have failed to create an index on the timestamp column used for timestamp-based synchronization if the consolidated database was an Oracle consolidated database. The script the plug-in uses (in ml-template.zip) has been fixed and the column is now properly indexed. |
468582 | The SQL Anywhere 10.0.1 Maintenance Release was not updating the ADO.NET Data Provider file: iAnywhere.Data.SQLAnywhere.dll. This has been fixed so that susequent EBFs will update this file. |
468602 | The MobiLink file transfer utility mlfiletransfer did not display national characters properly on the command line. This has been fixed. |
468630 | The iAnywhere JDBC Driver currently supports the ResultSet.getBlob() method even though this method is optional in the JDBC specification. However, the ResultSet.getBlob().getBinaryStream() method (which is also optional in the specification) was not supported. Some applications insist that Blob.getBinaryStream() be supported if getBlob() is supported. As a result, the iAnywhere JDBC Driver now supports ResultSet.getBlob().getBinaryStream(). |
468631 | All of the GUI applications shipped with SQL Anywhere for Mac OS X, such as the Interactive SQL utility and DBLauncher, would have stopped working after applying
updates to Mac OS X, specifically Security Update 2007-004. The applications would either have crashed, or displayed a message similar to the following: The library dbput9_r could not be loaded. This may be because the provider is being re-loaded (in which case you need to restart the viewer) or because the library could not be found in the Adaptive Server Anywhere installation. Service management will not be available. or: Link (dyld) error: Library not loaded: libdbserv9_r.dylib Referenced from: /Applications/SQLAnywhere9/System/bin/dbsrv9 Reason: image not found This has been corrected. |
468726 | The server could have returned incorrect results, or in some cases crashed, when executing statements with predicates of the form "expression compare (subquery)". This has been fixed.
Note that BETWEEN predicates involving subqueries also qualify as they are interpreted as two compare predicates (see example below). Example: select s_suppkey, s_name, s_address, s_phone, total_revenue from supplier, revenue1 where s_suppkey = supplier_no and ( select max(total_revenue) from revenue1 ) between (total_revenue-0.01) and (total_revenue+0.01) order by s_suppkey |
468735 | If a QAnywhere message in the server database with an expiration date, was synchronized down to a client device before it had expired, the message would not have transitioned to an expired state, and hence would not have been deleted by the default server delete rule. This has been fixed.
Note that a QAnywhere message in the server database with an expiration date, that is not delivered to the client device before it expires, will also transition to an expired state and be deleted by the default server delete rule. This was the case before this change. |
468745 | If the option to view the Readme.txt file, or the iAnywhere Online Resources page, was selected during an install, the corresponding application would not have run. However, the install script would have waited for the user to dismiss the (invisible) application(s), and the install would have appeared to be hung. This has been fixed. |
468783 | Clicking the Name column heading in the table editor, would not have sorted the column names correctly. Specifically, all column names starting with upper-case letters were sorted before all column names starting with lower-case letters. This has been fixed. A similar fix has been made for the Data Type, Value and Comment columns. |
468862 | Previouly, the MobiLink server only supported "blocking download ack" mode. Now, the MobiLink server also supports "nonblocking download ack" mode. This mode may be controlled with the "-nba+" (use nonblocking download ack) or "-nba-" (use blocking download ack) command line options, with "-nba-" being the default. Nonblocking download acknowledgement mode provides a significant performance advantage over blocking download acknowledgement mode, but may not be compatible with some existing scripts.
The following is the documentaion update: MobiLink now supports two modes of download acknowledgement: blocking and non-blocking. Prior to this change, MobiLink only supported blocking download acknowledgement. When you turn on download acknowledgement, the default continues to be blocking. Note: Download acknowledgement is not on by default. To turn it on, use the dbmlsync "SendDownloadACK" extended option or the UltraLite "Send Download Acknowledgment" synchronization parameter. Download acknowledgement is not required to ensure that data is successfully downloaded. Download acknowledgement simply allows you to get acknowledgement of a successful download immediately (in the download); otherwise the acknowledgement occurs in the next upload. To set non-blocking download acknowledgement, use the new mlsrv10 option -nba+. Non-blocking download acknowledement is recommended because it provides a significant performance advantage over blocking download acknowledgement. However, non-blocking download acknowledgement cannot be used in the following cases: - Clients prior to 10.0.0 do not support non-blocking acknowledgement. - You cannot use non-blocking acknowledgement with the Notifier scripts that are generated by MobiLink Model mode. QAnywhere messaging uses non-blocking download acknowledgement. You cannot change this setting for QAnywhere: You will get an error if you specify both -m and -nba- on the mlsrv10 command line. To provide extra optional functionality to the new non-blocking download acknowledgement, two new MobiLink events have been added: nonblocking_download_ack and publication_nonblocking_download_ack. nonblocking_download_ack connection event ----------------------------------------- Function: When using non-blocking download acknowledgement, this event lets you update your database based on the successful application of the download. Parameter name Description Order -------------- ----------- ----- s.remote-id VARCHAR(128) N/A s.username VARCHAR(128) 1 s.last_download TIMESTAMP 2 This event is only called when using non-blocking download acknowledgement. When in non-blocking mode, the download transaction is committed and the synchronization ends when the download is sent. This event is called when the synchronization client acknowledges a successful download. This event is called on a new connection, after the end_synchronization script of the original synchronization. The actions of this event are committed along with an update to the download time in the MobiLink system tables. Due to the special nature of this script, any connection-level variables set during the synchronization are not available when this event is executed. For example, the following script adds a record to the table download_pubs_acked. The record contains the remote ID, first authentication parameter, and the download timestamp. INSERT INTO download_pubs_acked( rem_id, auth_parm, last_download ) VALUES( {ml s.remote_id}, {ml a.1}, {ml s.last_publication_download} ) publication_nonblocking_download_ack connection event ----------------------------------------------------- Function: When using non-blocking download acknowledgement, this event lets you update your database based on the successful application of the download of this publication. Parameter name Description Order -------------- ----------- ----- s.remote-id VARCHAR(128) N/A s,username VARCHAR(128) 1 s.last_publication_download TIMESTAMP 2 s.publication_name VARCHAR(128) 3 s.subscription_id VARCHAR(128) 4 This event is only called when using non-blocking download acknowledgement. When in non-blocking mode, the download transaction is committed and the synchronization ends when the download is sent. When the synchronization client acknowledges a successful download, this event is called once per publication in the download. This event is called on a new connection and after the end_synchronization script of the original synchronization. The actions of this event are committed along with an update to the download time in the MobiLink system tables. Due to the special nature of this script, any connection-level variables set during the synchronization are not available when this event is executed. For example, the following script adds a record to a table called download_pubs_acked. The record contains the publication name, the first authentication parameter, and a download timestamp: INSERT INTO download_pubs_acked( pub_name, auth_parm, last_download ) VALUES( {ml s.publication_name}, {ml a.1}, {ml s.last_publication_download} ) |
468864 | Servers running on Unix systems, and attempting to use an alternate server name, may have failed to start, giving the error "Alternate server name is not unique", even though no other server on the machine or network was using that server name. This has been fixed. |
468867 | When run on Windows CE devices, 1MB per of address space was reserved by the server for each thread, although only a portion was actually allocated, or "committed". This has been changed for Windows CE PocketPC 2003 and newer devices, as the server now implements the -gss command line option for these devices. The -gss option sets the stack size per internal execution thread. The default and minimum stack size is 64K and the maximum is 512K. |
468878 | After executing a statement, the toolbar buttons could have remained disabled, even though they should have been enabled. This problem was timing dependent, so it tended to appear on some machines from time to time, but not on others at all. This has now been fixed.
Note that the menu items and accelerator keys corresponding to the toolbar buttons were enabled correctly and were functional. |
468882 | In certain situations, for example, when the database server was shutting down, DBLauncher may not have displayed all of the messages it received from the database server, making it look like the database server had hung. This has been fixed. |
468897 | If an embedded SQL application allocated a SQLCA, some of the contents of the allocated SQLCA could have been left uninitialized after calling db_init. It was also possible, although likely rare, that a call to sqlerror_message using an allocated SQLCA could have caused the application to crash. Using the sqlca pointer included in DBLib did not have this problem. This has been fixed so that the allocated SQLCA is now properly initialized as part of db_init, and calls to sqlerror_message will not cause a crash.
A workaround is to zero out the allocated SQLCA memory after allocating it and before calling db_init. The allocated SQLCA (say app_sqlca) can be zeroed out using: memset( app_sqlca, 0, sizeof( SQLCA ) ) |
468905 | When running at snapshot isolation, a positioned update or delete to a row previously updated by another connection may have blocked in some cases, even though it was possible to have immediately given an update conflict error. This is fixed.
Note, in general blocking is still allowed when snapshot transactions do updates or deletes (unless the "blocking" option is off). This change only gives the conflict error earlier in some restricted cases. |
469002 | When run on Windows CE, the reserved stack sizes for all threads in the QAnywhere agent, the Listener and the MobiLink client have been changed to be as follows:
qaagent.exe: 64 KB dblsn.exe: 64 KB dbmlsync.exe: 128 KB Previously, 1MB per thread of address space was reserved, while only a portion was actually allocated, or "committed". |
469020 | The internal data structure for a cursor cannot exceed 64K. When a cursor would be larger than 64K, a diagnostic was not always generated. This was corrected. |
469145 | If the QAnywhere Agent is started on Windows CE with a spacey path in the startline connection parameter, for example:
qaagent -c "...;startline=\Program Files\Sybase\ASA9\dbsrv9 -o dbsrv.txt -c 20m -gd all -gp 4096 -n qanywhere -gk all -qw -gn 10" then it would have failed to start the database server with the error "InternalError: Unable to start database server". A problem with passing double quotes in the connection string has been fixed. |
469146 | If the return type of a method in a WSDL document contained the method name, the WSDL compiler would have generated an incorrent C# method signature for the asynchronous method call.
For example: public WSResult AsyncCategoryBrowseResponseResponse CategoryBrowse(CategoryBrowseRequest request) // incorrect should be: public WSResult AsyncCategoryBrowse(CategoryBrowseRequest request) // correct A problem with the generation of asynchronous C# method signatures has been corrected. |
469151 | The MobiLink server now closes non-persistent HTTP connections without waiting for the client to close the connection, as there is no need to hang on to the connection after the HTTP response is sent. This change modestly improves server resource usage when using non-persistent HTTP. |
469259 | The server may have crashed during the execution of an IN predicate of the form "{column} IN ( const, ...)". This would have occurred if the IN predicate was part of a control statement's condition, or part of the WHEN clause of a trigger definition; or at least one IN list entry needed an implicit type conversion in order to perform the compare. This has been fixed. |
469411 | Calls to the ODBC function SQLNativeSql() could have caused a crash in the ODBC driver. If the character set of the database was UTF8, a crash could have occurred or incorrect results could have been returned. This problem has been fixed. |
469436 | The server would have incorrectly marked all updates applied by SQL Remote as having caused a conflict when being applied to the consolidated database. This would have caused the resolve update trigger to fire when there was in fact no conflict, and would also have caused the update that was just applied to the consolidated to be echoed back to the remote database. This would have caused the row at the remote database to be temporarily set back to an older value. This problem has now been fixed so that the server will properly detect conflicts at the consolidated database. |
469523 | If a view was updated with an UPDATE statement that contained a VERIFY clause, the server may have crashed or incorrectly used the VERIFY clause. This would only have happened if the view and the base table had a different column ordering in the select list. This has been fixed. |
469570 | If the default command file for the Listener utility (dblsn,txt) was used implicitly, then having the -q option in the command file would have had no effect on the gui, instead of minimizing it. The desired behavior was achieved if the same command file was used explicitly (i.e. dblsn.exe @dblsn.txt). This problem has been fixed. |
469674 | The number of rows being sent by MobiLink to an UltraLite client could have been more than the number of rows the UltraLite client actually inserted. Rows could have been lost by UltraLite during synchronization when the primary key for a table was not the first index in the table. This situation could have occurred when changing the primary key via the UltraLite Schema Painter application. This problem has now been fixed. Newly created schemas (or altered schemas) will ensure the primary key is the first index for every table. For existing databases, UltraLite will check after loading the schema, that the primary key is the first index in every table and it will make it so if necessary.
A workaround to this issue would be to unload and reload the schema and/or the database. |
469685 | The server could have incorrectly accepted an outer reference as a parameter to the ROWID() function, without throwing an error. For example, the following query would not have returned an error:
SELECT * FROM table1, some_procedure( ROWID( table1 ) ) The behaviour of such a function call was undefined; a query containing an illegal outer reference may have returned unintuitive or inconsistent results. This has been corrected so that the server now correctly returns an error when the ROWID() function is called with an illegal outer reference as an argument. |
469699 | An attempt by a version 9.0.2 DLL to self-register itself on Windows Vista would have resulted in the regsvr32 process going into an infinite loop waiting for the self-registration to complete. This could have happened during any of the EBF installs from 9.0.2 build 3476 on. The problem would also have manifest itself after any of these EBFs have been installed by manually executing a regsvr32 command on a DLL. Since any 9.0.2 DLL that requires registration has already performed the registration step as part of the initial 9.0.2 install, the re-registration failure during an EBF install should not cause any problem, and the regsvr32 process can be safely terminated. In a similar fashion, any attempt to unregister a DLL (regsvr32 /u) once the EBF was applied would also have failed. This problem has now been fixed. |
469705 | If an existing database that contained materialized views and indexes on these views, was unloaded using the Unload utility or the DBTools function DBUnload, then the definitions of these indexes was not unloaded. This problem has now been resolved. |
469731 | Attempting to start a real database with the DatabaseName "utility_db", would have resulted in one of two different error messages (permission denied or naming conflict), depending on the situation. This has been corrected, the name "utility_db" is now reserved for the utility database. Other databases attempting to use this name
will see the error SQLE_DB_ALIAS_RESERVED_UTILDB (-985) "The database name 'utility_db' is reserved for the utility database." |
469827 | The server may have erroneously reported the error "Right Truncation of string data" when data was converted to CHAR or VARCHAR as part of a query (eg a CAST operation). This would have occurred if the database was created with a multi-byte collation, and a column contained NCHAR data of sufficient length (depending on the collation in use, but always at least 8192 bytes). This has now been fixed. |
469851 | If a rule was created whose condition expression contained a newline character, once saved to a ".qar" file, the file could not have been read properly. Embedded newlines were not being escaped with the line continuation character when they were written. This has ben fixed so that the condition is now saved correctly. |
469896 | Selecting a different value in the "Encoding" combobox did not correctly update the preview of table data in the Import Wizard. This has been corrected. |
469973 | On Windows Vista systems, the server would have left a minimized command-shell window visible in the Windows taskbar when starting Java in the database.
Self-registering DLLs, such as the ODBC driver or the dbctrs perfmon plugin DLL, could also have shown a minimized command-shell window, but it was very short-lived. Both these problems have now been corrected |
469974 | An application would have failed to autostart the engine when using a quoted StartLine value that contained spaces in the path. For example, the following startline would have failed with SQLE_UNABLE_TO_CONNECT_OR_START:
StartLine="\Program Files\uleng10.exe" This problem has been fixed. This problem can be worked-around by making the opening quote the second character: StartLine=\"Program Files\uleng10.exe" or by enclosing the entire quoted value in single quotes: StartLine='"\Program Files\uleng10.exe"' |
469976 | The server may have returned incorrect results when evaluating a query that contained a procedure call in the FROM clause if the body of the procedure contained only a single statement, and an unqualified column reference was passed to the procedure as an argument. In order for this incorrect behaviour to have occurred the column reference passed to the procedure had to have the same name as a column in a table referenced by the statement in the body of the procedure. This problem has now been fixed. |
469977 | If a server was started on Windows Vista and the default port number 2638 was in use, the server may give the error "Unable to initialize communications links" and fail to start. This would only have happened if a port number was not specified using the -x server option. The correct behaviour is to choose a different port and start on that port. This has been fixed. |
470050 | It was possible when rebuilding a database (version 10 or earlier) to version 10 using dbunload -an, -ar or -ac, that the new database would have been missing some objects. This would only have occurred if the database being unloaded contained GLOBAL TEMPORARY TABLES that had foreign keys, or comments using COMMENT ON, on them. The resulting database could have been missing indexes and/or comments on indexes for any tables, including base tables, that were to be created after those for the GLOBAL TEMPORARY TABLE. This has now been fixed. The fix requires a new dbtools library, as well as the updated script files, unload.sql and unloadold.sql. |
470052 | On Japanese Windows systems, when browsing for a file in SQL Anywhere Explorer, UltraLite udb and pdb files would not have been displayed when the file type was "All UltraLite Database Files (.udb, .pdb)", even though they did exist. This has been fixed. |
470056 | Attempting to include a column with an approximate data type (real, float or double) in an index would have caused a warning dialog to be displayed discouraging this practice. The dialog was provided with an OK button only. This has been corrected so that now both OK and Cancel buttons are provided, with Cancel cancelling the operation. |
470058 | If a database contained a user-defined message that included an embedded quote, attempting to rebuild the database would have failed when the resulting CREATE MESSAGE statement was executed. This has been fixed. |
470173 | After using Sybase Central to create a proxy table to a table in Paradox, fetching from that table would have failed with a "could not find the object" error message. The method Sybase Cenral used to qualify the table name with the database name was not supported by Paradox. This problem has been fixed by implementing a work around in the server to modify the qualified table name so that it is supported by Paradox. |
470176 | There was no implementation for the ODBC function SQLSynchronizeW() in the Runtime, even though it is defined in ulodbc.h. This has been corrected by implementing SQLSynchronizeW(). |
470195 | If an event was fired using the TRIGGER EVENT statement with a list of event parameter values, the server could have crashed when the event handler attempted to access the parameters via the event_parameter() function. This has been fixed. |
470198 | The utility SetupVSPackage.exe was not respecting the language setting as defined by DBLANG. This has been fixed. |
470202 | Named parameters found in scripts would have been parsed and incorrectly substituted for, when found in comments and quoted strings. This could have caused parameters to be passed in the wrong order, or an error message to be generated, when the number of parameters did not match what was expected. This has been fixed.
Note, the following forms of comments are recognized: -- (two hyphens) // (two forward slashes) /* */ The first two forms cause the script text to be ignored until the end of a line. The last form causes all text between the "/*" and "*/ to be ignored. This form of comment cannot be nested. Any other type of vendor specific comment will not be recognized and should not be used to comment out references to a named parameter. |
470274 | If a query used certain internal system procedures on the NULL-supplying side of an outer join, the wrong results could have been returned. The following procedures had this characteristic, and have been corrected:
- sa_rowgenerator - sa_report_blocking - sa_lockinfo - sa_report_deadlocks - sa_performance_diagnostics - sa_performance_statistics |
470282 | An erroneous conversion error could have been raised when executing a query if it referenced a derived table which was empty on the right side of a left outer join, and the derived table contained a GROUP BY clause and had a NUMERIC item in its SELECT list. This has been fixed. |
470292 | Under heavy load the server could have crashed without any assertions in the system log or the console log. This has been fixed. |
470296 | The ODBC driver could have allocated a large amount of memory when using a shared memory connection. This would have been very rare, and only occurred with large responses. This h has been fixed.
Note, this problem could also have occurred with embedded SQL applications, and is now fixed as well. |
470313 | A query may have failed with the message 'Assertion failed: 106104 "Field unexpected during compilation"' when a simple select that should bypass the optimizer was executed. The problem would only have occurred if the select used a unique index and an additional search condition contained a column reference on the right hand side.
For example: create table T1 ( pk int primary key, a int, b int ); select * from T1 where pk=1 and a=b; This has been fixed. |
470315 | The default name of a primary key constraint is "primary". If a table was created with a constraint name that was not the default, Sybase Central would have crashed silently when navigating to the Data tab.
For example, navigating to the Data tab for the following table definition would have caused Sybase Central to crash: CREATE TABLE t1 ( c INTEGER NOT NULL, CONSTRAINT "cn" PRIMARY KEY("c" ASC) This problem has now been fixed. |
470335 | To determine if a downloaded file has changed, the MobiLink File Transfer utility calculates a hash of its copy of the file and sends it up to the server. The server calculates a hash of its own copy and compares it with the hash of the remote file, and if they don't match, it transmits its entire copy of the file down to the remote. However, if the only change to the file is that extra bytes had been appended to the end, the file was transmitted incorrectly and the resulting file on the remote contained only the new portion -- the original portion of the file was lost. This has been fixed. |
470414 | If a Remote Data Access server was created where the underlying ODBC driver was not a Unicode driver, then using Remote Procedure Calls (RPC) with that remote server would not have worked correctly. This problem has now been fixed. |
470546 | A query with a procedure call in the FROM clause, that had a column or variable parameter that matched the name of one of the procedure's own result columns, would have failed with the error -890 "statement size or complexity exceeds server limits". This is fixed. |
470559 | The server could have crashed when starting up a database, if the start event of the database contained an HTTP/SOAP call. This has been fixed. |
470562 | When synchronizing with stream parameters pointing to a MobiLink server on a different machine, carrying out several synchronization operations in a row could have produced errors such as SQLE_COMMUNICATIONS_ERROR or SQLE_SYNC_INFO_INVALID. This would not have occurred if the stream parameters string was empty and the defaults were used. This has been fixed. |
470582 | The error 'Function or Column name reference "Unknown" must also appear in GROUP BY', may have been erroneously raised when an IF expression involved an aggregate function.
For example: IF count(n) > 50 THEN 'good' ELSE 'bad' ENDIF This has been corrected. |
470594 | The MobiLink Listener would likely have failed to send confirmation of notification delivery or confirmation of actions, if persistent connections were explicitly turned off (ie dblsn.exe -pc- ). This problem has been fixed. |
470660 | Items in the "Edit" menu were not enabled and did not perform consistently:
1. The "Edit/Copy" menu item is now enabled if a results table has focus and at least one row is selected. 2. If the Results panel is selected, the "Edit/Paste" menu item is no longer enabled. 3. If a results table was focused, the "Edit/Delete" menu item could have been clicked, but nothing would have happened. Now, the menu item will cause the row to be deleted, the same as if the DELETE key had been pressed. 4. The "Cut", "Undo", "Redo", "Find/Replace", "Find Next", and "Go To" menu items are now enabled only if the "SQL Statement" field has focus. Previously, they were enabled even if the "Results" panel was selected. |
470680 | When running the Windows Performance Monitor in a Terminal Services session other than session 0, it was not possible to monitor database services running in session 0. On XP, system services and the primary desktop are all in session 0. On Vista, only the system services run in session zero. The behaviour has been changed so that when the Windows Performance Monitor (perfmon) is started (actually, when "add counters" is selected for the first time), perfmon will monitor a database server in the local session if one exists and is providing statistics. If there is no server running in the current session, perfmon will monitor a database server in session 0 if one exists and is providing statistics. If there is no database server providing statistics in the local session or in session 0, perfmon will display statistics for a database server if one is subsequently started in the local session ONLY. To monitor a database server that runs in session 0 (eg, a system service) from a session other than session 0, the database server must be started before perfmon is started. |
470685 | When attempting to fetch an unsigned integer from a table on a remote server, the value returned would always have been 0 if the local server was running on a 64-bit little endian machine. This problem has been fixed. |
470812 | If the QAnywhere Agent was started with a custom policy (ie. transmission rules) where each rule was a scheduled rule, QAnywhere would still have behaved as though the policy was automatic. The messages put in a queue would have been transmitted immediately, and push notifications would have resulted in an immediate message transmission, instead of message transmissions happening on the defined schedule. This has been fixed so that the transmission rules are now all scheduled rules, message transmissions happen only at the scheduled times. |
470839 | When running the Windows CE install in Maintenance mode, the Start Copy Dialog did not contain the list of components to be installed. This has been fixed. |
470854 | When printing an error report to the console with "dbsupport -pc", binary data is represented in the form of a hex dump. For non-printable characters, the hexadecimal representation was incorrect. This has been fixed. |
470999 | It was not possible to build the PHP driver for SQL Anywhere 10 on Unix systems. The config.m4 script that is used as part of the PHP build procedure has now been updated to use version 10 software. |
471006 | EXECUTE permission was not granted to the group SA_DEBUG for the system procedures sa_proc_debug_version and java_debug_version. If a user that was granted membership in SA_DEBUG was not also a DBA, attempting to use the procedure debugger would have failed and possibly caused Sybase Central to crash. This has been corrected for newly initialized databases. For existing databases, the permissions can be granted by executing the following:
grant execute on dbo.sa_proc_debug_version to sa_debug go grant execute on dbo.java_debug_version to sa_debug go |
471007 | When the MobiLink client (dbmlsync)was run with table locking enabled, this is the default and is the case unless the extended option locktables is set to off, the expected behaviour is for synchronizations to fail unless dbmlsync can obtain locks on the tables being synchronized. A problem that would have allowed synchronizations to continue when dbmlsync failed to obtain the locks, has now been fixed. |
471044 | When accessing column values in the upload using Java direct row handling, the ResultSet.getObject() method could have returned null instead of an object representing the column value. Methods such as ResultSet.getString(), ResultSet.getInteger() etc. would have worked correctly. This is now fixed. |
471045 | The memory usage of the MobiLink server with QAnywhere messaging enabled would have increased by a small amount at each client synchronization. The amount of increase was reduced by about 90% by changes made for Engineering case 471798. This increase has now been reduced by a further 5%. While not completely resolved, the memory increase has been significantly reduced, and it continues to be addressed. |
471110 | If an event handler attempted to create a temporary table via SELECT ... INTO #temptab, or it attempted to create a view and the SELECT list included a string column with CHAR length semantics, the server would have crashed. This has been fixed. |
471148 | When the server was run on Linux x86 or x86-64 systems, in an X-Window environment where GTK libraries were available, and the command line options -ui or -ux were specified when the GUI console was invoked or when running the Developer Edition regardless of command line options, it may have crashed on shutdown. The integrity of the data in the database was not compromised. This has been fixed. |
471149 | When run on Windows 2000, the MobiLink Server was unable to determine the IP address of the remote client, and thus was unable to ignore a request when the stream option 'ignore' was specified. This has been fixed. |
471155 | The Unload utility could have crashed if the userid specified in the -ac connection parameter was 'dba', but used a non-default password (i.e. not 'sql'), and the userid of the source connection (i.e., -c parameter) was 'dba' as well. This has been fixed.
Note, it is recommended that when using -ac that the destination database have default dba credentials. The password can then be changed after dbunload completes. |
471293 | An HTTP request made to a DISH service may have caused a server crash if the DISH service exposed a SOAP service with the following characteristics:
- the SOAP service was created with DATATYPE ON or IN, specifying that parameter types are to be mapped from SQL to XMLSchema data types (rather than exclusively to xsi:string), - one or more parameters within the stored procedure called by the SOAP service were (SQL) XML data types. This has been fixed. VARCHAR, LONG VARCHAR, and XML are mapped to XMLSchema type STRING (xsi:string). Most client toolkits including the SQL Anywhere SOAP client will automatically HTML_ENCODE data types that map to xsi:string. |
471326 | The execution time reported in the request-level log for a statement could have been much to high. This would only have happened in the second or subsequent request-level logs that were split using the -on or on command line options. This has been fixed. |
471339 | UltraLite clients will now send their version and build number up to the MobiLink server during synchronization. A line similar to the following will appear in the server log:
Request from "UL 10.0.0.2862" for: ... |
471413 | If a BACKUP statement was executed that used one of the TRANSACTION LOG backup options, and the database did not use a transaction log file, then the server would have crashed. This has been fixed. The server now returns the error "Syntax error near 'backup option'". |
471415 | If the public option MAX_TEMP_SPACE was inadvertently dropped (ie set public.MAX_TEMP_SPACE=), the server would have crashed the next time it checked the free temp space. This has been fixed. |
471431 | If an "UPDATE OF column-list" trigger was defined, the trigger could have been fired in some cases where no column in the associated list had in fact been modified.
BEFORE UPDATE triggers should fire if a column in the column-list appears in the SET clause of the associated UPDATE statement, while AFTER UPDATE triggers should fire if the value of a column in the column-list has been modified by the UPDATE statement. A positioned update would have caused all BEFORE UPDATE and AFTER UPDATE triggers to fire regardless of whether a column in their column-list appeared in the SET clause or was modified by the update. Further, if a searched update included all columns in the SET clause, but did not modify the value of any column, AFTER UPDATE triggers would have been fired inappropriately. This has been fixed. |
471575 | If an application used the iAnywhere JDBC Driver to connect to a DB2 server, and attempted to use PreparedStatement.setBoolean(), the JDBC driver would have thrown an exception. Calling PreparedStatement.setBoolean() resulted in the driver binding a parameter of type SQL_BIT, even though DB2 does not support SQL_BIT. This has been fixed so that a parameter of type SQL_TINYINT is now used for DB2. |
471582 | The MobiLink clients will now include its version and build number with each synchronization, and the MobiLink server will display this information in its log. As a result, the MobiLink log will now contain lines like the following:
Request from "Dbmlsync Version 11.0.0.1036 Debug Internal Beta" for: remote ID: e08b39d1-e3fa-4157-969b-8d8679324c00, user name: template_U1, version: template_test instead of lines like this: Request from "MLSync" for: remote ID: 45ef79ab-195e-4f76-805b-95eef2773e8f, user name: template_U1, version: template_test |
471584 | Erroneous results could have been obtained for a query containing a left out join, where FOR READ ONLY was not specified, and where a temporary table was required (for example, to order the results of the join). This has now been corrected. |
471644 | In some situations, if a statement contained a subselect in the SELECT list of a query block that was aliased, and the alias was referred to in the WHERE clause of the query, then the statement would have failed with the following error:
*** ERROR *** Assertion failed: 106104 (...) Field unexpected during compilation (SQLCODE: -300; SQLSTATE: 40000) This has been fixed. |
471688 | Viewing a result set generated by SELECT or CALL statements would have caused the server to place schema locks on the table(s) associated with the result. Theses locks could have subsequently prevented modifying those tables in other applications, such as Sybase Central. This has been changed so that the Interactive SQL utility now releases database locks once the result set has been completely read (and cached), as long as there are no uncomitted changes in the current transaction. |
471692 | Multi-byte characters in push notifications may have been lost. This problem has been fixed.
Note, multi-byte characters are supported in UDP notifications, but SMS notifications are restricted to 7-bit ascii. |
471696 | The 32-bit and 64-bit versions of the SQL Anywhere library that provides support for the Windows Performance Monitor could not coexist. If the 64-bit library was registered last, only the 64-bit version of the Performance Monitor would have been able to monitor SQL Anywhere servers (both 32-bit and 64-bit servers). If the 32-bit version was registered last, only the 32-bit version of the Performance Monitor would have been able to monitor SQL Anywhere servers (both 32-bit and 64-bit servers). The area of the registry that contains performance monitoring information and, in particular the path to the support library, is shared by both 32-bit and 64-bit applications, unlike other areas of the registry which have been split into 32-bit and 64-bit versions. The problem has been fixed by having the 32-bit and 64-bit support libraries register using different service names. |
471710 | When submitting an error report with dbsupport, minidumps larger than 1Mb in size would silently have been omitted from the submission. Only the crash log would have been included. Also, when printing an error report with dbsupport, minidumps larger than 1Mb in size would not have been printed. These issues would typically only have occurred on Unix systems, since Windows minidumps are much smaller. This has been fixed. |
471765 | If a table had a column of type uniqueidentifier, varbit, long varbit, xml, nchar, nvarchar or long nvarchar, the column would not have been in the result set of the system procedure sp_columns. This has been fixed. To get this fix into an existing database, the database needs to be rebuild. |
471798 | The MobiLink server could have leaked 2K bytes of memory per synchronization if compressed streams were being used (ie. the "compression" client option was not "none"). The leak depended directly on how the first uploaded bytes of the synchronization flow on the network between the client and server, so the leak was somewhat random from client's point of view. The synchronization was not affected by the leak. This has now been fixed. |
471802 | The dbsupport utility can be used to submit, via the Internet, diagnostic information and crash reports, or to submit feature statistics. When dbsupport prompted the user to submit a particular crash report, and the user declined, it still attempted to submit feature statistics, which is not desired. When dbsupport was configured with "dbsupport -cc no", the intended behavior is to not prompt for permission to submit reports, and to not submit reports. Although the crash reports were not being submitted, dbsupport still attempted to submit feature statistics, which is also not desired. These issues have been fixed. |
471825 | When unloading UltraLite database to SQL, the UltraLite Unload utility would have missed any tables where IsNeverSynchronized() would have returned true. This has been corrected |
471931 | The MobiLink server could have crashed when calling a stored procedure which generated error messages that were longer than 256 characters. This has been fixed. |
471948 | If an HTTPS connection attempt failed because of licensing (i.e. too many connections), the client would have received a plain-text error message, instead of handshake data. HTTPS clients would have interpreted this as a protocol error. This has been fixed. |
471958 | If the primary key of a table being synchronized, was not defined as the initial column or columns of the table, it was possible for the MobiLink Server to crash while processing the download_delete_cursor for that table. It was more likely for the MobiLink Server to crash if the options -b or -vr were specified on the MobiLink server command line. The problem has now been fixed. |
471967 | The MobiLink server may have crashed when executing a user script which contained named parameters, and a parameter failed to bind. Unfortunately, this bind failure was also not being recorded to the log. The bind failure recording and crash have been fixed. |
471981 | Attempting to create proxy tables to an Oracle server in an SA database with a mult-byte character set, would likely have failed with a "table not found" error if the table owner and name were not specified in uppercase in the create existing table location string. This problem has now been fixed. |
472034 | Validating a table with full check, would have caused the server to crash if the column order of a foreign key did not match the column order of the referenced primary key. This has been fixed. |
472071 | If a query contained a recursive union that appeared on the right side of a nested loops join and the recursive union selected a hash execution strategy, then the statement could have failed with the following error:
Run time SQL error -- *** ERROR *** Assertion failed: 106105 (...) Unexpected expression type dfe_PlaceHolder while compiling [-300] ['40000'] For example, the following statement could cause this error. with recursive Ancestor( child) as ( (select row_num from rowgenerator R1 where R1.row_num = 1 ) union all (select R2.row_num+100 from Ancestor, rowgenerator R2 where Ancestor.child = R2.row_num ) ) SELECT * FROM sys.dummy D1, Ancestor for read only In the case of this error, the server would continue to process other statements (a non-fatal assertion failure). This has been fixed. |
472073 | Delete statements that do not bypass optimization, and load CHECK constraints, would have failed if there was a syntax error in CHECK constraint definition. This has been fixed. |
472078 | The server could have crashed if a MESSAGE statement contained certain types of substr or byte_substr expressions. These expressions must have used a negative start value that specified a starting point before the beginning of the string for a crash to have occurred. For example: "message byte_substr( 'a', -5, 1 )". This has been fixed. |
472081 | If a connection string contained LINKS=TCPIP(host=<hostname>;...), where <hostname> was an invalid host name, the client library may not have given an error as expected. This would only have occurred with threaded clients on Linux. This has been fixed. |
472222 | If the UltraLite language DLLs were removed from the installation, the UltraLite ODBC driver may have caused Sybase Central and dbisql to crash. The ODBC driver now explicitly checks for missing resources and reports an error if no resources are found. |
472228 | The Mobilink Redirector now support "IIS6 in IIS5 isolation mode". IIS5 allows processing of multiple persistent HTTP request responses within a single entry into the web server extension. However IIS6 in IIS5 isolation mode disallows that possibly due to the stricter HTTP system driver. To work around this, the redirector will exit the extension after a single request-response cycle, while persisting the backend connection for later use. This change should increase concurrency, especially when the backend servers are the bottleneck.
To turn on IIS5 isolation mode on a IIS6 server using the IIS Manager, right click on IIS Manager->Web Sites and select Properties. Bring up the Service page and select the "IIS 5.0 isolation mode". |
472237 | The MobiLink server is now supported on Windows x64. The supported consolidated databases are SQL Anywhere and Oracle (see Engineering case 472238 for details). An x64 JRE install is required, which is available at:
http://downloads.sybase.com/swd/detail.do?baseprod=144&client=ianywhere&relid=10260 To install this JRE: Download and run SA_1001_JRE_UPD.exe. The install will locate an existing SQL Anywhere 10 installation, and install a Java Runtime Environment for x64. To install the x64 MobiLink server: 1) Install the EBF normally on a x64 computer, and then go to Add/Remove Programs (Programs and Features in Vista), select SQL Anywhere 10 and click on the Change button. Check that Modify is selected and click on the Next button. 2) The Select Features dialog will appear and it will show the MobiLink for x64 features under "MobiLink". 32 bit MobiLink features will be displayed under "MobiLink (32 bit)". Check the checkboxes for MobiLink to install MobiLink for x64 and click on the Next button. 3) Click the Next button on the next dialog to implement the modifications. 4) Click the Finish button on the last dialog to complete the installation. |
472238 | The "iAnywhere Solutions 10 - Oracle" ODBC driver is now supported on Windows x64 systems. |
472239 | Branded, third-party ODBC drivers are no longer shipped with MobiLink. Version 10.0.0 and up already do not ship with branded, third-party ODBC drivers. The drivers that are no longer shipping are:
iAnywhere Solutions 9 - DB2 Wire Protocol iAnywhere Solutions 9 - Oracle Wire Protocol iAnywhere Solutions 9 - Sybase ASE These drivers are now deprecated, although they will continue to be tested to make sure MobiLink and other components still work with them. If a problem is encountered with one of these drivers that cannot be worked around, a fix cannot be made, the options are to directly use a recommended third-party ODBC driver (see http://www.sybase.com/detail?id=1011880), or to move to version 10.0.1 or higher. The aforementioned link will be updated, recommending: - An IBM ODBC driver for DB2 - Our own (iAnywhere Solutions 9 - Oracle) ODBC driver for Oracle (now shipping with 9.0.2 as of this change) - A DataDirect ODBC driver for ASE |
472245 | A call to SQLCancel() by an ODBC application may have failed, if the attempt was to cancel a multi-row insert. The results may have varied, but it the application could have appeared to be hung. The ODBC driver attempts to execute multi-row inserts as a single operation. If the operation failed, it attempted to insert rows one at a time. In the case where the multi-row insert failed due to the operation being cancelled, the driver was left in a bad state. Now, the driver does not bother trying again if the original statement failed because it was cancelled. |
472262 | The "Start In" property of the Sybase Central shortcut (Start menu item) was incorrectly set. This could have resulted in Sybase Central failing to start. This has been fixed. |
472364 | UltraLite allows a publication to be created with a predicate for each of its tables. This allows users to filter rows in a table being synchronized. If the predicate contained a subquery, it was possible that the predicate evaluated to the wrong result, either allowing all rows to be uploaded, or none to be uploaded. This has been fixed.
Also, note that there are two errors in the documentation. Under UltraLite � Database Management and Reference/Working with UltraLite Databases/Working with UltraLite publications/Publishing a subset of rows from an UltraLite table, the following are incorrect: "Palm OS: You cannot use a CREATE PUBLICATION statement with a WHERE clause on this platform." In fact, a WHERE clause can be used on Palm OS. The paragraph "What you cannot use in a WHERE clause" In fact, you can use columns from tables not in the article (or even not in the publication). You can also use subqueries. |
472369 | When running the Linux x86 (32-bit) server, the value of the NativeProcessorArchitecture property would always have been "X86," even if the engine was running on a system with an x86-64 CPU. This has been fixed. |
472386 | If a database containing global autoincrement columns was rebuilt, and the setting of the global_database_id option was 0, the next available value for these columns stored in SYS.SYSTABCOL.max_identity was not set. This has been fixed. As a workaround, execute the following after rebuilding the database:
set option public.global_database_id=1; set option public.global_database_id=0; |
472390 | If a statement other than a SELECT statement converted a value of type NUMERIC or DECIMAL to a string, then the conversion could have been incorrect. There could have been insufficient trailing 0 characters for the declared scale of the value. This has been fixed.
For example, the following batch would have returned 12.34 and 12.34000, now the two values should both be 12.34000: begin declare @num numeric(10,5); declare @str char(20); set @num = 12.34; set @str = @num; select @str, cast( @num as char(20) ); end Further, the data type of division in the NUMERIC/DECIMAL domain could have been incorrect for a non-SELECT statement. This has been fixed as well. |
472400 | In some cases, if a query contained an unflattened derived table on the null-supplying side of an outer join and the derived table contained a constant, then the statement could have failed with an assertion failure message:
Run time SQL error -- *** ERROR *** Assertion failed: 106105 (...) Unexpected expression type dfe_PlaceHolder while compiling (SQLCODE: -300; SQLSTATE: 40000) For example, the following query demonstrates this problem: SELECT * FROM SYS.dummy D1 LEFT JOIN ( select c1 from ( select distinct D2.dummy_col, 31337 c1 from dbo.rowgenerator R1 , sys.dummy D2 ) DT1 ) DT2 ON (D1.dummy_col=DT2.c1-31337) This has now been fixed. |
472478 | The iAnywhere JDBC driver has now been enhanced to support the DB2 Mainframe ODBC driver. The iAnywhere JDBC driver now checks the DBMS name of the DB2 driver, if it is the DB2 Mainframe driver it will set the appropriate default result set type and other attributes. |
472479 | If a cursor contained a LONG VARCHAR or LONG NVARCHAR column, and it was retrieved using a GET DATA request, then the request could fail with the error: -638 "Right truncation of string data" In some cases, this situation could have caused the server to crash. This has now been fixed. |
472482 | If a cursor was opened with a query that referenced proxy tables, and attempted to refetch a row, then the server would have failed assertion 101701. This problem has now been fixed and the server now correctly gives an error indicating that cursors involving remote tables are not scrollable. |
472484 | If an application made a request that executed a JAVA call, and then attempted to shut down the database while the JAVA call was still active, then the server would either have hung or crashed. This problem has now been fixed. |
472486 | On Linux IA64 systems, the server may cause "floating-point assist" faults. These warnings are as result of operations on denormal (quantities too small to be represented in normalized form) floats and doubles in the server, and can be considered harmless, especially if the number of warnings is low. The Itanium CPU is incapable of operating on denormal numbers in hardware and enters software emulation mode when such an operation is requested. The Linux kernel detects this and displays a performance warning, as the software emulation entails a performance penalty. The correctness of server operations is not compromised. All the same, the server has been modified to minimize internal use of denormal numbers. However, the warnings will still appear if the server is explicitly requested to operate on denormals (for instance, with the statement "SELECT 2.25e-309"). |
472489 | The .NET 2.0 framework introduced a new namespace 'System.Transactions', which contains classes for writing transactional applications. Client applications can create and participate in distrubuted transactions with one or multiple participants. These applications can implicitly create transactions using TransactionScope class. The connection object can detect the existence of an ambient transaction created by the TransactionScope and automatically enlist. The applications can also create a CommittableTransaction, and call the EnlistTransaction method to enlist.
Distributed transaction has significant performance overhead. It is recommand to use database transactions for non-distributed transactions. |
472503 | Deploying a synchronization model created with an exisiting UltraLite database could have caused an error. This problem has been fixed. |
472505 | While performing a backup, the server could have crashed in a high availability environment if one or more of the transaction logs was deleted. It was possible to truncate a transaction log when the database file was mirrored, but this is no longer the case. An error is now returned when attempting to truncate a transaction log while it's involved in mirroring. |
472507 | If a statement contained a hash join with a complex ON condition containing non-equality predicates that should not be executed in parallel, then it was possible for the join to be incorrectly costed by the optimizer as if it were executed in parallel. This could have lead to sub-optimal execution strategies, a server crash or a wrong answer. This has now been fixed.
For example, the following statement could exhibit this problem: select * from sysdomain D1 left join sysdomain D2 on D1.type_id = D2.type_id and 0 = ( select D1.type_id - D2.type_id from sys.dummy ) |
472508 | If a query contained an outer join that had a derived table on the null-supplying side, and the derived table contained a complex expression and the join condition contained a non-equality predicate that referenced this complex expression that was further used after the join, then the statement could have failed with a non-fatal assertion failure error:
Assertion failed: 102501 (...) Work table: NULL value inserted into not-NULL column For example, the following statement could cause this problem: with D(c1,c2) as ( select row_num-1, 0 from dbo.rowgenerator R1 where R1.row_num <= 101 union all select 123456789, 0 from sys.dummy where 1=0 ) select D1.c1, D1.c2 * 23 x, D2.c1 from D D1 left join D D2 on D1.c1 = D2.c1 and D2.c1 = 3 and x - D2.c2 = 0 This has been fixed. |
472510 | A server started with several databases could have crashed on shutdown if more than one alternate server name was used. This has been fixed. |
472613 | If a highly uncompressible string (i.e. one such that compression increases the size of the data or reduces the size by less than about 14 bytes) was inserted into a compressed column, fetching that value from the column would have resulted in decompression errors. This was the result of an assumption that the stored length of the column was less than or equal to the actual length of the string. This has been fixed. |
472617 | The Interactive SQL window could have stopped repainting when executing a long-running query. This has been fixed. |
472619 | The Unload utility would have reported a syntax error if the tsql_variables option was set to 'on'. This option controls how variable references starting with @ are handled. The unload script now temporarily sets the option to the default value (off). |
472620 | Mini core files generated on Linux as a results of a crash are too big. The server was including executable segments in the core files. This has been fixed by discarding executable segments, and any data segments that exceed 2MB in size. |
472623 | If a query was executed that used a merge join, and the null-supplying input of the merge join was a derived table that contained an unquantified expression in its select list and the join condition contained a non-equality predicate referencing this unquantified expression, the statement would have fail with the following message:
Assertion failed: 106105 (...) - Unexpected expression type dfe_FieldOrigRid while compiling For example, the following query could have generated this problem: SELECT T1.col1 FROM ( select NULL col1, row_num col2, (select dummy_col from sys.dummy ) col3 from dbo.rowgenerator ) T1 FULL JOIN ( select dummy_col c1, dummy_col+1 c2 from sys.dummy D1 ) T2 ON (T1.col2=T2.c1) AND (T1.col3=T2.c2) This has been fixed. |
472632 | Messages with a NULL originator in the server message store, would have caused message processing to halt. This has been fixed as follows: the QAnywhere Agent has been changed so that messages with a NULL originator will not be uploaded until the store ID is set on the client. The QAnywhere connector has been changed so that if a message with NULL originator somehow gets into the server message store, the message will be marked as unreceivable and skipped, not halting further message processing. |
472645 | If a transaction log file on the primary server in a database mirroring environment was grown using ALTER DBSPACE TRANSLOG ADD, the statement would have been sent to the mirror server, but would have been ignored. This has been fixed. The log on the mirror will now be correctly grown when the mirror server receives this statement from the primary server. |
472648 | The MobiLink server could have entered into an infinity loop and generated a very large output file, or have even crashed, if the execution of an upload_fetch, download_cursor, or download_delete_cursor script caused an error, or if the number of columns in the result set generated by any of these cursors did not match the number of columns defined
in the corresponding remote table, and the handle_error or handle_odbc_error script returned 1000 when these errors occurred. This problem has been fixed. The MobiLink server will now abort the synchronization if any of these unrecoverable errors occur during synchronization. The errors in the user-defined scripts must be fixed. |
472768 | The Unload utility was generating the reload.sql script using newline (linefeed) characters to separate lines on Windows, rather than the generally accepted carriage return/linefeed characters. This has been fixed. On other platforms, the script will continue to use newline characters as line separators. |
472772 | Mini-core dumps generated by the server on Linux systems may not have loaded properly in the debugger, or would not have shown any stack traces. In order to limit the size of the mini-core files on Linux, the size of a single data segment in the dump was limited, to 2MB. On some Linux systems this was not sufficient so it has been increased to 5MB. |
472773 | If an event has a query that references a proxy table, and the remote data access class was either SAJDBC or ASEJDBC, then the server would have crashed once the event completed. This problem has now been fixed.
NOTE that there is no problem if the remote data access class is ODBC based. |
472777 | When the Certificate Creation utility (createcert) prompted for an encryption type, RSA vs ECC, it accepted lowercase 'r' or 'e', but not uppercase 'R' or 'E'. This has been corrected. |
472778 | Secure-streams startup errors, for example when a bogus certificate identity password was used, would not have prevented the server from starting. The error would only have been detected on the first synchronization. This may have resulted in a server crash, depending on the error. This has been fixed. |
472829 | If an application executes a Java stored procedure, and then the server crashed (for an unrelated reasons) while the Java method was still executing, there was a chance the JVM will not have shut down cleanly. This problem has now been fixed. |
472920 | A mobile webservices client application could have failed with a NullReferenceException when processing a SOAP response that contained elements described as <any> in the WSDL description. This has been fixed.
Note: this problem occurs when processing <row> elements contained within <SimpleDataset> elements in result sets returned by SQL Anywhere SOAP services. |
472922 | In certain circumstances, a complex statement (large number of query elements) could have caused the server to crash. This has been fixed. |
472928 | AS of 10.0.1 build 3341, it was possible to use the Data Source utility (dbdsn) to create DSNs for the iAnywhere Oracle driver DSNs". Although it was possible to install the iAnywhere Oracle driver and not have dbdsn installed. If for example, MobiLink was installed without SQL Anywhere, the iAnywhere Oracle driver would have been install without dbdsn. This has been fixed. |
472948 | There were two problems related to foreign keys to unique constraints (in this description, 搖nique constraint� is assumed to be a unique constraint other than the primary key). For each problem, assume there is one table (P) with a unique constraint and another table (F) with a foreign key referencing that unique constraint.
The first problem was that updating a row in P that was referenced by F would not have generated the necessary foreign key violation error. This would have lead to rows in F with no corresponding row in P. Note that this wasn抰 a problem when referencing primary keys because primary keys should not be updated in UltraLite. The second problem occurred when the foreign key from F to P was declared as CHECK ON COMMIT. When a row was deleted from P, temporarily violating RI, but a new row was added before the transaction was committed that kept RI in tact, an error would still have been raised. Since the foreign key was declared as CHECK ON COMMIT, the error should not have occurred. Both of these problems have been fixed. |
472972 | Calling the system procedure sa_describe_query() could have caused the server to crash. This has now been fixed. |
473062 | The server would have crashed if an invalid reference was made to a function: name..function() (note the two dots). This has been fixed. |
473187 | The "Server name <name> already in use" message could have contained incorrect characters instead of the name. In rare cases, this could have caused the server to crash on startup if the server name was in use. This has now been fixed. |
473203 | When using the iAnywhere Solutions 10 - Oracle ODBC driver to fetch data by calling SQLGetData(), the data could have been truncated, if the column was not a BLOB column, and the buffer size passed into SQLGetData was less than the actual data length. This problem is now fixed. |
473206 | On UNIX platforms, linking applications directly against the iAnywhere ODBC driver without using a driver manager is supported. When an application was linked in this way, the FileDSN connection parameter would have been ignored by the ODBC driver. This has been fixed.
As a workaround, a driver manager such, as unixODBC, can be installed, or the ODBCINI environment variable can be set to point to the DSN file in question. The second work around would require the FileDSN parameter to be changed to DSN. |
473431 | For certain types of queries, it was possible for the statement to fail with the non-fatal assertion failure 106105-"Unexpected expression type dfe_PlaceHolder while compiling". If this happened, the statement was failed but the server would continue processing further requests.
For example, the following statement could have exhibited this behaviour: SELECT row_num FROM rowgenerator R2 WHERE ( SELECT sum( 1 ) FROM sys.dummy D1 WHERE D1.dummy_col = R2.row_num ) >= 0 This has been fixed. |
473449 | Database file space allocated for long varchar or long binary columns was not properly reclaimed on deletion of the row in some cases. As a result, the database file could have grown unexpectedly. This has been fixed. Applying this fix will prevent further unnecessary growth but not reclaim the lost space within the database file. To reclaim space, the database file must be recreated. |
473461 | Simple DELETE and UPDATE statements that bypass the optimizer could have caused the server to crash when they were executed a second time after rstarting the database. This would have occurred if the trigger used a row limit (TOP n , FIRST,...), or the Transact SQL option rowcount was set to a non-zero value. This has been fixed. |
473528 | A long running Listener utility dblsn.exe may have crashed when persistent connections were used. This has been fixed. |
473550 | A query with predicates in the WHERE clause of the form "column < constant OR column > constant", would have returned rows with column = constant. This only occurred if "column < constant" predicate appeared before the OR and "column > constant" predicate was after it. The predicate optimizer did not recognize that the two conditions were disjoint and replaced them with "column is not null". This has been corrected. |
473559 | The server could have failed to recover a database, with assertion failures 200502, 201417 or 201418 likely in this situation. This was most likely to have occurred when the server was running on a Windows CE device, and the device was reset while the server was active. Databases using checksums or encryption may be more prone to seeing this problem. While this problem has been fixed, it's still possible to get these assertions where there is something wrong with the database. |
473562 | It was possible, although rare, for a call to the system procedure sa_locks() to have caused the server to crash. This crash was most likely to have occurred when many users were connecting, and/or disconnecting, while sa_locks() was being called. This issue has been fixed. |
473621 | Attempting to autostart a server with no license file installed, would have failed with the error "Unable to start specified database: failure code 1." The license file has the same name as the server executable, with a .lic extension. This has been fixed so that the more descriptive error "Unable to start database server: missing license file" is now given in this case. |
473622 | Re-executing the exact same "FORWARD TO" statement multiple times on the same connection could have failed with various errors. FORWARD TO statements were incorrectly being cached, but they must be prepared each time they are executed. This has been fixed by no longer caching FORWARD TO statements.
A workaround is to disable client statement caching for the connection by setting the max_client_statements_cached temporary option to 0. |
473623 | If two or more database mirroring servers running on Windows were started at the same time, they could have failed to communicate properly. In this situation, the last message displayed in the server console would have been "determining mirror role ...". The servers would not have accepted connections, and could not have been shut down. This has been fixed. |
473699 | Queries containing derived tables, or views which were eliminated during semantic rewriting, may have incorrectly returned syntax errors such as "Column '...' not found" (SQLE_COLUMN_NOT_FOUND, -143, 52003). For this problem to have occurred, the derived tables or views must have had at least a subselect or a subquery. This has now been fixed.
Example: The derived table T4 contains a subselect "( select dummy_col from sys.dummy T2 where 1 = T3.row_num ) as c1". T4 is redundant in this query and it is eliminated by the outer join elimination process. The query Q1 is equivalent to " SELECT DISTINCT T1.dummy_col FROM sys.dummy T1 " Q1: SELECT DISTINCT T1.dummy_col FROM sys.dummy T1 left outer join ( select row_num c0, ( select dummy_col from sys.dummy T2 where 1 = T3.row_num ) as c1 from dbo.rowgenerator T3 ) T4 on 1=1 |
473724 | When both the graphical and non-graphical Dbmlsync Integration Components (ActiveX components) were unregistered, they left the following key in the registry:
HKEY_CLASSES_ROOT\TypeLib\{A385EA65-7B23-4DC3-A444-2E759FF30B14} This key is now removed when both components have been unregistered. |
473827 | The server could have failed during database recovery with assertion failures 202101 - "Invalid Bitmap Links on Page ..." or 202100 "Invalid bitmap page at page ... -- transaction rolled back" under some circumstances where it was not warranted. This has been fixed. |
473831 | A watch for the variable SQLCODE did not evaluate correctly. This has been fixed. |
473833 | If an ODBC application bound a procedure's INOUT parameter as input-only, a communication error may have occurred. Calling SQLBindParameter( ..., SQL_PARAM_INPUT, SQL_C_WCHAR,... ) would bind an input-only parameter. This has been fixed. |
473834 | If a statement contained a user-defined function that had an argument that was a subquery, and the statement contained a union view with a predicate comparing a column of the union view to the user-defined function, then the statement could have failed with an inappropriate error. For example, the following sequence would generate this inappropriate error.
create view V_shubshub( x ) as select dummy_col from sys.dummy D3 union all select dummy_col from sys.dummy D4 go create temporary function F_tt(in a1 smallint) returns decimal(16,5) begin return 0.0 end go SELECT * FROM ( select F_tt( ( select dummy_col from sys.dummy D1 ) ) x from sys.dummy D2 ) AS T1 WHERE NOT EXISTS( SELECT 1 FROM V_shubshub T2 WHERE T1.x=T2.x ) In version 8.0, the following error was returned: -266 42W27 "QOG_BUILDEXPR: could not build sub-select" in version 9.0 and later, the following error was given: "Run time SQL error -- *** ERROR *** Assertion failed: 102604 (...) Error building sub-select" In versions prior to 8.0, it was possible for an incorrect answer to be returned without an error being returned. This has been fixed. |
473835 | The HTTP server can now disable connections using SSLv2. The database server command line option -xs now supports the SSLv2 parameter whose values can be YES or NO. SSLv2 defaults to YES, but can be set to NO to disallow HTTPS connections using SSL version 2.0. For example,
dbeng10 web.db -xs HTTPS(SSLv2=N) |
473860 | If a synchronization model was deployed with HTTPS or TLS as the stream type, the generated batch file for starting the MobiLink server could have given an "Unable to convert the string <string> to a numeric value" error, because the stream parameters were incorrectly separated by commas instead of semi colons. This has been fixed.
A workaround is to edit the generated batch file to use semicolons instead of comma for the stream parameters by changing this line: set STREAM="%STREAM_TYPE%(port=%PORT%,tls_type=%TLS_TYPE%,fips=%FIPS%,certificate=%CERTIFICATE%)" to the following: set STREAM="%STREAM_TYPE%(port=%PORT%;tls_type=%TLS_TYPE%;fips=%FIPS%;certificate=%CERTIFICATE%)" |
473990 | If a statement contained a derived table or view that specified DISTINCT and that derived table appeared on the NULL-supplying side of an outer join and further the query optimizer selected the Ordered Distinct algorithm for that derived table, then the statement could have failed with an assertion failure:
Assertion failed: 106105 (...) Unexpected expression type dfe_PlaceHolder while compiling For example, the following statement could have this problem: SELECT * FROM dbo.rowgenerator T1 LEFT JOIN ( SELECT dummy_col c1 FROM sys.dummy T2 UNION ALL SELECT 12345 c1 FROM ( select distinct id from sales_order_items order by id asc ) T3 ) T4 ON 1=1 WHERE T1.row_num < 10 This has been fixed. |
474181 | If the SQL Anywhere engine/server was shutdown by means of a SIGINT, SIGHUP, SIGQUIT or SIGTERM then no reason for the shutdown would have been recorded in the server log. This has been fixed -- an appropriate message will now be output to the server log. |
474282 | When a DataGrid object was filled with columns that contained more than 32K bytes, an error could have been returned by the SQL Anywhere OLE DB provider. This problem has been fixed. |
474289 | If an application maked use of external function calls, the server may have crashed if the application disconnected while a call to an external function was being executed; or if enough connections called external functions such that the server's worker thread limit was exceeded and a deadlock condition arose. This problem has been fixed. When a deadlock condition arises, the error "All threads are blocked" will result for one or more connections executing an external function call. To avoid this error, the server option -gn can be used to increase the number of worker threads.
When a client disconnects during execution of an external function call, the server will no longer crash. |
474305 | If both the 64-bit and 32-bit SQL Anywhere client software were installed on the same system, and an application attempted to use the iAnywhere JDBC driver, it was possible that the driver would have failed with an UnsatisfiedLinkError exception. This problem could only have occurred if a 32-bit Java VM was being used and the 64-bit SQL Anywhere libraries appeared first in the path, or a 64-bit Java VM was being used and the 32-bit SQL Anywhere libraries appear first in the path, and the SQL Anywhere installation path has at least one space in it. In particular, if there was no space in the installation path, then the bitness of the VM, and the order of the libraries in the path, did not matter and should not have caused any UnsatisfiedLinkError exceptions. This particular problem has now been fixed. |
474312 | An existing dbdata10.dll in an application's folder would still have been loaded by the .NET Common Language Runtime. This problem has been fixed. |
474314 | Using or accessing a procedure or function that had been marked as hidden could have caused the server to hang. This would only have happened if the length of the obfuscated text was near, or larger than, a database pagesize. This has been fixed. |
474324 | If a stored procedure contained a cursor declaration for a call to an internal stored procedure (e.g. sa_locks, sa_rowgenerator), then calling the procedure would have resulted in the error "Invalid prepared statement type". This has been fixed. |
474480 | If a database contained a table with a table ID larger than 65535, calling the system procedure sa_locks() may have caused the server to crash. This crash would only have occurred if there was a lock held on a table with a table ID larger than 65535. The contents of SYS.SYSTABLE can be examined to determine if any such tables exist. This issue has been fixed. |
474496 | When editing a cell in the "Table Mappings" table, if a corresponding tab existed in the lower details pane, the appropriate tab would have be selected. For example, if a table mapping's Download Type changes, the Download Type tab would have been selected in the lower details pane.
Also, if a row was selected in the "Table Mappings" table that had a non-empty status column, the Status tab would have been selected. These problems have been fixed. |
474596 | The 10.0.1 Maintenance Release and subsequent EBFs did not correctly update the ADO.NET Data Provider. This has been fixed so that the provider is now updated.
The following steps are a work around: - From the Control Panel launch the Add or Remove Programs application. - In the SQL Anywhere 10 item click the Change button. - In the maintenance Welcome dialog select the Modify option. - In the Select Features dialog deselect the ADO.NET Data Provider feature and proceed with installation maintenance (this will uninstall the feature). - Repeat the above, but this time select the ADO.NET Data Provider and proceed with installation maintenance (this will reinstall the correct version of the feature). |
474597 | The result set of SYS.SYSINDEXES was modified to include primary and foreign key indexes in version 10 of SQL Anywhere. However, these indexes were not distinguished from other indexes. The view definition has been changed so that these indexes are identified by "Primary Key" and "Foreign Key", respectively, by the indextype field. |
474599 | If the database option Ansi_close_cursors_on_rollback was set to 'on', and a cursor was opened on a stored procedure containing a declared cursor, a ROLLBACK could have put the connection into a state where attempting to open additional cursors would have failed with the message: "Resource governor for 'cursors' exceeded". The ROLLBACK caused the cursors to be closed in an order that resulted in the server trying to close a cursor twice. This has now been fixed. |
474606 | When using the OLE DB provider, a crash could have occurred when disconnecting from a datasource. This problem has been fixed. |
474617 | The certificate utilities createcert.exe and viewcert.exe as well as dbcecc10.dll were missing version info. This has been fixed. |
474631 | In the Windows Explorer, the files mlrsa_tls10.dll, mlrsa_tls_fips10.dll and mlecc_tls10.dll would have appeared versionless when their properties were inspected. This has been corrected. |
474633 | If the definition of a computed column included a reference to another table column defined as NOT NULL, and an INSERT or UPDATE statement set the NOT NULL column to NULL, then the computed column could have been evaluated to an inconsistent result.
For example: create table T( x int not null, y int null compute( if x is null then 123 else x endif ) ) go CREATE TRIGGER "ChangeX" BEFORE INSERT, UPDATE ON T REFERENCING NEW AS new_row FOR EACH ROW BEGIN message string('Trigger: ',new_row.x,',',new_row.y); if new_row.x is null then SET new_row.x = 4; end if; END go insert into T(x) values( NULL ) After the above insert, T contains one row (4,NULL). The result for y is inconsistent with the definition of the computed column. The following non-fatal assertion failures could be reported in this case: Assertion failure 106900 Expression value unexpectedly NULL in read or Assertion failure 106901 Expression value unexpectedly NULL in write This has been fixed. An attempt to put a NULL value into a column declared NOT NULL that is used in a computed column will result in an error message: 23502 -195 "Column '%1' in table '%2' cannot be NULL" This checking is performed before triggers fire, and this represents an intentional change in behaviour. |
474715 | The server only supports compressed database files up to a size of 4GB. If dbshrink
or the CREATE COMPRESSED DATABASE statement tried to create a compressed db file larger than 4GB then the resulting file would have been corrupted. This has been fixed so that the server now returns the error "Database creation failed" if the resulting file would be larger than 4GB. |
474724 | When attempting to process transaction logs from an older version of ASA, (such as with the Translation utility or SQL Remote), there was a chance that it would have failed prior to processing the full log, with any number of odd error messages. This problem has now been fixed. |
474726 | If a query contained INTERSECT ALL or EXCEPT ALL and one of the branches of the query expression was optimized by un-nesting an EXISTS predicate, then the wrong answer could have been given. The INTERSECT ALL would have been incorrectly treated as INTERSECT, and the EXCEPT ALL as EXCEPT.
For example, the following query shows this problem: select D0.type_id from sys.sysdomain D0 intersect all select D1.type_id from sys.sysdomain D1 where exists ( select * from sys.sysdomain D2 where D2.type_id = D1.type_id ) This has been fixed. |
474737 | Queries containing a predicate using a view column which was a complex expression (e.g., it contained a subselect) may have caused the server to fail an assertion. Although this would likely have been rare, it has been fixed.
For example: SELECT * FROM ( SELECT DISTINCT DT1c2 FROM ( SELECT (select dummy_col from sys.dummy D3 ) as alias1, ( select row_num from dbo.rowgenerator R4 where row_num-1 = alias1 ) FROM dbo.rowgenerator R5 ) DT1( DT1c1, DT1c2 ) ) DT2 WHERE EXISTS( SELECT 1 FROM ( SELECT 1 FROM sys.dummy D0 UNION ALL SELECT 2 FROM sys.dummy D1 ) DT3( "DT3c1") WHERE DT2.DT1c2 >= DT3.DT3c1 <<<<<------------- DT2.DT1c2 contains the subselect "( select row_num from dbo.rowgenerator R4 where row_num-1 = alias1 )" ) |
474753 | Queries containing a predicate referencing a subquery may, in rare circumstances, have failed with the message: "Assertion failed: 106105 (...) Unexpected expression type dfe_Quantifier while compiling". This has been fixed. |
474873 | Synchronizing with a version 8 client, could have caused the MobiLink server to crash. This would have usually happened after a log offset mismatch. This has been fixed. |
474883 | Connecting to a blank padded database, using either Open Client or jConnect, and then attempting to fetch an NChar value, would likely have caused the application to hang. This problem has now been fixed.
Note that this fetching nvarchar or long NVarChar data from a blank padded database using a TDS client was not affected. |
474904 | If two or more transactions concurrently attempted to lock a table t in exclusive mode with "lock table t in exclusive mode", the transactions could have deadlocked. This was much more likely to occur on multi-processor systems, and is not likely to be reported by personal servers. This has been fixed. |
475008 | When using a load balancer that tested the MobiLink server availability by probing the server network port, the server may have shutdown. This shutdown was due to the server believing that it could no longer accept new connections. This has been corrected. |
475009 | If a web server set the HTTP option CharsetConversion to 'OFF' by calling the system procedure sa_set_http_option(), (eg sa_set_http_option( 'CharsetConversion', 'OFF' ) from a stored procedure, the setting would have been ignored. This has been fixed. |
475010 | The server may have crashed while debugging a web service procedure from within Sybase Central, if the server was shutdown while paused on a break-point. This has been fixed. In addition, the canceled response will specify a Connection: close and default to non-chunk mode Transfer-Encoding. |
475032 | Two new parameter values have been added to the system procedure sa_server_option() to aid in locating references to database options in applications: OptionWatchList and OptionWatchAction. OptionWatchList specifies a comma-separated list of database options. OptionWatchAction specifies the action the server should take when an attempt is made to set an option in the list. The possible values for OptionWatchAction are 'message' (default) and 'error'. If OptionWatchAction is set to 'message' and one of the options in the watch list is set, the server will display a message in the server console window:
Option "<option-name>" is on the options watch list If OptionWatchAction is set to 'error', an attempt to set an option in the watch list will result in an error: Cannot set database option "<option-name>" because it is on the options watch list The values of db_property('OptionWatchList') and db_property('OptionWatchAction') can be used to determine the current settings. Example: call dbo.sa_server_option('OptionWatchList','automatic_timestamp,float_as_double,tsql_hex_constant') Note that the size of the string specified for OptionWatchList is limited to 128 bytes (the maximum for the "val" parameter to sa_server_option). |
475035 | Ct has two request to do about this :
a.) continue developer the DBShrink in ASA 9.x, it means, fix the limitation to handle cbd file over 4 Gb. b.) Return to include this in ASA 10, in where it was removed. |
475038 | Preparing the exact same statement before and after executing a SETUSER WITH OPTION statement may have caused the second statement to not respect the option change and behave incorrectly. This has been fixed. |
475039 | If an application connected using jConnect 6.x, and attempted to query the name of a date or time column using ResultSetMetaData.getColumnTypeName(), then the server would have incorrectly returned null instead of the string "date" or "time" respectively. The server now has support for the new TDS DATE and TIME datatypes, but the jConnect metadata scripts had not been updated to reflect the new support. The script jcatalog.sql has been updated. |
475052 | Under heavy load, a mirror server could have generated a corrupt transaction log. The mirror server could have failed in several different ways, including failed assertions 100902, 100903, and 100904. This has been fixed. |
475131 | Under rare circumstances, applications running on Unix systems may have crashed following a disconnect. This was more likely to have occurred on a multi-processor machines. This has now been fixed. |
475135 | In rare circumstances, a TLS connection that should have failed due to a certificate validation failure, may have actually succeeded. This has been fixed. |
475138 | Erroneous results could have been obtained for queries with joins containing a derived table with GROUP BY, and a WHERE clause referencing a column from the derived table. This has been corrected. |
475228 | If a remote table had a wchar column and an attempt was made to create a proxy table to the remote table, but with the wchar column being mapped to a varchar column, then the server would have failed with a datatype not compatible error. While this error was correct, it nevertheless was unexpected given that mapping remote wchar columns to local varchar columns worked in prior versions. Mapping remote wchar columns to local varchar columns is now allowed for backwards compatibility, but not recommended. Wchar columns should instead be mapped to nchar columns, if at all possible. |
475259 | When the variable "@@rowcount" was selected, the Interactive SQL utility would always have displayed the value "1". This has been corrected so that the actual value is now displayed. |
475263 | The MobiLink Monitor could have failed with a NegativeArraySizeException. The failure was more likely when under very heavy load. This has now been fixed. |
475278 | If a table was defined with a char(255) or varchar(255) column, and then BCP IN was used to insert a string of length 251 or greater bytes into the char(255) column, then BCP would either have failed with a protocol error, or, the value NULL would have been inserted into the column. This problem has now been fixed. |
475293 | A client-side backup (ie using the Backup utility or calling the dbtools function DBBackup) that truncated the log, could have created a backed-up log file that was invalid. When this occurred the logfile would have appeared to be too short; i.e., the end offset of the backed-up log did not match the starting offset of the current log. This problem did not occur when the log was not truncated, or when calling the BACKUP DATABASE statement. This has been fixed. |
475297 | If a dbspace name contained a period, then the part of the dbspace name before the period was silently ignored by the server. Note that this did not apply if the dbspace name was quoted. This has been fixed so that the server now generates an error when the dbspace name contains a period. |
475448 | In rare cases, the Extraction utility dbxtract could have generated a reload script with a LOAD TABLE or INPUT statement referencing columns in an order which did not match the order of the columns in the corresponding data file. This has been fixed by adding a missing ORDER BY clause. |
475452 | If a remote server was defined with a USING string that contained single quotes, the Unload utility would have generated a CREATE SERVER statement that would have failed with a syntax error because the quotes were not doubled. This has been fixed. |
475472 | In very rare circumstance, an application could have hung in iAnywhere.Data.SQLAnywhere. This problem has been fixed. |
475488 | Inserting short or highly compressible data into a compressed column (either through INSERT or LOAD TABLE) may have created an excess number of free pages in the database. This has been fixed. |
475613 | If a database had an alternate server name, and was running on a system that was using LDAP, then the alternate server name would not have been unregistered from LDAP if the database was shut down (but the server is not). This has been fixed. |
475618 | The changes made for Engineering case 468319 introduced a problem where if many concurrent connections were made to the server, and then disconnected, the server may have taken several additional seconds to shutdown after the databases were shutdown. This has been fixed. |
475624 | When using a multi-threaded ODBC application with distributed transactions, attempting to enlist a DTC transactions could have failed in some cases. This problem has now been fixed. |
475650 | Multiple connections using keyset cursors, and executing DELETE WHERE CURRENT OF or UPDATE WHERE CURRENT OF statements on the same table at the same time, could have caused the server to fail assertion 201501. This has been fixed. |
475752 | If a database involved in synchronization or replication was rebuilt using the Unload utility, the truncation point values stored in the database could have been set to values that would have caused transaction logs to be deleted via the delete_old_logs option, when they ware still required. This has been fixed. A database rebuilt using "dbunload -ar" will now have the resulting database truncation points set to zero. These values will be set more accurately the next time dbremote, dbmlsync, or dbltm is run. If the database is rebuilt manually, the truncation points can be zeroed by running:
dblog -il -ir -is dbname.db |
475760 | If multiple publications were being synchronized separately, and the MobiLink client (dbmlsync) was running in hover mode, but the SendTriggers extended option for the publications were not all the same, it was possible for dbmlsync to not have synchronized trigger actions when they should have been, or to have synchronized trigger actions when they should not have been. This problem has now been fixed, but introduces a behaviour change. When multiple publications are synchronized in hover mode, if the SendTriggers option changes from one synchronization to the next, a complete rescan of the transaction log is now executed to ensure that the proper SendTriggers option is used. This could result in synchronizations taking longer than before, with the benefit that the data in the synchronization is correct. |
475962 | Clients connecting via the -xo option were not able to saturate the number of database workers specified by the -w option. This has been corrected so that the number of -xo clients that can concurrently connect is equal to the number of database worker threads. |
476067 | The CREATE INDEX statement was not respecting the setting of the Blocking option, and would always have failed if another transaction had the table locked (for shared or exclusive access). As of version 10.0, this is more likely to be an issue as the cleaner locks tables temporarily as it does its work. In particular, a reload could have failed with errors of the form "User 'another user' has the table ... locked". This has now been fixed. |
476077 | The 64 bit versions of mlstop.exe and mluser.exe not included in the 10.0.1 install. This has been corrected. |
476080 | A primary server in a synchronous mirror configuration, running on a Unix system, could have stopped servicing TCPIP connection packets if number of client connections exceed the number of worker threads (ie. -gn value). Another symptom would have been that existing connections would have been disconnected with liveness timeout errors. This has been fixed. |
476095 | The MobiLink server could leak memory when synchronizing and using the Listener. This includes using the Notifier alone, or with QAnywhere. This is now fixed. |
476112 | Erroneous results could have been returned for a query with an inner join and a WHERE clause containing a subquery. This has been corrected.
For example: SELECT COUNT(*) FROM kb_baseclass INNER JOIN customer ON kb_baseclass=customer WHERE customer IN (SELECT client FROM contact) |
476187 | When opening a data reader, prepared statements were dropped and re-created again. This has been fix so that a command can now only open one data reader at any time. |
476194 | If a binary bitwise operator (i.e. AND, OR, or XOR) was performed on a (signed or unsigned) bigint or a numeric, then the operator would have incorrectly cast both arguments to 32-bit integers. This could have resulted in inappropriate errors being thrown.
For example, the following script generates an overflow error: create table types_bitwise( e_ubigint unsigned bigint ); select e_ubigint & 12345678901234567890 from types_bitwise; This problem could also have occurred if the unary bitwise operator NOT were performed on a numeric argument. This issue has been fixed. |
476195 | Erroneous results could have been returned for a query with both START AT and TOP clauses. This has been corrected. |
476211 | Queries using a UNION or UNION ALL, that exist within a stored procedure, function, trigger, or event, could have caused server instability (most likely either a crash or a failed assertion). This has been fixed. A workaround is to set the MAX_PLANS_CACHED option to zero. |
476347 | If a command resulted in an exception, calling the same command again would have caused the exception "Attempted to read or write protected memory".
For example: SACommand cmd = new SACommand("INSERT INTO t VALUES (1)", conn); try { cmd.ExecuteNonQuery(); } catch (Exception ex) { Console.WriteLine("Insert failed. " + ex.Message + "\n" + ex.StackTrace); } try { cmd.ExecuteNonQuery(); } catch (Exception ex) { Console.WriteLine("Insert failed. " + ex.Message + "\n" + ex.StackTrace); } This problem has been fixed. |
476372 | Synchronizing more than one database at a time using encryption or compression, could have caused the UltaLite runtime to crash. This has been fixed. |
476516 | When using the SQL Anywhere OLE DB provider, preparing a statement that called a user-defined function would have resulted in the function's result value being truncated to 0 bytes. This problem has been corrected.
The following is an example: CREATE FUNCTION foo( IN arg VARCHAR(3) ) RETURNS VARCHAR(10) DETERMINISTIC BEGIN DECLARE retVal VARCHAR(10); SET retVal = 'RETURNVALU'; RETURN retVal; END Dim cmd As New ADODB.Command cmd.CommandText = "foo" cmd.CommandType = ADODB.CommandTypeEnum.adCmdStoredProc cmd.let_ActiveConnection(con) cmd.Prepared = True cmd.Parameters.Refresh() cmd.Parameters(1).Value = "abc" cmd.Execute() MsgBox(cmd.Parameters(0).Value) A work-around is to not prepare the command (ie. cmd.Prepared = False). |
476519 | The INPUT and OUTPUT statements now allow control of when the byte-order-mark (BOM) is processed. Each statement supports the new clause:
BYTE ORDER MARK { ON | OFF } The semantics are identical to those used by the server's LOAD TABLE and UNLOAD TABLE statements. If omitted, "ON" is the assumed value. The BYTE ORDER MARK clause is relevant only when reading or writing ASCII formatted files encoded with UTF-8 or UTF-16 (and its variants). Attempts to use the BYTE ORDER MARK clause with FORMAT clauses other than ASCII, or with any other encoding, will result in an error. |
476533 | The debugger state was not being updated correctly when debugging a connection currently at a breakpoint and then a running connection was chosen from the connections list. This has been fixed. |
476544 | In rare cases, the server could have crashed executing an ALTER TABLE statement. This would have most likely occurred when removing columns from a table. This has been fixed. |
476693 | It was not possible touse the INPUT statement to populate a GLOBAL TEMPORARY table that did not preserve rows on commit. The INPUT statement had the unintentional side-effect of committing changes. This has been fixed, INPUT no longer does a COMMIT. |
476708 | The problem requires the schema of the UltraLite database to have a table with a unique constraint (other than the primary key) and another table referencing that unique constraint with a foreign key. When a delete is downloaded, all rows referencing the deleted row (via a foreign key to the table) should also be deleted to maintain referential integrity. This was working properly; however, a similar scenario existed if an update was downloaded and the foreign key referencing the row did so by referencing a unique constraint instead of the primary key. This has been fixed. |
476819 | When User Account Control (UAC) is enabled, applications cannot have been registered with the provider for Windows Mobile Device Center (WMDC), either from dbasinst or from the provider itself. The reason for this was that applications are registered in the registry under HKEY_LOCAL_MACHINE, which requires administrator privileges when UAC is enabled. Although dbasinst has been elevated, and can set these registry entries, the provider was not. This has been corrected so that applications are now registered under HKEY_CURRENT_USER instead. However, this means that applications will now only be registered with a specific user, instead of automatically being registered with all users of a particular machine. The first time dbasinst is invoked after the patch has been applied, it will automatically move all registry entries from HKEY_LOCAL_MACHINE to HKEY_CURRENT_USER. |
476938 | A query with surrounding brackets and a preceding common table expression, would given a syntax error when used in a procedure. This is fixed. The workaround is to remove the brackets. |
477150 | Setting SAParameter.SADbType could have caused an IndexOutOfRangeException in multi-threading code. This problem has been fixed. |
477156 | When a large number of clients (more than 2500) had contacted the MobiLink server, with all indicating they wished to receive push notifications, the server would have consumed a large amount of CPU evaluating transmission rules. This has been fixed.
NOTE (for 9.0.2 only): It is also important to run the MobiLink server with the command line option -sl java ( -Dianywhere.qa.db.upgradeDeliveryColumns=true ) in order to get the most out of this performance improvement. This option causes the MobiLink server to reorganize the QAnywhere message store tables, and add further indexes to these tables, to obtain optimal performance of MobiLink with QAnywhere. |
477181 | The SQL Anywhere server tries to maintain column statistics so that they reflect modifications being made as a result of data change statements. The server could have incorrectly modified existing column statistics under certain circumstances when executing searched UPDATE statements. The problem was likely to only take place when the new column values were the same as existing values for a large proportion of candidate rows. This has now been corrected. A potential remedy for this incorrect behaviour is to recreate column statistics by using the CREATE STATISTICS statement. Also, the server may eventually remedy the problem itself as a result of query execution feedback. |
477194 | Executing a REORGANIZE TABLE statement while other connections were also performing DML on the table, could have caused the database server to fail an assertion. Such assertions would have included 100701: "Unable to modify indexes for row referenced in rollback log". The REORGANIZE TABLE statement could have looped infinitely if another connection attempted to drop the table. A failed REORGANIZE TABLE, due to a deadlock or perhaps some other error, could have caused the server to crash. These problems have now been fixed. |
477195 | The value of a numeric variable could have been rounded incorrectly when used in a statement other than a SELECT statement. The precise conditions under which this problem would have occurred are difficult to describe, but involve the use of the variable as part of a larger expression.
For example, the following batch illustrates the problem. It would have returned 2.0, rather than the correct 2.6: BEGIN DECLARE varNumeric NUMERIC; DECLARE LOCAL TEMPORARY TABLE ltBUG (Dummy NUMERIC); SET varNumeric = 1.3; INSERT INTO ltBUG (Dummy) VALUES (ISNULL(varNumeric, 0) + ISNULL(varNumeric, 0)); SELECT * FROM ltBUG; END; This issue has been fixed. |
477203 | When using the Dbmlsync Integration Component (ActiveX) and the Message event was called, the msgID value was set to 0 for some messages that should have had unique identifiers. In particular this was reported for the message "Unable to find log offset ....", although other messages were likely affected as well. The msgID value for these messages would not have been filled in correctly with a unique value. This has now been corrected. |
477286 | Garbage characters could have appeared in the request-level log on lines containing query plans. This has been fixed. |
477290 | If logscan polling was disabled (using the -p command line option or the DisablePolling extended option) and a progress offset mismatch occurred, then the MobiLink client would have sent a new upload using the remote progress value. If the remote progress was greater than the consolidated progress, then this could have resulted in data loss, as operations on the remote could have been lost. If the remote progress was less than the consolidated progress, this could have resulted in server side errors applying the upload, as the same operation might have been uploaded more than once. This problem is now fixed. When a progress mismatch occurs a new upload will be sent from the consolidated progress unless the -r, -ra or -rb options are used. |
477294 | There was a security issue with logging on the QAnywhere client during initialization. This has been fixed. |
477367 | When download acknowledgement was enabled, the MobiLink client would have incorrectly failed to send a download ack for a synchronization if a previous synchronization during the same run had encountered a server side download error. As a result the server would report the following error:
Error: Unable to read from the 'tcpip' network connection. Unable to read 2 bytes. Error: [-10034] No download confirmation from remote database This problem has been fixed |
477370 | When attempting to install an EBF on MacOS using the GUI installer, the installer would have prompted for an installation key and subsequently rejected any keys given. This has now been fixed. As a workaround, the command line installer can be used to apply EBFs on MacOS. |
477420 | The behaviour of setting indicator variables when no rows were fetched was changed in the dblib library from that of previous versions. While the behaviour in this case was considered to be undefined, the behaviour has been reverted back to the original behaviour. |
477492 | Indexes on materialized views would not have been recreated by an internal rebuild, i.e., dbunload -ar or -an. A workaround is to do a two-stage rebuild; unload the database first to files, and then reload using the reload.sql script. This has been fixed. |
477494 | Stale materialized views were not used by the optimizer when the option materialized_view_optimization was set to STALE. This has been corrected.
For further information on the option Materialized_view_optimization, please refer to the SQL Anywhere� Server - Database Administration 爉anual. |
477505 | The Unload utility (dbunload) can be used to unload materialized view data when given the command line options "-d -t <mat_view_name(s)>". The changes for Engineering case 469705 introduced a problem where data for materialized views was also being unloaded to disk during a "normal" unload. This has been fixed. |
477526 | Applications running on HP-UX and using the iAnywhere ODBC Driver Manager, may have had connection attempts fail if the connection string contained non-ASCII characters. This would have been true for the MobiLink server, Remote Data Access connections and applications using the iAnywhere JDBC driver. This has been fixed. |
477617 | After running the Windows CE install on a Windows Vista system, immediately choosing to deploy to a Windows CE device would have caused the deployment install to crash with the following error:
An error (-5011: 0x80040706) has occurred while running the setup. Please make sure you have finished any previous setup and closed other applications. If the error still occurs, please contact your vendor: Sybase, Inc. Spawning the CE deployment installer at the end of the CE Desktop install was unstable on Windows Vista. The deployment installer is no longer automatically deployed when installing on Windows Vista, but displays a message that deployment can be done by selecting "Deploy SQL Anywhere for Windows Mobile" from the Start menu. |
477637 | If the network connection to the primary server (S1) in a database mirroring system was lost, a failover to the mirror server (S2) would have occurred as expected. However, once the network connection was restored, S1 would have reported that its database files were incompatible with the current primary (S2). This has been fixed. |
477714 | The ALTER TRIGGER SET HIDDEN statement incorrectly removed the table owner from the
create trigger statement stored in the catalog. As a result, the reload of a hidden trigger definition would have caused the SQL error: "Table ... not found", if the DBA user couldnot access the trigger without table owner. This has been fixed. In order to unload an existing database with this problem, the trigger definition will need to be recreated and then hidden first. |
477738 | On Unix systems, the certificate utilities viewcert and createcert, were only being installed with ECC components and not with RSA components. Also, libdbcecc10_r.so, the new ECC support library for viewcert and createcert, was never installed at all. This has been fixed. On platforms where the utilities are supported, the EBF installer will now install viewcert and createcert if SQL Anywhere or MobiLink RSA libaries have been previously installed. The library libdbcecc10_r.so will be installed only if SQL Anywhere or MobiLink ECC libraries have been previously installed. |
477777 | When attempting to insert a value into a string column of a proxy table using a variable, there was a chance the value inserted may have been NULL. This problem only happened if the string column involved the evaluation of an expression (like concatenation). For example, the following should work fine:
create variable v char(128); set v = 'abc'; insert into proxy_t(char_col) values(v); whereas, the following had a chance of inserting a NULL, instead of the concatenated value: create variable v char(128); set v = 'abc' || 'def'; insert into proxy_t(char_col) values(v); This problem has now been fixed. |
477892 | If an application was using the iAnywhere JDBC driver and called ResultSet.getBlob().getBytes() on a char, varchar or binary column that had an empty value in it, then the driver would have incorrectly returned null, instead of returning a 0-length byte [] value. This problem did not occur for empty long varchar or long binary columns. This problem has now been fixed. |
477918 | In a database mirroring system running in async mode, if a heavy volume of update activity occurred on the primary server for an extended period of time, the mirror server could have crashed as a result of running out of memory. This has been fixed. |
477995 | Attempting to run an archive backup (ie. BACKUP DATABASE TO ... ) would have caused a server crash if the database being backed up had no transaction log file. This has been fixed. |
478018 | The certificate utilities createcert and viewcert are now available on Mac OS X. They will be added if RSA components have been previously installed. |
478022 | Applying Microsoft's XML security patch KB 936181 (MSXML 4.0 dll version 4.20.9848.0) to Windows Vista systems, would have caused the UltraLite Load utility to crash. This problem does not show up on Windows XP. A work around has been implemented to prevent the crash. |
478055 | The server allows users to create temporary stored procedures that exist for the duration of the connection that creates the procedures. When creating these temporary stored procedures the server disallows the specification of an owner, i.e., temporary procedures are always owned by the user creating them. If a temporary procedure was referenced by ia qualified owner name in a query, the server would have failed to find the temporary procedure. The server now correctly finds qualified temporary procedures. A work around is to refer to temporary procedure by name only.
Once a user had created a temporary procedure, the server would have allowed the creation of another temporary or permanent procedure by the same, resulting in duplicate procedures. The creation of duplicate temporary or permanent procedures is now not permitted. Note that the server already prevents the creation of a duplicate temporary or permanent procedure when the already existing procedure is a permanent one. |
478059 | The UltraLite engine would have leaked process handles at a rate of one per client process per second. The engine was regularly opening a handle to each client process to determine if they were still running, but these handles were not being closed. These handles are now closed. |
478062 | On a busy server, it was possible that a failed HTTP connection may have caused the server to crash. This has been fixed. |
478064 | An HTTP request having multiple empty variables may not have always represented the variable as null, but sometimes as the empty string ''. This has been fixed. |
478072 | ASA portaldatabase and mobilink services still use jconn2.jar |
478076 | The path to jconn3.jar should be included in the setenv.bat as CLASSPATH variable |
478153 | When the MobiLink server was running with QAnywhere messaging enabled and a JMS connector was configured and there is a high volume of JMS traffic between QAnywhere clients and a JMS system, the Java VM running in MobiLink would have used a continuously increasing amount of heap memory and may eventually have reached an out-of-memory condition. This has been fixed. |
478160 | The UNLOAD SELECT statement allows the INTO clause of the SELECT statement to be specified. However, the INTO clause is not meaningful in the context of the UNLOAD statement, and was being silently ignored. The use of the INTO clause in the UNLOAD SELECT statement will now generate a syntax error. |
478161 | On UNIX systems, if the primary and mirror servers were both run on the same machine and the environment variable SATMP either pointed to the same location for both, or was unset, the mirror server may have shut down with the error "The alternate server name provided is not unique". This would have occurred if the primary server was killed with the signal SIGKILL, or if it is brought down by an abnormal event, and it did not have a chance to delete temporary files. This has been fixed. |
478217 | Executing some simple forms of INSERT, UPDATE and DELETE statements could have caused the server to crash when used with particular host variable values. This has been fixed. |
478298 | When running the Unload utility on a database that was the primary site for a Sybase Replication Server, the REPLICATE ON clause was not being added to the ALTER TABLE and ALTER PROCEDURE statements in the reload.sql file. This has been fixed. |
478491 | The MobiLink server would have crashed on startup when run on AIX 5.3 TL06 systems. This has now been resolved by having the installer turn off the execute bit on all shared objects on AIX so that the libraries will not be preload into the OS library cache. |
478498 | The optimizer relies on accurate statistics to generate efficient access plans. Statistics may be obtained from column and index statistics among other sources. Absence of good statistics can cause the optimizer to pick access plans that execute slowly causing complex queries to suffer.
An improvement to the optimizer has been made so that the performance of complex queries with expensive table scans, under cetain circumstances, does not suffer even when good statistics are not available. |
478500 | The Swedish tailoring of the UCA collation did not conform to the 2005 standards of the Swedish Academy. In that standard, V and W were changed to be considered different characters at the primary level. To support this change a new tailoring has been implemented. To avoid incompatibilities with existing Swedish databases, the new tailoring was implemented as the "phonebook" sorttype variant of the Swedish UCA tailoring. For example:
dbinit -zn UCA(locale=swe;sorttype=phonebook) |
478618 | A server running a database that had handled more than roughly a billion transactions or snapshot scans in total since the database was created, could have failed assertion 201502 "inconsistent page modification value". A single query may start many snapshot scans, so the problem was much more likely if using snapshot isolation. The problem is now fixed.
After the assertion, there was a very small chance of corruption that may be present even if the server reports a successful recovery. Therefore, validation is recommended. If problems are detected, then they should be handled with normal procedures (e.g. restore to backup, or attempt to salvage using an unload and reload with a server that has the bug fix). It is possible to check the value of the internal counter involved in the bug by starting a transaction and running the query "select start_sequence_number from sa_transactions()". It is best to upgrade to a fixed server regardless of the value, but a larger value indicates a workload that is more likely to eventually trigger the counter overflow that causes the problem. |
478654 | A blob column defined with the INLINE or PREFIX specification, with a size that was near the database page size, could have caused the server to crash. This problem would have only occurred if the INLINE or PREFIX specifier was within approximately 50 bytes of the database page size, and string data longer than that amount was inserted into the table. This has now been fixed. |
478704 | When connecting to a MobiLink server via HTTP or HTTPS, the Monitor sent more HTTP or HTTPS requests than necessary. Excessive flushing caused most requests to be shorter than they should have been. This has been fixed. |
478752 | Cancelling a database validation could have caused the server to crash. The validation could have been issued from dbvalid, the Sybase Central plugin, or from the VALIDATE DATABASE statement. A crash from this problem would have been relatively rare, as it could only have happened during a relatively small window of opportunity within a validation, but would have been more likely in databases with many indexes per table. This has now been fixed. |
478909 | After having established a keep-alive connection from a browser request, a shutdown may have caused the server to crash. This is a timing issue that has only been seen when using Firefox. This has been fixed. |
478915 | The server may have crashed, or failed assertion 101518, if an UPDATE statement contained multiple tables in the table-list, and columns from all the tables were set to the same expression.
For example, in the following update the columns T1.b and T2.c are set to the same expression @val update T1, T2 set T1.b = @val, T2.c = @val where T1.a = T2.a This has been fixed. |
478925 | When using the UltraLite Unload utility to unload an UltraLite database to SQL Statements, the owner would have been included in the CREATE PUBLICATION statement. The statement would not habe been valid syntax for UltraLite. This has been fixed. |
479032 | When the UltraLite Synchronization utility's (ulsync) output was redirected to a file, and sync progress messages were requested with -v, those messages would not have been written on some patch levels of Windows Vista. Writes to standard output for the progress messages were being discarded when standard output of the owning executable (ulsync.exe) was not connected to a console. This has been fixed by using a callback function to report messages, rather than writing messages directly to stdout. |
479053 | For some CPU bound queries, execution times could have been longer with Unix servers than execution times compared to an equivalent Windows server. This has been fixed. |
479061 | Executing a DROP DATABASE statement could have caused a server crash or failed assertion if the database being dropped needed recovery. This has been corrected. |
479086 | When importing data into an existing table, the "Preview" table in the Import Wizard would have shown values in BINARY columns as "[B@" followed by up to 8 numbers and letters. The value from the file is now correctly displayed. |
479090 | When the MobiLink listener (dblsn) used both non-persistent connections (i.e. using -pc- switch explicitly) and confirmation, the notifier may have missed doing some fallback pushes when the listener was in the middle of confirming a previous notification. The problem has been fixed. |
479098 | When the HTTP server was under heavy load for a long period of time it was possible that it could have transitioned into a state where many contiguous requests were incorrectly rejected with a 503 error; 'Service Temporarily Unavailable'. This has been fixed, HTTP requests are now only rejected in this way when resources such as memory or licensing are unavailable. |
479191 | When SQL Remote was scanning the active transaction to determine which operations to send, it was possible for the process to have crashed when it had reached the end of the active transaction log. This has been fixed. |
479203 | The server could have crashed during recovery of a database that had gone down dirty while it was heavily-loaded. This has been fixed. The database file itself was not damaged and using an server with this fix will allow recovery to proceed. |
479204 | When request logging of plans was enabled, and a procedure that was being used in a query was dropped immediately before the cursor was closed, the server rare circumstances could have crashed. This has been fixed. |
479237 | The MobiLink server could have exhausted cache memory when multiple version 8.0 or 9.0 MobiLink clients were concurrently synchronizing large numbers of tables. The server could have crashed, or shut down with the message "Unable to allocate memory.". THis has now been fixed.
Increasing the amount of cache memory using the -cm server option is a work around for this problem. |
479320 | On databases with multi-byte character sets, or when using multi-byte values (such as NCHAR), the string trim functions, trim(), ltrim() and rtrim() may have left blanks or extraneous bytes in the portion of the string that was intended to be trimmed. For this to have occurred, multi-byte characters must have appeared within the string data. This is now fixed. |
479327 | If an UPDATE statement on a view has more than one table expression in the update clause after view flattening, and the table expression that would have been updated is in the update clause preceded by a non-updatable table expression, then the UPDATE did not change any rows.
Here are two examples: 1) This UPDATE statement has in its update clause first a non-updatable table expression V1 and then the updatable table T1. It does not update column "b" of table T1. update ( select sum(T2.c) as xxx from DBA.T2 ) as V1( xxx) ,T1 set T1.b = isnull(V1.xxx,0) where V1.xxx = T1.a and V1.xxx is not null and T1.a is not null 2) This UPDATE has two table expressions V1 and T1 in the update clause after view replacement of V11. If the order of the table expressions in the update clause is like in the example above, the UPDATE does not change any rows. create view V11 as select T1.b, isnull( V1.xxx, 0 ) as v2_2 from ( select sum(T2.d) as xxx from T2 ) V1 right outer join T1 on V1.xxx = T1 update V11 set b = v2_2 This problem has been fixed. |
479467 | Getting the query plan for a statement, using the SQL functions PLAN, EXPLANATION or GRAPHICAL_PLAN, could have caused the server to crashed if the plan for the statement had been cached. This has been fixed. |
479560 | On RedHat Enterprise 5 systems with kernel versions prior to 2.6.21, if a SQL Anywhere executable crashed, the crash handler would have written a crash log, but it would have failed to write out a minicore dump. This issue has been fixed. |
479694 | The problems described in Engineering cases 468864 and 478161 (inability to reuse an alternate server name if a server using it terminated abruptly) may still have occurred on Unix operating systems. On Linux systems these problems could still have occurred when the file systems used were other than ext2 and ext3. This has been fixed |
479812 | If a manifest was installed in a JAR file, and then that JAR file was installed into a database, calling class.getPackage() would always have returned null, even though the package was properly defined in the manifest file. The class loader was reading the manifest file and defining packages via the parent class loader, but was incorrectly assuming that the parent class loader would keep track of the packages and handle the getPackage() call. The SA class loader now keeps track of all defined packages and handles the getPackage() call itself. |
479816 | Executing a REORGANIZE TABLE could have caused the server to fail assertion 100701 - "Unable to modify indexes for a row referenced in rollback log -- transaction rolled back". This has been fixed. |
479825 | A number of problems with the UltraLite Database Initialization utility have been fixed.
Default values were being wrapped in parentheses (), for example DEFAULT (0), which lead to sytax errors. Default valuess that start (after skipping white space) with open parentheses "(" and end with close parentheses ")", are now recognized and are automatically stripped. Specifying the clause DEFAULT getdate(*) also lead to a syntax error. All occurrences of "(*)" in DEFAULT strings are now replaced with "()". Previously, only DEFAULT NEWID(*) was being recognized, this change handles all such functions. Ulinit was failing to quote table names with leading underscore characters "--". The now(), current_timestamp(), and getdate() functions in DEFAULT strings are now replaced with the string "current timestamp". This is equivalent in operation and the only syntax that UltraLite supports. Added quoting to all uses of table names. Specifically the CREATE INDEX and ALTER TABLE ... ADD FOREIGN KEY statements were problematic. Ulinit was making use of NVARCHAR data types. nut UltraLite does not support this data type. |
479829 | Errors (like sticky I/O errors) reported while closing the connection would have had incomplete error messages (i.e. I/O failed for '-n/a-'). This has been fixed. |
479953 | A call to SADataReader.Read() could have caused an exception after calling SADataReader.NextResult(), if the resultset was empty. The SADataReader.Read() method was failing to check the resultset before fetching data. This problem has been fixed. |
479959 | The SORTKEY & COMPARE system functions did not support legacy ASA collations correctly. The following problems have been fixed.
When the collation specification argument to the SORTKEY or COMPARE functions referred to a valid SQLAnywhere legacy collation, the server would silently use the UCA instead. For example, SORTKEY( 'a', '1252LATIN1' ) would generate the same result as SORTKEY( 'a', 'UCA' ). A small amount of memory would be leaked any time a connection was disconnected, provided that the connection had used SORTKEY or COMPARE at least once with a collation specification that was non-numeric and was not one of the built-in ASE compatibility labels. When an invalid collation specification was passed to the COMPARE function, the error message that was generated (INVALID_PARAMETER_W_PARM, error -1090) did not correctly substitute the collation specification. For example, COMPARE( 'str1', 'str2', 'invalidcollationlabel' ) would generate the message "Function 'compare' has invalid parameter '3' ('str2')". It now generates the message "Function 'compare' has invalid parameter '3' ('invalidcollationlabel')". |
479966 | The row limitation FIRST or TOP n may have been ignored, and more rows returned, if the select statement had an ORDER BY clause and all rows returned were equal with regard to the ORDER BY clause. This has been fixed. |
480055 | In some circumstances, backups could have taken longer to complete than expected. This problem would have been noticed only if the total size of the database files was greater than 2GB, and was more likely to be noticed when backing up a very small fraction of that database size (e.g., such as when doing a TRANSACTION LOG ONLY backup with a small transaction log). This has been fixed. |
480072 | If a database was using a non-UCA collation (such as UTF8BIN) for NCHAR, the server could have produced unexpected results such as different orderings, or result sets, for the same data or corrupt indexes on NCHAR columns containing long strings. In some cases the server may have crashed if the query ran a sorting strategy. This has been fixed, but existing databases must be unloaded and reloaded. A new capability bit has been added so that databases created with the fixed engine cannot be started by servers without the fix.
Applications can determine if a database has the fix by querying the new db_property( 'HasNCHARLegacyCollationFix' ). For servers released prior to this fix, this function will return NULL. For 10.x databases running on a server with this fix, this function will return 'On' if the database was created by an engine with the fix AND uses a legacy NCHAR collation. Otherwise, it returns 'Off'. For databases created after version 10, this function will return 'On'. This approach allows newly-created 10.x databases that use a UCA NCHAR collation to be started with older software. When the server starts a database that was created by a server released prior to this fix and the database uses a non-UCA NCHAR collation and has at least one table defined to use an NCHAR column, the following warning message will be displayed in the server's message window (the text & url are yet to be finalized): Warning: database \"%1\" is using an NCHAR collation which for which a fix has been made available. See http://ianywhere.com/developer/product_manuals/sqlanywhere/notes/en/nchar_collation_warning.html Note that a database created by a server prior to this release could still have problems sorting NCHAR data if NCHAR uses a legacy collation but the warning is only displayed if NCHAR columns exist. |
480085 | If transaction log files for multiple databases were stored in a single directory, the MobiLink client dbmlsync might not have been able to synchronize any of these databases, even if there were no offline transaction log files for any of these databases. To resolve this, a new command line option has been added to dbmlsync:
-do disable offline logscan (cannot use with -x) When this new option is used, dbmlsync will not attempt to scan any offline transaction logs. Therefore, dbmlsync with -do should be able to synchronize a database that is stored with all the other databases in a single directory, as long as this database does not have any offline transaction log files. However, if actual offline transaction log files are requested (for instance, if the minimum progress offset is located in an offline transaction log or if an uncommitted transaction starts from an offline transaction log), dbmlsync with -do will raise an error and refuse to run the synchronization. |
480103 | The server may have failed assertion 101412, as well as oither assertion errors, if the query contained a GROUP BY clause with a grouping expression of type char or varchar. For this probel to have occurred, the query must also have used an Indexed Group By, or the indexed grouping for a Hash Group By, as a low memory strategy; and during the grouping the group rows had to be updated (e.g. due to the LIST function). This has been fixed. |
480108 | Tested and reproduced with:
ASA ADO.NET provider that comes with ASIQ 12.7 SDK ASA ADO.NET provider that comes with ASA 9.0.1, 9.0.2 and 9.0.3 - all providers produce same behavior Sybase IQ 12.6 ESD9 on Windows and Sun Solaris. Microsoft Visual Studio 2005 When running stored procedure from within VB application by using ASA ADO.NET Provider, an error "-180 - AsaError:Cursor not open" will happen. In Java ISQL, same procedure works fine. |
480125 | A database with a corrupt checkpoint log could have grown large during database recovery instead of failing with an assertion error. In some cases the database could have grown so large that a fatal error: disk full could have been caused. This type of corruption in the checkpoint log is now detected and assertion 201864 is raised in such an instance. This type of corruption is likely to be caused by a disk problem. |
480204 | If an application called the methods ResultSet.getTime(), ResultSet.getDate() or ResultSet.getTimestamp() using a java.util.Calendar object, then the iAnywhere JDBC driver would have returned the wrong result. This problem has now been fixed. |
480208 | If a proxy table to a table on a Microsoft SQL Server remote server had a long character column, attempting to insert a string longer than 254 characters into that column would very likely have caused SQL Server to have returned a "partial update/insert" warning. This problem has now been fixed. |
480211 | When one connection was blocking on a WAITFOR statement, all other connections were also blocked until it finishes. This problem has been fixed. |
480217 | When using UltraLite database for M-Business Anywhere, MIMEList POD may be used to display data from the database in tabular format. The new feature is only intended to use with the MIMEList POD. Please note that it is not supporting the full AGDBSet attributes and methods. The following code snippets show the two ways to bind to the AGDBSet object:
Example 1: Binding UltraLite table to AGDBSet connection = databaseManager.openConnection( openParms ); agdbSet = connection.getTableAGDBSet( "ULProduct" ); Example 2: Binding UltraLite result set to AGDBSet statement = connection.prepareStatement( "select prod_id, prod_name, price from ULProduct order by price" ); resultSet = statement.executeQuery(); agdbSet = resultSet.getAGDBSet(); |
480317 | The Server Licensing dblic may have crashed when it was asked to license the server executable instead of the corresponding license file. With the introduction of license files in 10.0.1, dblic now operates on the license file instead of the server executable file, but tries to automatically determine the name of the license file from the executable file name. In this case however the utility crashed while doing this. This has been fixed. |
480423 | A query that involved more than one Remote Procedure Call in the FROM clause could have caused the server to crash.
An example of such a query is: SELECT col1 from remote_procedure_1() where col2 = (select c1 from remote_procedure 2()) This problem has now been fixed. |
480434 | The iAS ODBC driver for Oracle could have returned numeric data with a comma "," as the decimal point on some international installations if the Oracle database used commas as the decimal point. However, the MobiLink server is able to handle numeric data that uses commas as a decimal point for download, which would have caused it to abort the synchronization. This problem has now been fixed. |
480450 | The server may have crashed calling an external function using the old-style API, if that function attempted to return an unsupported data type. This has been fixed so that this situation will return the error "Expression has unsupported data type". |
480532 | The QAnywhere server's logging mechanism was allocating a large amount of additional memory for each new client. This could have caused the Moblink server to run out of memory when working with a large number of clients. This has been fixed. |
480547 | If a scheduled event was created with a start time that included milliseconds, the event may have fired once, but then not have fired again. This has been fixed. As a workaround, the schedule's start time can be altered to exclude the milliseconds component. |
480659 | The Interactive SQL utility could have become unresponsive immediately after loading a .SQL file. This problem would have been very rare and timing-dependent, and would more likely have occurred on systems with fast processors. This has been fixed. |
480738 | Starting with version 10.0, the number of potential plans the optimizer can choose from has increased dramatically due to parallel access plan enumeration, and usage of materialized views. With very complex queries (joins of more than 20 tables), for which the optimizer enumerates parallel plans as well as non-parallel plans, the valid best plan may not have been found before pruning took place. This has been fixed. |
480759 | When making a call to a QAManager with the DBF and AutoStart connection parameters, the database server would not have been autostarted. Instead, a -101 error "not
connected" would have been logged by the QAManager, but was not reported back to the application. It should be noted that a QAManager will autostart the database server when the Open method is called. The issue was that when the database server was shut down after Open had been called, then subsequent QAManager operations would have failed because the database connection had been terminated, but the error codes returned to the application do not indicate that the connection to the database was bad, thus not allowing the application to Close and Open the QAManager to recover from the error. This has been fixed. If the ErrorCode of a QAException is greater than or equal to 2000, then the error means the same as ErrorCode - 1000, and also that a database connection failure has occurred (ie. SQL Anywhere native code -101). When a database connection error is detected, it is possible to re-Open a QAManager without recreating it and setting its properties and message listeners again. This is done by calling Close() then Open() again. Note that the properties of the QAManager cannot be changed after the first Open() and subsequent Open() calls, and must supply the same acknowledgement mode. |
480776 | Queries with access plans that did scans of unique indexes, may have returned incorrect results when using snapshot isolation. This has been corrected. |
480878 | Synchronization of a recreated database could have fail if the remote id was still the same. By default a new database will have a randomly generated UUID for a remote id. This has been fixed. |
480895 | When registering the performance monitor counters DLL (dbctrs9.dll or dbctrs10.dll) manually from a non-elevated process on Windows Vista (eg, regsvr32 dbctrs10.dll), the performance counters may not have actually been registered correctly, even though regsvr32 reported that the dll was successfully registered. This problem has now been fixed.
Note that the SQLAnywhere installation is performed from an elevated process and will not be affected by this bug. |
480937 | If an application using the iAnywhere JDBC Driver fetched an unsigned tinyint value in the range of 128 to 255, then the JDBC driver would have incorrectly thrown an overflow exception. This problem has been fixed by having the JDBC driver promote unsigned tinyint values to smallint. |
481000 | Borland Delphi converts an empty string parameter to a VARIANT type wide string with a NULL data pointer. When Borland Delphi was used with the SQL Anywhere OLE DB provider, this would have resulted in the application crashing. The following code fragment illustrates the situation.
ADOQuery1.SQL[0] := 'select * from Customers where GivenName = :fname'; ADOQuery1.Parameters.ParamByName('fname').Value := ''; ADOQuery1.ExecSQL; This problem has been fixed. A null pointer passed to the provider for a parameter will now be treated as an empty string when passed to the database server. |
481017 | When run on Linux systems, the server may have displayed unpredictable behaviour involving scheduled events, mirroring, the request_timeout option, and possibly other functionality in the server that relied on timers at start-up. There was a greater probability of this occurring on multi-processor machines. This has been fixed. |
481022 | A Java mobile webservices application compiled with JDK 1.5 could have failed with an error at the server saying "'SOAP-ENV' is an undeclared namespace." This has been fixed.
Note that because the mobile webservices runtime (iawsrt.jar) is built with JDK 1.5, Java mobile webservices applications must be compiled with JDK 1.5 and up as well. |
481036 | If a view's select-statement contained a key join and the same table was referenced multiple times, then attempting to query the view would have failed with a permissions error for users that only had select permission on the view.
For example: A select on the following view may have failed with a permissions error for table T1: create view V1 as select * from T1 join T2, T1 join T3 This problem has been fixed. |
481099 | If a server already had a database running, and that database was not the utility database, then attempting to connect to the utility database would have failed for a TDS based connection. This problem has been fixed. |
481103 | Two new connection options have been added to allow connections to execute requests at different priority levels.
The first option is Priority. This option sets the priority level at which requests from a connection are executed. This option can take one of the following values: CRITICAL HIGH ABOVE NORMAL NORMAL BELOW NORMAL LOW BACKGROUND By default, all connections will get a Priority value of NORMAL. Any user can set the Priority option without DBA permission. The second option is Max_Priority. This option controls the maximum priority level a connection can have. The default value for this option is NORMAL. Connections would needs DBA authority in order to change the Max_Priority option. A connection can always lower its priority level, but cannot raise it higher than the value of Max_Priority. An attempt to do so would raise a permission denied error. The scheduling semantic of the different priority levels allow all requests to get some CPU time despite the priority level of the request. Higher priority request will get more time slices than lower priority ones. Note, The Background_Priority option is deprecated as of this release. It will still be recognized but will be removed in future releases. Currently, if a users sets the Background_priority option to ON, it will cause requests to execute at the BACKGROUND priority level. When the option is turned back to FALSE, requests will execute at whatever value the option Priority is set to. |
481114 | The server could have failed to report an I/O error, such as a full disk, when using asynchronous I/O on Linux kernels 2.6.12 and higher. This has been corrected. |
481125 | If an application was trying to fetch data from a char/varchar column through SQLGetData, and if the buffer size passed to SQLGetData was less than the length of the data that was to be fetched, the iAS ODBC driver for Oracle could have returned the total length of the data minus the length of a NULL terminator to the client in the last call to the SQLGetData function. This may have caused the application to report data truncation errors. This problem has now been fixed. |
481139 | Renaming a table or view could have caused unpredictable behaviour if other parsed objects, such stored procedures, user-defined functions, or views, refered to the renamed object and parsed forms of these referencing procedures or views were already in server memory. The potential unpredictable behaviour would have included incorrect results, server faults, or server assertions. The server was failing to invalidate in-memory copies of parsed objects on a table or view rename. Now, parsed object definitions are unloaded and reloaded after the RENAME. |
481235 | The iAnywhere JDBC driver could have incorrectly given conversion errors when fetching numeric data. For the problem to have occurred, the numeric column had to follow a long char or varchar, or a long binary or long varbinary column in the result set. This problem was not likely to have occurred using the SQL Anywhere ODBC driver or the DataDirect ODBC drivers, but could have occurred using the iAywhere Oracle ODBC driver. The problem has now been fixed. |
481236 | Verification of the MobiLink System Setup would have failed for varchar column length differences on a UTF8 Oracle database when the MobiLink System Setup was installed with nls_length_semantics='CHAR'. This has now been fixed by having the MobiLink System Setup set nls_length_semantics='BYTE' in the current session. Note that existing MobiLink System Tables that were installed with char length semantics will still not pass the check and upgrading will not fix the existing varchar columns. |
481254 | An UPDATE statement would have updated only one row, even if more rows satisfied the WHERE conditions, if the column in the WHERE clause was indexed.
For example, consider a table with the following schema: CREATE TABLE Tab1( pk int not null primary key, value varchar(1) not null ) CREATE INDEX val_index ON Tab1( value ) The following statement could possibly update more than one row: UPDATE Tab1 SET value = 憍� WHERE value = 憏� However, since there is an index on value, this update would have only updated at most one row. This has been fixed and it will now update all qualifying rows. |
481289 | Data retrieved into DT_NSTRING embedded SQL host variables were not blank padded for blank padded databases. This has been fixed. |
481415 | Attempting to use the "-install" option in the Unix install would have resulted in the failure:
Files missing or regkey invalid. This has now been fixed. |
481427 | Calling the byte_length() function with a NULL for the parameter would have returned a random value instead of NULL. This has been corrected. |
481432 | The changes to the UltraLite runtime for Engineering case 480878, caused it to not send the upload progress in the first synchronization, which is what the MobiLink server expects. However, this change also caused the runtime to stopped sending the last download timestamp on the first synchronization as well. This resulted in the MobiLink server using a default timestamp of 0000-01-00 00:00:00.000000, which could be rejected by the consolidated database as an invalid timestamp. This has been fixed so that the runtime now sends the last download timestamp on the first synchronization, but not the upload progress. |
481450 | On Unix systems, if a client application left TCPip connections open when dblib, or the ODBC driver, was unloaded (for instance, at application shutdown time), the application may have crashed. There was a higher chance of seeing this on multi-processor machines. This has been fixed. |
481467 | Calling the byte_length() function with an integer value for the parameter, would have returned a value inconsistent with SQL Anywhere server. This has been corrected. |
481493 | In rare timing dependent cases a Unix application could have hung if prefetch was enabled and only part of a result set was fetched. This has been fixed. |
481521 | When synchronizing with HTTP or HTTPS, the MobiLink server could have caused too many HTTP request/response cycles. The extra exchanges and extra bytes on the wire would have made synchronizations take longer. This problem was timing-dependent, and its likelyhood was inversely proportional to the round-trip time between the client and server. This has been fixed. |
481607 | The database file size may have continued to grow, even when it was not expected to. This problem could have occurred any time, but would likely be more noticeable when constantly inserting and deleting the same set of rows (given the conditions outlined below), running without a redo log, or when checkpointing frequently. The main symptom of this problem was that the number of pages allocated to a table's extension arena continues to increase during inserts, deletes or updates when the amount of data in the table remained constant. There were two main ways this problem would have been more readily noticed. First, by running without a transaction log or when checkpointing frequently. In this case, the number of pages in the ISYSTAB extension arena grows. Second, when doing repeated updates, or paired inserts and deletes to a particular set of rows, when the number of overall rows did not increase. For the problem to occur in this case, the rows must have contained any type of CHAR or BINARY value (i.e., VARCHAR, LONG VARCHAR , etc.), and must have values longer than the column's INLINE amount. If the table was truncated or dropped, the extra pages allocated to the extension arena would have been freed up and made available for other uses. This has now been fixed.
Note, when this problem is noticed, rebuilding the affected database with the fix will eliminate the extra pages from the extension arena. |
481644 | Same machine connections were using communication compression if the COMPRESS connection parameter or -pc server option was specified. This has been fixed so that only remote connections will be compressed.
The sa_conn_compression_info procedure could have reported incorrect compression rates or packet compression rates if more than about two million bytes had been transferred since the server started. This has been fixed as wll. In order to get the fixed sa_conn_compression_info procedure, the ALTER DATABASE UPGRADE PROCEDURE ON statement must be executed (this will also upgrade the database to the current version, if necessary). |
481645 | After loading a Java class, it is initialized. The class initialization is performed by the connections's Java VM when the class is used for the first time. If two VM's attempt to initialize the same class concurrently, one needs to wait for the other to complete. If the waiting VM was cancelled, then the class was marked as erroneous, with a status of NoClassDefFoundError, and it did not get initialized. Later during this connection the VM may have returned a NoClassDefFoundError exception or, if the connection attempted to access the class, a server crash would have occurred. This has been fixed. |
481649 | It was possible, although very rare and timing related, for backups to have hung. The backup could hava been been initiated from either the dbbackup utility, or the BACKUP DATABASE statement. When this problem occurred, other requests would have proceeded as normal; however, since a backup prevents checkpoints, any connection that issued a checkpoint would have been blocked. This has now been fixed. |
481716 | When deploying a sSnchronization Model to an Adaptive Server Enterprise consolidated database, table references in the generated SQL were not prefixed by the database and owner, so deployment would have failed for tables with a different database or owner than those for the connected user. A workaround is to manually edit the SQL file for the consolidated database. This has been fixed so that table references are now prefixed by database and owner for Adaptive Server Enterprise consolidated databases. |
481738 | If the Interactive SQL utility dbisql used the -onerror command line option when connected to an authenticated server , the connection would not have been authenticated. This would have caused some statements to have failed with authentication errors after the grace period had expired. This has been fixed. |
481824 | An XML parameter can now be passed to an external function.
CREATE PROCEDURE mystring( IN instr XML ) EXTERNAL NAME 'xmlfunc@xmltools.dll'; XML parameters are passed in the same manner as LONG VARCHAR parameters. XML parameters are available when using the "new" external function call API. |
481834 | Applying a transaction log to a database using the server command line option -a, could have failed assertion 100902: "Unable to find table definition for table referenced in transaction log -- transaction rolled back". This would have occurred if one log (B) contained all of the operations of the preceding log (A), plus additional operations, and a sequence of modifications to a table T by one connection, which begin in log A and continued into log B, were active when the backup that created log A was performed. This has been fixed. The fix affects the contents of the transaction log at the time a backup is performed; thus, a fixed server does not permit log backups created prior to the fix to be applied.
Note that the problem does not affect backups where a log rename is performed after each backup, since in that case the logs will not contain overlapping sections. The problem can be avoided in version 10 by applying all of the logs at one time using the -ar or -ad options, which will cause the server to skip logs that are included by subsequent logs. |
481845 | The following fixes have been made to the Listener utility
1) IP tracking was sometimes not firing BEST_IP_CHANGE event when the Listener was run on Windows CE. 2) Engineering case 466446 introduced a problem in the Listener where options following the options -ga or -gi may have been misinterpreted. 3) Asynchronous IP tracking (-ga) was not working on Windows CE devices. Note, the Listener command line option -ga has been deprecated and asynchronous IP tracking is now implicit. The default of -gi has been changed from 10 seconds to 60 seconds. The polling mechanism now serves only as a backup. Users should not need to use -gi except for trouble shooting. |
481891 | When similar requests are executed concurrently, there would have be large variations in their response times. This problem would have shown up more on single processor machines. This has been fixed |
481893 | Referencing a stored procedure in the FROM clause of a query could have incorrectly returned a "permission denied" error. This would have occurred when the following conditions were true:
- the procedure was owned by a user with DBA authority - the procedure contained a single SELECT statement and no other statements - permission to execute the procedure was granted to a non-DBA user - the procedure's SELECT referenced a table for which the procedure owner had not been granted permissions This has been fixed. A workaround is to add a statement such as "if 1 = 0 then return end if;" to the start of the procedure. |
481894 | In rare cases, calling a secure web procedure could have caused the server to crash. This has been fixed. |
481898 | If a Mobilink server with QAnywhere was running on a non-ASA consolidated database and tried to process a message received from a JMS server, a SQL statement could have failed resulting in the message not being properly received by QAnywhere. This has been fixed. |
481904 | Attempting to call a non-existent procedure using the EXECUTE IMMEDIATE statement and the 'WITH RESULT SET OFF' clause (ie. EXECUTE IMMEDIATE WITH RESULT SET OFF 'call sp_nonexist();'), would have caused the connection to hang. This has been corrected so that an error indicating that the procedure does not exist is now reported. |
481905 | When the MobiLink client dbmlsync was run against a database created using Turkish settings, it would fail shortly after startup with the message:
SQL statement failed: (-141) Table 'sysarticlecol' not found. This problem has been fixed. |
481922 | Backslashes in SQL remote options, such as in:
SET REMOTE "FILE" OPTION "PUBLIC"."Directory" = '\\\\MACHINE\\Folder\\Subfolder'; were not being preserved when the database was unloaded. Given the above option setting, the reload.sql file would have contained: SET REMOTE "FILE" OPTION "PUBLIC"."Directory" = '\\MACHINE\Folder\Subfolder'; which, on reload, would be incorrectly interpreted as "\MACHINE\Folder\Subfolder", causing SQL Remote to fail. This has been corrected. |
481964 | The procedure dbo.sa_disk_free_space contained a redundant permissions check, and has been removed. The procedure can now be called if any of the following conditions hold:
- the caller has DBA authority - the procedure is called from another procedure owned by a user having DBA authority - execute permission has been granted To correct the problem in existing databases without rebuilding or upgrading, the call to dbo.sp_checkperms in dbo.sa_disk_free_space can be removed. |
481965 | When using the following SQLAnywhere options with the reference database:
default_timestamp_increment = 10000 truncate_timestamp_values = 'On' the UltraLite database produced when running the UltraLite Initialization utility ulinit on this database would have caused problems when synchronizing. MobiLink would have complained about timestamp precision mismatches. Ulinit was not setting the timestamp_increment from the SA default_timestamp_increment value. The workaround is to set the timestamp_increment setting on the ulinit command line, using the -o keyword=value option, as follows: ULINIT <existing options> -o timestamp_increment=1000 |
481970 | The setting of the ASTMP_UMASK environment variable would have been ignored on HP-UX systems. Also, the umask setting was ignored in the creation of the lrm_socket on HP-UX and AIX. These problems have now been fixed. |
481976 | When creating a new synchronization model for an existing remote database, the column order may not have been correct for upload_fetch or upload_fetch_column_conflict events. This has now been fixed. To fix existing synchronization models (after installing this fix), each synchronizing table must be set to 'Not Synchronized', the model saved, and then set back to their previous synchronization settings. |
481994 | When using the MobiLink Java DirectRow api, setting or getting data of types Date, Time or Timestamp could have worked incorrectly. When using a ResultSet, the returned value could have been null, When using a PreparedStatement, the value could have been set as null. This has been fixed. |
482093 | If prior to a database going down dirty, a materialized view was refreshed by a connection with the option isolation_level='snapshot' set, or with SNAPSHOT isolation specified for a REFRESH statement, and the no checkpoint occurred between the REFRESH statement execution and the database going down, the database would have failed to recover. This has now been corrected. |
482124 | The UltraLite and MobiLink security DLLs/shared objects had entry points that were inconsistent with those used by the SQL Anywhere database server. This has been corrected. The DLLs/shared objects and the binaries that load them, must be at the noted build number or later, or else the DLL/shared object will fail to load and an error (indicating missing/invalid DLL/shared object) will be issued. |
482137 | The Deployment Wizard did not deploy the utility dbelevate10.exe, that is required for running on Windows Vista. This has been corrected. |
482138 | The Deployment Wizard would have created an install that did not register the Dbmlsync Integration Component. This has been corrected by having dbmlsynccom.dll and dbmlsynccomg.dll self register when installed. |
482373 | Any MobiLink utility with a GUI could have crashed when it attempted to display a large message (ie. greater than 28,000 bytes), when the application was running in minimized mode. This problem affects only Windows systems, and was more likely to have occurred if the application was running with the full verbosity enabled (-dl command line option). This has now been corrected. |
482379 | After applying an EBF for SQL Anywhere Windows systems with Visual Studio 2005 installed, there could have been some garbled characters left at the beginning of the machine.config file for .NET Framework 2.0. This would have caused the SQL Anywhere Explorer for Visual Studio 2005 to not work properly. This has been fixed. |
482493 | The INTERSECT and EXCEPT set operators were using too much stack during optimization process which may have resulted in very complex queries failing with a stack overflow. The stack usage for these operations has now been significantly reduced. |
482520 | An upload that contained invalid or corrupt table data could have crashed the MobiLink server. The MobiLink server will now correctly fail the synchronization when it encounters invalid data.. |
482591 | If an application using the iAnywhere JDBC driver had multiple threads trying to create connections, or create statements/prepared statements/callable statements at the same time, then there was a chance the JDBC driver could have crashed. The crashes were actually in the Java VM, and work arounds have now been implemented. |
482593 | If a query contained a subquery that used a hash filter predicate, such as hash(T.x) in hashmap(R.y), then it was possible for the hash filter to inappropriately reject rows that ought to be accepted resulting in an invalid result set. This has been fixed. |
482612 | Executing a very complex query could have caused the server to crash due to a stack overflow. This has been fixed. |
482615 | An unexpected SQL error may have been received when creating views over columns with character length semantics. This could have occurred with NVARCHAR or CHAR length VARCHAR colums when using a database with a multi-byte character set.
For example: CREATE TABLE test(col NVARCHAR(8191)); CREATE VIEW test_view AS SELECT col from test; or, the following, when issued on a UTF-8 database: CREATE TABLE test(col VARCHAR(8191 CHAR)); CREATE VIEW test_view AS SELECT col from test; would have failed with SQL error CHAR_FIELD_SIZE_EXCEEDED (-1093): "The size of the character column, variable, or value data type exceeds 32767". This has been fixed. |
482640 | The Interactive SQL utility dbisql may not have displayed multiple result sets when connected with the iAnywhere JDBC driver (which is the default). This has been fixed. |
482703 | The installed version of the MobiLink system setup could not have been found by the Sybase Central MobiLink Plug-in for Microsoft SQL Server when the default_schema was different than the connected user. This has been fixed so that when checking schema with a Microsoft SQL Server consolidated database, the default_schema is now used.
Note, a work around is to make the current user the owner of the MobiLink system setup. |
482717 | If the database option tsql_variables was set to ON (as it would be for OpenClient connections), executing a CREATE DOMAIN statement containing identifiers beginning with @ would have created the domain incorrectly. This would have resulted in the error "not enough values for host variables" on a subsequent operation on a table containing a column defined using the domain. Also, executing a CREATE TRIGGER statement with an identifier beginning with @ prior to the body of the trigger would result in a syntax error. Both of these problems have been fixed. |
482741 | If a QAnywhere Server Management Request was used to cancel messages in a Server Store, messages were cancelled even after they had already been downloaded to the message recipient. This could cause consistency problems in the server store and possibly disable message transmissions on the receipient device. This has been fixed. |
482742 | QAnywhere documentation lists IAS_TEXT_CONTENT and IAS_BINARY_CONTENT as constants a that can be used to refer to the two different message content types in selector, transmission, and delete rules. However, the QAnywhere server was recognizing the constants IAS_TEXTCONTENT and IAS_BINARYCONTENT instead. This would have caused rules using the documented constants to not work as desired. This has been fixed so that both constant formats are now recognized. |
482773 | The ODBC driver could have caused a segmentation fault when used on Unix systems with some ODBC Driver Managers (for example, unixODBC) if the DSN existed but the connection failed (for example, it failed to autostart a server). This has been fixed. |
482822 | An INPUT statement could have failed if it referenced a table owned by the current user and there was also a table with the same name which was owned by a different user, and the owner was not given in the INPUT statement. This has now been fixed. |
482832 | When the visual form of the Dbmlsync Integration Component was used on Japanese Windows 2000, the font selected for the log window did not support Japanese characters and so these were not rendered correctly. This problem did not occur on Windows XP. This problem has been fixed on Japanese Windows 2000 only, as it does not occur in any other environment. |
482833 | The return code was not set correctly following an EXIT statement if it was executed from a .SQL file, its argument was not a literal exception, and the "Show multiple result sets" option was ON. That is,
SET TEMPORARY OPTION isql_show_multiple_result_sets='on'; EXIT 123; worked, but SET TEMPORARY OPTION isql_show_multiple_result_sets='on'; CREATE VARIABLE retcode INT; SET retcode = 123; EXIT retcode; did not, the return code was always zero. This has been fixed. |
482839 | When Microsoft's Business Intelligence Development Studio attempted to insert string values into a row using the OLEDB InsertRow() method, it passed in a pointer to the data to be inserted. For string values (DBTYPE_STR), it sometimes did not pass in a length, which caused the SQL Anywhere provider to insert a string of length zero into the corresponding column. This behavior has been changed. Now, for types DBTYPE_STR and DBTYPE_WSTR, the provider will attempt to determine the string's true length when no length is passed in, with the assumption being that the string is null-terminated. |
482841 | Execution of a LOAD TABLE statement may have performed poorly if it was used on a table containing a column with DEFAULT AUTOINCREMENT. The server was unnecessarily doing a full reverse index scan to determine the new maximum value for the autoincrement column after the LOAD TABLE. This has been fixed. |
482851 | The provider now supports using named parameters. If all the parameter names are specified, the provider will map them to the parameter values when the command is executed. The order of parameters does not have to be the same as the order of host variables when using named parameters.
For example, using named parameters when calling a procedure: SACommand cmd = new SACommand( "MyProc", conn ); cmd.CommandType = CommandType.StoredProcedure; SAParameter p4 = new SAParameter( "p4", SADbType.Integer ); p4.Direction = ParameterDirection.Output; cmd.Parameters.Add( p4 ); SAParameter p3 = new SAParameter( "p3", SADbType.NChar, 30 ); p3.Direction = ParameterDirection.Output; cmd.Parameters.Add( p3 ); SAParameter p2 = new SAParameter( "p2", SADbType.Char, 20 ); p2.Direction = ParameterDirection.InputOutput; p2.Value = "222"; cmd.Parameters.Add( p2 ); SAParameter p1 = new SAParameter( "p1", SADbType.Integer ); p1.Direction = ParameterDirection.Input; cmd.Parameters.Add( p1 ); cmd.ExecuteNonQuery(); given following procedure definition; CREATE PROCEDURE MyProc( in p1 int, inout p2 char(20), out p3 nchar(30), out p4 int ) BEGIN SET p2 = p2 + 'abc'; SET p3 = '333xyz'; SET p4 = p1 * 4; END Using named parameters in a query: SACommand cmd = new SACommand( "UPDATE MyTable SET name = :name WHERE id = :id", conn ); SAParameter p1 = new SAParameter( "id", SADbType.Integer ); p1.Direction = ParameterDirection.Input; p1.Value = 1; cmd.Parameters.Add( p1 ); SAParameter p2 = new SAParameter( "name", SADbType.Char, 40 ); p2.Direction = ParameterDirection.Input; p2.Value = "asdasd"; cmd.Parameters.Add( p2 ); cmd.ExecuteNonQuery(); |
482931 | If corresponding items in two select lists of a INTERSECT or EXCEPT set operator had different data types, the server would have chosen a data type for the corresponding column in the result and automatically converted the columns in each select list appropriately. If the conversion failed, and the server was low on cache memory, then it may returned the assertion 102501 instead of the correct conversion error. This has been fixed. |
482952 | The server may have crashed when doing extensive console logging (e.g. when -zr all was used). This was more likely to have occurred on multi-processor machines, and has now been fixed. |
482958 | It was possible, although rare, for the optimizer to select less than optimal access plan for complex queries. This has been fixed. |
482977 | If a global variable had the same name as a procedure's parameter, statements within the procedure could have executed using the wrong variable. For this to have occurred, no other variable references could occur between the last reference to the global variable and the execution of the statement referencing the local variable in the procedure. This has been fixed. One workaround is to use a different name for the global variable. |
483065 | The connection property 'CommLink' was not returning 'local' for local TCP/IP connections on some patched Solaris 10 systems. These systems had to have at least two active network interfaces for the problem to occur. This has now been fixed.
A work around is to use the MyIP connection option on the client, and the MyIP TCP/IP option on the server and to make sure that they match. |
483072 | The SQL Anywhere Deployment wizard would not have deployed the file mlnotif.jar when MobiLink server was selected. This file was missing from the list of files to deploy and has now been added. |
483129 | Engineering Case 454858 introduced a problem where attempting to execute concurrent LOAD TABLE statements which used the same global temporary table, would have caused one of the statements to have been blocked. This has been fixed so that the loads now run concurrently once again. |
483213 | The ODBC driver was describing NCHAR and NVARCHAR columns as SQL_WCHAR or SQL_WVARCHAR, with the SQL_DESC_OCTET_LENGTH specified as too small, if the column contained surrogate pairs. Depending on the application, this could have resulted in fetched NCHAR data being truncated. This has been fixed so that NCHAR columns now have a SQL_DESC_OCTET_LENGTH which allows for surrogate pairs.
Note, this problem also affected the iAnywhere JDBC driver, which is used by the Interactive SQL utility dbisql. |
483223 | The server could have crashed when executing the sa_transactions system procedure. This has been fixed. |
483226 | The ON EXISTING UPDATE clause of the INSERT statement allows existing rows to be updated based on a primary key look-up. The INSERT statement with this clause uses each input row to either insert the row or update the contents of an existing row. The server fired all applicable INSERT and UPDATE triggers except the statement level UPDATE triggers during the execution of this statement. This has been fixed so that the server will now fire statement level UPDATE triggers as well. |
483227 | As well as the fixes to correct multi-threaded applications in Engineering case 485568, changes have also been made to thread synchronization to prevent hangs when running on multi-processor machines. |
483230 | Ping synchronizations from a MobiLink client would have failed if the MobiLink Server had been connected to a consolidated database where the authenticate_parameters event existed. This has now been fixed. |
483261 | The methods ClearAllPools and ClearPool could have caused an exception if any of the connections in a pool were not opened. This problem has been fixed. |
483314 | Interactive SQL could have crashed if the menu item for a recently opened file (at the bottom of the "File" menu) was clicked while a statement was currently being executed. This has been fixed. |
483316 | The .NET provider could have gone into an endless loop, with very high CPU usage, on termination of the application. This has been corrected. |
483335 | When entering a multi-line rule condition, it would have been saved in a way that caused the line to appear to have been run together when the line was next edited. This has been fixed. |
483356 | The server could have become deadlocked when a connection attempted to block while updating row. This is more likely to happen when the server is under heavy load. This has now been corrected. |
483427 | An attempt to stop a MobiLink service using the Service utility dbsvc would have failed with a message like "dbmlstop: No such file or directory". This has been fixed. |
483441 | In a database mirroring system, if the mirror or arbiter connection strings contained any of the DoBroadcast, TDS, BroadcastListener, LocalOnly, ClientPort, VerifyServerName, LDAP, or DLL TCPIP parameters, that server could have crashed, or failed to connect to the partner or arbiter servers. This has now been fixed. |
483452 | The IAS Oracle driver requires Oracle's OCI client libraries. If these libraries are not installed properly, the IAS driver would have silently failed to load. The driver will now load,, but will fail when first used by an application. The application can query the failure and will receive an error which indicates the OCI library is missing. |
483518 | In some cases, requesting a graphical plan for a query could have caused the server to fail with a fatal error: 'A read failed with error code: (38), Reached the end of the file. Fatal error: Unknown device error.' This has been fixed. |
483533 | If the LOGFILE connection parameter was specified, when connecting to either a personal or network server without specifying a server name, the line "Connected to the default personal server" was logged. This was inaccurate, and possibly confusing. The text of this message has now been changed to "Connected to the default SharedMemory server." |
483558 | The value of connection_property('TransactionStartTime') would have been an empty string if the only statement executed since the last COMMIT/ROLLBACK was an INSERT ... SELECT. This has been fixed. |
483559 | The server could have gone into an endless loop, with very high CPU usage, instead of reporting an error when it ran out of free pages in the cache. This has been fixed. |
483578 | When creating a download using the MobiLink Java direct row API, some actions could haver destabilized the MobiLink server. Setting parameters with incompatible data, or setting columns multiple times with null values that were not nullable, could have caused the MobiLink server to send an invalid row to the synchronization client, or crash. This has been fixed. |
483635 | If a trigger was created using the Interactive SQL utility with the syntax:
CREATE TRIGGER owner.name ... then Sybase Central would have displayed the trigger SQL with the trigger's owner replaced by the trigger's name, such as: ALTER TRIGGER name.name ... This has been fixed. Now the SQL is displayed correctly as: ALTER TRIGGER name ... That is, the owner (which is syntactically valid, but is ignored by the engine) is removed from the source. |
483636 | When modifying a procedure, if one or more comments were typed before, or anywhere within, the ALTER PROCEDURE <owner>.<name> portion of the statement, then these comments would have been lost when the statement was saved to the database. However, the editor would have given no indication that this was the case until the procedure was refreshed, for example, by pressing F5. This has been fixed so that the comments are now automatically relocated to the point immediately following the above portion of the statementL, so that they are preserved with the procedure source. In addition, the SQL editor is automatically updated and a message that the statement has been adjusted is displayed. The above also applies to functions, views, materialized views, triggers and
event handlers. |
483655 | If an application connected using a TDS based client, and attempted to use a procedure in the FROM clause of a SELECT statement, then the application would have failed with a TDS protocol error. This problem has now been fixed. |
483815 | If a procedure that referenced proxy tables was used in the FROM clause of a SELECT statement, and the first statement in the procedure is not a SELECT statement, it was very likely that the server would have crashed. The problem may also happen if such a SELECT was used as the subselect in a DML statement. This has now been fixed. |
483845 | Statements referencing some specific forms of the LIKE predicate could have caused a server crash when the statement was prepared. This has been fixed. |
483913 | If a procedure, trigger, or view was created using EXECUTE IMMEDIATE, or via Sybase Central, a trailing semi-colon included at the end of the definition may not have been stripped out of the preserved source for the object, resulting in problems when the database was unloaded and reloaded. This has been fixed. Re-creating the object without specifying a trailing semi-colon will correct the problem. |
483960 | In very rare circumstances, the server may have crashed if a fatal assertion was encountered during a backup. This has been fixed. |
483967 | An OUTPUT...FORMAT FIXED statment, that did not include explicit column widths, could have created files that the INPUT statement could not have subsequently read correctly without also including explicit column widths. This would have occurred if the destination table contained a numeric data type (INT, DECIMAL, etc) in any column other than the last one. This has now been fixed. |
484003 | If a proxy table to a table on a Microsoft SQL Server remote server had a a UUID column, attempting to insert a value generated by newid() into that column would have failed with a syntax error. This problem has now been fixed. |
484046 | Specific forms of the IN predicate could have caused the server to crash. This has been fixed. |
484054 | If a statement used the LOCATE() function on a long string, it could have lead to a reduction in concurrent execution of other statements. Further, it could have caused the statement to take a long time to respond to a cancel operation. Similarly, some queries that used a sequential scan with predicates that reject most of the rows in the table, might have taken a long time to respond to a cancel operation. These problems have now been fixed. |
484072 | Some UPDATE and DELETE statements with aggregate expressions were incorrectly failing with the error "Invalid use of an aggregate function". This has been corrected. |
484074 | A LIKE condition of the form: "column LIKE constant", could have produced incorrect results when the column was not of type CHAR and occurred as the first column of an index. This has been corrected. |
484145 | Using a host variable of type nchar, nvarchar or long nvarchar in a query that references proxy tables would likely have caused the server to report a syntax error, rather than execute the query. The server was not handling nchar based host variables correctly. It would at times assume the data was in the database charset instead of utf8 .This problem has now been fixed. |
484160 | Attempts to revoke connect permission from a user that still had an externlogin mapped, would have failed with a strange foreign key error, after which, logging in as the user that was being dropped would have resulted in the user permissions being messed up. The server now properly gives an error indicating the externlogins are still mapped for the user and leaves the user permissions unchanged. |
484178 | Reloading histograms into a database using a 64-bit server may have failed if the database has been run previously with a 32-bit server. This has been fixed. |
484194 | When the server was run on HP-UX 11.00, HTTP connections may not have shut down cleanly, and the server may have hung on shutdown. The cause was a bug in the operating system.
While there is no fix to ASA software, customers are advised to apply the HP-UX 11.00 patch PHNE_27886 or later (and all dependencies). |
484196 | On Unix systems, transfers of large blobs to the server over TCP/IP may have been slower than expected. This would have been especially noticeable on 1 Gbps networks. This has been fixed. |
484256 | Attempting to execute a query with an invalid dotted reference involving proxy tables, would very likely have caused a server crash.
For example: select prod_id.sum(sales) from sales group by prod_id order by prod_id This query was intended to be "select prod_id, sum(sales) ..." but a typo replaced a comma with a period. If the table prod_id was a remote table, then the above mistyped query would have crashed the server. This problem has now been fixed. |
484262 | In very rare circumstances, the server may have issued a fatal checksum assertion for database page 0 while in the process of doing a backup. This has been fixed. |
484266 | The QAnywhere Agent and MobiLink Listener could have crashed when started with the "@file" command line option, if "file" did not exist. This has been fixed. |
484269 | When run on Unix systems, the server could have exhibited poor disk I/O performance on mult-spindle disk systems. This has been fixed. |
484272 | The QATransactionalManager class would have failed to re-receive a message with large content (exceeding MAX_IN_MEMORY_MESSAGE_SIZE in size) after it was received once and a rollback was done. This problem applied to the C#, Java and C++ QATransactionalManager classes. This has now been fixed. |
484274 | Attempting to execute a query using a window function with a PARTITION BY clause, that consisted of nothing but constants or variables, could have crashed the server.
For example: create variable v int; select sum(x) over ( partition by v ) from t This has beenfixed. |
484281 | When sending an attachment over SMTP using xp_sendmail(), there would have been an extraneous zero length file with the same name sent along with the real file attachment. This has been fixed. |
484293 | When using the QAnywhere Client SQL API to receive messages, they would not have been synchronized back to the originator. This caused the messages to remain in the "Pending" state indefinitally on the originating client, and on the server. This has now been fixed. |
484295 | If a synchronization model was used to create timestamp-based downloads with an Oracle consolidated database, and the MobiLink server used a different timezone than the consolidated database, then some data might not have been downloaded. The problem was that the trigger generated to maintain the last-modified time used CURRENT_TIMESTAMP, which uses the client's timezone. This has been fixed so that the generated triggers now use SYSTIMESTAMP (which uses the consolidated database's time zone.) A workaround is to manually change the trigger, either in a generated SQL file or deployed in an Oracle consolidated database. |
484359 | If a user was using the QAnywhere SQL API to receive messages asynchronously with the ml_qa_listen_queue procedure, and another user using the same message store sent a message to this queue (ie. local messaging), the message would not have been received.
This has been fixed. |
484368 | When attempting to unload and then reload a database created with an older build, using a more recent build, if the database had Remote Data Access servers defined, then there was a chance the reload could have failed with the error: "Server capability name 'encrypt' could not be found in the SYS.SYSCAPABILITYNAME table". This problem has now been fixed. |
484452 | It was possible for UltraLite to allow duplicate entries into unique key indexes, or it could have incorrectly reported a duplicate entry in a unique key. For this to have occurred, a table would need to have been left open while many hundreds of updates were happening to the same row, as well as many other inserts and deletes needed to occur to other tables concurrently. This is now fixed. |
484456 | When running on VMWare, the SQL Anywhere server may have crashed on start-up. There isn't a risk of database corruption. This was due to the server determining that the number of CPUs available was 0. This has been fixed. |
484461 | If both servers involved in a mirroring system have registered themselves with an LDAP server, the mirror server may not have successfully taken ownership of the database if the primary server failed. The transfer of ownership will succeed though, if the primary server is properly shut down; the problem only occurs if the primary server fails and does not shut down successfully. This has been fixed. |
484487 | On Solaris 10 systems, calling the system procedure xp_cmdshell() may have failed if the server's cache was large. This has been fixed. This problem still affects Solaris systems running version 8 and 9; as the problem arises from the implementation of the fork system call and cannot be worked around safely on Solaris versions 8 and 9. A more complete expalanation can be found at: http://developers.sun.com/solaris/articles/subprocess/subprocess.html. |
484542 | If a connection made DML requests against a JDBC class (ASAJDBC or ASEJDBC) remote server, and the disconnect performed an implicit rollback, then a small amount of the server's cache was not freed. This has been fixed. |
484543 | If a connection used a ASAJDBC or ASEJDBC remote server, and only performed CREATE TABLE AT statements against this remote server, then a small amount of the server's cache would not have been freed during the disconnect for this connection. This has been fixed. |
484605 | Under heavy load, and while another connection was executing DDL statements, calls to a user-defined function could have resulted in a server crash. This has been fixed. |
484679 | The server could have crashed, or failed an assertion, when reloading a procedure. This could only have happened if another connection was unloading the procedure almost simultaneously. This has now been fixed. |
484698 | The index density calculation could have been incorrect in certain cases. This has now been corrected. |
484704 | On Linux IA64 systems, "unaligned access" messages may have appeared in the system log while the server was running. The problem that caused these messages has been fixed. The message itself can be considered harmless in this instance, and server operation was not affected. |
484798 | A query using a window function with a RANGE on a date column could have returned a conversion error. This has been fixed. |
484881 | When syncronizing a timestamp value in an UL database running on the desktop against an ASE server via Mobilink, the syncronization fails with an Error showed in the ML log:
Error: Invalid datetime format. |
484889 | Attempting to unload an UltraLite database while selecting a long list of tables to unload, would have caused Sybase Central to crash. This has been fixed. |
484960 | When any of the components in SQL Anywhere were converting a string from one character set to another, it was possible for the translated string to have been truncated in rare situations. For the problem to have occured, a multibyte character set other than UTF-8 was typically involved. The problem has now been fixed. |
484964 | The command line option that represents a memory value, used by all the database tools including dbmlsync, dbremote, dbltm and the MobiLink Server, was not recognizing "g" and "G" as valid characters for a gigabyte of memory. This code is not used by the database server. This has been fixed, so that "1G" or "1g" can now be specify as a valid memory value. As a workaround, "1024M" can be used to represent a gigabyte of memory. |
484966 | After connecting to a database containing a unique foreign key, selecting the Indexes folder in the tree would have displayed the error "The values <xxx> cannot fit into a byte" where <xxx> = 129 or 130. This has been fixed. |
484980 | The number of rows returned by a partial index scan of an unique index should be at most one row, if all the columns of the index are used in an equijoin predicate. This number was not being set correctly. This has been fixed. |
484981 | If REORGANIZE TABLE was executed in one connection, while simultaneously dropping the primary key or clustered index on the same table in another connection, the server could have crashed. This has been fixed. |
484984 | If an application connected using an older version of either Open Client or jConnect, and then called the system procedure sa_conn_info, there was a chance the client would have crashed. Column names longer than 30 characters are a problem for older TDS clients. The problem has been fixed by properly aliasing the column names in the sa_conn_info select statement. |
485004 | A constant at the start of an aggregate selection could have caused erroneous results. An example would be:
SELECT 999, count(*) FROM TABLE where the incorrect result was a row for each row in the table, instead of a single row. Constants were not being marked as aggregates when they occurred in aggregate selections. This has been fixed. |
485054 | The optimizer attempts to use an existing index for queries involving the MIN or MAX aggregate function. The cost of this optimization was incorrectly overestimated for subqueries which could have been evaluated as derived tables, so it was possible that the
subquery's best plan did not have the RowLimit operator, which may have resulted in the choice of a poor performing plan. This has been fixed. For example, the query: select * from R where R.X = (select max(R.X) from R ) would have had the cost of the plan "R<idx_x>:[ RL [ R<idx_x> ]]" overestimated by the optimizer. Hence, it was more likely to use "R<seq> JH [GrH [ R<seq>]]" as the best plan, which computed the subquery as a derived table. This plan may have been inefficient for queries where the table R was very large. Q: select * from R where R.X = (select max(R.X) from R ) |
485073 | Attempting to createg a proxy table may have caused the server to hang. Restarting the server and running the create again would likely not reproduce the hang. This problem has now been fixed. |
485160 | If a connection had snapshot isolation enabled, and a non-snapshot transaction was in progress, when a second connection with a snapshot or non-snapshot transaction commited or rolled back without any outstanding snapshot transactions having been started before the transaction in the first connection, then there was a chance of assertion failure 201501 "Page for requested record not a table page or record not present on page" on subsequent snapshot queries. This has been fixed. |
485191 | When Snapshot isolation was enabled, pages in the temp file could have been leaked if long running snapshot transactions were used. This is has now been corrected. |
485200 | When connecting to ASE or Microsoft SQL Server, the Remote Data Access layer was setting the quoted_identifier option to ON at connect time and then always quoting identifiers when querying data from ASE or SQL Server. Unfortunately, due to a restriction in the ASE server, always using quoted identifiers resulted in problems if the column name was 29 or 30 characters in length. Now, when connecting to ASE or SQL Server remote servers, the quoted_identifier option on the remote is set to match the local setting. |
485235 | If a user-defined event executed a statement that referenced a proxy table while the database was being shutdown, the server may have failed an assertion. This has been fixed so that these statements now return an error. |
485242 | When using the Dbmlsync Integration Component, an exception could have occurred, or corrupt data could have been retrieved, if the UploadRow event or the DownloadRow event was enabled. For this to have occurred, the handler for the above event must have called the ColumnValue method on the IRowTransfer object more than once with the same index, and the index used must have corresponded to a column containing a string or BLOB value. This problem has now been fixed.
A work around for this problem would be to ensure that the ColumnValue method is not called more than once for a single index by storing the value retrieved by the first call in a variable and working with that value. |
485252 | In some situations, the server could have crashed when executing a query access plan that was built with parallel scans. This has been fixed.
A workaround for this problem is to set the option Max_query_tasks=1 to avoid all parallel access plans. That change will degrade performance for some queries, but will avoid the crash. |
485254 | When using the SQL Anywhere debugger to step through a procedure or function, if the current statement was an INSERT, UPDATE or DELETE, it was possible to step into the trigger that would have been fired when the statement executed, but if more than one trigger would have fired, it was not possible to step through to the next trigger if it existed. This has now been corrected. |
485262 | If the server crashed during application profiling and was then restarted, Sybase Central would have crashed on an attempt to connect to the restarted database. This has been fixed. |
485271 | For strongly encrypted databases, the statement ATTACH TRACING TO LOCAL DATABASE fails correctly with the SQL error "ATTACH TRACING TO LOCAL DATABASE cannot be used with a strongly encrypted database", but subsequent ATTACH TRACING statements incorrect returned the SQL error "A tracing connection is already active". This has been fixed. |
485275 | The changes for Engineering case 482379 had the potential to truncate the .NET 2.0 machine.config file. This could have happened if the 9.0.2 EBFs for builds 3575, 3576 or 3581 were applied. Without this file, problems running .NET applications, or using Visual Studio 2005 may occur. The problem has now been corrected, and the Setup will try to determine if the machine.config file has been corrupted, and display an error dialog if corruption is found. If the new Setup reports that the file may be corrupt, action must be taken to restore the file to a working state.
The file machine.config is an XML-formatted file, and is usually found in c:\Windows\Microsoft.NET\Framework\v2.0.50727\config. Data providers are listed in the <DbProviderFactories> sub-section of the <system.data> section of the file. A subset of the file is shown below: <configuration> (configuration for other providers) <system.data> <DbProviderFactories> <add name="Odbc Data Provider" invariant="System.Data.Odbc" description=".Net Framework Data Provider for Odbc" type="System.Data.Odbc.OdbcFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> (configuration for other providers) <add name="SQL Anywhere Data Provider" invariant="iAnywhere.Data.AsaClient" description=".Net Framework Data Provider for SQL Anywhere" type="iAnywhere.Data.AsaClient.AsaFactory, iAnywhere.Data.AsaClient, Version=9.0.2.3585, Culture=neutral, PublicKeyToken=f222fc4333e0d400" /> </DbProviderFactories> </system.data> (configuration for other providers) </configuration> The bug was that the install truncated the file at the point where the "SQL Anywhere Data Provider" entry should have been added. This left the XML file in an inconsistent state, due to the <DbProviderFactories>, <system.data> and <configuration> sections not being closed. As well, entries that occurred after the <DbProviderFactories> section were missing entirely. Any data providers from other database vendors that were listed in the file after the SQL Anywhere provider would also have been deleted. To fix the problem, the file needs to be restored manually. Ideally, if there is a backup of this file, it can be restored from the backup. If that is not the case, the file will need to be manually edited to add the provider line above and close the <DbProviderFactories>, <system.data> and <configuration> sections. There is a file called machine.config.default in the same directory as the machine.config. This file contains the default settings for the machine.config, and can be used to restore the missing sections. Any installs for other products that modified the machine.config the file will also need to be rerun. |
485276 | When a consolidated database was running on a DB2 or DB2 mainframe server, the MobiLink server, using the native IBM DB2 ODBC driver, may not have retried uploads when deadlocks occurred. This problem has now been fixed. |
485285 | Some memory could have been leaked by the MobiLink server when using non-persistent HTTP or HTTPS (persistent=0 at the client). The size of the leak was proportional to the number of HTTP GET requests, so large downloads would have caused greater leaks. A small leak could have occurred as well if a communication error occurred. The impact of the leaked memory could have included failed synchronizations and/or MobiLink server crashes. This has now been fixed. |
485293 | If diagnostic tracing was started using the Tracing Wizard in Sybase Central, and the connection string specified contained the tracing database's file name, the tracing database would not have been started, and the ATTACH TRACING statement would have failed. This has been fixed so that if the database file name is specified, the database will be started on the current server. The location of the database should be given relative to the database server location. |
485338 | When running the server with the command line option -m "truncate transaction log after checkpoint", or when running the Backup utility dbbackup with its command line options that restart the log -r, -x or -xo, the current transaction log was renamed and then, depending on the option used, deleted. If the rename of the transaction log failed, assertion failure 100910 was raised. This message for this assertion has been changed to hopefully give more information about the cause. The message was changed from:
"Error deleting transaction log file" to "Error renaming transaction log file before deleting it. Error code: %d/%d" The first number of the Error code means the error type (0 - POSIX error number, 1 - OS error number). On Unix and Netware, both error types mean POSIX error numbers. The second number is the actual error code. On Windows the POSIX error numbers can be found in the header errno.h. |
485349 | Predicates of the form "column IS NULL" are eliminated if the column is declared NOT NULL earlier now in the optimization process. This increases the oportunity for rewrite optimizations to be performed. |
485377 | When you create a synchronization model, if the generated event scripts have errors you are now warned right after the event scripts are generated at the end of the Create Synchronization Model wizard. If you try deploy a model that has event errors, you now get an error before the Deploy Synchronization Model wizard opens. In earlier versions you would not get an error until the end of the Deploy Synchronization Model wizard, in which case you would lose the choices you made in the wizard. |
485378 | In a mirroring system, if the transaction log files on the primary and mirror were incompatible, the mirror server may not have properly detected this condition and shut down. This has been fixed. |
485380 | In the Create Synchronization Model wizard, if 'Download Subset by User or Remote ID' used a column in the same table, it would only have been enabled for tables where the column was also synchronized, and was a string type. This has been fixed. Now the column must only exist in the consolidated table.
Note that the chosen column's type should be able to be implicitly compared with a string, or errors may occur when downloading with the generated download script. |
485425 | When executing a query containing proxy tables that would normally have been handled in 'full passthru' mode, but cannot be handled by the server because it is too complex, would have crashed the server. This has been fixed so that the server now properly returns the error "-890: Statement size or complexity exceeds server limits". |
485478 | Support has now been added to deploy native amd64/x64 ESQL and C++ applications to 64 bit Windows platforms (64 bit XP and later). The engine is supported, as well as static and dynamic versions of the in-process runtime library. Encryption is also supported, although FIPS is not.
The following new files are included in the install: ultralite\x64 ultralite\x64\uleng10.exe ultralite\x64\ulstop.exe ultralite\x64\mlczlib10.dll ultralite\x64\mlcrsa10.dll ultralite\x64\mlcecc10.dll ultralite\x64\lib ultralite\x64\lib\vs8 ultralite\x64\lib\vs8\ulrt.lib ultralite\x64\lib\vs8\ulimp.lib ultralite\x64\lib\vs8\ulrt10.dll ultralite\x64\lib\vs8\ulbase.lib ultralite\x64\lib\vs8\ulrsa.lib ultralite\x64\lib\vs8\ulecc.lib ultralite\x64\lib\vs8\ulrtc.lib ultralite\x64\lib\vs8\ulimpc.lib ultralite\x64\lib\vs8\ulrtc10.dll |
485483 | If an application used the iAnywhere ODBC driver for Oracle to fetch result set from a packaged procedure, the driver would have reported the following error:
[Sybase][iAnywhere Solutions - Oracle][Oracle]ORA-06553: PLS-306: wrong number or types of arguments in call to {procedure name} This problem could have caused the MobiLink server to fail the download, when a download_cursor or download_delete_cursor event was written as: { call package_name.procedure_name ( ?, ?, ...) } or { call schema_name.package_name.procedure_name( ?, ?, ... ) } This problem has been fixed. Now this event can be written as: { call [schema_name.][package_name.]procedure_name( ?, ?, ... ) } |
485488 | The server could have crashed when requested to create a tracing database when using the Sybase Central Database Tracing wizard. This would have happened when the name of the DBA user for the tracing database was the same as a name of a DBA user in the existing database. The crash has been fixed.
The workaround, and required behaviour with the fix, is to specify a DBA user name for the tracing database that does not currently exist in the target database. The wizard has been modified to alert the user to this. |
485498 | The REBUILD clause of the ALTER INDEX statement can be used to recreate the physical data structures underlying the index. If the ALTER INDEX REBUILD statement was interrupted by the user, or failed for any reason, the server could have left the physical structure in an undefined state. The most likely state for the index after a failure was to contain no entries. This situation could have caused subsequent queries using the faulty index to behave erroneously. To rectify this situation, a failed ALTER INDEX REBUILD could be executed again to completion. This has been fixed so that the server will now restore the physical data structures to the same state as the one that existed prior to execution of the failed statement. |
485499 | The server shares physical indexes between compatible primay keys, foreign keys, unique constrains and secondary indexes. Two indexes are considered compatible if the keys for the indexes contain exactly the same columns in the same order and with the same sequencing of values (ascending or descending). When creating a new foreign key index the server could have shared the physical index with an existing index erroneously even when the order of columns did not match. Note that the foreign key constraint was still correctly enforced, but the index was created with an unintended column order which may be problematic for queries that required the specified order for the index to be useful. This has now been fixed.
A workaround is to create the other index after the foreign key index has been created, or to declare an additional index with the correct column order. |
485568 | Multi-threading applications could have failed with a number of symptoms. These symptoms include 'Resource governor for prepared statements limit exceeded' and 'Communication error' errors, as well as client application crashes. This problem has been fixed. |
485574 | The server could have crashed when attempted to get an exclusive schema lock on a table. This has been fixed. |
485576 | If the encrypt() or decrypt() functions were called a combined total of about 4 billion times, they would fail with the error 'Unable to load encryption dll ""'. This has been fixed. |
485584 | The Interactive SQL utility did not parse the "DESCRIBE objectName" statement correctly unless it was executed on its own, and not part of a sequence of statements. This has been fixed. |
485588 | The QAnywhere Agent could have used an excessive amount of memory during message transmission when a large number of messages were queued. This has been fixed. |
485593 | The server could have become deadlocked while running concurrent REORGANIZE TABLE statements on the same table. There can now only be one REORGANIZE TABLE statement executing on a table at a time. Attempts to execute a second REORGANIZE TABLE on the same table will now result in the error SQLSTATE_REORG_ALREADY_IN_PROGRESS. |
485597 | The changes for Engineering case 480208 introduced a problem where attempting to insert a long varchar or binary value into a proxy table on 64-bit platforms could have crashed the server. This problem has been fixed. |
485629 | Application Profiling did not provide trigger profiling information. This has been fixed. |
485689 | When attempting to insert a long binary column into a proxy table where the value being inserted was fetched from a local table, there was a chance the server could have hung with up to 100% CPU usage. This problem has been fixed. |
485700 | ALTER INDEX or DROP INDEX statements done while a transaction snapshot was active would always have failed with error -1062 "statement not allowed during snapshot". This has been fixed so that it does so now only if active snapshots remain after the commit that occurs at the beginning of these statements. Normally, this will only happen if there is a cursor opened "WITH HOLD" that is using a snapshot (either statement or transaction). |
485702 | The server may have crash while attempting to execute a trigger that had a syntax error. This has been fixed. |
485725 | If a plug-in was registered using a JPR file that specified a directory in a different case than another registered plug-in that shares the same classloader, a warning was issued about the JAR file being different. This has been fixed. |
485799 | When undoing a failed ALTER TABLE or LOAD TABLE statement, the server could have become deadlocked. This has now been corrected. |
485802 | The query definitions of materialized views in SQL Anywhere are restricted from using certain SQL constructs. As an example, materialized views are prohibited from making references to user defined functions. The server was erroneously rejecting the creation of materialized views that make references to a table with computed columns when the definitions of the computed columns made use of a SQL construct that was not allowed within materialized view definitions. This has been corrected so that the creation of materialized views under these circumstances will no longer result in an error. |
485811 | When the Interactive SQL utility dbisql was run as a console application with bad command line options, its return code was always zero. This has been corrected so that now it is 255, as documented:
SQL Anywhere� Server - Programming > Exit codes Software component exit codes |
485815 | The DATEADD() function did not detect overflow situations. This has been corrected. |
485816 | When using the version 10.0 provider to connect to an older database, if the application did not specify that the parameter.SADbType=SADbType.varchar (or .char), it would have defaulted to NVarChar. This would have resulted in the error 'not enough values for host variables' being returned to the application. This has been corrected so that the provider now maps NChar to Char, NVarChar to VarChar, LongNVarchar to longVarchar and NText to Text, if the server version is 9. |
485818 | The server could have become deadlocked when deleting rows from a table following the execution on an ALTER TABLE statement for a table that had foreign keys referencing that table. This has now been corrected. |
485821 | In very rare circumstances, and only on Unix platforms, queries on a given table could have become very long running. The total query cost as reported by a graphical or long text plan of such slow queries, would have been reported as a negative number. This has been fixed.
A workaround is to drop and recreate statistics on the table in question. |
485874 | Calling the system procedure sa_send_udp() have could have caused the server to crash. This has been fixed. |
485875 | On some combinations of consolidated database and platform, any UUID values retrieved using the MobiLink Java direct row API could have had bytes swapped to the local machine byte ordering. This has been fixed. UUID values retrieved using the getBytes() function are now 16 byte values with the correct byte ordering. UUID values retrieved using the function getString() are strings in the correct UUID format (eg. "12345678-1234-5678-9012-123456789012"). |
485878 | If a remote database synchronized an NCHAR column that was included in multiple publications, or if a database initialized with a multi-byte character set synchronized a CHAR column that was included in multiple publications, then dbmlsync would have incorrectly reported that a column subset mismatch existed on the column in question. This has been fixed. |
485939 | Backups of encrypted databases created by executing the BACKUP DATABASE statement with the "WITH CHECKPOINT LOG RECOVER" clause, may have contained pages that did not decrypt properly. This has been fixed.
Note, any backups of encrypted databases using this clause should be considered invalid and recreated with an updated server. |
485979 | A procedure that was used in the FROM clause of a SELECT statement, may have returned the error "Derived table '<procname>' has no name for column 2". This would have happened if the SELECT statement in the procedure referenced a table without qualifying it with the owner, and only the procedure's owner could select from the table without a qualifying owner (i.e. not the user who executed the CREATE/ALTER PROCEDURE statement). This has
been fixed. |
486050 | Logs created during the nonblocking_download_ack synchronization event were being logged with the logger source name of "ianywhere.unknown.category", instead of the remote id name of the client being synchronized as expected. This has been fixed. |
486053 | The server may have crashed if Java VMs from multiple connections attempted to call the same Java interface method for the first time. Due to the very small window where this could have occurred, it would have been exceptionally rare. This has been fixed. |
486059 | Using AES_FIPS encryption for an extended period of time (eg. calling the encrypt/decrypt functions hundreds of thousands of times) could have caused the server to report an "out of memory" condition and shut down. This could also have ocurred when running an AES_FIPS-encrypted database. This has been fixed. |
486086 | Long exception message generated by the provider could have been truncated. This problem has been fixed. |
486223 | Some HTTP intermediaries can convert non-chunked HTTP or HTTPS requests into chunked requests. The MobiLink server currently cannot accept chunked requests, and would have crashed when it received them. This has been fixed so it will now fail the synchronization with the error "unknown transfer encoding" if it receives chunked requests.
Note that this change only applies to the -x option, and not to the -xo option. |
486224 | Some HTTP intermediaries can inject a redundant User-Agent HTTP header, resulting in synchronizations failing. This is been fixed so that as long as the first User-Agent is the one the MobiLink server expects, it will allow the redundant header. |
486288 | The best plan for a query block with a DISTINCT clause, and one or more joins, may be to use semijoins instead of inner joins based on the expressions used in the select list. Inner joins can be executed as semijoins for tables, derived tables, or views whose expressions are not used in the select list. The server will now make a cost-based decision to use inner joins or semijoins during the optimization phase |
486393 | A query with an outer join could have caused the server to hang with 100% CPU usage. This has been fixed. |
486422 | The MobiLink server for Windows x64 now supports both RSA and ECC stream encryption. Note that the MobiLink server does not support FIPS-compliant RSA on Windows x64. |
486440 | The server could have crashed when attempting to recover a database with a corrupted transaction log file. This has been fixed. |
486446 | When running on a slow network, the MobiLink client dbmlsync could have reported 'Internal Error (1003)'. This problem has been corrected. |
486462 | Database corruption could have occurred when execution of a LOAD TABLE statement into a table with existing data failed and rows were subsequently inserted or updated before a database restart. This has been fixed. |
486465 | The installer for the SQL Anywhere Explorer SetupVSPackage.exe was failing to check if Visual Studio was installed before installing the integration package, leading to an exception. This has been corrected. |
486469 | The Data adapter wizard would have shown errors when generating commands. The errors were cause by exceptions when executing a command which still had an open data reader. Fixed by using new commands. |
486476 | Due to a memory leak, calling the the system procedure xp_sendmail() many times, could have caused the server to crash. The memory leak has been fixed, and xp_sendmail will now fail with the error "Insufficient memory" (return code 15), if memory does become exhusted. |
486531 | The SQL Anywhere Explorer now supports Visual Studio 2008. Registry settings for Visual Studio 2008 are now created, and the integration dll has been modified to support Visual Studio 2008. Note that assemblies built with Visual Studio 2005 can be used in Visual Studio 2008 as well. |
486539 | A synchronization could have failed with the error:
- Could not find subscription id for subscription of <ML user> to <publication>. or - SQL statement failed: (-101) Not connected to a database if all the following were true: 1) the synchronization was scheduled and the time before the next scheduled sync was more than a 2 minutes 2) for some row in the syssync table, "log_sent" was greater than "progress". (This occurs when dbmlsync sends an upload to the MobiLink server, but does not receive an ack/nack to indicate that the upload was applied to the consolidated database or not) 3) hovering was enabled This problem has now been fixed. |
486546 | The Certificate Creation utility createcert allowed users to create certificates using ECC curves that were not supported by MobiLink or SQL Anywhere servers or clients. This has been fixed. The list of supported curves has been reduced to the following seven curves: sect163k1, sect233k1, sect283k1, sect283r1, secp192r1, secp224r1 and secp256r1. |
486554 | The changes for Engineering case 485200 resulted in a bug where attempting fetch data from Micrsoft SQL Server or ASE could have failed with an "invalid object name" error. This problem has been fixed. |
486556 | When running on a slow network an UltraLite application could have failes with the error message 'Internal Error (1003)'. This problem has now been fixed. This change is similar to the fix for the MiobiLink client, Engineering case 486446. |
486561 | In some situations, if a keyset-driven cursor was used for a query that contained an IF or CASE expression in the select list, then the IF or CASE expression could have returned an incorrect answer. The answer would have been the expression evaluated for another row of the result set. This has been fixed. |
486574 | When deploying a synchronization model, statements to create triggers did not specify the owner (or schema) for the trigger, so permission problems and invalid triggers could have resulted when deploying as a different user than the table owner. This has been fixed so that the owner, or schema, is now specified in the generated SQL for creating and dropping triggers for Oracle, Microsoft SQL Server, ASE and DB2 consolidated databases. In SQL Anywhere databases, a trigger is always owned by the same owner as the table, so the problem did not occur.
A workaround is to deploy to a SQL file and manually edit the SQL. |
486579 | A MobiLink client, synchronizing via HTTP, that set the connection timeout to less than the default 240 seconds, could have been disconnected by the MobiLink server with a connection timeout error. This has been fixed. |
486656 | The execution of a LOAD TABLE statement would have caused the server to erroneously fire INSERT triggers declared on the table being loaded. This has been corrected, the server will no longer fire triggers when executing a LOAD TABLE statement. |
486744 | The server may have crashed or returned an unexpected error when attempting to execute an UPDATE statement on a table without the WAIT_FOR_COMMIT=ON clause, and that had a BEFORE UPDATE row level trigger, as well as an AFTER UPDATE row level trigger that used the OLD value of the columns. For this problem to have occurred the BEFORE UPDATE trigger must have changed the NEW value of a column that was not part of the updated columns in the UPDATE's SET clause, and the update operation must update some rows that violate referencial integrity. This has been fixed. |
486775 | Executing a remote query that must be handled in no-passthrough mode, and that involved many tables, then there was a chance the query would have caused a server crash. Such crashes would have been more likely with databases that had a smaller page size. This problem has been fixed and the server will now properly give an error when a no-passthrough mode query with too many table nodes is executed. |
486777 | In rare cases, opening a cursor on a procedure call or batch statement could have caused a server crash. This has been fixed. |
486788 | The changes for Engineering case 485499 introduced a bug which could have caused the server, under certain circumstances, to crash when creating a foreign key constraint. The problem has been fixed. |
486864 | A server running with the -b command line option (run in bulk operations mode) would have accepted more than one connection. This has been corrected. |
486877 | When generating the download stream, in very rare circumstances, it was possible for MobiLink to have incorrectly translated a string if the remote database used a multi-byte character set. It was likely that the ending byte(s) of one string would end up at the start of the next string in the same row. This problem has now been fixed. |
486889 | In rare cases, an error encountered while executing a trigger could have resulted in a server crash. This has been fixed. |
486896 | The Deployment wizard did not deploy the utility dbspawn.exe when either the Personal or Network servers were selected. This has been corrected by adding dbspawn.exe to the "server core" list of files to be deployed. |
487001 | The server could have hung in very rare timing dependent cases if it was using the -z or -zr command line options for diagnostic messages and request level logging. This has been fixed. |
487008 | The changes made for Engineering case 484553 incorrectly had the PWD value replaced with all asterisks "*" in the OutConnectionString parameter of the SQLDriverConnect() function. This has been corrected. |
487014 | Diagnostic tracing with
Scope: origin Origin: external Tracing type: statements_with_variables Condition: none would not have recorded any statements with an external origin. An incorrect string comparison was being used to determine whether a statement needed to be logged. This has been fixed. |
487141 | If an HTTP connection was refused because of licensing restrictions, in rare cases, the server could have crashed. This has been fixed. |
487142 | In some specific situations, an UPDATE statement could have failed to complete. It would continue to execute until cancelled. This has been fixed. |
487164 | The Index Consultant may have caused the server to crash when a complex query was analyzed. For example, a query with a subselect in the select list. This has been fixed. |
487166 | If a deadlock occurred in a database that had tracing with high levels of detail attached, and the tracing data was saved and viewed from Profiling mode in Sybase Central,
the primary keys for rows that had caused the deadlock would not have been reported in the Deadlocks tab. This has been fixed. This behaviour is only considered invalid if tracing data is saved in the database that is being profiled. If tracing data is saved in an external tracing database, primary key values for rows in the original database cannot be reported. |
487169 | The Listener may have displayed an error dialog shortly after startup when handling notifications. This problem was timing sensitive, subsequent errors would have gone into the log file and to the console only. This has been fixed so that errors in handling notification will no longer cause an error dialog to be displayed. A workaround is to add the -oq switch to the dblsn command line. |
487178 | The server will no longer fail assertion 102300 - "File associated with given page id is invalid or not open", when executing DROP DBSPACE if the dbspace had beed deleted. |
487247 | The server keeps track of dependencies of views on other views and tables. In databases with an extremely large number of objects, the dependency information could have become inaccurate. In order for the problem to have manifest itself, some of the dependent or referenced objects must have had object ids that were greater than 4G (2^32). This has been fixed. For existing databases, problematic views must be recompiled with an updated version of the software. If the actual number of current objects is much smaller than 4G, then the problem can be resolved by unloading and reloading the database without the need for a server software update. The reload should result in a compacting of the used object id space. |
487269 | The CE 5.0 client libraries, qaagent, dbmlsync and dblsn could crash when shutting down. This has been fixed. |
487335 | It was possible for an HTTP request to an SA DISH service to hang the server while consecutively altering services. This has been fixed. |
487339 | If an older client (version 8.0 or 9.0) synchronized against the MobiLink server in a way that a second synchronization was attempted before the first finished (the client was terminated before the server was finished), the server would have allowed the second synchronization to proceed. This has been corrected so that subsequent synchronizations will fail until the first has competed. This problem does not apply to version 10.0 clients, as their new protocol detects and handles this situation in a different manner. |
487364 | When converting a string from one character set to another, it was possible for the translated string to have been truncated in very rare situations. For the problem to have occurred, a conversion using ICU was required, which typically meant that a multibyte charset other than UTF-8 was involved, which is similar to Engineering case 484960. This problem has been fixed.
Note, this problem does not affect the database server, but does affect other components in SQL Anywhere. |
487411 | A keyset cursor is used when there is a possibility that a row could otherwise be updated multiple times. For example, a keyset cursor is needed if there are triggers, or if an UPDATE modifies columns in an index used by the UPDATE's plan. In some situations, an UPDATE statement could have used a keyset cursor in cases where it was not necessary, thus leading to slower performance. This has been fixed. |
487443 | It was possible for the database administration utilities, or other applications which made use of the DBTools interface, to have crashed when attempting to access a file that was in use. This has been fixed. |
487496 | The selectivity estimates used by the optimizer could have had reduced quality in some cases. In particular, if a database was used on two platforms with different endianness, the selectivity estimates could have been wrong immediately after starting on the other platform. The selectivity estimates would have gradually improved with use on the new platform, or until a CREATE STATISTICS command was used to recreate the estimates. This has been fixed. |
487505 | On Windows CE, starting a second server while one is already running should display the existing server, unless the existing server is in quiet mode (started with the command line option -qi or -qw). After pressing the Hide button on a server, starting a second server did not display the existing server. This has been fixed so that the first server is now displayed when a second server is started, even if the Hide button is pressed. |
487507 | If a 32-bit server was used on a system that had more than 4GB of memory available, then dynamic cache sizing could have selected cache sizes that were inappropriately small. Inappropriately small cache selected in this way would have affected query performance such that they could be very slow, worse even then if that cache size had been set at startup time. This problem has been fixed.
Note, this problem can be avoided by using the -ca 0 engine switch to disable dynamic cache sizing. |
487516 | If a database had been initialized with the -b option (blank padding of strings for comparisons), then the log scanning would not have read the delete_old_logs database option properly. The log scanning code would always have used the default value of 'Off', regardless of the value set in the database. This problem has now been fixed. |
487520 | When the server was run on Windows CE devices with the -qw or -qi command line options, a menu bar containing the menu "Menu" would have been displayed, but no server window. This has been fixed so that no part of the server is now visible if the -qw or -qi options are used. |
487581 | Initializing a scheduled transmission rule containing an "EVERY" clause and a "START DATE" clause set to a date that had already passed, in the QAnywhere server or
in the QAnywhere Ultralight Agent, would have caused the rule to be immediately and repeatedly executed many times on startup. This has been fixed. |
487673 | The changes for Engineering case 471948 introduced a problem such that when the server was very close to the connection limit, either the limit set by licensing or the hard-coded limit in the Personal Server, new HTTP connections may have been rejected incorrectly. This has been fixed. |
487686 | If the MobiLink client dbmlsync did not receive an ack/nack from the MobiLink server after sending an upload, it has no way of knowing whether the upload was successfully applied. The best way to resolve this situation is to perform an 'extra exchange' with the server before the next synchronization to request the status of the upload. Previously, this extra exchange was performed on the first synchronization after dbmlsync started up. This has been changed so that it will now perform the exchange any time there has been an un-acknowledged upload. |
487687 | If the MobiLink client dbmlsync failed during the brief time between when an upload was completed and when state information in the database was updated, then the server would not have been queried at the start of the next sync to determine if the upload was successfully applied to the consolidated database. This problem would have occurred extremely rarely, and in most cases would have been harmless. The result was simply that the next synchronization took a little longer because an upload was built and uploaded, then rejected by the server, and a new correct upload was built and uploaded. However if the failure occurred on a subscription's first synchronization, it could have resulted in operations being uploaded to the server twice, which would usually have caused the synchronization to fail with server side errors. This has been fixed so that the syssync table is updated prior to the end of the upload. As a result an extra exchange may occur when the end of the upload was not sent, but the client should never fail to do an extra exchange when it is required. |
487688 | It was possible for the MobiLink client dbmlsync to upload operations for a subscription that did not belong to that subscription, when all of the following were true:
1) A subscription, S1, was created to some publication P1, and a second subscription, S2, was also created for P1 (either by dropping S1 and recreating it or by creating a new subscription to P1 with a different MobiLink User.) 2) During the first synchronization of S2, dbmlsync successfully sent an upload but did not receive an ack/nack from the MobiLink server. 3) The upload was not successfully applied to the consolidated database by the server. When all these conditions were TRUE it was possible for operations that occurred before subscription S2 was created to be uploaded when subscription S2 was synchronized. This behavior has been corrected. Now, only operations that occurred after subscription S2 was created will now be uploaded when subscription S2 is synchronized. |
487689 | If the MobiLink client dbmlsync did not receive an ack/nack from the server after sending an upload it has no way of knowing whether the upload was successfully applied to the server. The best way to resolve this situation is to perform an 'extra exchange' with the server before the next synchronization to request the status of the upload, but dbmlsync did not perform this extra exchange after an unacknowledged upload that occurred during the first synchronization of a subscription. This would not have resulted in any data loss, but might have increased the time required for the next synchronization as it might cause two uploads to be built and sent to the MobiLink server. This has been corrected so that an extra exchange is now performed in this case to eliminate the possibility of sending two uploads. |
487690 | Normally, the MobiLink client dbmlsync ignores the server side state on the first synchronization of a subscription, although there was a problem where dbmlsync might have respected the server side state on a first synchronization, if an exchange was performed with the server to confirm the progress offsets of other subscriptions that had previously synchronized. As a result of this, data could have been lost and synchronizations could have failed with the error "Progress offset mismatch, resending upload from consolidated database's progress offset" being reported twice. This has been fixed. |
487721 | When IMAP, POP3 or LDAP authentication was enabled for a synchronization model, the generated authenticate_user event would have used the incorrect case for the class name, and the generated MobiLink server command line would not have enabled Java scripts with mlsupport.jar in the class path. Both problems have been fixed. The workaround is to manually fix the script and command line. |
487783 | If a database mirroring system was using a mode other than "synchronous", loss of quorum did not force the primary server to restart and wait for one of the other two servers to become available. This has been fixed. |
487847 | In very rare cases, execution of a DROP EVENT statement to drop a scheduled event could have crashed the server. This has been fixed. |
487869 | When using Text Completion, the list would not have contained any database objects if opened immediately after an owner name which was followed by a period, for example:
SELECT * FROM myUser. Now, database objects are listed correctly. This problem only affected those owners which did not own any stored procedures. |
487950 | The changes for Engineering case 484160 introduced a problem such that running databases without the SYSEXTERNLOGINS system table (version 5.5.05 or earlier) could have lead to a server crash when dropping users. This has been corrected. |
487972 | When running the Extraction utility (dbxtract) on a large database, an equally large database would have been created, even though the amount of extracted data may have been significantly less. In cases such as this, the majority of pages in the new database would have been free pages. This has been corrected. |
488094 | A failing DROP TABLE statement could have caused table pages to be leaked. This could only have happened if pages had been allocated to the table's arenas between the last checkpoint and the failed DROP TABLE. Database validation would not have detected these leaked pages. This has been fixed.
A workaround for this problem is to always issue a checkpoint before attempting a DROP TABLE that has a chance of failing. |
488097 | The changes for Engineering case 485200, that forced the server to use the local setting of the Quoted_identifier option when connecting to an ASE remote server, was incomplete. Attemptiong to create a proxy table to an ASE remote server would have failed if the location string included the catalog name. This problem has now been fixed. |
488115 | If a Java class was loaded and initialized by the forName() method and an exception was thrown during the class initialization, then the caller would have seen the incorrect exception java.lang.NoClassDefFoundError for class java/lang/VMAlreadyThrown. This has been fixed. |
488116 | In very rare circumstances, the server may have crashed, or returned unexpected JVM exceptions like "IllegalAccessException", if multiple connection JVMs attempted to load the same class simultaneously. This has been fixed. |
488129 | A numeric value longer than 80 digits may have been silently truncated to 80 characters when implicitly converted to a string value. One instance where this could have occurred was from within a column DEFAULT specification, e.g.:
create table test (col1 numeric(108,38) default 1111111111222222222233333333334444444444555555555566666666667777777777.12345678901234567890123456789012345678) The value stored in the catalog (the SYSTABCOL "default" column) would have been truncated to: 1111111111222222222233333333334444444444555555555566666666667777777777.12345678 This has been fixed. |
488218 | The Deployment Wizard was failing to create the following two registry entries:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\SQLANY 10.0 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\SQLANY 10.0 Admin This has been corrected. |
488265 | SQL Anywhere does not permit direct manipulation of catalog tables. Any attempt to do so should result in a permission denied error. Under certain circumstances though, an attempt to perform one of these prohibited operations could have caused the server to behave erratically or crash. The server will now correctly report a permission denied error. |
488271 | When the MobiLink server displayed warnings about the amount of memory that was swapped to disk, the number reported for "concurrent pages" was the maximum number of concurrent pages for current instance of the server. This created the impression that the page usage always increased. This has been corrected so that this number is now the number of concurrent pages in use at the time of the warning. |
488272 | When the MobiLink server can not store all the data needed for all the synchronizations in the cache memory (-cm flag), it must swap some to a temporary file. This data could have been written to the file more often than needed. This has now been fixed. |
488274 | Applications attempting to make a TLS connection may have crashed. This has been fixed. |
488275 | It was possible for downloaded rows that contained long varchar or long binary columns to have been corrupted. Symptoms ranged from garbage characters read from a row to crashing the database. The problems were caused by an uninitialized variable, so the operations that can trigger the bug were varied. This has now been corrected. |
488324 | When deployed to a Windows Mobile 6 device with the language set to Japanese, it was not possible to shut down the server once it was started. The menu was not there to shut down, or get version info. This would have happened on both Standard and Professional devices, and in the emulators for both types of device. This has now been fixed. |
488350 | When using the SET OPTION statement to change value of a database option, the absence of any value signifies a request to delete the option setting altogether. On the other hand, specifying the empty string ('') is considered a request to set the option value to be the empty string. However, the empty string was being treated the same way as the absence of the option value. Note that the problem is seen only when the SET OPTION statement is executed through dbisqlc, or another Embedded SQL application that makes use of the corresponding DBLIB API call. Sending the SET OPTION statement directly to the server for execution does not exhibit the erroneous behaviour. This has been fixed so that the server will no longer treat the empty string as a request to delete the option setting. |
488404 | The value returned for the Connection and Database property QueryCachePages would have been incorrect. This has now been corrected. |
488406 | In a very rare situation, attempting to execute a CREATE DATABASE statement could have resulted in a server crash. This has been fixed. |
488410 | A server running with AWE enabled may have performed poorly, or failed an out of memory assertion. This has been fixed. |
488514 | When running on Windows Server 2008 (which has not yet been released by Microsoft), the server could have crashed while performing an integrated login when the INTEGRATED_SERVER_NAME was blank. This has been corrected |
488520 | On Unix systems, 64-bit ODBC applications required LONG_IS_64BITS to be defined at compilation time. Failure to do this would most likely have resulted in a crash in the application. This has been fixed |
488666 | In very rare, timing-related circumstances, the server could have appeared to hang while executing a backup. The backup could have been a server-side backup or a client-side backup. This has been fixed. |
488676 | The HTTP option 'buffer_size' was limited to 64000 (64KB). On slow networks and/or large uploads or downloads, the overhead due to HTTP could have been significant. The 'buffer_size' option is now limited to 1000000000 (1GB). When using slow networks to perform HTTP or HTTPS synchronizations, tests could be done with larger values for 'buffer_size' to see if synchronization times improve.
For versions 11.0.1 and up, this change only applies to the -xo option of the MobiLink server. The -x option already allows larger values. |
488680 | The server could have crashed if it was run with TCP/IP disabled, and diagnostic tracing was attempted. This has been fixed. |
488685 | Database recovery could have failed if the transaction log being recovered contained statements which caused checkpoints and recovery needed to be restarted. This has been fixed. |
488699 | Table expressions with brackets may have caused syntax errors. For example,
Select * from (table1) left join table2 This was corrected by adjusting the syntax to handle more general bracketing. |
488754 | If a variable of type nchar, nvarchar or long nvarchar was declared, and then used in a query involving a remote table, then it was likely that the server would have failed with the error "not enough host variables". A simple example of a query that would have given this error is:
SELECT * FROM remote_t WHERE c1 = @nvar In this example, if the table remote_t was a proxy table, and the variable @nvar was of type nchar, nvarchar or long nvarchar, then the server would have failed to execute the query with the "not enough host variables" error. This problem has now been fixed. |
488765 | Starting the utility database could have caused the server to fail assertion 200500. This has been fixed. |
488844 | Unique indexes could have unexpectedly grown in size over time. As well, the server could have crashed while performing index maintenance. The server keeps deleted unique index entries until commit or rollback, in order to avoid having to do key range locking. In some cases the deleted entries were not being reclaimed properly. This has now been corrected. |
488857 | If an UPDATE statement contained a SET clause that assigned a value to a variable, then the variable could have been assigned a value that had a length or precision/scale that exceeded the declared domain of the variable. This would have caused subsequent operations with the variable to use this longer value. This problem only affected variables of type NUMERIC/DECIMAL or string types. This problem has now been fixed.
For example: create variable @text varchar(3); update T set @text = 'long long string', salary = salary Previously, the update statement would pass and the value of @text was set to 'long long string'. Now, the statement fails with an error (provided the string_rtruncation option has its default value): Right truncation of string data [-638] ['22001'] |
488859 | The Interactive SQL utility's Index Consultant could have failed to recommend indexes on a query containing the word "GO" in an identifier (For example, SELECT * FROM CATEGORY), complaining that it could only analyze one query at a time. This has been fixed. |
488862 | The MobiLink client could have reported internal error 1003 during , and would have most likely occurred when the increment size was quite large, or if the server was slow to apply the upload. This has now been corrected. |
488941 | The OPEN operation for a cursor that used a query that referenced proxy tables may have caused the server to crash. This would only have happened if the final cursour type was KEYSET. This has been fixed. |
488967 | An existing stored procedure or user-defined function can now be recompiled using
ALTER PROCEDURE owner.procname RECOMPILE or ALTER FUNCTION owner.funcname RECOMPILE The process of recompiling causes the procedure or function definition stored in the catalog to be re-parsed and verified that it is syntactically correct. For procedures that generate a result set but do not provide a RESULT clause, the server will also attempt to determine the result set characteristics for the procedure and store that information in the catalog. This can be useful if a table referenced by the procedure has been altered to add, remove or rename columns since the procedure was created. The preserved source for a procedure or function is not changed by recompiling. Procedures and functions whose definition are hidden via ALTER PROCEDURE owner.procname SET HIDDEN can be recompiled, and their definitions will remain hidden. |
488993 | A very specific form of database corruption could in rare instances have been undetected by the database validation tools. This has been fixed. |
489072 | The server may have crashed while executing an image backup if all the files of the database were no longer accessible. The most likely scenerio for this problem to occur when the database was started in read-only mode on a network share, and the network connection was lost. This has been fixed and the BACKUP statement will now fail with an error. |
489098 | If the Log Translation utility (dbtran) detected an error during execution, the SQL file it had generated up to that point was normally deleteed to ensure that a partial file was not used by accident. The -k command line option has now been added to prevent the SQL file from being erased if an error is detected. This may be useful when attempting to salvage transactions from a damaged log. |
489100 | The MobiLink server must hold all table data needed for currently active synchronizations. When the total concurrent amount of table data exceeded the server's cache memory (-cm option) by more than 4200MB the server could have failed. This has been fixed. |
489152 | If in error, the operating system date was set to a date in the far future, some servers and tools that collected feature logging information in sadiags.xml may have crashed. This has been fixed. |
489167 | If an application used version 9 or earlier client software, and connected to a version 10.0.1 server, the server could have crashed or an incorrect character set could have been used. Also, if the application used the CHARSET connection parameter, the connection would have failed. This has been fixed. |
489179 | Load table could have failed when loading data into a table that contained a self-referencing foreign key. As of Engineering Case 395054 the wait_for_commit option was set to 'off' for LOAD TABLE so that errors could be detected immediately. Now wait_for_commit for LOAD TABLE is set to 'on' if the table has a self-referencing foreign key, otherwise it is sett 'off' as before. |
489236 | If a database is auto-started by executing DBVALID, the database will now be started in read-only mode. This was done to avoid making changes to the database in case it was intended to be used as part of a backup/recovery plan. Once a backup copy of a database has been started in read-write mode, transaction logs from the original database cannot be applied to it. If DBVALID connects to a database that is already running and the database was not started in read-only mode, DBVALID will now display a warning: "WARNING: database being validated was not started read-only" If a database requires recovery, it will fail to start in read-only mode. Note that most databases created by DBBACKUP will be marked as needing recovery. If a database to be validated requires recovery, and the user wishes to force it to be started read-write, specifying a valid value for the DBS connection parameter will allow the database to be started and recovery performed.
For example: dbvalid -c "UID=DBA;PWD=sql;DBF=mycopy.db;DBS=-n mycopy" dbvalid -c "UID=DBA;PWD=sql;DBF=mycopy.db;DBS=-dh" would both allow dbvalid to execute if mycopy.db required recovery. The database could also be pre-started before running DBVALID. |
489238 | When the Data Source utility dbdsn was used to create an ODBC data source for the iAnywhere Solutions Oracle ODBC Driver (using the -or switch) on UNIX, the driver name in the data source would have been incorrect (libdboraodbc10.so rather than libdboraodbc10_r.so). This has now been corrected. |
489239 | The Apache redirector did not support the Mobilink client's HTTP persistent connection. Clients that attempted to use persistaent connections would have been switched to non-persistent HTTP after the first request. This has been corrected. |
489245 | The Secure Stream Server Certificate page in the Deploy Synchronization Model Wizard mentions that the generated batch file will prompt for the password, but the generated batch file does not do this. This has been fixed. |
489258 | The HTTP synchronization parameter buffer_size was not always respected, particularly when using zlib compression, which could have caused upload performancto degrade for large uploads. This has been fixed. Also the default values for buffer_size have been increased as follows:
Palm - 4K CE - 16K all other platforms - 64K and the maximum value for buffer_size has been increased from 64K to 1G. |
489266 | The MobiLink server could have silently failed a ping request from a 9.0.2 or earlier MobiLink client if the client's command line contained any options of upload_only and/or download_only. This problem has now been fixed. |
489337 | A connection attempting to execute an UNLOAD TABLE statement on more than one table concurrently could have lead to a server deadlock. This could also have happened when executing the Unload Database utility (dbunload). This has beed fixed. |
489427 | When deploying to an existing remote database, the generated batch file needs to provide a password, but it did not prompt for one. The work around is to edit the generated batch file. This has been fixed so that it will now prompt for a password when using an existing remote database. |
489435 | Attempting to execute a "MESSAGE ... TO CLIENT" statement using the Interactive SQL utility (dbisql) on Unix platforms, would very likely have caused it to hang. This problem has now been fixed. |
489436 | If a statement contained a large number of query expressions (UNION, INTERSECT, EXCEPT), or other complex features such as subqueries, and, further, the statement had a large number of scalar expressions, then the statement could have taken longer to process than earlier releases. This has been fixed. |
489443 | When using Java in the database and attempting to have the server execute a non-static Java method, a strange NullPointerException method would have been returned. A proper IllegalAccessException method, indicating that the method being executed is not static, will now be returned. |
489444 | If an application that used Java in the database attempted to call a static Java method in a class that had constructors, but no constructor with 0 arguments, then the call would have failed with an InstantiationException. This problem has now been fixed. |
489538 | When examining the properties of a foreign key that was created as CHECK ON COMMIT, the properties would always have been reported that CHECK ON COMMIT was off. This has been fixed. |
489542 | In very rare situations, the server could have hung while trying to drop a Remote Data Access connection. This problem has now been fixed. |
489597 | The MobiLink server would have reported an incorrect error if the server was running in blocking ack mode, but an event for non blocking ack (-nba+) mode has been defined. The error reported was: "There is no download data script defined for table:.. ". This has been corrected. |
489598 | 'Assertion 100904: Failed to redo a database operation' is generated when the server fails to recover the database based on information stored in the transaction log. This assertion never included the actual reason for the recovery failure. The actual error message is now included in the assertion message. In many cases the cause of the recovery failure was failure to find a data file that was used in a LOAD TABLE statement. In cases where the data file had been deleted recovery could not continue. The fact that the file is missing is now incorporated into the assertion message. |
489600 | In rare circumstances, after a backed-up copy of a database was started, or after a database had undergone recovery, the Validation utility (dbvalid) could have caused the server to fail assert 101412 - "Page number on page does not match page requested". Even though the server failed the assertion, the database file was not corrupt, and the database should have continued to operate normally. This has been fixed. |
489605 | In case-sensitive databases, dbspace names were also case-sensitive. DDL statements referring to the dbspace names were required to specify the dbspace names exactly as they appeared in the catalog. This has been fixed.
Note, it is possible that a database could contain two dbspaces with the same name in different cases. This change would prevent these dbspaces from being differentiated. This would be a problem when migrating to versions 10 or later as well. |
489694 | Support has now been added for Windows Mobile 5 SmartPhone Edition and Windows Mobile 6 Standard edition. All SQL Anywhere Windows CE functionality is supported on the SmartPhone, except for the following:
- the SharedMemory communication protocol is not supported. The TCP/IP communication protocol is used even if no protocol is specified, and a server name must always be specified when making a connection, or the connection will fail. - the preferences dialog on the database server and MobiLink client is not supported. The preferences dialog normally appears if no command line options are used. - the ODBC and OLEDB connection prompt dialog is not supported. This dialog normally may appear depending on the DriverCompletion parameter to SQLDriverConnect, or the DBPROP_INIT_PROMPT OLEDB property. - the Unload / Reload support is not available. This includes dbunload.exe, dbrunsql.exe and the unload support server. |
489741 | If an application using the iAS Oracle driver issued a "call procedure_name" statement (without open and close parentheses) through the ODBC functions SQLPrepare or SQLExecDirect, and the procedure "procedure_name" returned a result set, the driver could have crashed when the "Procedure returns results" check-box was checked on Windows, or the "ProcResults" entry was set to 'yes' on UNIX. This has now been fixed. |
489744 | VALIDATE TABLE did not correctly handle tables with more than 256 rows on a table page. The problem has been fixed.
VALIDATE TABLE has also been enhanced to allow validation to proceed on very large tables or, more precisely, on tables whose last page number was very large. Prior to this change, error 08W13 (-86) "Not enough memory to start" could have been reported. Note that if the table is actually very large relative to the cache, validation may take a very long time. |
489871 | There were several problems possible when the -m server command line option was used to truncate database transaction log files at checkpoint. Some of these problems were, but were not limited to, assertions indicating that the log could not be deleted or restarted while a virus scanner or disk defragmenter was accessing the log file; and occasionally having zero byte transaction log file remaining after a system failure. These problems should no longer occur as the transaction log file is no longer deleted and recreated at checkpoint time when the -m option is being used. Instead the file gets truncated to one page in size and then continues to be used. A side effect of this change is that there will be a one page log file remaining after a successful shutdown of a database, instead of no log file. |
489889 | When executing an UPDATE on a remote table with a cursor range, the cursor range would have been ignored, and all rows would have instead been updated.
For example, executing the following: UPDATE TOP 2 proxy_t SET proxy_t.data = 'Hello' ORDER BY proxy_t.pkey ASC; would have updated all rows in the table. This problem has now been fixed. |
489903 | Some HTTP intermediaries add more information to the HTTP User-Agent header. This was causing failed synchronizations, and has now been fixed.
Note that any intermediary that removes the information put into the User-Agent by the MobiLink client will cause synchronizations to fail. |
489917 | Certain specific forms of statements could have caused the server to crash, or to report assertion failures 101504, 101514, or 101515. This has been fixed. |
490036 | When making continuous ODBC connections and disconnections using SQLConnect and SQLDisconnect, a memory leak would have occurred in the application. The process heap would have continued to grow as the application looped. To reproduce the memory leak, the application must have allocated and freed environment and connection handles around the SQLConnect and SQLDisconnect calls, to ensure that the SQL Anywhere ODBC driver was loaded and unloaded from memory. This problem has been fixed. |
490092 | In rare cases, attempting to create a procedure or event containing the BACKUP DATABASE statement would have caused a server crash. The crash was due to an unparsing error, which has now been corrected. |
490180 | If a query used certain types of expressions that used strings, and a parallel execution strategy was selected by the query optimizer, then the server could have crashed under certain conditions. This has been fixed.
The problematic expressions include the following: COMPRESS CONNECTION_EXTENDED_PROPERTY CSCONVERT DATEFORMAT DB_EXTENDED_PROPERTY DB_ID DECOMPRESS DECRYPT ENCRYPT EVENT_CONDITION EVENT_PARAMETER EXTENDED_PROPERTY GET_IDENTITY HASH HEXTOINT HTTP_HEADER HTTP_VARIABLE ISDATE ISNUMERIC LIKE LOCATE NEXT_HTTP_HEADER NEXT_HTTP_VARIABLE NEXT_SOAP_HEADER PROPERTY_NAME PROPERTY_NUMBER REPLACE REVERSE SOAP_HEADER SORTKEY TO_CHAR TO_NCHAR UNICODE USER_ID VAREXISTS WRITE_CLIENT_FILE |
490192 | The embedded SQL OPEN statement did not allow any of the snapshot isolation levels to be specified in the ISOLATION LEVEL clause. This has been corrected. The workaround is to use the isolation_level option. |
490209 | An error would have been reported when some valid options were entered in the dbmlsync option dialog on CE. The options affected included -q -Q -qc -o -ot -os and -wc. This has been fixed. |
490210 | When viewing the properties of a table in the UltraLite plug-in for Sybase Central, it was possible to change the table抯 synchronization type of Normal, Always or Never. Doing this would have created a new table with a different suffix (either empty, _nosync or _allsync), however the original table would not have been dropped. This has been fixed. |
490227 | The SQL Preprocessor (sqlpp) could have generated incorrect code for SET OPTION statements. Correct code was generated for single SET OPTION statements, but incorrect code was generated if the SET OPTION was contained within a batch, procedure definition, etc. This has been fixed. |
490229 | An application using the iAS ODBC driver for Oracle may have crashed if a SQL statement caused an error on the Oracle database server or the OCI library, and if the error message returned from the Oracle server or the OCI library was greater than 466 bytes in length. This problem is now fixed. |
490303 | The server allows for objects, such as views, to be disabled. When a view is disabled, its definition is maintained in the database in an uncompiled state, and the view is not available to be referenced by queries. Once disabled, a view needs to be explicitly enabled before it becomes usable again. The server now allows users to grant permissions on disabled objects. Any granted permissions are retained in the database and become effective once the object is enabled. |
490312 | Attempting to unload a database using the Sybase Central Unload wizard, that was not currently connected to, into an XML or SQL file would have failed with a null pointer exception. This has been fixed. |
490412 | In very rare, timing-related circumstances, the server could have become extremely slow when processing Java requests in the database, or disconnects from connections with attached Java VMs. This may have happened if a large number of connections were executing Java functions or if connections with attached Java VMs received a cancel. This has now been fixed. |
490471 | When connected to two UltraLite databases and attempting to unload the first into the second, when the Finish was clicked on the page that asked for the destination database, the wizard would not have noticed the change in the selected destination database on that page and then tried to load into the default destination database, which in this case was the same database as the source database. This has been fixed so that the wizard now correctly records the selection, and/or correctly pops up a dialog letting the user know that the source database is the same as the destination database. |
490481 | When attempting to shut down a MobiLink server using mlstop, as well as pressing 'q' on UNIX or clicking on the 'Shut down' button on Windows simultaneously, then the MobiLink server could have crashed. This problem was due to a race condition, which has now been corrected. |
490504 | If a Hash Group By algorithm did not have enough memory to operate, and it was converted to a low-memory execution strategy, it was possible for grouped rows to be returned even though they did not match the HAVING clause specified in the statement. This has been fixed. |
490564 | A recordset update may have failed when one of more column values were null. The OLEDB provider failed to correctly identify the primary key columns in a table, and this resulted in an UPDATE statement containing a WHERE clause that was overly complex. This problem has now been fixed. |
490590 | Synchronizations using TLS, HTTP, or compression could have failed. Also, mlfiletransfer, dblsn, and all components connecting to the MobiLink server could have failed. The failure manifestation was highly data-dependent, but the most likely error was a protocol error. Synchronizations from older (ie. versions 8 & 9) clients were not affected by this problem. In the extremely unlikely event that the lost bytes go unnoticed by the other end of the network connection, or internally in MobiLink server, then there might be lost data. For example, in a row operation, a sequence of bytes in the middle of a VARCHAR column value may have been removed. This has been fixed. |
490594 | In a low memory situation, the Hash Broup By algorithm could have failed to compute the value of composite aggregates (eg AVG )for some groups. The value of the composite aggregate was incorrectly set to NULL. This has been fixed. |
490798 | In a TOP n START AT m clause, the values of n and m were previously restricted to being constants or variables. They are now allowed to be host variable references. For example:
select top ? table_name from SYS.SYSTAB order by table_id |
490862 | A QAnywhere .NET application could have crashed with a memory access vio;ation when terminating. This was due to a race condition, which has been fixed. |
490909 | If a cursor for a statement containing ORDER BY was opened with the option Ansi_update_constraints set to a value other than 'off', then the statement could have incorrectly been opened as READ ONLY, even if cursor flags requesting an updatable cursor were specified. This has been fixed. |
490930 | Under very rare circumstance, and likely with heavy concurrency, the server could have crashed. A race condition in the row locking code has been corrected. |
491010 | The database option database_authentication defined in saopts.sql, or authenticate.sql, could have silently failed to have been set during a create or upgrade of a database. Statement in the scripts used during a create or update of a database were ignored if either the 'go' terminator was not lowercase, or an end of file was reached with no 'go' following the statement. This has been fixed. |
491015 | A server with AWE enabled (ie -cw) could have crashed when running a database containing encrypted tables. This has been corrected. |
491104 | Any modifications to the client message store properties, after the clients first synchronization, would not have been propagated to the server message store as expected.
This had been fixed. |
491108 | The ALTER and DROP TABLE statements can cause checkpoints to happen under certain circumstance. If these statements were executed on tables, where the table data had not changed since the last checkpoint, the server did a checkpoint anyway. These checkpoints caused the server to do unnecessary serialized work, and could have caused inefficiencies. The problem was most likely to be observed when large amounts of schema changes were being carried out, e.g., during a database schema reload. This has been changed so that the server will no longer cause an unnecessary checkpoint to occur. |
491111 | Scrolling the horizontal scrollbar to the right and then refreshing the list did not update the column headers. This has been fixed. |
491121 | When run on Windows systems, the server's "about" box would not have opened when selecting "About SQL Anywhere..." after right clicking on the system tray icon. This has now been fixed. |
491180 | On Windows CE devices, in rare cases it was possible for a database stored on a flash storage memory to not recover after the device shutdown abnormally. Flash storage memory includes flash memory cards and the standard storage memory on Windows Mobile 5 and 6 devices. This has been fixed. |
491267 | The server could have crashed when there were many short transactions on a busy server. This was more likely to have occurred when running on Unix system and multiprocessor machines. It was not likely to have occurred when runnig on a single processor Windows machine. A race condition has been corrected. |
491315 | Version 10.0.0 of SQL Anywhere added support for the OPTION clause in the SELECT statement. The OPTION clause has now been extended to the INSERT, UPDATE, DELETE, SELECT, UNION, EXCEPT, and INTERSECT statements. The clause allows users to override the settings for the following connection level options at the statement level:
- isolation_level option [compatibility] - max_query_tasks option [database] - optimization_goal option [database] - optimization_level option [database] - optimization_workload option [database] The server will now raise an "invalid option setting" error in a predictable fashion if one of the unsupported options is used in the clause. There was a possibility of the server leaking a small amount of memory that has also been corrected. |
491380 | If a statement, other than SELECT, INSERT, UPDATE, or DELETE, used a subselect expression that returned a NUMERIC or DECIMAL data type, then the subsequent operations using the subselect value could have inappropriately truncated the numeric result. This has been fixed.
For example, the following sequence could have incorrectly return 104.0 instead of 104.6. create variable @vnum numeric(20,4) set @vnum = ( select max(103.5) ) + 1 |
491388 | Updating or deleting from a large table could have caused index corruption. For this problem to have occurred, a large number of rows (consecutive in index order) needed to be updated or deleted. This has been fixed. |
491399 | When the 10.0 version of dbunload was used to unload a pre-10.0 database, the "unload support engine" (dbunlspt.exe) was spawned with a cache size equal to 40% of physical memory. For most databases, this is unnecessarily large. This has been changed so that
dbunlspt.exe will now start with the same default cache size as the server, and grow no larger than 40% of physical memory. |
491400 | The marquee in the overview panel would have flashed excessively when connected to a MobiLink server. This has been fixed. A workaround is to drag out the marquee to a new region, or to pause the auto scrolling. |
491414 | The Index Consultant wizard was not working correctly with the ENTER key. The Default button was not properly set, and focus was not properly set on some pages of the wizard.
This has been fixed. |
491787 | If a server was running in a high availability mirroring system and a client connection was cancelled or dropped, the server could have crashed. This has been fixed. |
491885 | If a value-sensitive cursor was opened with the 'WITH HOLD' clause, and it referenced a table that was affected by a TRUNCATE statement, then the server could have reported assertion failures when the cursor was used after the truncate. This problem also occurred if the cursor referenced a temporary table declared with the 'ON COMMIT DELETE ROWS' clause and if the cursor was used after a commit. Assertions that could be reported in this situation include the following, although this list is not exhaustive:
201417 "Invalid count or free space offset detected on a table page" 101412 "Page number on page does not match page requested" Note that a value-sensitive cursor can be selected either explicitly, by cursor flags (ODBC keyset-driven, ESQL/SP scroll), or implicitly if the cursor type is changed by the query optimizer (for example, if a sort is used for an updatable cursor). This problem has been fixed. In engines with the fix for this problem, the affected cursor will return an error if it is used after the TRUNCATE or COMMIT. The error returned is: CURSOR_INVALID_STATE 24000 -853 "Cursor not in a valid state" |
491909 | The database option Scale was being used for the default scale for a specification such as NUMERIC(10). This has been corrected so that the scale used to supply the value is now 0. Additionally, supplying a numeric scale larger than the precision was not diagnosed. This has been corrected as well |
491910 | In rare cases, concurrent execution of DML and DDL statements could have crashed the server. This has now been fixed. |
492018 | If a service that could not interact with the desktop failed to start, the error message describing the cause of the failure would not have been logged to the Event Log. This has been fixed. |
492031 | In order to drop a table from the database, it must first be removed from all publications. Failing to remove the table from any publications prior to attempting to drop it would have resulted in an error. However, the UltaLite database would have been left in a corrupt state after the error was returned, as the operation was not fully rolled back. This has now been fixed. |
492148 | If the Connection.synchronize() function failed with an exception, the message in the exception did not contain any relevant details. For example, the text for a SQLE_PRIMARY_KEY_NOT_UNIQUE( -193) error did not include the table name ("Primary key for table '-n/a-' is not unique."). This has now been corrected. |
492188 | In rare circumstances, the server could have crash when attempting the execute an external Java procedure. This has now been fixed. |
492197 | A client which sent malformed communications protocol to the MobiLink server, could have casused the server to crash. This has been fixed. |
492227 | The server may have crashed if an ALTER TABLE statement attempted to rename a column, and there already existed a foreign key with referential action for this table. This has been fixed. |
492302 | A query that involved more than one "Remote Procedure Call" in the FROM clause, could have caused the server to crash.
An example of such a query is: SELECT col1 from remote_procedure_1() where col2 = (select c1 from remote_procedure 2()) This problem has now been fixed. |
492332 | Materialized view maintenance could result in assertions and server crashes if there were other active connections (including internal connections). This has now been fixed. |
492344 | An erroneous conversion error could have been detected when an IF expression involved an aggregate. For example: "IF count(n) > 50 THEN 'good' ELSE 'bad' ENDIF" This has been corrected. |
492346 | When using Java in the database, a method that called System.out.println with a very long string would very likely have cause the client application to hang. This problem has now been fixed. |
492347 | In certain conditions, executing statements with the ARGN() fuction could have caused the server to crash. This has been fixed. |
492348 | If an application had more than one CallableStatement open on the same connection, then there was a chance that closing the CallableStatements would have caused a hang in the application. It should be noted that the problem does not exist with Statement and PreparedStatement objects. This problem has now been fixed. |
492353 | In rare cases, the server could have crashed on shutdown if the cache priming page collection was enabled. Page collection is enabled by default, or if -cc or -cc+ were provided on the command line. This has now been fixed. The workaround is to use -cc- to disable cache priming page collection. |
492356 | If the procedure debugger was used to set a breakpoint in a stored procedure and then many connections called that procedure and hit the breakpoint, the server could have hung. This has been fixed. |
492387 | The install would have failed on Unix systems which contained a version of coreutils 6.9 or newer (such as Ubuntu Linux 8.04). The failures would likely have occurred while checking that the target system meets the minimum requirements for SQL Anywhere, or while verifying the amount of free disk space available. The "setup" install script can be modified to work around this issue as follows:
1. Find all lines containing the "cut" command that uses the "-f" argument 2. For all such lines if a comma immediately follows the "-f", remove this comma For example, the line: OS_REL_1=`echo $OS_REL | cut -d. -f,1` should become: OS_REL_1=`echo $OS_REL | cut -d. -f1` |
492433 | Errors logged to the Windows error log sometimes may have had "MobiLink Client" incorrectly spelled as "MobiLin Client". This has now been corrected. |
492533 | In very rare, timing-related circumstances, calling a Java procedure, or making a request than references a remote JDBC clase server, may have failed with the error "No suitable driver", if a cancel had been received. When this happened, all JVM's, or the database, would have had to have been restarted to resolve the problem. This has been fixed. |
492540 | If the last transaction log page received by a server acting as database mirror was completely filled, and the primary server was then shut down, the mirror could have failed to start. This has been fixed. |
492667 | If a Windows application called the function SQLColAttribute() with SQL_DESC_OCTET_LENGTH when using the iAS ODBC driver for Oracle, it could have been returned the transfer octet length in characters, rather than in bytes. Due to this problem, the application could have incorrectly truncated data. This problem has now been fixed.
Note, this problem should not happen if the application is the MobiLink server. The MobiLink server does not call the ODBC function SQLColAttribute(). |
492675 | Incorrect results could have been returned for for some DISTINCT ORDER BY combinations. This would have occurred when a DISTINCT clause was used and there were no unique indexes that could be used to guarantee distinctness, there was an ORDER BY clause and no indexes exist to effect that ordering and not all of the the ORDER BY constituents were found in the SELECT list.
For example: SELECT DISTINCT last_name FROM people ORDER BY birth_date This has now been corrected. |
492780 | When an ODBC datasource was modified on Windows, the permission settings on the registry key were modified. This has been corrected. |
492783 | If an application using the iAnywhere JDBC driver called ResultSet.getDouble() to fetch a numeric value, then there was a chance the JDBC driver would have thrown an "invalid numeric string" exception. This problem would only have happened if the application was using the Java print service and the default locale was a European one. Note that calling ResultSet.getBigDecimal() did not have the same problem, hence calling ResultSet.getBigDecimal().doubleValue() is a workaround for this problem. The original problem has now been fixed. |
492788 | Trying to use the named parameter ODBC_State with the report_odbc_error script would have resulted in an error, with ODBC_State being reported as an invalid system parameter. This has been fixed. |
492814 | A user without administrator permission was unable to start, stop or delete SQL Anywhere services on a Windows 2003 machine, even if that user had been granted permission by an administrator to control those services. This has been fixed. |
492960 | Server-initiated synchronization requires the SendDownloadAck extended option to be enabled, but this would not be enabled for a SQL Anywhere remote database that had been setup for SIS through deployment from a synchronization model. This has been fixed. The workaround for this is to enable SendDownloadAck on the remote advanced options page when deploying. |
493049 | If the very first request to a remote server was executed by an user event at the time the server was shutting down, or during a server startup that fails, then the server may have crashed. This has been fixed. |
493071 | The server could have crashed if a connection was attempted at the same time as a connection was in the process of disconnecting. The likelihood of this occurring would have been extremely rare due to the very small timing window. This has now been fixed. |
493096 | When a server has more than 200 concurrent connections, the liveness timeout should be automatically increased by the server to avoid possible dropped connections. This was not being done until the server had at least 1000 concurrent connections. This has been corrected. |
493210 | The Deployment wizard would have failed when deploying a synchronization model with a table with a LOB column on an Oracle consolidated database with timestamp download, or using shadow tables to record deletions. The Deployment wizard was attempting to create a trigger specifying LOB columns, however, Oracle does not support creating triggers with LOB columns specified. This has been fixed by creating the triggers on the table, rather than the columns. |
493217 | In certain rare situations calls to the MOD() function with NUMERIC or DECIMAL arguments, could have caused the server to crash, or to report an unexpected error. This has been fixed. |
493219 | When using non-persistent HTTP, the length of the end_synchronization phase in the Monitor could have been shown as taking a long time (at least equal to the connection timeout interval), even though the sync successfully completed much earlier. The strange display made it hard to interpret what was going on. This has been fixed. |
493330 | When running Visual FoxPro the behaviour of the ODBC driver was different between version 9.0 and version 10.0. Version 10.0 reported different error messages when closing connections. This has been fixed so the behaviour is now consistant between versions. |
493337 | MobiLink clients could have failed to parse Set-Cookie HTTP headers sent by web servers and would have returned the error STREAM_ERROR_HTTP_HEADER_PARSE_ERROR. This has been fixed. |
493442 | Very large or very small numbers could have been displayed in exponential notation. This was different from previous versions of the software where numbers were displayed in plain decimal notation. Now, very large and very small numbers are displayed in decimal notation again. Also, the numbers that are written by the OUTPUT statement are now also similarly formatted using normal decimal notation. |
493478 | Incorrect results could have been returned for for some queries with row limitation (using FIRST, TOP, and/or START AT clauses), when a query was not read-only and when a temporary table was required to execute the query.
For example: SELECT TOP 14 * FROM table ORDER BY table.column when there was no index that could be used to order the data. This has now been fixed. |
493578 | Attempting to add a row to a table which contained a UNIQUEIDENTIFIER column using the table in the "Results" panel could have caused Sybase Central to crash. This problem affected the Interactive SQL utility dbisql as well. It has now been fixed.
Note that the problem was restricted to UNIQUEIDENTIFIER columns which could not be null and which did not have default values. |
493708 | Older MobiLink clients (version 8 and 9) may have failed to synchronize with an "Out of memory" error. This error should have been reported as "unknown character set". This has been corrected. The character translation mechanism can no longer translate characters from DECKanji or Turkish8 (possibly others). There is no workaround for this issue. |
493715 | If a database requires recovery, executing "START DATABASE {database name} FOR READ ONLY" would fail with the error "Unable to start specified database: unable to start database {database name}". This has been fixed; the error message will now read "Unable to start specified database: not expecting any operations in transaction log". |
493729 | A problem introduced by changes for Engineering case 489871 made it possible for database recovery to fail with databases using the -m switch to truncate the transaction log at each checkpoint. This was not an issue if -m was not being used. This has been fixed. |
493730 | In rare, timing dependent cases, the server could have hung on multi-processor systems with one processor at 100% usage when iterating through connection handles (for example by using sa_conn_list or sa_conn_info). This was extremely unlikely on single processor systems, or on a server that had a low rate of connects and disconnects. This has been fixed. |
493738 | Performing an ALTER TABLE statement on a table with blob columns may have caused corruption in the database. The most likely symptom of this would have been a crash when selecting from a table that has been altered. This has now been fixed. |
493741 | An attempt to alter a column to DEFAULT NULL would have been ignored. This has now been corrected. |
493744 | In the following situation:
1) A procedure call in the FROM clause consists of a single SELECT statement and nothing else 2) The FROM clause inside the procedure from 1) also consists of a single SELECT and nothing else then the procedure from 2) may be looked up in the context of the current connection rather than the owner of the procedure in 1). This is fixed. Note that this is not a security hole since the incorrect lookup is done in the context of the current connection. |
493757 | The server could have crashed when inserting a row into a wide clustered index (one on many columns, or on long strings). This has now been fixed. |
493762 | Incorrect results could be obtained for for some queries that used indexes in which there was more than one nullable column. This was corrected. |
493882 | SQL Anywhere allows the user to control how the affects of the LOAD TABLE statement are logged for recovery purposes. Some new forms of recovery logging, namely CONTENT LOGGING and ROW LOGGING, are supported in version 11 of the server. These forms of logging require that the database be upgraded or created with the new server. Further, CONTENT LOGGING is the default used by SQL Anywhere when the data source for the LOAD TABLE statement is an expression or a client file. The LOAD TABLE statement would have failed with an error if the database was being run without a transaction log and the logging type in effect is not FILENAME LOGGING, the old logging type. This has been corrected so that the server now accepts all logging types as valid when the database is running without a transaction log because there is nothing to be logged in this scenario, thereby allowing LOAD TABLE to execute without error. |
494020 | In very rare cases, the server may have crashed on recovery, or failed to recover with other errors, most likely related to database page access. This problem was only possible if the server crashed in the midst of a checkpoint. This has now been fixed. |
494029 | The -uc option (Start server in console mode) was not support by the server when run on MacOS systems. This has now been corrected. |
494052 | When exiting an unchanged synchronization model, the MobiLink plug-in could have prompted to save it if a table mapping was selected and then the Events tab was switched to. This has been fixed. |
494151 | Text index operations on a database created without the default "DBA" user would have failed with an error. This has been fixed. A work-around is to create the database with the default "DBA" user. Note that it is not enough to add the user after the database is created. The work-around will only be sufficient if the following query returns "1":
select user_id from sysuser where user_name='DBA' |
494155 | UltraLite requires that each table have a primary index. Using SQL statements, it was possible to remove or rename this primary key, which would eventually have lead to a crash of the UltraLite application. Attempting to remove or rename a table's primary key will now result in an error. |
494182 | If a version 10.x database was updated using the version 11 beta, then the upgraded database would have been missing some system foreign key mappings. The problem was most evident when the customer tried to unload the upgraded database. This problem has now been fixed. |
494184 | The SACommandBuilder class did not implement the QuoteIdentifier method. The QuoteIdentifier method has now been added. |
494259 | A column could have been altered to have a different datatype, even when column was in a foreign key or constraint. This is now disallowed. |
494266 | The Create Trigger wizard would have generated a trigger with an invalid REFERENCING clause. The clause was created as a comment, so while the statement would have compiled, attempting to uncomment the REFERENCING clause and saving the trigger would have failed. This has been fixed. |
494272 | Running a generated SQL file for a new remote database, for a DB2 consolidated, with a table with Graphic columns could have given a syntax error. The DB2 consolidated Graphic types would have been mapped to long binary types in the SA remote database, however a length for the column would have been specified resulting in a syntax error. A workaround would be to manually edit the generated SQL file. This has been fixed. |
494280 | After installing an application from a Microsoft Windows Installer package that was created using the Deployment Wizard, if the application was created with Visual Studio 2005 C# and used System.Data.OleDb, updating the database would have generated an error for which there was no text. This has been corrected. |
494283 | If an INSERT statement contained a VALUES clause (Syntax 1), it should not contain WITH AUTO NAME. For example, consider the following statement:
insert into tauto with auto name values(1,2,'',4) WITH AUTO NAME was being accepted, but ignored, for these types of INSERT statements. This has been changed so that the statement will now give a syntax error. |
494295 | Attempting to execute a query that used the CONTAINS clause on a table owned by another user would have failed with a "table not found" or "Permission denied" error. This has now been fixed. |
494297 | When the Unload utility dbunload is used with a 10.0 or later database, the version of dbunload used must match the version of the server used to access the database. If an older dbunload is used with a newer server, or vica versa, an error is now reported. This is most likely to occur if dbunload connects to an already-running server. The same restriction applies to the Extraction utility dbxtract. |
494310 | If a materialized view was dropped as the result of dropping a user, and this was done concurrently with other database requests, the server could crashed, or failed assertions. Database corruption was also possible. This has now been fixed. |
494319 | If the Unload utility was used to perform an internal unload (-ii or -ix command line option) from a Windows client while connected to a Unix server, unloaded data files would have been created with a backslash character in the file name instead of being placed in a sub-directory of the server's current working directory. Furthermore, the generated reload.sql script referenced these data files using forward slashes, making it unusable without modification. A work around is to append a forward slash to the end of the directory name passed to the dbunload utility. |
494356 | A QAnywhere .NET application could have hung if a QAManager API method was interrupted by an exception in one thread and another thread subsequently called a method on the QAManager that was interrupted. This has been fixed. |
494364 | End-to-end encryption could have failed, or hang, the synchronization, although the probability of failure was quite low. This has now been corrected. |
494414 | An application could have crashed if an invalid protocol option was used in the connection string (for example links=tcpip(invalid=value) ). This has been fixed. |
494431 | An error could have incorrectly been given when converting a string such as '+123' to one of the following types: INT, UNSIGNED INT, BIGINT, UNSIGNED BIGINT. A redundant '+' is permitted at the beginning of the string when converting to a number. Prior to the changes for Engineering case 392468 (10.0.1 build 3476), the conversion incorrectly gave an error for BIGINT and UNSIGNED BIGINT, but the correct behaviour was given for INT and UNSIGNED INT. In 10.0.1 build 3476 and later, the error was generated incorrectly for all of the above listed types. This problem has been fixed. |
494448 | Catalog information about a materialized view could have been inaccurate following execution of a REFRESH MATERIALIZED VIEW statement that had failed. This has been fixed. |
494449 | Under rare circumstances, the server could have crashed while executing a trigger defined for multiple events. This has been fixed. |
494450 | Global shared temporary tables were being unloaded as regular global temporary tables (ie non-shared). This has been fixed. |
494462 | When attempting to call a stored procedure in an ADO application, the OLE DB provider could have returned an "invalid parameter type" error. The order of the parameters in the procedure was not determined correctly by the provider. This has been corrected. |
494579 | When changing a column's DEFAULT value to "No default value", a syntax error would have been reported. The plugin was incorrectly executing the statement ALTER TABLE t ALTER c DROP DEFAULT. This has been fixed so that the plugin now uses the correct syntax ALTER TABLE t ALTER c DEFAULT NULL. |
494583 | The Index Consultant wizard leaves the Interactive SQL utilirt (dbisql) is a state such that autocommit is on. This has been fixed. |
494708 | It was possible for the server to fail assertions 201866 - "Checkpoint Log: Page 0x%x is invalid" or 201864 - "Checkpoint log: Invalid page number on page 0x%x", for a database containing a corrupted page in the checkpoint log. This could have occurred in cases where it was safe for the server to ignore the corruption and recover the database. This has been fixed. The assertions never occurred in databases that didn't contain corruption. |
494710 | Incorrect results could have been returned when there was an ORDER BY clause that caused a temporary table to be generated. For this to hace occurred there must have been a subquery expression in the select list that referred to a table that could be updated, and the query had to have been potentially updateable (FOR READ ONLY was not specified).
This was corrected. The work-around is to specify FOR READ ONLY on the query. |
494963 | When there were at least three joins in a query table expression and there was a reference from the ON condition to a column in a table at least three preceding, an incorrect syntax error may have occurred. This has been corrected. |
494983 | If the last page of the transaction log was only partially written, perhaps due to a power failure, it was possible that the database would not have been able to recover on startup. It is most probable that this would have occurred on Windows CE. The likely error would have been a failure to validate the checksum on the page. This has been fixed. |
495001 | If an application made concurrent connections with both YES and NO boolean parameter values, the application could have crashed or the boolean connection parameters could have been interpreted incorrectly. This has been fixed. |
495092 | Messages displayed by many of the utilities (ie dbunload, dbvalid, etc) may have been truncated. The message display buffer size has been increased to correct this problem. |
495093 | When modifying the SQL text for a materialized view, if the original materialized view had a refresh type of 'Immediate', then an error would have occurred while attempting to save the view. In addition, a temporary view (with a name ending in an IP address and timestamp) would have remained. Both of these issues have been fixed. |
495145 | HTTP or HTTPS synchronizations may have failed or hung, particularly on slow or low-quality networks. This has been fixed. |
495146 | Synchronizations with may have failed or hung, particularly on slow or low-quality networks. This has been fixed. |
495147 | Synchronizations using end-to-end encryption may have failed or hung. This has been fixed. |
495225 | When editing a synchronization model, if one or more rows in the column mapping editor were marked for deletion, attempting to revert changes to the model could have caused Sybase Central to crash. The same problem could have occurred when attempting to select another item in the tree and answering "No" to the "Do you want to save changes?" dialog. This has now been fixed. |
495231 | Executing a COMMENT ON INTEGRATED LOGIN statement could have caused the server to crash, or to fail an assertion, if executed concurrently with other commands. This has been corrected. |
495236 | There was a chance that the server would have crashed when making the connection to a remote server using one of the JDBC based Remote Data Access classes. This problem has been fixed. |
495240 | If an ALTER <column> statement encountered an error, subsequent statements could have erroneously failed with the error SQLE_SCHEMA_UPGRADE_NOT_ALLOWED, and/or the runtime could have experienced a crash at some later point. This has been fixed. |
495369 | The performance of some queries has degraded from what it was in version 9. Further optimizations have been added so that the performance has been restored. |
495375 | The result set returned when SAConnection.GetSchema("ProcedureParameter") was called, would have been in an unpredictable order. This has been fixed by adding an ORDER BY clause to the query statement. |
495381 | If ulview.exe was used to build a USM file and a column was added to the primary key of a table after adding the same column to an index, would have resulted in protocol error when
attempting to synchronize. This has now been fixed. |
495396 | If a client connection went away (eg. the client application crashed), it was possible for the server to have crashed. This was very rare and timing-dependent. It has now been fixed. |
495406 | In SQL Anywhere, the language supported for the definition of manual views is a proper subset of the SQL supported by the server. Further, the language permitted for immediate views is a proper subset of that supported for manual views. A new clause has now been added to the CREATE MATERIALIZED VIEW statement to allow users to validate the statement without actually creating the view.
Syntax: CREATE MATERIALIZED VIEW ... [ CHECK { IMMEDIATE | MANUAL } REFRESH ] Syntax Rules: When used, the CHECK clause has the following effect: 1. The server performs the normal language checks that would be carried out if CREATE STATEMENT was executed without the clause and any errors generated are reported returned as usual. 2. The server does not carry out the actual creation of the view which means that certain errors, such as the specified name already existing in the database, are not generated and the CHECK clause can be used even for an existing view. This feature can be useful when a user is considering changing the definition of an existing view but does not know if the new proposed definition will be accepted by the server. 3. If CHECK IMMEDIATE REFRESH is used then the server will also verify that the syntax used is valid for an immediate view and will raise any appropriate errors. 4. The server makes no changes to the database and nothing is recorded in the transaction log. 5. The statement performs an implicit commit at the beginning of execution and a rollback at the end to release all locks obtained during execution. |
495506 | SQL statements that are executed both before and after a SETUSER statement may have ncorrectly referred to the wrong user's objects.
For example, if connected as user u1 and the following executed: select * from t; setuser u2; select * from t; then the second SELECT could have incorrectly returned the results for u1.t instead of u2.t. This has been fixed. Setting the database option max_client_satements_cached to 0 will workaround this problem. |
495514 | The MobiLink system table ml_qa_status_history in a consolidated database would have grown without limit. This happened with all QAnywhere supported consolidated database types. This has been fixed so that when delete rules cause messages to be deleted in the consolidated database, the corresponding rows in the table ml_qa_status_history are now deleted. An existing ASA consolidated database will be automatically upgraded with the fix for this problem. For other consolidated databases, the MobiLink setup script for that database must be executed. |
495574 | The server could have crashed, or failed assertions, when scanning many values from an index containing many and/or wide columns. This has now been fixed. |
495578 | The method ULDataReader.GetBytes() would have returned null if invoked for a binary(n), or a long binary, column containing an empty string (ie. a zero length not null value). This has been fixed. GetBytes() will now returns a zero length array of bytes. |
495677 | The builtin function regexp_substr() could, in some cases, have lead to the following non-fatal assertion failure: 106901 "Expression value unexpectedly NULL in write". This assertion would have failed if the arguments to regexp_substr() were all expressions marked as not-NULL. This has been fixed. |
495686 | The server supports an extension to the MERGE statement that allows for an error be raised under certain circumstances. The server will now pay attention to the ERROR clause and generate an error as expected. In addition, the ERROR clause of the MERGE statement has been changed to to use RAISERROR instead. |
495700 | As of Engineering case 408481, exists() subqueries were not flattened during rewrite optimizations if the subquery contained more than two tables in the FROM clause, and it was not known if the subquery returned at most one row. Now, for a subquery to not be flattened, it must also contain other nested subqueries. |
495701 | The server allows an application to raise a customized error by means of the RAISERROR statement. The server also provides for a built-in global variable, SQLCODE, whose value can be examined to determine the specific error raised during the execution of the last statement on the current connection. The server will now report the correct user specified error number for SQLCODE instead of a fixed -631. |
495702 | For some column data types in a consolidated database, a new remote database could have been created with inappropriate types. For example, a column with the ASE UNICHAR type was previously mapped to a LONG BINARY column type in a new SQL Anywhere remote database. This has now been corrected.
A work around would be to deploy to a SQL file and edit the file using the recommended data type mappings that are documented in this section of the documentation: MobiLink - Server Administration > MobiLink Data Mappings Between Remote and Consolidated Databases |
495705 | When the MobiLink Client was launched using the Dbmlsync Integration Component, it was possible to view the username and password in the dbmlsync command line in plain text. This has been corrected so that the Dbmlsync Integration Component will encrypt all the command line options and settings before passing them to dbmlsync. Dbmlsync will then decrypt the options and settings.
Note, this fix does not apply to the Dbmlsync Integration Component running on Windows CE systems. |
495872 | If a query contained a "GROUP BY GROUPING SETS" or CUBE clause, it was possible for the server to fail the query with an assertion failure such as: 102501 "Work table: NULL value inserted into not-NULL column". The problem would only have occurred for specific query access plans if there were no rows input to the GROUP BY. This has now been fixed. |
495929 | Attempting to execute a query that references a proxy table that contained nchar or nvarchar columns, may have failed assertion 106808. The server was incorrectly setting the semantics to byte length, instead of character length, when describing nchar and nvarchar columns in proxy tables. This problem has now been fixed. |
495943 | If the constant 0.0 (one decimal separator and all digits zero) was used in the select list of a SELECT statement, it would have been described as a numeric(0,0), and a SELECT statement with an INTO <permanent_table> clause would have failed with a syntax error. This has been fixed so that the constant 0.0 is now correctly described as numeric(1,0). |
495956 | Executing the statement ALTER DATABASE <dbfile> MODIFY LOG ON, where no transaction log name was specified, would have disabled transaction logging for that database, equivalent to specifying "... LOG OFF". This has been fixed. Including a transaction log filename in the statement would have behaved correctly. |
495960 | In very rare and timing-dependent situations, a cancelled backup could have caused the request, and ultimately the server, to hang. Typically, for this problem to have occurred, the cancel would have had to occur quite quickly after the backup began. This has been fixed. |
495962 | If an application issued a statement like "DELETE FROM t WHERE c = @v", and the table t was a proxy table and @v was a variable of type nchar, nvarchar or long nvarchar, then the query would have failed with a "not enough host variables" error. This problem has now been fixed. |
495980 | In order to optimize database access, the MobiLink scripts can be considered "read-only" when the -f option is specified. In this mode, the ml_global version of scripts would have been checked for changes before each synchronization. This has been corrected so that
the check is only done once at startup. |
496061 | If a BEFORE trigger changed an update back to the original value of the row, then the update would still have been logged, even though it was a no-op. This is now only done if a resolve trigger is fired, which matches the behaviour of previous versions. |
496068 | If a DML statement modified a table, and also referred to the table indirectly through a non-inlined procedure call, then anomalies could have occurred. This has been fixed by forcing a work table for any DML statement that references a procedure call. |
496071 | The server uses column statistics in order to estimate the number of rows that satisfy a given predicate. The column statistics are maintained as histograms that attempt to capture the data distribution of values in the database for a given column. The server could have incorrectly estimated the selectivity of BETWEEN predicates under certain circumstances. Note that a BETWEEN predicate might be inferred by the server if the query contains appropriate conjunctive predicates. As an example, "c1 >= 5 AND c1 <= 10" is semantically equivalent to "c1 BETWEEN 5 AND 10". This estimation problem has been resolved. |
496087 | In rare instances, assertion failure 201822 "Checkpoint log: attempt to allocate before recovery is complete" could have been reported during database recovery. The problem has been fixed. If this problem is encountered, recovery with a server containing this fix should complete normally. |
496094 | Using the REWRITE() function on a some forms of queries could have resulted in the server going into an infinite loop. This has been fixed. |
496102 | The MobiLink server would have sent user authentication status 4000 to a client if it was not able to run the user authentication scripts if errors had already occurred before it had a chance to invoke these scripts, or it could not successfully run the scripts due to errors when executing the scripts, or errors occurred internally in the server. Then the client would generated the error: "Invalid MobiLink username, password, or script version". This has now been fixed. The MobiLink server will send the error code, 11310 and error message "Unable to authenticate the user" to the clients. The long description for this error code is "The MobiLink server was not able to authenticate the user. Please check the MobiLink server message log for more details". |
496106 | When deploying a Synchronization Model to a Microsoft SQL Server database, in which the name of the table owners were different then the current user's username, an error would have occurred. This has been fixed. |
496109 | Creating a synchronization model, where a synchronized remote table did not have all columns synchronized, would have caused a warning that that it was not compatible with an UltraLite remote database, since UltraLite publications can not use column subsets. However, such a synchronization model could still such as: [-10050] "Expecting 8 columns in cursor, but found 7". This has been fixed. Now, synchronization models cannot be deployed to an UltraLite remote database unless all columns are synchronized in the synchronized remote tables. |
496110 | Incorrect results may have been obtained for queries involving GROUP BY, ORDER BY and HAVING clauses, where no indexes exist to implement the grouping and the ordering, and where the grouping was such that the ordering could not have been implied Plans of this situation would have shown two temporary tables being present. This has now been corrected. |
496113 | Under rare circumstances, during diagnostic tracing with the 'plans_with_statistics' tracing level set, query plan information for a DML statement could have been missing. In such cases, viewing the plan for the statement in the Profiling Mode would not be possible. This has been fixed. |
496114 | Graphical plans with detailed statistics that contained an index scan would not have shown values for the statistic CacheReadIndInt, and the values for CacheReadIndLeaf would have included internal and index leaf page reads. This has now been fixed. |
496131 | Graphical plans with detailed statistics could have contained invalid values for the statistic "Estimated pages in cache". Under rare circumstances, invalid values could also have been displayed for the "Estimated rows", "Estimated pages" and "Estimated row size" statistics. This has been corrected. |
496241 | If application profiling data was stored in an external tracing database, trigger names may not have been attached to the statements executed within the triggers. This has been fixed.
Note that the statement data was still saved in the tracing database - it was just not linked to the trigger, and was displayed in the Profiling mode in the Details tab with "Procedure or Trigger Name" set to NULL. |
496242 | For Microsoft SQL Server's new datatypes VARCHAR(MAX), NVARCHAR(MAX), and VARBINARY(MAX), a new remote database could have been created with inappropriate types. Micrsoft's ODBC driver returns the same metadata for VARCHAR(MAX), NVARCHAR(MAX), and VARBINARY(MAX) as for TEXT, NTEXT, and IMAGE, but with a size of 0. This has been fixed so that new remote databases will now be created with correct types. A check has been added for a size of 0 on these particular data types in order to identify them correctly.
A workaround would be to use datatypes TEXT, NTEXT, and IMAGE which correspond to the new datatypes. |
496281 | The ml_remote_id option would have incorrectly been set to the string value 'null' when reset using the UltraLite plugin. This has been fixed. |
496407 | In exeptionally rare circumstances, the server may have crashed trying to collect information about database pages to be loaded (cache warming) the next time the database was started. This has been fixed. |
496429 | Graphical plans for Group By queries that were executed in parallel, did not report group by expressions or aggregates in the tooltip and details pane for GroupBy below Exchange.
This has been fixed. |
496435 | An application using the iAnywhere JDBC driver on Unix systems, could have crashed when making a connection. This problem has now been fixed. |
496438 | An application using the iAnywhere JDBC driver, that had many threads that were opening and closing connections or statements, may have crashed during garbage collection. This problem has now been fixed. |
496439 | When a database application attempted to use a feature that had been secured, using the -sf server option, the error message that resulted did not state the correct feature name. This problem has been fixed. |
496450 | Attempting to execute an ALTER TABLE statement to add a computed column that involved a Java call would have caused the server to either fail to start the Java VM, or to hang. This problem has now been fixed. |
496453 | The Connect Assistant would have failed to find servers if they were on a different subnet. This has been fixed. |
496526 | When inserting rows using an opened cursor, rather than using an INSERT statement, computed columns would not have been properly evaluated. This has been fixed. |
496538 | The Interactive SQL utility dbisql would have reported an internal error when attempting to open a SQL file which was larger than about 5 MB. This has been fixed so that it now an reports an error saying that there was not enough memory to open the file. |
496545 | The Certificate Creation utility createcert would have generated invalid server certificates when signing them using a CA certificate generated by gencert (the previous certificate generation utility). Although the server certificate itself looked fine, clients would not have been able to properly identify the trusted CA certificate that signed it, and so it would have been rejected as untrusted, even when the client had the correct CA certificate in its list of trusted CAs. This has been fixed. |
496546 | Using a CONTAINS search in a SELECT INTO could have failed with an error, or caused the server to crash. This is now fixed. |
496551 | Changing a Materialized View and then refreshing the folder, would have caused the plug-in to throw a NullPointer Exception. This has been fixed |
496567 | The MobiLink system table ml_qa_status_history in a consolidated database would have grown without limit. The problem only occurs for ASE consolidated databases. To correct this in existing ASE consolidated databases, the trigger ml_qa_repository_trigger needs to be changed by running the following script on the consolidated database after it has been initialized with the MobiLink setup script:
delete from ml_qa_status_history where msgid not in (select msgid from ml_qa_repository) go commit go drop trigger ml_qa_repository_trigger go create trigger ml_qa_repository_trigger on ml_qa_repository for delete as delete from ml_qa_repository_props from deleted d, ml_qa_repository_props p where d.msgid = p.msgid delete from ml_qa_delivery from deleted d, ml_qa_delivery p where d.msgid = p.msgid delete from ml_qa_status_history from deleted d, ml_qa_status_history p where d.msgid = p.msgid go |
496568 | The iAS ODBC driver for Oracle could have shown poor performance when concurrent access was required by multi-threaded applications, such as the MobiLink server. This problem has been corrected. |
496715 | Very rarely, a query that used index only retrieval, together with snapshot isolation, may have returned a wrong result. This has been corrected |
496719 | When rebuilding, by unloading and reloading, a version 9.0 database that had Remote Data aAcess servers defined, there was a possibility that the reload would have failed with a "capability 'aes_encrypt' not found" error. This problem has now been fixed.
The workaround is to edit the reload script and change all occurrences of 'aes_encrypt' to 'encrypt'. |
496762 | If a database being unloaded was created with accent sensitivity on, or "french", the CREATE DATABASE statement included in the reload.sql file created by dbunload would not have contained the ACCENT RESPECT, or ACCENT FRENCH, clause. This has been fixed. |
496897 | An application using the iAnywhere JDBC driver would have leaked memory when making multiple DatabaseMetaData calls. The driver was not releasing references to Java strings. This problem has been fixed. |
496899 | An application using the iAnywhere JDBC driver would have leaked memory when executing statements that returned multiple result sets. Executing statements that return a single result set will not be affected by this problem. The driver was failing to implicitly close pending result sets for statements that returned multiple result sets. This has now been fixed. |
496906 | The server, and client applications, would have leaked memory on Solaris SPARC 64-bit and Solaris x64 when negotiating a shared memory connection. This has been fixed. |
496921 | When deploying a synchronization model to an encrypted database, the encryption key would have been visible in the messages dialog, as well as in the scripts generated for the remote database. This has been fixed by trimming the DBKEY out of the connection string. |
496937 | When run on Mac OS X systems, an IndexOutOfBoundsException could have been thrown when navigating the object tree. This has been fixed. |
496969 | When the QAnywhere Agent was running on a device that was not connected to a network, each time a QAnywhere application queued a message the CPU usage increased slightly. This has been fixed so that now, when the device is not connected to a network, queueing a message uses about the same amount of CPU regardless of whether or not the QAnywhere Agent is running. Moreover, the required CPU usage stays constant as messages are queued. |
497105 | If request log filtering by database was enabled using:
call sa_server_option('RequestFilterDB', <db-id> ) query plans from statements executed on other databases on the same server would still have appeared in the request log. This has been fixed. |
497114 | Executing the system procedure sa_materialized_view_can_be_immediate() with the name and owner of an immediate materialized view that had a definition containing a LIKE 'x%' predicate, could have failed with an error that the view was not eligible to be an immediate materialized view. This has been fixed. |
497117 | Applications could have crashed after specific sequences of PREPAREs and EXECUTEs, or OPENs, if the option max_statement_count was increased from its default value. In particular, for the crash to have occurred a connection must have done at least 50 PREPAREs, then at least 500 EXECUTEs or OPENs, then have had at least 50 statements concurrently prepared or opened. This has been fixed. |
497121 | In some cases, actual node statistics were not reported for 'hash filter' and 'hash filter parallel' in graphical plan with detailed statistics, including node statistics.
Also, in some cases actual statistics were not reported for recursive unions. This has been fixed. |
497256 | When calling the ODBC function SQLGetInfo(), the driver will return an indication that conversion from SQL_VARCHAR to SQL_WVARCHAR is possible using the ODBC CONVERT function.
For example: rc = SQLGetInfo(hdbc, SQL_CONVERT_VARCHAR, (SQLPOINTER)&bitmask, sizeof(bitmask), NULL); This will return with the SQL_CVT_WVARCHAR bit set in bitmask which indicates that the conversion is possible. However, attempting to do the conversion will return an error. This is illustrated by the preparing the following statement for execution: SELECT {fn CONVERT(Surname,SQL_WVARCHAR)} FROM Employees The error is "[42000][Sybase][ODBC Driver]Syntax error or access violation". This problem has been fixed. Support has been added for conversion to types SQL_WCHAR, SQL_WLONGVARCHAR, SQL_WVARCHAR, and SQL_GUID. |
497264 | In rare cases, an HTTP request with a SessionID may have caused the server to crash. This has been fixed. |
497458 | Undefined errors could have occurred if ULDatabaseManager::CreateDatabase() was called with a null collation. This has been fixed so that a SQLE_INVALID_PARAMETER ULException will now be thrown for a null collation. |
497467 | The unparsing of an alias was incorrect in some cases. The alias was represented as a '*' in an unparsed statement. This may have been observed in plans generated when using the -zx server command line option to log expensive queries. This has been fixed. |
497495 | The OUTPUT statement was writing DECIMAL numbers with thousands separators. This was an inadvertent change from previous versions and caused an ambiguity when writing ASCII files if the field separator was the same as the thousands separator. This has been fixed. |
497501 | The server was ignoring the correlation name of columns in the column list of the INSERT statement. This has been fixed so that if the correlation name exists and it doesn't match the name of the INSERT INTO table, then the error (SQLSTATE_COLUMN_NOT_FOUND 52003 -143L) is now returned.
Example: INSERT INTO R ( T.X, R.Y) values (1,2) will now return an error because the column T.X cannot be found. |
497502 | If an application that was using Java in the database support spawned additional threads that were still running when the database was shut down, then the JVM would havel continued running until these additional threads shut down. This problem has now been fixed.
Note, if the application needs these threads to be notified of the shutdown, then the application must register a shutdown hook with the Java VM. |
497504 | If an application that was using Remote Data Access support executed a remote query that was very complex, then there was a possibility that the server would have crashed. This problem has been fixed. |
497511 | The diagnosis of invalid GROUP BY expressions has been enhanced. |
497515 | The Interactive SQL utility dbisql could have crashed on startup if it been configured to enable source control support. The crash depended on using the default Windows source control system (i.e. NOT the "custom" option), and would only have occurred if the source control system asked dbisql to display a message in response to opening the source control project. This has now been fixed. |
497646 | If a database connection ended and the JVM stopped, the Java class finializers were not called, which is correct Sun JDK behaviour. If Java classes had opened network or JDBC connections to other servers or applications, then these connections were not closed as well. In order to close these connections, or to release other resources, the application can call the Java method System.runFinalizersOnExit( true ), which force the JVM to run the finalizers of all not finalized classes. Althrough the call is deprecated in JDK 1.2 and above, it will still work in these versions. In version 10 and above applications can also use shutdown hooks to release resources. A fix has been now made so that the finalizers now run correctly at JVM stop, if the above method has been called. If no class instance is created, and a resource assigned to a static member should be released, the application may use an Uninit class as in the sample below:
public class SampleClass { private static Uninit uniniter = null; public static Connection conn = null; static { try { uniniter = new Uninit(); System.runFinalizersOnExit( true ); conn = DriverManager.getConnection( "jdbc:sybase:TDS:RemoteServer:2638", props ); } catch ( Exception e ) { System.out.println( "Error: " + e.getMessage() ); e.printStackTrace(); } } .... } |
497880 | The server could have failed assertion 202001 while executing a query, if a temporary table was scanned that contained a string longer than the database page size. This has been fixed. |
497887 | If a 10.0 database, that had been initialized without jConnect support, was upgraded without explicitly requesting that jConnect support not be added, the upgrade would have failed. The upgrade attempted to insert duplicate rows into a system table. This has been fixed by having the insert use ON EXISTING SKIP.
A workaround is to perform the upgrade and request that jConnect support not be added. This can be done using the "-i" option of dbupgrad, or with: ALTER DATABASE UPGRADE JCONNECT OFF |
497932 | The 64-bit version of the OLE DB provider could have caused a page fault and terminated. This problem has been fixed. |
497937 | The following problems with the OLE DB provider have been corrected:
- conversion of multibyte strings to wide character strings (DBTYPE_WSTR) was not being done correctly for non-UTF8 character sets. - DBTYPE_BYREF parameters were not supported. - the provider would have crashed in the OLE DB Execute method when prepared statements did not have their parameter information set using the OLE DB SetParameterInfo method. |
498031 | The MobiLink File Transfer utility (mlfiletransfer) did not send liveness packets. This meant that for downloads of large files, the MobiLink server would have timeouted the client. This has been fixed. |
498056 | Scripts can be created that use user-defined parameters that are denoted by the {ml u.parm} syntax. Some ODBC drivers have a problem though with how the MobiLink server translates the SQL statement which would pass the parameter with IN/OUT attributes. This can now be overcome by using the new notation {ml ui.parm}. The MobiLink server will now pass this parameter with IN attributes.
A workaround previous to this new feature would be to code the script as a stored procedure call. |
498183 | In very rare circumstances, the iAnywhere JDBC driver may have crashed when a connection was being closed. This problem has now been fixed. |
498198 | In certain cases, altering a string column could have produced orphaned blobs. These orphans would have shown up as errors when a validation (dbvalid or VALIDATE statement) was run on either the database or the table. For this problem to have occurred, the table must have contained at least two string columns, with (at least) one column containing "long" strings, i.e., strings larger than approximately one database page. If a column other than the one containing long strings was altered to a size smaller than its inline amount, and then altered to a size larger than its inline amount, the long strings would have become orphaned. Note that the default inline amount for a CHAR column is 256. This has now been fixed.
For example: CREATE TABLE test(col1 long varchar, col2 char(1000)) // ... insert long data into col1 ALTER TABLE TEST MODIFY col2 CHAR(10) ALTER TABLE TEST MODIFY col2 CHAR(1000) VALIDATE TABLE TEST A workaround to the validation failure is to rebuild the database using dbunload or the Unload wizard in Sybase Central. |
498204 | The server could have crashed shortly after starting a database with dbspaces that had no deletes or updates performed on them. This has been fixed. |
498337 | Queries with complex WHERE condition containing at least one element of the form "( col1 > constant1 AND col1 < constant2 ) OR expression", with constant1 < constant2, may have incorrectly returned more rows.
For example the following query will return rows with value 0 and 8 for column "a": SELECT a FROM T1 WHERE ( a > 0 AND a < 2 ) OR ( a > 1 AND a < 3 ) OR ( a > 2 AND a < 4 ) OR ( a > 3 AND a < 5 ) OR ( a > 4 AND a < 6 ) OR ( a > 5 AND a < 7 ) OR ( a > 6 AND a < 8 ) OR ( a > 8 AND a < 10 ) OR ( a > 9 AND a < 11 ) OR ( a > 10 AND a < 12 ) OR ( a > 11 AND a < 13 ) OR ( a > 12 AND a < 14 ) This has been fixed. |
498343 | When the visual version of the Dbmlsync Integration Component activex was used on Japanese Windows XP, the font selected for the log window did not support Japanese characters. As a result any Japanese text printed to the log window was garbled. An appropriate font is now used. |
498393 | When sending diagnostic tracing data to a remote database, if the tracing database was stopped, or the connection to it was interrupted, before diagnostic tracing was stopped, the database server could have crashed. This has been fixed. |
498395 | In vary rare circumstances, a Solaris client application may have crashed when attempting to connect to a server. This would have occurred if the communications initialization code failed to allocate some memory. This has been fixed. The client connect request will now receive a -86 "Client out of memory" error in these instances. |
498529 | A cursor using a temporary table and a procedure call could have resulted in a server crash. This has been fixed. |
498533 | The -onerror command line option was being ignored if the Interactive SQL utility was not connected to a database. This has been fixed. |
498540 | When connected to a database mirroring system, viewing the Database Mirroring section of the Overview tab in Sybase Central would have displayed an incorrect value for the primary server's state file when the full path for the state file was specified on the server's command line. This has been corrected. |
498568 | If a user U1 with DBA authority granted permissions on a table or view to another user U2, and then DBA authority was revoked from U1, U2's permissions should have been affected immediately. Instead, this change did not appear until the database was restarted. This has been fixed. |
498583 | The server would have rejected a SOAP request containing XML comments with a '400 Bad Request' status. This has been fixed. Comments are now ignored by the server. |
498727 | Starting the server with the command line option -x none (or -x shmem), and no -xs option, causes the server to only listen for connections requests over shared memory. However, if the -z switch was also used in this case, messages about TCP initialization were still displayed. This has been corrected so that these messages will no longer be displayed in this case. |
498793 | When the Interactive SQL utility was run in console mode, if there was an error fetching rows from a result set, the cause of the error (if known) was not being displayed. This has been fixed. Note that this problem existed only in console mode; when run as a windowed program, the full error information was displayed. |
498860 | If a database was backed up, and then an attempt to create a proxy table was made shortly after the backup finished, then there is a likely possibility that the server would have hung. This problem has now been fixed. |
498876 | Under very rare conditions, the server could have hang during a rowscan over a table that had character or binary data. For this problem to have occurred, the data must have been longer than the column's INLINE amount, which defaults to 256 bytes, for both BINARY and CHAR types. This has been fixed. |
498902 | The value returned when calling property('MaxRemoteCapability') would have been 1 higher than the number of the last remote capability. This has been fixed. |
499112 | In certain cases where character set conversion was applied to character data, the server could have gone into an infinite loop, consuming nearly 100% of CPU usage. For this problem to have occurred, the source string must have either contained null bytes, or characters that were ill-formed or illegal in the database character set. This has been fixed. |
499233 | The server may have got into an infinite loop trying to convert an invalid date, time or timestamp value to an integer. This has been fixed. |
499250 | When creating or altering a SERVICE that required a statement, a check was missing to ensure that the service was properly configured with either a SELECT or a CALL statement. A misconfigured service would have always returned a '400 Bad Request' HTTP status for all requests. This has been fixed. |
499252 | HTTP response headers were not set as expected if the SERVICE made a nested call to an inner procedure from where the sa_set_http_header() system procedure was called. Headers cannot be set by the inner procedure because the server has already sent the headers prior to the call. This has been fixed so that calling sa_set_http_header, when the HTTP headers have already been sent, will now result in a SQL error: Invalid setting for HTTP header. |
499301 | When using the New Remote Tables command to add a table to a remote schema in a synchronization model, if the consolidated table had columns matching the timestamp column for timestamp-based download, or logical delete column for logical deletes, then an invalid column mapping would have been created. This would have caused script generation errors. This has been fixed. A work around would be to create a new sync model. |
499313 | It would not have been possible to connect to a "Generic ODBC" database if the password contained any of the following characters: "[]{}(),:?=!@". This has been corrected for all but the equals sign "=", the rest are now allowed. |
499440 | The system function YMD(), may have returned an invalid date from the input arguments. This has been fixed. |
499484 | The comparison of two strings may not have worked incorrectly when using the UCA collation. For this problem to have occurred, the strings must have been longer than 1024 bytes, have been linguistically equal in the characters of the first 1024 bytes, but have been binary distinct.
For example, on a UCA database: select if repeat('a', 1024) || 'a' = repeat('a', 1024) ||'b' then 'equal' else 'not equal' endif would return 'equal'. This has been fixed. |
499504 | During Application Profiling in Sybase Central, attempts to specify a profiling log in the option "Use The Profiling Information In The Following Profiling Log File As A Baseline For Comparison", of Profiling Settings tab of the Database Properties window, could have failed with an error. This has been fixed. |
499522 | If the Unload utility (dbunload) was started with the -ep command line option, but without -ar or -an, the prompt dialog box would have displayed the string "Please enter the encryption key for ???:". This has been fixed. The string now reads "Please enter the encryption key for the data files:". |
499683 | The SQL Anywhere server performs security checks when executing a query to make sure that the user has the necessary permissions for the operation. Under certain circumstances, involving complex queries and/or views, the server could have incorrectly raised a permissions error when the operation should have been allowed. Conversely, the server could have failed to reject an operation that should not have been permitted. This has been fixed so tha the server now applies permission checks correctly. |
499702 | Queries using the set operators UNION, EXCEPT or INTERSECT, on tables with publications, may have returned a "column/table 'x' not found" error. This has been fixed. |
499874 | Only users with DBA authority were allowed to run the Index Consultant from Interactive SQL. This has been corrected so that users with DBA or PROFILE authority are now permitted
to use the Index Consultant. |
499897 | When a remote procedure call was made, if it contained a bigint parameter then an incorrect value for the bigint parameter would have been sent to the remote server. This problem has now been fixed. |
499956 | If queries used an index, where the index keys were long, then in some situations, the server could have crashed. This has been fixed. |
499958 | Pasting more than a couple of million characters into dbisql could have caused the editor to become unresponsive, and eventually report an out of memory error. This has been fixed so that a check is now done to determine if there is enough memory to insert the text and display an error message if there is not. |
499959 | With ASA databases the QAnywhere server caches prepared statements to avoid re-preparing them on each statement execution. During periods of high activity however, the server could have reported "Resource governor for 'prepared statements' exceeded", followed by the failed execution of a SQL statement. This problem has now been fixed. |
499969 | When the event of a download_cursor, or a download_delete_cursor, in a MobiLink server synchronization logic was written as:
{call procedure_name( ?, ? )} for consolidated databases running on an Oracle server, the iAS ODBC driver for Oracle may have given the error: ORA-06553: PLS-306: wrong number or types of arguments in call to 'procedure_name' if the stored procedure returned a result set and the word, "call" was not all in lower-case. This has now been fixed. |
500005 | During diagnostic tracing, nonvolatile statistics could have been recorded incorrectly. This has been fixed. |
500007 | Under rare circumstances, a server running diagnostic tracing could have crashed if the database that was being profiled contained triggers. This has been fixed. |
500017 | The ATTACH TRACING statement could have failed if the database character set was different from the OS character set, and the server name and/or database name of the tracing database contain multibyte characters. This has been fixed for cases when conversion between the OS character set and database character set is not lossy.
Note that using multibyte characters in server and/or database names is not recommended for profiling, especially if the tracing database is started on a different physical server than the database being profiled. |
500074 | A join that included tables containing long strings (roughly one database page or greater in size) may have taken a disproportionate amount of time to complete, or to respond to a cancel. This delay would have increased as the number of rows containing long string data increased. This has been fixed. |
500076 | The use of the DISH SERVICE as the SOAP endpoint for SQL Anywhere applications is now enforced. A SOAP SERVICE may now be configured with a METHODS 'NONE' clause to stipulate that no HTTP methods directed to the given service will be processed. Access to the given SOAP service is only processed through a DISH service that exposes the given SOAP service (i.e. by stipulating a GROUP clause).
In addition, the METHODS clause for a DISH service may now be modified to only allow the POST HTTP method (i.e. METHODS 'POST') which effectively disables access to the WSDL (which is returned by an HTTP GET request), but permits the processing of SOAP requests (which use HTTP POST). Note that SQL Server application developers should test intended SOAP client toolkits to ensure that an HTTP GET request is not made to the DISH service prior to issuing the SOAP request. Some clients may do this to determine whether or not the definitions to the SOAP operations have changed. - New METHODS value: NONE The NONE specifier, when provided, must be the only value in the METHODS clause, e.g.: METHODS 'NONE'. For ease of use, 'NONE' is applicable for any SERVICE. It is intended to be used only for SOAP services, it is not a substitute for SERVICE DISABLE, since a SOAP SERVICE with METHODS 'NONE' will still process requests proxied through a DISH service. When a SOAP service is disabled, it will not process any request through any service. |
500092 | Inserting a string of length L, where L was slightly less than 8*db_property('pagesize') (i.e. within about 13 bytes), into a compressed column could have caused a server crash, or assertion 202000 ("Invalid string continuation at row id ..."). This has been fixed. |
500123 | An embedded SQL application may have hung if all of the following conditions were true:
- the applicaiton had registered a DB_CALLBACK_CONN_DROPPED callback using db_register_a_callback() - the application called db_fini to free the resources associated with a sqlca. - there was a least one active connection associated the sqlca (i.e. there was a connection that had not been disconnected) This was more likely to occur on a Unix system (including Linux and Mac OSX), than on Windows systems. This has been fixed. A work-around is to ensure that all connections are disconnected prior to calling db_fini(); |
500125 | When using the JDBC 3.0 version of the iAnywhere JDBC Driver and calling the method DatabaseMetaData.getColumns(), a result set with only 18 columns would have been returned, instead of 22 columns. Note that the extra 4 columns are in effect meaningless since they provide metadata for Ref types which are not supported in the iAnywhere JDBC driver. Nevertheless, the problem has now been fixed and the method now returns a result set with 22 columns. Using the JDBC 2.0 version of the iAnywhere JDBC Driver will continue to return a result set with 18 columns as expected. |
500128 | The server could have crashed with a division by 0 error when specific repeat() expressions appearred in a query. For this problem to have occurred, the expression in the repeat() function must have specified an NCHAR string literal of zero-length (i.e., N''). The query must also compare the strings in some fashion.
For example: select repeat(N'',row_num) x from rowgenerator group by x This has now been fixed. |
500302 | A SQL Anywhere SOAP SERVICE Soapfault was returned with the HTTP response header "Content-Type: text/html" when the given service had encountered a protocol or parse error. This has been fixed; a "Content-Type: text/xml" is now returned. |
500319 | On the Index Size tab of the Index Consultant, radio buttons for usable options were displayed greyed out as if they were disabled. Other options corresponding to radio buttons were enabled, and could have been selected. This has been corrected so that the options do not appear greyed out when they are enabled. |
500354 | When running with a screen resolution of 800x600, the Tracing Wizard would not have fit onto the screen. This has been fixed. |
500482 | Incorrect diagnostics could have been generated when there were comma-specified joins followed by operation-specified joins (LEFT OUTER JOIN, for example), and an ON condition in the operation-specified joins referenced a column from the comma-separated joins. This was now bee corrected.
A work-around is to place the comma-separated table expressions in parentheses. For a query such as: SELECT * FROM tab1, tab2, tab2 LEFT OUTER JOIN tab4 ON tab4.x = tab1.y the work-around is to rewrite the query as: SELECT * FROM ( tab1, tab2, tab2 ) LEFT OUTER JOIN tab4 ON tab4.x = tab1.y |
500489 | Attempting to start the server may have failed with the error "License file not found" if the followng conditions were true:
- the server was running on one of the Unix platforms (Linux, Solaris, AIX, HP-UX, or Mac OSX), and the executable was located in a nonstandard location. i.e. it is not in bin32 or bin64 directory - the associated license file was in the same directory as the server (which is where it should be) - the PATH environment variable did not contain the directory where the executable was located - the support libraries (libdbserv10_r.so, libdbtasks10_r.so, etc) were located in a different directory than the executable - the user's current working directory was not the same directory as where the executable was located - when attempting to start the server a full or relative pathname to the executable was specified This has been fixed. The server will now start correctly. Work arounds include: - add the directory that contains the server executable to the PATH - make the executable directory the current directory before starting the server - name the directory that contains the executable bin32 or bin64 |
500501 | If one of the encryption componentss (ie dbecc10.dll, dbrsa10.dll, dbfips10.dll) became corrupted, it was possible for the server to return an error the first time it was used, and then crash the second time. This has been fixed. |
500505 | After creating a new tracing database using the Tracing Wizard, the Create Database button remained enabled. This has been corrected so the the button is now disabled after the database is created successfully, and re-enabled only if database file name, user name, or password fields are changed. |
500507 | If a proxy table referred to a table in a DB2 database and had a BLOB column, then attempting to insert data into the BLOB column would have caused syntax errors. Note that this problem did not exist if the column was instead defined as "LONG VARCHAR FOR BIT DATA", which more closely mapped to the SA "long binary" datatype. Nevertheless, the problem with inserting into DB2 BLOB columns has now been fixed. |
500517 | If the AppInfo connection parameter contained non-ASCII characters, and the database charset and the OS charset were different, the non-ASCII characters would have appeared mangled when printed out to the console as part of an abnormal disconnection message, or when the connection was being established if the -z switch was used. This has been fixed. |
500522 | When running the server on multicore Intel x64 hardware, with 64 bit operating systems, the server could have missed opportunities for optimization and intra-query parallelism. This has been fixed. Note, using 32 bit software on these same platforms did not exhibit these problems. |
500523 | After executing:
create login policy test1 password_expiry_on_next_login = on; create user u1 identified by sql login policy test1 force password change off; attempting to connect to u1 using DBISQL caused a prompt for a new password. The "force password change off" clause on the CREATE USER statement should have prevented this prompt. This has been fixed. |
500653 | If a table participated in a publication, it was possible for the server to have failed assertion 100905 ("Articles on the table use do not match those on the table definition") while processing an UPDATE statement that affected the table. This has been fixed. |
500656 | The server may have returned an invalid numeric value when a value of type Double was cast to a numeric type that was too small. This has been fixed |
500661 | When the database option "Blocking" was set to "Off", an attempt to read rows using the SQL Anywhere OLEDB provider, from a table that has some or all of its rows locked, would have resulted in the error DB_S_ENDOFROWSET being returned, which means "no more rows". The error that should be returned was DB_E_TABLEINUSE ("The specified table was in use"). This problem has been fixed. Now, when ExecuteReader is called, the error "User 'DBA' has the row in 'Customers' locked" is reported.
The following .NET example can be used to illustrate the problem. Suppose another connection is inserting rows into the Customers table. Then the following example should result in an error when "blocking" is "off". OleDbConnection conn2 = new OleDbConnection("Provider=SAOLEDB;DSN=SQL Anywhere 10 Demo"); conn2.Open(); OleDbTransaction trans2 = conn2.BeginTransaction(IsolationLevel.ReadCommitted); OleDbCommand cmd2 = new OleDbCommand("SELECT FIRST Surname FROM Customers", conn2, trans2); OleDbDataReader reader2 = cmd2.ExecuteReader(); while (reader2.Read()) { String s = reader2.GetString(0); MessageBox.Show(s); } |
500700 | Applications using ODBC.Net could not have been executed with the Runtime Server. The error displayed when attempting to execute a query would have been:
Triggers and procedures not supported in runtime server This has now been corrected. |
500825 | Attempting to execute queries where the number of join operations exceeded 15, could have caused the UltraLite runtime to crash. This has been fixed. |
500837 | In specific circumstances, the server could have crashed while processing a hash join. This has been fixed. |
500900 | A validation check was missing when a SOAP request was made through a DISH service endpoint. This has been fixed. |
500905 | The Options dialog for the SQL Anywhere Explorer did not display properly when using a large font. This has been fixed by changing the size and location of some of the controls. |
523709 | The server may have crashed when more than one Unload utility (dbunload) was run concurrently with internal rebuild (ie. -an, -ar, -ac). This has been fixed. |
523745 | The server automatically maintains columns statistics, in the form of histograms, to capture the data distribution. Under some specific circumstances, the server could have applied incorrect modifications to the automatically maintained statistics, resulting in potentially poor query access plans. Symptoms of this problem would often have been the presence of duplicate boundary values in the result set of system procedure sa_get_histogram(). This has been corrected by an update to the server's histogram maintenance algorithms. |
523757 | The QAnywhere Server did not always report errors after processing a badly formatted Server Management Request (SMR). The SMRs that suffered from this problem were those that contained any XML elements that did not exactly match those expected by the server (ie, misspelled elements, or elements not included in the DTD), in which case the processing of the request would fail silently. This has been fixed so that the QAnywhere server will now report an error whenever it comes across an unrecognized XML element. The QAnywhere server will now also validate the XML elements in a case insensitive way. As long as the opening tag matches the closing tag, the case is ignored. |
528330 | If an application closes a connection that had statements or prepared statements open, then there was a very small possibility that the application would have crashed. This has now been fixed. |
528358 | If a query plan had a Hash Group By that used a low memory strategy, and there was a SUM() aggregate over a NUMERIC or DECIMAL value, then the wrong answer could have been returned. This has been fixed. |
528359 | When a hash-based execution strategy was used for INTERSECT, EXCEPT, or a semi-join, it was possible for the wrong answer to be returned in specific situations when the operator used a low-memory execution strategy. This has been fixed. |
528430 | Calling the methods ExecuteReader or ExecuteScalar with parameters, would have resulted in a memory leak in the 2.0 provider. This problem has been fixed. |
528627 | Selectivity estimates could have been incorrectly updated if a query with predicate of the form "T.x <op> expr( T.y ) or expr( T.y ) <op> T.x" was executed. These
incorrect predicate selectivity estimates could have lead to lower quality query access plans. When "expr" was an expression referencing one (or more) columns of table with correlation name T, selectivity estimates could have be updated with the assumption that "expr(T.y)" was constant for the duration of the query. This has been fixed. For example: SELECT t.x, t.y, t.z FROM tx AS t WHERE t.x <= t.y + 1 |
528650 | If the precision for a DECIMAL or NUMERIC column was greater than 30, then SQL Remote and RepAgent would only have replicated up to 30 digits in accuracy to a remote or secondary database, and the Log Translation utility (dbtran) might only have written 30 digits in accuracy to a SQL file. The rest of the digits would have been replaced by zero. This problem has been fixed. The accuracy of the replicated/translated data should now be as high as it was stored in the original database. |
528793 | A new connection and database property called "Authenticated" has now been added. The use of these two new properties is as follows:
For OEM servers, once an application has executed the "SET TEMPORARY OPTION CONNECTION_AUTHENTICATION=" statement, the application can then turn around and execute a "SELECT connection_property( 'Authenticated' )" statement. If the result is "YES", then the connection was properly authenticated and all is well. If, however, the result is "NO", then the application can execute a "SELECT db_property( 'Authenticated' )" statement. If the result of this statement is "YES", then the database has been properly authenticated and the connection authentication failed because the CONNECTION_AUTHENTICATION string is incorrect. If, on the other hand, the result of querying the Authenticated database property is "NO", then the connection authentication failed because the database has not been properly authenticated. In this case, the customer should examine the DATABASE_AUTHENTICATION string to determine what is wrong. For non-OEM servers, the result of querying these new properties will always be "NO". |
528822 | When performing database recovery, or running a mirror server, it was possible that index entry cleanup routines could have been called for updates that did not modify the affected index. This could have had a significant affect on performance. It was possible that this might have lead to assertion failures as well. This inappropriate cleaning has been fixed. |
528838 | The server could have crashed, or failed assertion 201501 ("Page for requested record not a table page or record not present on page"), when inserting rows into a table with a clustered index that previously had rows deleted from it. |
528978 | The SQL Remote Message Agent (dbremote) could have displayed the error, "SQL statement failed: (-260) Variable 'n?' not found", where ? was an integer greater than or equal to 10, if a replication table contained more than 9 columns (they could have beeb CHAR, BINARY or BIT type columns) with a data length greater than 256 bytes. This problem has now been fixed. |
529055 | Attempts to connect to a database using connection strings containing a database name longer than 250 bytes, would have failed, even if the database name matched in the first 250 characters. This has been fixed. |
529075 | When trying to use the database tools library on HP-UX (PARISC 32 or 64) to read a database created with a version prior to 10.0, the application would have failed with the error "could find or load the physical store DLL". This has been fixed. |
529193 | The server could have generated poorly performing query access bad plans, due to bad index statistics, and queries involving parallel index scans could have returned incorrect results. These problems have now been fixed. |
529198 | The Index Consultant could have crashed when invoked on a version 11 database. This has been fixed. |
529201 | Under rare circumstances, the server could have crashed if a DML statement was executed while diagnostic tracing was being stopped by the DETACH TRACING statemented. This has been fixed. |
529203 | The changes made for Engineering case 495396 inadvertently caused database names to be limited to a length of 40 bytes. This has been fixed so that database names are now correctly limited to 250 bytes. |
529816 | The changes for Engineering case 499958 did not cover all of the possible pasting actions, and the Interactive SQL utility could still have crashed in some cases. These other cases have now been fixed as well. |
529826 | The user count in the overview database diagram could have been incorrect. This has been fixed. |
529852 | If a client disconnected at a specific time interval, possibly due to liveness timeout, during a positioned update statement, then the server could have failed assertion 101704 - "Unexpected state in positioned update error". This has now been fixed. |
529855 | Sybase Central would have crashed with a NullPointerException if a message's property sheet was opened and the message had properties with null values. This has been fixed. |
530005 | The provider's implementation of the GetParameterInfo() method did not indicate whether parameters in a command were input (DBPARAMFLAGS_ISINPUT), output (DBPARAMFLAGS_ISOUTPUT), or both.
Examples of such commands are: INSERT INTO TestTable (ID,Name) VALUES(?,?) ?=CALL TestProcedure(?,?) This problem has been fixed. The provider now returns the correct settings. A work around is to use the SetParameterInfo() method to set the DBPARAMFLAGS_ISINPUT or DBPARAMFLAGS_ISOUTPUT flags in the DBPARAMBINDINFO structure. |
530027 | Under rare circumstances, the server could have crashed while generating graphical plans with detailed statistics, or graphical plans for diagnostic tracing with at least one tracing level of type PLANS_WITH_STATISTICS. This has been fixed. |
530039 | When a connection is unexpectedly terminated, a message is displayed in the server console containing the AppInfo string for the client. This message was incorrectly being truncated at 255 bytes. This has been fixed. |
530041 | When an SACommand object's Connection property was null, and the methods ExecuteNonQuery, ExecuteReader or ExecuteScalar were called, a wrong error message would havew been given: "Unable to load DLL 'dbdata.dll' : The specified module could not be found."
For example: SACommand cmd = new SACommand(); cmd.CommandText = "UPDATE customers SET name='1' WHERE name='1'"; cmd.ExecuteNonQuery(); This problem has been fixed. |
530054 | When using CSCONVERT() to convert a string to UTF16, incorrect results could have been produced. This has now been corrected. |
530124 | SQL Anywhere allows login policies to be assigned to users. If a non-existent policy name was specified on the CREATE USER or ALTER USER statement, the server would have given a misleading error, or no error, respectively. This has been fixed so that the server now generates a "login policy not found" error in each case. |
530125 | SQL Anywhere allows the COMMENT ON LOGIN POLICY statement to be used in order to store remarks on login policies in the database. Dropping a login policy would have failed to drop the corresponding comments from the catalog as well. This has been fixed so that the server now deletes remarks when a login policy is dropped. |
530126 | SQL Anywhere allowed the use of the system procedure sa_get_user_status() to obtain sensitive information about all users in the database, regardless of whether the user invoking the procedure had DBA authority. This has been corrected so that the server now restricts the result set to one row corresponding to the current user when invoked by a user without DBA privileges. Users with DBA authority are now provided a result set with one row for each user in the database. |
530273 | If there were more than 100 connections actively using Java in the database support at the same time, then the JVM would have crashed, or the server could have hung. This problem has now been fixed. |
530287 | Indexes containing values longer than approx 250 bytes could have become corrupt when an entry was deleted from the index. This has now been fixed. |
530302 | Attempting to executing a batch which did not take a host variable, but included the :var syntax, could have resulted in a communication error. The :var syntax can be used in a CREATE or ALTER SERVICE statement. This has now been fixed. |
530309 | the component that displayed an explanation of the selected connection parameter on the "Advanced" page of the "Connect" dialog, was unreasonably short on Japanese systems. This has been fixed. |
530318 | When diagnostic tracing was enabled, with PLANS or PLANS_WITH_STATISTICS as the tracing type, some plans or cursor information could have failed to have been saved. Alternatively, some plans that did not fit the timing cut-off in ABSOLUTE_COST or RELATIVE_COST_DIFFERENCE conditions, could have benn incorrectly saved. These problems have now been fixed. |
530339 | If an application had a connection enlisted in Microsoft's Distributed Transaction Coordinator (DTC), and it issued a commit on the distributed transaction, then there was a chance the server would have hung when a request to enlist in the DTC came in at the same time as the two phase commit. This problem has now been fixed. |
530427 | The table selection page of the Export wizard contained two controls with the same mnemonic ('e'). This has been fixed. |
530533 | The detailed results from the "Test Connection" tool in the "Connect" dialog could have contained corrupt characters when running on Windows systems. This would have occured when the language for non-Unicode programs (i.e. the "system locale") was set to something other than English (e.g. Japanese), and the machine's location was set to a country which in which English is spoken (e.g. United States). The non-English characters were corrupted. This has been fixed. |
530534 | The changes made for Engineering case 491400, to correct a problem with the marquee in the overview panel flashing excessively when connected to a MobiLink server, introduced drawing artifacts when the horizontal scroll bar was used to move the marquee. This has been fixed. |
530539 | Pressing ALT+I in the "Add to Favorites" dialog did not set the focus to the list of favorites folders. This has been corrected so that now it does. |
530576 | The http_encode() function was not encoding the 0x1f character. This has been fixed. This character is now encoded to "%1F". |
530579 | A new MobiLink server option, -vo, now shows SQL passthrough activity in the MobiLink server. Prior to this option it was impossible to know what was happening on the server when debugging SQL Passthrough. |
530587 | When viewing the server messages from the SQL Anywhere Console utility (dbconsole0 or from the Sybase Central, there was a possibility that messages could have been duplicated or lost. This has been fixed. |
530594 | Closing a ResultSet object may, in very rare cases, crash the iAnywhere JDBC driver. This problem has now been fixed. |
530596 | If a multi-threaded JDBC application attempted to make a connection on one thread while the Java VM was shutting down, there was a chance that the application would have crashed. Note that this problem was specific to Unix platforms only. The problem has now been fixed. |
530597 | The option to continue executing statements after encountering an error with an Interactive SQL statement (such as INPUT, OUTPUT, READ, PARAMETERS, DESCRIBE) was not given. Now it is. This problem did not affect normal SQL statements. |
530710 | Executing an INSERT or an UPDATE that fails, could, in some cases, have caused the database server to fail an assertion. A specific assertion that was likely to have been seen as a result of this failure was: 201501 - "Page for requested record not a table page or record not present on page." For this problem to have occurred, the failing INSERT or UPDATE must have been to a table that had blob columns containing data less than approximately one database page in length, but longer than the column's inline amount. This has now been corrected.
This has been fixed. |
530736 | The changes for Engineering case 491180 (enable write through on CE) introduced a dependency on the file note_prj.dll, which may not have been included on non-standard Windows CE devices. On these devices, the server may have failed to start with an error that it could not find the server or one of its components. The Standard Windows Mobile devices were not affected. This has been corrected and note_prj.dll is now loaded dynamically, and if it is not found, the server will not enable write through on pre CE 5 devices. |
530776 | When a database created by a newer version for SQL Anywhere (eg version 11) was started by an older version of SQL Anywhere (eg version 10), the server would have read some pages, other than the definition page, from the database before verifying that the capabilities of the file and server were compatible. The server now tests the capability bits of a database file against the capabilities supported by the server sooner in the database startup process. There are no known user-visible effects caused by checking the capabilities later, other than when starting an encrypted database created by newer software, the server will no longer prompt for an encryption key before reporting that the capabilities are incompatible. |
530790 | When running the Application Wizard, Sybase Central would have failed to connect to the tracing database if the server had been started with broadcast ignored (-sb 0). This has been corrected. Sybase Central now will include the machine name and port in the connection string when attaching to the tracing database. |
530917 | An application could have hung when opening a pooled connection. The hang was as a result of two problems:
1. The provider was incorrectly calculating a very long timeout period. 2. Dropped connections were not being recycled. These problems have now been fixed. |
530920 | During diagnostic tracing with at least one tracing level of type optimization_logging_with_plans, an incorrect row size could have been reported for a table that had been created immediately before the statement referencing the table was executed. This has been fixed. |
530923 | Occasionaly, a DB_E_BADACCESSORHANDLE error would have been returned by the OLE DB IMultipleResults::GetResult method. This error could have occurred if the DBPARAMS structure that was passed to the ICommand::Execute method was disposed by the client before all the result rowsets from a stored procedure call were returned by calls to the GetResult method. On the final call to GetResult, output parameters may have become available. As a result, the DBPARAMS structure was required to be intact for each call to GetResult. This problem has been fixed. When Execute is called, if it is determined that there are no output parameters, then the DBPARAMS structure will be ignored on subsequent calls to GetResult. |
530930 | The bold title text that appears on the "Advanced" page of the "Connect" window was not displayed consistently. Specifically, the text (e.g. "AppInfo [APP]") would not have been displayed if the Connect Assistant was not initially visible when the "Connect" window was opened, and was then made visible before the "Advanced" page was initially selected. This has now been fixed, as well as a fix for an intermittent problem that caused the description field at the bottom of the "Advanced" page from being too short to display more than one line. |
530954 | The Interactive SQL utility, (as well as other adinistration tools, such as Sybase Central and the SQL Anywhere Console) may have failed to start on newer Linux systems including Linux Red Hat Enterprise 5. These Administration Tools rely on libXp.so.6 which may not have been installed by default. For example, installing the following package solves the problem on RHE5:
libXp-1.0.0-8.1.el5.i386 "X Org X11 libXp runtime library" |
530994 | The SQL Anywhere server allows for the creation of tables with a very large number of columns and/or indexes. The speed at which the server processes operations involving such large schemas has now been significantly improved. |
531081 | The changes for Engineering case 486744 introduced a problem where the server could have crashed while executing a BEFORE UPDATE row level trigger. This has been fixed. |
531094 | The installer may failed on some versions of Linux. Symptoms may have ncluded incorrect reporting of available disk space, and messages such as:
tail: `-1' option is obsolete; use `-n 1' Try `tail --help' for more information. An error occurred while attempting to extract files in /opt/sybase/ The way in which the head and tail utilities were being invoked by the installer was incompatible with some older versions of the Gnu head and tail utilities included on Linux. This has been fixed by replacing the use of head and tail in the setup script with appropriate sed commands. |
531126 | The "Connect" window was displayed on startup even if the "-c" command line option was given and the connection parameters were sufficient to connect. This has been corrected so that the "Connect" window is no longer displayed in this case. |
531128 | On Unix systems, when starting the MobiLink client (dbmlsync) in server mode after having recently shutdown an instance of dbmlsync in server mode, if the same port number was reused on the -sp option it was possible for dbmlsync to have failed to start and report an error similar to "unable to bind to port ...". This problem has now been fixed. |
531154 | The "Browse" button on the "DBConsole" pane of the "Options" window could have been enabled inappropriately , even when message logging was not turned on. This has been fixed. |
531160 | If a statement used a keyset operator, it was possible for the statement to evaluate expressions that should not be evaluated. In order for this failure to appear, the statement must contain some unflattened views or derived tables (such as grouped, distinct, or top-N views). Keyset operators are used to support values sensitive cursors, and they are also used for some UPDATE, DELETE or MERGE statements. This has been fixed.
For example, in the following statement, a division by zero error could be incorrectly returned for a keyset-driven (value sensitive) cursor. select if TMS_1.x = 'zzz' and 1/QT2.y > 0 then 12 endif from ( SELECT x, y FROM TMS_2 GROUP BY x,y ) AS QT2 join TMS_1 ON TMS_1.x = QT2.x |
531295 | The server could have crashed while optimizing complex queries. This has been fixed |
531314 | Double-clicking a .SAPLAN file on a Windows machine did not always work properly. The new "Plan Viewer" window was not automatically activated. If the "Fast launcher" option was on, the wrong plan file could have been opened under some circumstances. Both of these problems have been fixed. |
531323 | If the QAnywhere Agent for Ultralite experienced a failed synchronization then there was a chance that subsequent synchronizations would then have failed with a -193 primary key not unique error. This has been fixed |
531334 | On Linux systems, starting a database that is stored on a non-tmpfs based ramdisk could have failed. This has been fixed.
Note, a work around is to use a tmpfs based ramdisk, or start the server with the -u (use buffered disk I/O). |
531348 | Table locks were not released by the SABulkCopy() method when SABulkCopyOptions.LockTable is specified. This problem has been fixed. |
531523 | Cancelling a statement could have taken several seconds if the statement returned more than 500K of data as text, and it was configured to display results as text. This has been fixed. |
531525 | MobiLink with QAnywhere messaging enabled used approximately 400 KB of heap memory for each QAnywhere client that synchronizes with it. This occurred until the prepared statement cache size (default 200 for SA consolidated databases) was reached, and then each new QAnywhere client caused a cached statement to be dropped and a new statement to be prepared. This behaviour has been changed for SA consolidated databases only. Now the MobiLink server will use a constant amount of heap memory for QAnywhere client synchronizations, and will not overflow the prepared statement cache as many clients synchronize. |
531532 | If a connection was dropped, or the server went down with a fatal error while connecting with ODBC, OLE DB or ADO.NET, or while calling the DBLib functions db_change_char_charset or db_change_nchar_charset, the client application could have crashed. This has been now been fixed. |
531577 | When editing an unsigned column value, if a value larger than the largest signed value was entered, zero would have been incorrectly saved as the column value. This has been fixed so that the value entered is now saved. |
531716 | The HTML files created by the "Generate Database Documentation" feature of the plug-in would have contained titles that Internet Explorer 7 could not display if Sybase Central was running on a non-English machine. This has been fixed.
Note, this problem did not affect Internet Explorer 6 or Firefox 2.0.0. |
531718 | If an application using the iAnywhere JDBC driver attempted to perform a batched insert (using addBatch()/executeBatch()) and the batch size was large (greater than 500), then performance of the batch insert would have degraded significantly when long string columns were involved in the batch. The driver was allocating more memory than necessary, and making several small allocations instead of a few large ones. This problem has now been corrected. |
531730 | After modifying the incremental download size of the QAnywhere Agent using the -idl option, it would not have been possible to reset the size to the default value of -1. Attempting to set the size to -1 would have left the incremental download size unchanged.
This has been fixed. Now, specifying any non-positive number for the -idl option will reset the incremental download size to -1. |
531766 | If a JMS message bound for a QAnywhere client was missing its native address, and no default address was specified for the JMS connector, the QAnywhere Server would have reported a NullPointerException. This has been fixed. The server now reports the proper error message |
531768 | UltraLite appeared in the list of databases to which the Interactive SQL utility could connect on Solaris and OS/X machines. UltraLite is not supported on either of these platforms, and so UltraLite databases have been removed from the user interface on these platforms. |
531784 | If an Open Client or jConnect application executed a query that involved the use of host variables within a batch, then the server would have crashed. This has been fixed so that the query now correctly fails with the error message "Host variables may not be used within a batch". |
531962 | If an application attempted to use a Statement, PreparedStatement or ResultSet object at the same time that the underlying Connection object was closed on a different thread, then there was a chance the application would have crashed.The problem has now been fixed.
Note that finalizing Connection objects can cause the same crash. |
531967 | The QAnywhere Server would have throw an ObjectRepositoryException if it was configured to use a delete rule with an empty condition clause. That is, if a rule was given that had nothing written to the right of the equals sign. One such rule might look like: "AUTO=" This has been fixed. Specifying an empty condition clause now specifies that all available messages should be deleted. |
531993 | On the MobiLink client's setup dialog, clicking either the "cmdline help" or "extended option help" buttons would have caused dbmlsync to shutdown without displaying the help dialog. This has now been fixed. |
532086 | If a server had many concurrent connections using Java in the database support, then there was a chance the server could either have hung, or crashed intermittently. These hangs or crashes could also have occurred at server shutdown time. These problems have now been fixed. |
532102 | The changes made for Engineering case 483518 caused the server to crash if a call to the graphical_plan() function was made within an event handler. This has now been corrected. |
532109 | A query containing a derived table, or a subquery with a OUTER JOIN whose ON condition references tables from outside the query block, may have returned incorrect results. This has been fixed.
In the following example, the ON condition of the LEFT OUTER JOIN in the EXISTS subquery references the table 't1', which is a table used in the FROM clause of the main query block. This query may return incorrect result for some instances of the database. select * from t1 where exists( select 1 from t4 left outer join t2 on ( t2.c1 = t4.c1 and t2.c1 = t1.c1 ) where t4.c1=1 ) |
532116 | Synchronizations through a server that required Digest HTTP authentication would have failed if the server required a reauthentication in the middle of the synchronization. This has been fixed so that the client will now successfully reauthenticate and continue the synchronization. |
532185 | SQL Anywhere keeps track of dependencies of views on other views and tables. For view definition queries that involve more than two UNION, EXCEPT or INTERSECT branches and/or sub-queries, the server's computation of the dependency information could have been incorrect, leading to erroneous behaviour. This has beed fixed so that the server now computes the dependency information correctly.
Note, any existing views compiled with an older version of the server will continue to have potentially incorrect dependency information in the catalog. Existing views can be made to have the correct dependency information by being recompiled, either implicitly during a DDL operation on one of the referenced tables, or explicitly. |
532238 | In SQL Anywhere 10, SOAP web services used the server's HTTP HOST header to generate the namespace returned in the SOAP response. This behaviour was changed in SQL Anywhere 11 to always use the namespace sent in the SOAP request for the response. This change in behaviour has now been integrated into 10.0 in order to better support SOAP clients built with version 10.0 and connect to a server that has been upgraded to version 11.0. |
532254 | A server that had registered itself with LDAP tried could have crashed when trying to start a database using an alternate server name, if an error occurred in reading the saldap.ini file. This has been fixed. |
532276 | A large query containing a 'WITH' clause could have crashed the server. The server was failing to recognize a SYNTACTIC_LIMIT error for such queries. This has now been corrected. |
532280 | The server could have behaved erroneously when new procedures were created from within event handlers, or after having executed the SETUSER statement. Although rare, in the worst case a user could have been allowed to be dropped while still connected. These problems have been corrected so that the server now behaves correctly. |
532314 | If creating a tracing database resulted in an error, the real cause of the error would have been missing from the error dialog details. This has been fixed. |
532450 | It was possible for execution of an OUTPUT statement to cause the statement, which generated the previous results, to be reexecuted unnecessarily. Reexecution of the statement could have resulted in poor performance, or error messages if the statement could not be reexecuted (for example, because it was a stored procedure call with side-effects). This has now been fixed. |
532452 | The changes for Engineering case 530534 (which was a followup fix to Engineering case 491400) were incomplete, resulting in the Overview marquee not updating when zoomed out with the marquee at the leftmost position. This has been fixed. |
532475 | The system procedure dbo.sa_text_index_statistics() can be used to obtain information about existing text indexes in the database. Depending upon the current state of the tables with text indexes defined on them, the server could have failed to return the expected information for all existing text indexes in the database. This has been corrected so that the server will now return the correct answer, regardless of the current state of the server.
Note that since Sybase Central makes use of sa_text_index_statistics() in order to display information on text indexes, Sybase Central will also not work as expected. |
532521 | If a query like the following was excuted:
SELECT TOP var1 START AT var2 * FROM ... and the query referenced a proxy table, and the query could have been handled in full passthru, then the query would have failed with a 'column not found' or 'bad cursor range' error. This problem has now been fixed. |
532626 | In certain rare situations, it was possible for the server to hang when starting a database. This has been fixed. |
532636 | The list of statistics displayed on a version 10 or later server's Statistics tab was incomplete; specifically, it excluded statistics introduced in version 10. This has been fixed. |
532638 | Incorrect results may have been obtained from queries when there was a LIKE search condition combined with an ORDER BY ... DESC clause, when both of these clauses specified a column that was the first column in an index.
For example: SELECT * FROM MyTable WHERE col LIKE 'abc%' ORDER BY col DESC The implementation of LIKE predicates with reversed index scans was erroneous. This has now been corrected. |
532668 | The SORTKEY function did not allow the first parameter to be BINARY if the second parameter (the collation id) was not an integer. Similarly, COMPARE did not allow either of the first two parameters to be BINARY if the third parameter (the collation id) was not an integer. For example, SORTKEY( cast( 'a' as binary ), 'dict' ) would have reported the error "Cannot convert weCHAR values. |
532793 | ODBC Driver by Sybase: The iAnywhere MobiLink application hangs during connection failover event. |
532796 | If a database was started with an alternate server name on an already-running server, in rare cases, subsequent TCP connection attempts to the server may have failed. This has been fixed. |
532802 | Closing a ResultSet object may have, in very rare cases, crashed the iAnywhere JDBC driver. This problem has now been fixed. |
532807 | The Server Message Store wizard could have failed to complete with the message "Could not install QAnywhere support. Request to start/stop database denied". This would have occurred if a server was already running and it was not started with the "-gd DBA" or "-gd all" command line options, and "Create an ODBC data source" was checked in the wizard. This has now been fixed. |
532816 | Automatic creation of a tracing database (either through the Profiling wizard or the Tracing wizard) could have failed if the database used secondary dbspaces with absolute (hard-coded) paths. This could have arisen when the machine on which the profiling/tracing database was being created didn't have a directory structure that matched the one for the production database, and was especially likely if the two machines ran different operating systems. If the two machines involved are running the same OS, the presence of the missing drives / directories is now simulated, if possible. Otherwise, the workaround is to unload the database to the same machine, start the copy, and move the dbspace files on the copy to directories that can be specified with relative paths. Then, issue ALTER DBSPACE RENAME commands to point the main dbspace at the new dbspaces. The database can now be copied to the machine that will host the tracing database. |
532819 | If a START DATABASE statement or an attempt to autostart a database on an already-running server, failed due to an alternate server name conflict, a second attempt to start the database with the same (conflicting) alternate server name would have succeeded when it should have failed as well. This has now been fixed. |
532825 | A new logging option has been added to the MobiLink server. The -vm command line option will cause the server to print to the log the duration of each sync and the duration of each sync phase whenever a sync completes. The sync phases are the same as those displayed in the MobiLink monitor. Each value is prefixed with "PHASE: " to aid searching for and printing the values.
Sample output follows: I. 2008-06-05 14:48:36. <1> PHASE: start_time: 2008-06-05 14:48:36.048 I. 2008-06-05 14:48:36. <1> PHASE: duration: 175 I. 2008-06-05 14:48:36. <1> PHASE: sync_request: 0 I. 2008-06-05 14:48:36. <1> PHASE: receive_upload: 19 I. 2008-06-05 14:48:36. <1> PHASE: get_db_worker: 0 I. 2008-06-05 14:48:36. <1> PHASE: connect: 18 I. 2008-06-05 14:48:36. <1> PHASE: authenticate_user: 51 I. 2008-06-05 14:48:36. <1> PHASE: begin_sync: 69 I. 2008-06-05 14:48:36. <1> PHASE: apply_upload: 0 I. 2008-06-05 14:48:36. <1> PHASE: prepare_for_download: 1 I. 2008-06-05 14:48:36. <1> PHASE: fetch_download: 4 I. 2008-06-05 14:48:36. <1> PHASE: wait_for_download_ack: 0 I. 2008-06-05 14:48:36. <1> PHASE: end_sync: 0 I. 2008-06-05 14:48:36. <1> PHASE: send_download: 10 I. 2008-06-05 14:48:36. <1> PHASE: get_db_worker_for_download_ack: 0 I. 2008-06-05 14:48:36. <1> PHASE: connect_for_download_ack: 0 I. 2008-06-05 14:48:36. <1> PHASE: nonblocking_download_ack: 0 |
532846 | Columns with data types of LONG BINARY or LONG VARCHAR were not stored correctly during a synchronization download. This has now been corrected. |
532850 | Executing a CREATE EXISTING TABLE statement to create a proxy table when the remote table has an unsupported index on it, could have caused the statement to fail. This problem has now been fixed. |
532859 | It was possible to get gaps between transaction logs when using the Backup Database command to rename a transaction log, or when using dbmlsync -x to rename and restart a transaction log. It was also possible, although more unlikely, to have a transaction log that was missing a transaction that was already committed to the database. This has been fixed. |
532999 | The database property 'VersionStorePages' was reporting the total number of pages in the temporary file rather than the number of pages in the version store. This has now been fixed. |
533010 | When using the new ULODBC class to map a proxy table to a table within a non-UTF8 MBCS UltraLite database, and then attempting to fetch string data from that proxy table, there was a chance the data would have had additional garbage characters. This problem has been fixed. |
533012 | The connection property 'IsDebugger' has been added to allow connections which are currently being used to run the procedure debugger to be distinguished from normal connections. The value of connection_property('IsDebugger',number) will be 'Yes' if "number" corresponds to the connection number of a debugger connection, and 'No' otherwise. |
533013 | When executed from within a login procedure, a BACKUP statement, an external function call, a web service request, a Java request or a remote procedure call could have caused the requesting connection to hang indefinitely. In certain cases, such as when executing a BACKUP statement, this hang could eventually cause other connections to hang as well. This has been fixed. |
533028 | If a database contained materialized views, and one of the base tables referenced by a materialized view contained foreign key constraints, then the Unload utility (dbunload) could have generated a reload script that would have failed to execute. The reload script would have contained ALTER TABLE ... ADD FOREIGN KEY statements after the creation of materialized views. The server now allows the reload script to execute without errors.
Note, a work-around is to manually edit the reload script to make the reload work. |
533055 | If a LIKE predicate contained specific forms of patterns, and it referred to a column contained in an index, then it was possible for the server to crash when opening the statement containing the LIKE predicate. This has been fixed. |
533249 | The download phase of a synchronization could have failed with a -194 error ("No primary key value for foreign key"). This was most likely to have occurred during large synchronzations or when the database engine is under considerable stress. This has now been fixed. |
533264 | Synchronization profiles were incorrectly appearing in the Extended Database Properties tab of an UltraLite database抯 property sheet. This has been corrected. |
533270 | The default Precision and Scale values for an UltraLite database are 30, 6 respectively. When creating a table using the plug-in for Sybase Central, these values were used as defaults for numeric columns, even when the database抯 default Precision and Scale values were different. This has been fixed. |
533327 | Certain illegal column domains were not being diagnosed, such as VARCHAR(-1). This has been corrected. |
533459 | In some cases indexes could be left in a bad state after a large number of rows are deleted. Depending on the subsequent operations the problem could either have corrected itself, or lead to index corruption. Any table which ever had a row count that was 256 or more, less than its maximum row count could potentially have encountered this bug. The most common symptom was queries that returned less rows than expected. This has now been corrected. Databases that are suspected of having index corruption should be rebuilt (eg. ulunload/ulload or start with a new db and synchronize it) |
533478 | A multi-threaded client application, using the ADO .Net provider, could have crashed, hung or leaked memory if it did not handle thread synchronization properly. This problem has now been fixed. |
533570 | If a row was deleted, the delete rolled back, and then the row was updated, a snapshot scan may have seen the updated value before the update was committed. This has now been fixed. |
533600 | When using a derived table in a remote query, if one or more columns from the derived table were referenced in the WHERE clause of the query, and the query was going to be processed in full passthru, then the engine would have returned with a "correlation name not found" error. This problem has now been fixed. |
533604 | If a multi-threaded JDBC application generated a ResultSet object on one thread, at about the same time that the underlying Statement object was closed on another thread, then the application may in very rare cases have crashed, if that ResultSet object was subsequently closed. The same problem could have occurred if the ResultSet object was generated at about the same time that the underlying Connection object was closed. This problem has now been fixed. |
533612 | On a slow devices, the QAnywhere client (qaagent) would sometimes have given the following error messages at start up: "Error registering with DBLSN code: -1" and "Failed to start QAnywhere Agent (register with DBLsn)". This has been fixed so that the QAnywhere client is now much more tolerant to lengthy dblsn startup times. |
533724 | The server would have crashed if the sa_locks() system procedure was executed when it was running in bulk operation mode (-b server command line option). This has been fixed. |
533726 | Spaces and tabs were not allowed to be used before the "GO" command delimiter keyword. This has been corrected so that they are now allowed. |
533728 | A small window of opportunity existed in the QAnywhere server where a statement could be closed and removed from the statement cache, just as another thread was preparing the statement to be closed. This resulted in some operations being performed on a closed statement, resulting in a JDBC error. This has been fixed |
533729 | The 64-bit version of the UltraLite .NET component could have throw an "Unknown ULDbType" exception when opening a table. This has been fixed. |
533746 | If a download was interrupted by a network failure, it was possible for the MobiLink client (dbmlsync) to fail to create a restartable download file. Furthermore, dbmlsync would have displayed a network error to the dbmlsync log, but then attempted to apply the partial download, which would almost certainly have failed. This has been fixed so that dbmlsync now creates a restartable download file and does not attempt to apply the partial download. |
533749 | The iAS ODBC driver for Oracle could have given mangled error and warning messages to the application when it was running on a operating system that used a multi-byte character set, such as a Japanese or Chinese. This problem is now fixed. |
533793 | If a server had multiple databases loaded, each with a different character set, the database name returned by the system function "db_property('Name', <dbid>)" could have been improperly character set converted. This could have made the name returned appear garbled. For this to have occurred, the database ID specified by "<dbid>" must have been different from the ID of the database of the connection. This has now been fixed. |
533802 | Execution of a SELECT statement that referenced a procedure call in the FROM clause could have resulted in a server crash. For this to have occurred, the connection must have had several cursors open, or have had several prepared statements. This has now been fixed. |
533804 | When the MobiLink server was under heavy load, the Mobilink monitor may have crashed, hung or disconnect from the Mobilink server. This has now been fixed. |
533805 | If a consolidated database was running on an Oracle 9i or later server, the MobiLink server could have sent clients a next_last_download_time (a timestamp value used to generate a download in the next synchronization) that was earlier than the last_download_time (a timestamp value used to generate the download in the current synchronization). This problem could have caused a MobiLink client to complain when it was trying to apply the downloaded file. This problem has now been fixed. |
533830 | If at some point during the current session the Views folder, or a materialized view in the tree, was selected then Sybase Central could have caused shared locks to be held on all manual, valid, non-initialized materialized views. These locks would have prevented the refreshing of any such materialized view via another connection, for example from an ISQL session. This has been fixed. |
533936 | In rare situations, Java applications using the iAnywhere JDBC driver with concurrent connections may have hung, or even crashed. Several fixes have been made to correct race conditions between concurrent connections. |
533950 | The sa_locks() system procedure can be used to get a report on server locks currently held by various connections. Since both base tables and materialized views hold data, locks can be held on objects of either type. The server will now report the type of "MVIEW" for locks held on materialized view instead of the type of "BASE", which will continue to be reported for locks on base tables. |
533958 | When the event of a download_cursor, or a download_delete_cursor, in a MobiLink server synchronization logic was written as:
{call procedure_name( ?, ? )} for consolidated databases running on an Oracle server, the iAS ODBC driver for Oracle may have given the error: ORA-06553: PLS-306: wrong number or types of arguments in call to 'procedure_name' if the stored procedure returned a result set and the word, "call" was not all in lower-case. This has now been fixed. Note, the iAS ODBC driver for Oracle in version 9.0.2 is actually the driver from version 10.0.1. Versions of the driver with this fix are 10.0.1 3686 or later. |
533974 | When calling a Java stored procedure from the Interactive SQL utility with a SQL argument of type DATE, TIME or TIMESTAMP and a Java argument of type java.sql.Date or java.sql.Time, the server would have returned a parse exception from the JVM. Using dbisqlc to make the same Java stored procedure call would have worked fine. This problem has now been fixed. |
533979 | The columns from stored procedure result sets were not being excluded when Visual Studio enumerated stored procedure parameters. This has now been corrected. |
533994 | The "Messages" tab could have remained selected after executing a statement which returned result sets. This has been corrected so that the first result set tab is now always selected. |
534001 | The Java Runtime Environments that are included in SQL Anywhere have been updated to version 1.4.2_18 for 9.0.2 and 1.5.0_16 for 10.0.1. These updates include a number of security fixes which do not directly impact SQL Anywhere software, but were done to help those customers whose corporate policies preclude the installation of older JRE updates which contain known security defects.
In the future, customers will be able to update the JRE themselves by following instructions which will be made available shortly. |
534003 | In graphical plans, the operator for a table accessed using an index-only scan was drawn as a table-scan operator, not as an index-scan operator. This has been fixed. |
534005 | If the QAnywhere client (qaagent) was started using a rules file for its policy, then shut down and restarted with a syntax error on the command line, in some situations an error such as
"SQL statement failed: (-265) Procedure 'ml_qa_sync_rule_0' not found" would have occurred in the MobiLink client (dbmlsync). This has been fixed. |
534132 | If many rows had been deleted from the end of an index, and the server was under heavy load for some period of time after that, there was a chance that the server could have crashed. |
534135 | The iAS ODBC driver for Oracle could have given mangled error and warning messages to the application when it was running on a operating system that used a multi-byte character set, such as a Japanese or Chinese. This problem is now fixed.
Note, the iAS ODBC driver for Oracle in version 9.0.2 is actually the driver from version 10.0.1. Versions of the driver with this fix are 10.0.1 3715 or later. |
534147 | The server could have crashed following many concurrent updates and/or inserts to a large indexed table. This has now been fixed. |
534156 | If the 'datasource', 'host', or 'port' command line options were used, dbisql would not have started, but would not have reported an error. This has been corrected so that these options are now accepted and processed correctly. |
534168 | Altering a column with an IMMEDIATE REFRESH text index would have caused the server to fail an assertion. This is fixed. |
534179 | Java messages could have been corrupted on operating systems with non-English character sets. Character set conversion was not being done correctly. This has been fixed |
534292 | When run on non-Windows platforms, the Server Message Store wizard would have crashed after leaving the second page. This has been fixed.
In related issues, the toolbar button for opening this wizard was missing, and the "Create a client message store" item should have been removed from the Task list on non-Windows machines, but was not. These have been fixed as well. |
534294 | The server keeps track of the dependencies of views on other tables and views. When the schema of a table is modified by using the ALTER TABLE statement, the server automatically and atomically recompiles all views whose view definitions depend upon the schema of the table being modified. All views that can be compiled without errors with the new table schema are rebuilt persistently in the catalog and remain valid after reflecting the changes in the table schema. Views that fail to compile are left in a state where the server automatically tries to recompile them in the future. If column permissions, as opposed to table permissions, had been granted on a view dependent on the table being modified, the execution of ALTER TABLE could have failed with referential integrity violations on SYS.SYSTABCOL. This has been corrected so that the server now automatically attempts to restore the old column permissions on views that are recompiled as a consequence of ALTER TABLE. Permissions on columns that no longer exist in the recompiled view(s) are lost.
See Engineering case 536015 for a related issue. |
534307 | If an application using the iAnywhere JDBC driver attempted to use the optional DatabaseMetaData.getUDTs() method, the driver would have throw a "not yet implemented" exception. The iAnywhere JDBC driver has now been enhanced to return a proper result set for the getUDTs() method if the driver is connected to an SA database. For all non-SA servers, the iAnywhere JDBC driver will continue to throw the "not yet implemented" exception. |
534320 | Sybase Central could have crashed while using the QAnywhere plugin, if the connection to a server message store was unexpectedly lost. This has been fixed. |
534321 | The server could have crashed when processing an HTTP request that required character set conversion. This has been fixed. |
534324 | Statements that appeared in stored procedures may have used a cached execution plan (see Plan caching in the documentation). In some cases, a stale value of a builtin function could have been returned for subsequent executions of the statement. This has now been corrected. The following builtin functions were affected by this issue:
connection_extended_property connection_property db_extended_property db_property estimate estimate_source event_condition event_condition_name event_parameter experience_estimate http_body http_header http_variable index_enabled index_estimate next_connection next_database next_http_header next_http_variable next_soap_header property rewrite soap_header varexists watcomsql For web services based on sessions, connection properties such as SessionLastTime could also have been affected by this (among other builtins). This incorrect behaviour was masked in version 10.0.1 for web services using sessions. |
534333 | When calling the system function REGEXP_SUBSTR() with non-ASCII characters, it could have returned an incorrect result, possibly consisting of invalid characters. The input strings were being cast to NCHAR values, and then the resulting NCHAR output was treated as a CHAR, resulting in garbled output if the database character set was not UTF8. This has been fixed. |
534356 | Very occasionally, the Interactive SQL utility may not have started when the fast launcher option was turned on. This problem has been fixed. |
534358 | Use of any of the TLS options "certificate_name", "certificate_unit", or "certificate_company" would have caused connections to fail with a "TLS handshake failure" error. This has been fixed. As a workaround, the options "name", "unit", and "company" can be used. |
534402 | Incorrect results were possible when executing queries with a LEFT OUTER JOIN and a WHERE clause whose elements are all from the left hand side of the join. This has been corrected. |
534404 | The comparison of two NULL values would have erroneously resulted in TRUE, instead of UNKNOWN. This has now been corrected. |
534471 | The server performs an implicit commit before and after the execution of a CREATE INDEX statement. The act of performing a commit following execution releases any locks obtained by the server during the creation of the index. If the create statement failed due to an error, then the server could have failed to release the locks obtained before the point of failure. There was no other user visible impact and the held locks were released when the connection next performed a COMMIT or ROLLBACK. This has been corrected so that the server now release the held locks automatically. |
534482 | If a connection string contained an invalid encryption parameter, or was missing the mandatory trusted_certificates parameter, the error returned would have been: "Could not initialize the encryption DLL: '???'" This has been corrected so that a TLS handshake error will now be returned, as in previous releases. |
534496 | An expression that converted an integer value to a NUMERIC or a DECIMAL, could have leaked memory in the server if an overflow error was generated. If enough of these expressions were evaluated, server execution could have been impaired. This has been fixed. |
534586 | Information about column defaults was not being reloaded on subsequent connections after the default information was created. This resulted in column defaults not being automatically generated for NULL columns on INSERTS. Loading of the additional field has now been implemented. |
534742 | The MobiLink server, and Java and .NET APIs, have been modified to allow users to register to receive notfications whenever an info line is printed to the log (i.e. lines prefixed with "I.").
Java: The following methods, added to interface ianywhere.ml.script.ServerContext are used to register or unregister listeners: /** * Adds the specified LogListener to receive a notification * when info is printed. * method {@link LogListener#messageLogged} will be called. * * @param ll the LogListener to be notified on warning */ public void addInfoListener( LogListener ll ); /** * Remove the specified LogListener from the list of * listeners to receive a notification * when info is printed. * * @param sl the listener which will no longer be notified */ public void removeInfoListener( LogListener ll ); The following constant, added to class ianywhere.ml.script.LogListener, is returned by LogMessage.getType() for info messages: public static final int INFO = 2; Example: The following code registers a listener of type MyLogListener to receive notifications of info messages. // ServerContext serv_context; serv_context.addInfoListener( new MyLogListener( ll_out_file )); The following code shows an example of processing those messages: class MyLogListener implements LogListener { FileOutputStream _out_file; public TestLogListener( FileOutputStream out_file ) { _out_file = out_file; } public void messageLogged( ServerContext sc, LogMessage msg ) { String type; String user; try { if(msg.getType() == LogMessage.ERROR) { type = "ERROR"; } else if(msg.getType() == LogMessage.WARNING) { type = "WARNING"; } else if(msg.getType() == LogMessage.INFO) { type = "INFO"; } else { type = "UNKNOWN!!!"; } user = msg.getUser(); if( user == null ) { user = "NULL"; } _out_file.write( ("Caught msg type=" + type + " user=" + user + " text=" +msg.getText() + "\n").getBytes() ); _out_file.flush(); } catch( Exception e ) { // if we print the exception from processing an info message, // we may recurse indefinately if( msg.getType() != LogMessage.INFO ) { // Print some error output to the MobiLink log. e.printStackTrace(); } } } } .NET: Callback functions can be registered to the following event, added to interface iAnywhere.MobiLink.Script.ServerContext, to receive notifications about info messages: /// <summary> /// Triggered when the MobiLink server prints info /// </summary> event LogCallback InfoListener; The following, added to enum iAnywhere.MobiLink.Script.LogMessage.MessageType, can be returned by the Type property of the LogMessage class /// <summary> /// A log info message.</summary> INFO Example: The following code defines a callback that will process an info message. internal class TestLogListener { public TestLogListener( StreamWriter output_file, LogMessage.MessageType expected_type ) { _output_file = output_file; _expected_type = expected_type; } public void errCallback( ServerContext sc, LogMessage lm ) { string type; string user; if( lm.Type != _expected_type ) { _output_file.WriteLine( "Message type not expected!!" ); return; } if( lm.Type==LogMessage.MessageType.ERROR ) { type = "ERROR"; } else if( lm.Type==LogMessage.MessageType.WARNING ) { type = "WARNING"; } else if( lm.Type==LogMessage.MessageType.INFO ) { type = "INFO"; } else { type = "INVALID TYPE!!"; } if( lm.User == null ) { user = "null"; } else { user = lm.User; } if( (lm.Text.IndexOf( "10017" ) > 0) || (lm.Text.IndexOf( "10018" ) > 0) || (lm.Text.IndexOf( "10020" ) > 0) || (lm.Type == LogMessage.MessageType.INFO && lm.Text.IndexOf( "MobiLink server started" ) < 0 ) ) { return; } _output_file.WriteLine( "Caught msg type=" + type + " user=" + user + " text=" + lm.Text ); _output_file.Flush(); } StreamWriter _output_file; private LogMessage.MessageType _expected_type; } The following code adds the callback to the InfoListener event. // ServerContext _sc; TestLogListener itll = new TestLogListener( log_listener_file, LogMessage.MessageType.INFO ); sc.InfoListener += new LogCallback(itll.errCallback); |
534774 | Non-disabled materialized views were described as having a status of "Valid". Now, the correct term "Enabled" is used, and the term "Valid" is used only for non-materialized views. |
534792 | The OLE DB provider did not correctly support the DBCOLUMN_BASECOLUMNNAME rowset column of the IColumnsRowset::GetColumnsRowset method. This column should contain the name of the column in the data store, which might be different than the column name returned in the DBCOLUMN_NAME column if an alias or a view was used. Here is an example.
CREATE TABLE GROUPO.MyTable( DATA2 varchar(16), DATA1 varchar(16), PKEY int NOT NULL default autoincrement, CONSTRAINT PKeyConstraint PRIMARY KEY (PKEY) ) ; CREATE VIEW DBA.MyView( PKEY, DATA_1, DATA2) AS SELECT PKEY, DATA1, DATA2 FROM MyTable; Consider the following queries. SELECT PKEY, DATA_1, DATA2 as D2 FROM MyView SELECT PKEY, DATA1 as DATA_1, DATA2 as D2 FROM MyTable In both cases, the OLE BD provider would return the following for DBCOLUMN_BASECOLUMNNAME and DBCOLUMN_BASETABLENAME for these queries. PKEY MyTable DATA_1 MyTable D2 MyTable Of course, the DATA_1 and D2 columns are not found in MyTable. With this fix, the provider now returns the correct column names. PKEY MyTable DATA1 MyTable DATA2 MyTable |
534837 | Predicates with AND, OR and NOT expressions along with UNKNOWN could have produced incorrect results. This has now been corrected. |
534927 | Control of an HTTP session time-out duration was not passed to subsequent HTTP requests belonging to the same session if a TEMPORARY HTTP_SESSION_TIMEOUT database option had been set (in a previous HTTP request belonging to the session). The scope of the problem applied to all TEMPORARY database options set within an HTTP session context. The problem was due to user id being reset for each HTTP request. This has been corrected so that an HTTP request within a session context will no longer reset its user id if it is identical to the user id of the current service.
The problem remained however if an HTTP session was used to call a service that specified a different user id. A SA web application using HTTP sessions should only use TEMPORARY and/or USER specific options when all requests within the HTTP session context access SA services defined with the same user id. Similarly, accessing an authenticated SERVICE would require that the HTTP request belonging to a session provide the same user id from request to request. To address this, a new HTTP OPTION called SessionTimeout has been added to make HTTP session time-out criteria persistent in all cases. It can be set from within an HTTP request that has defined, or will define, a SessionID. The context of the setting is preserved throughout the HTTP session, until it expires, is deleted or changed (with a subsequent SA_SET_HTTP_OPTION call). - New SA_SET_HTTP_OPTION option SessionTimeout The value of this HTTP OPTION is specified in minutes. It is subject to the minimum and maximum constraints of the HTTP_SESSION_TIMEOUT database option. A newly created session is implicitly assigned the current or default PUBLIC/USER HTTP_SESSION_TIMEOUT. The following example sets a given HTTP session time-out to 5 minutes: call SA_SET_HTTP_OPTION('SessionTimeout', '5'); An empty value resets the option to its default value, or as set by the PUBLIC or USER scope HTTP_SESSION_TIMEOUT database option. call SA_SET_HTTP_OPTION('SessionTimeout', ''); // resets the time-out to 30 minutes - the default value of the HTTP_SESSION_TIMEOUT database option SET OPTION PUBLIC.HTTP_SESSION_TIMEOUT=1 // New HTTP sessions calling SA_SET_HTTP_OPTION('SessionTimeout', '') set session time-out to 1 minute SET OPTION USERA.HTTP_SESSION_TIMEOUT=15 // New HTTP sessions calling SA_SET_HTTP_OPTION('SessionTimeout', '') set session time-out to 15 minutes for USERA NOTE: HTTP session default criteria is derived from the current PUBLIC/USER HTTP_SESSION_TIMEOUT database option setting. Any subsequent changes to this option will not implicitly affect existing HTTP sessions. The default timeout setting for HTTP sessions that always use the same user id remains unchanged. However, an HTTP request belonging to a session that calls a service with an alternate user id will force its cache to be cleared and the option defaults of the current user to be loaded. Therefore, when the session switches users all TEMPORARY options are lost and the current PUBLIC/USER options are assigned. - New CONNECTION_PROPERTY('SessionTimeout') Returns the time-out value in minutes for a given database connection belonging to an HTTP session. The value is the current setting for SA_SET_HTTP_OPTION('SessionTimeout', 'X'). A value of 0 is returned if the database connection does not belong to an HTTP session. As before, the HTTP_SESSION_TIMEOUT database option may be queried to determine the PUBLIC/USER default values. - Summary of changes TEMPORARY and USER scope options are preserved when HTTP requests belonging to a session execute SA services defined with a specific (the same) user id. SessionTimeout HTTP_OPTION has been added to provide an HTTP session context time-out criteria. Its use is recommended in place of setting a TEMPORARY HTTP_SESSION_TIMEOUT database option since it is guaranteed to persist for the life of the session. |
534931 | A query that did a scan of an index when the isolation level was set snapshort, could have returned extra rows. This has now been corrected. |
534949 | The iAS ODBC driver for Oracle would have truncated the time portion of timestamp values, when the application was trying to fetch the timestamp values using SQLGetData. An internal buffer was too small for a timestamp column. This has been fixed. |
534963 | The server tracks dependencies of views on other views and tables. If a table is referenced by other views, attempting to execute an ALTER TABLE statement on the referenced table could have caused the server to crash under certain circumstances. This has been fixed, the server now carries out the ALTER properly.
A workaround is to disable the dependent view before executing the ALTER statement, followed by a re-enabling of the view. |
534966 | Sybase Central did not allow creating, modifying or deleting services for the MobiLink Listener utility (dblsn), the Broadcast Repeater utility (dbns11), and the SQL Anywhere Volume Shadow Copy Service (dbvss11). Attempting to open the properties for one of these types of services would have caused Sybase Central to crash. These problems have been fixed. |
534995 | When deploying a synchronization model to an UltraLite remote database, the generated <model>_ulsync.bat and dblsn.txt files incorrectly used the version 10 syntax for ulsync. This has now been corrected. |
535215 | The server supports the ANSI MERGE statement, with some vendor extensions, which can be utilized to merge data from one source into another. Under certain circumstance, the MERGE statement could have behaved incorrectly. As an example, if the MERGE statement was instructed to update multiple rows of the target table based on the same matching conditions, then the values visible for the new row within a BEFORE UPDATE row level trigger could have been incorrect. This problem has been resolved. |
535235 | The Listener utility (dblsn) with persistent connection turned off, may have failed to confirm message delivery or action execution. This may also have caused the MobiLink server to report protocol errors. This has been fixed. |
535244 | The IIS relay server would have leaked one mutex handle per http request. This has now been fixed.
A workaround is to set the worker recycling option for IIS to ON, in order to keep the leak under control. |
535363 | The encrypted form of a user password that had been set by a CREATE USER, or an ALTER USER, statement could have been interpreted incorrectly if the transaction log was translated by the Translation utility (dbtran) and the resulting SQL file re-executed. This was likely to be a problem only for databases using multi-byte character sets, and has now been fixed. |
535586 | If an index was defined in the reference database as:
create index idx on t(a asc, b asc, c asc) The UltraLite Initialize Database utility (ulinit) would have created the index as: create index idx on t(c asc, b asc, a asc). reversing the order of the columns. This has been corrected and ulinit will now create the index in the same order as the reference database. |
535591 | An error would have been reported if a string of connection, or synchronization, parameters used parentheses inside a sublist.
For example: stream=http(host=myhost;url_suffix=root/(MyName)/ml;port=80) This has now been fixed. |
535592 | If a CREATE EXTERNLOGIN statement was executed with an empty string for the password, the password recorded in the transaction log would have been incorrect. This has been fixed. |
535627 | The database properties CleanablePagesAdded and CleanablePagesCleaned could have reported that there were pages to clean when in actuallity there were none. This would have happened if a dbspace with cleanable pages was dropped. This has now been fixed. |
535637 | If execution of a LOAD TABLE statement failed, and the table was large, database corruption could have resulted. The server may have freed a page twice. This has been fixed. |
535643 | Cancelling an ALTER TABLE statement for a large table, may have left the database in a corrupt state. This has been fixed. |
535662 | A SQL Anywhere JSON SERVICE may have returned unencoded control characters when the server wrote content that was greater than 256 bytes. This has been fixed. Strings containing control characters, such as newline, are now always encoded (i.e. "\n" is returned rather than 0x0A). |
535799 | Executing queries using SELECT FIRST or SELECT TOP N, referencing proxy tables to a remote DB2 server, would have failed with a syntax error. DB2 does not support the FIRST and TOP N syntax; instead, the query must use FETCH FIRST ROW ONLY for FIRST, or FETCH FIRST N ROWS ONLY for TOP N. This problem has now been fixed. |
535804 | Values for SOAP input TIME and DATETIME data types were incorrectly converted to the server's locale if the value contained a negative time zone offset, with a nonzero minute field, i.e. GMT-03:30 (Newfoundland). This has been fixed.
In addition the processing of DATE values has modified with this change. The TZ offset if provided with an input DATE value is now ignored, and the TZ offset is no longer appended to an output DATE value (within the HTTP/SOAP response). |
535817 | Sybase Central was not able to attach to a tracing db when the server was set to ignore all broadcasts (-sb 0), and no PORT number was specified. This has been fixed.
Note, this is a follow-up to Engineering case 530790. |
535849 | An application using the iAnywhere JDBC driver was not able to change the connection isolation level to one of the SA Snapshot Isolation levels. This problem has now been resolved. To use one of the SA Snapshot Isolation levels, the application can now call the Connection.setTransactionIsolation method with one of the following values:
for applications using ianywhere.ml.jdbcodbc.IDriver, use: ianywhere.ml.jdbcodbc.IConnection.SA_TRANSACTION_SNAPSHOT ianywhere.ml.jdbcodbc.IConnection.SA_TRANSACTION_STATEMENT_SNAPSHOT ianywhere.ml.jdbcodbc.IConnection.SA_TRANSACTION_STATEMENT_READONLY_SNAPSHOT for applications using ianywhere.ml.jdbcodbc.jdbc3.IDriver, use: ianywhere.ml.jdbcodbc.jdbc3.IConnection.SA_TRANSACTION_SNAPSHOT ianywhere.ml.jdbcodbc.jdbc3.IConnection.SA_TRANSACTION_STATEMENT_SNAPSHOT ianywhere.ml.jdbcodbc.jdbc3.IConnection.SA_TRANSACTION_STATEMENT_READONLY_SNAPSHOT |
535861 | Updates to the OLE DB schema support procedures were not installed into the database using the Upgrade utility (dbupgrad) or when executing an ALTER DATABASE UPGRADE statement. They were installed though when the PROCEDURE ON clause was used with ALTER DATABASE UPGRADE. To ensure that dbupgrad will perform the OLE DB update, the ALTER DATABASE UPGRADE support procedures will now update and/or install the latest OLE DB schema support procedures. Since PROCEDURE ON is no longer required for the OLE DB update, you are no longer forced to update other system procedures. |
535973 | Changes made to property values on the "Client Properties" page, in a server message store's property window, would not have been saved if the client was "(Default)". This has been corrected so that they are now saved correctly.
Also, if connecting using a QAnywhere connection profile was not possible, Sybase Central would have crashed rather than reporting the error. This has been corrected as well. |
535983 | The usage messages for the QAnywhere Stop utility (qastop) did not display correctly on some non-english systems. This has been fixed. |
535988 | Attempting to setting the inline or prefix amount of a blob column to 32768 on a 32K pagesize database would have failed with the error:
'Illegal column definition: Column 'xxx' inline value '-32768' is invalid" This has now been fixed. A workaround is to use the value 32767. Doing so does not affect the amount of inline space available for the column as there is always some page overhead that is unusable for prefix data. |
535990 | The banner for the certificate utilities createcert, viewcert, and createkey could have been mangled on non-English systems. This has been fixed. |
536001 | When autostopping a database, the server could have failed assertion 201137 - "Concurrent outstanding file growth requests." This would have been very rare, and timing dependeding. It was also possible to see this assertion when shutting down the server while a DDL operation, typically a long running one, was underway. This has now been fixed. |
536015 | The ALTER VIEW RECOMPILE statement can be used to rebuild the view definition of an existing view. Among other things, the statement causes the schema of the view columns to be regenerated. If column permissions, as opposed to table permissions, have been granted on a view, then the recompilation could have failed with a foreign key constraint violation on SYS.SYSCOLUMN. The server now remembers all the column permissions on the view that exist before the recompile statement is executed. After the view has been recompiled, the server automatically restores the old column permissions based on column name look-ups in the new view definition. Note that if a column of the view that no longer exists after the recompilation will have the old permissions lost. A workaround is to drop the column permissions and to restore them after the view recompilation.
See also Engineering case 534294 for a related issue. |
536130 | The OUTPUT statement would have written VARBINARY values to TEXT files incorrectly. This has been fixed. |
536143 | A new MobiLink server command line option, -ppv <period>, has been added which will cause the server to print new, periodic monitoring values every <period> seconds. The suggested period is 60s. If the period is set too small, the log will grow very quickly. These values provide insight into the state of the server, and are useful for determining the health and performance of the MobiLink server. For example, one could look at the DB_CONNECTIONS and LONGEST_DB_WAIT values to look for potential problems with the -w option or in the synchronization scripts. They also provide an easy way to track system wide throughput measures such as the number of rows uploaded or downloaded per second and the number of successful syncs per second. Each row of output is prefixed with "PERIODIC:" to aid searching for and filtering out the values.
The following table contains a description of the printed values: Value Description TCP_CONNECTIONS Number of TCP connections currently opened PAGES_USED Number of cache pages used PAGES_LOCKED Number of cache pages loaded into memory TCP_CONNECTIONS_OPENED Total number of connections ever opened TCP_CONNECTIONS_CLOSED Total number of connection ever closed TCP_CONNECTIONS_REJECTED Total number of connection ever rejected TCP_BYTES_READ Total number of bytes ever read TCP_BYTES_WRITTEN Total number of bytes ever written ML_NUM_CONNECTED_CLIENTS Number of connected sync client PAGES_SWAPPED_OUT Total number of pages ever swapped to disk PAGES_SWAPPED_IN Total number of pages ever read from disk PAGES_IN_STREAMSTACK Number of pages held by the network streams CPU_USAGE Amount of CPU time used by MobiLink server in microseconds NUM_COMMITS Total number of commits NUM_ROLLBACKS Total number of rollbacks NUM_SUCCESS_SYNCS Total number of successful syncs NUM_FAILED_SYNCS Total number of failed syncs NUM_ERRORS Total number of errors NUM_WARNINGS Total number of warnings DB_CONNECTIONS Number of database connections in use RAW_TCP_STAGE_LEN Length of the network work queue STREAM_STAGE_LEN Length of the high level network processing queue HEARTBEAT_STAGE_LEN Length of the queue for periodic, non-sync work CMD_PROCESSOR_STAGE_LEN Length of the queue for sync work NUM_ROWS_DOWNLOADED Total number of rows sent to remotes NUM_ROWS_UPLOADED Total number of rows received from remotes FREE_DISK_SPACE Disk space available on the temp disk in bytes LONGEST_DB_WAIT Longest length of time an active sync has been waiting for the database LONGEST_SYNC Age of the oldest sync in ms NUM_UNSUBMITTED_ERROR_RPTS Number of unsubmitted error reports MEMORY_USED Bytes of RAM in use. Windows only. SERVER_IS_PRIMARY 1 if the server is primary; 0 otherwise |
536173 | If the file containing the trusted certificates specified by the "trusted_certificates" option was not found, the error STREAM_ERROR_SECURE_ADD_TRUSTED_CERTIFICATE was reported, which was not very specific. Now STREAM_ERROR_SECURE_TRUSTED_CERTIFICATE_FILE_NOT_FOUND is reported, as was done in 10.0 and previous versions. |
536335 | If an application generated a result set via one DatabaseMetaData call, and then generated a second result set via another DatabaseMetaData call, then the first result set would have been automatically closed. This behaviour is not incorrect, and is consistent with many other JDBC drivers. However, some applications have had the need to keep two separate DatabaseMetaData result sets open at the same time. The iAnywhere JDBC driver has now been enhanced to allow up to three separate DatabaseMetaData result sets to remain open at the same time. |
536347 | Executing a LOAD TABLE statement with the clause CHECK CONSTRAINTS OFF, may have failed if the table being loaded had publications. This has been fixed. |
536370 | For workloads that consisted of very inexpensive queries (for example, where each statement was executed in less than a millisecond), the server performance was slower than previous versions. This has been improved. As part of this change, a larger class of statements now bypasses query optimization. The properties QueryBypassed and QueryOptimized can be used to measure how many statements bypass optimization, or use the full query optimizer. The time required when a table was first accessed could have been slower than previous versions. This was particularly true for databases with many columns, and was very noticeable on CE platforms. This has been fixed.
Further, in some cases the plan text for a simple statement could show the table name instead of the correlation name. This has also been fixed. |
536374 | HotSync may have logged a -305 error for a synchronization failure, and potentially other database corruption. This has been fixed. |
536388 | In rare situations, a busy HTTP server may have timeouted a connection as the request was queued, causing the server to crash. This has been fixed. |
536541 | If an application attempted to update or delete from a proxy table joined with a local table, then the server may have failed an assertion, or crashed. The server will now correctly give error -728 'Update operation attempted on non-updatable remote query'. |
536543 | During diagnostic tracing, CONNECT and DISCONNECT request, as well as other information, could have been missing for a connection. DISCONNECT request were missing for some user connections, and CONNECT request and all statistics were missing for internal connections. This has been fixed. As well, some internal connections will be logged with both CONNECT and DISCONNECT requests, while others will not be displayed. |
536563 | The insert performance sample (instest) shipped with SQL Anywhere did not correctly assign values to integer columns on 64-bit big-endian platforms. Depending on the definition of the table being used, may have caused instest to terminate prematurely. The instest sample has now been corrected. This problem can be worked around by modifying the FillItem() function in instest.sqc to use an "int", instead of a "long", in the cast performed for the DT_INT/DT_UNSINT case. |
536568 | Using the SQL Anywhere Support utility (dbsupport) to check for updates on HP-UX and AIX would have failed to check for 32-bit client updates. This has been fixed. |
536588 | If an application connected using a TDS based client (i.e. jConnect, iAnywhere JDBC) and attempted to use a procedure in the FROM clause of a SELECT statement, then the TDS client may have reported a TDS protocol error. This problem has now been fixed. |
536594 | If an external function that was defined to return an integer value was assigned to a variable declared as INT, a "Value out of range for destination" error would have been given. This has been fixed. |
536608 | Calling sa_set_option('AcceptCharset', '+'); from within a stored procedure that is called via an HTTP request should set the response to the database charset whenever possible, but when a client specified the database charset it was only selected when its q-value was among the highest. This has been fixed so that the response uses database charset if specified by the client, regardless of q-value preference.
Example: SA server uses ISO-8859-1 charset, client specifies Accept-Charset:UTF-8,IBM850;q=0.8,ISO-8859-1;q=0.5 Although least preferred by the client, SA will respond with ISO-8859-1 if SA_SET_HTTP_OPTION('AcceptCharset', '+'); has been called (from within a procedure servicing the HTTP request). |
536620 | The OLE DB provider's ICommandWithParameters::SetParameterInfo() method may have caused an access violation, depending on the order of parameter indexes in rgParamOrdinals, which is one of the input parameters to the method. The problem may have also occurred if SetParameterInfo() was called after ICommandPrepare::Prepare(). This problem has now been fixed. |
536739 | The server could could have raised assertion 102802 - "Unable to undo index changes resulting from a failed column alteration" if an ALTER statement failed, or was cancelled. This has now ben fixed. |
536746 | When an encryption library could not found, the MobiLink server would have issued a misleading message indicating corruption:
Invalid or corrupt network interface library: xxxxx This has been corrected so that now the MobiLink server issues the message: Failed to load library xxxxx he documentation for the load library message indicates that a license may be required, which is appropriate in this case. |
536805 | Grouping queries containing a CUBE, ROLLUP or GROUPING SETS clause may have returned incorrect results. The query must also have had a HAVING clause with at least one null sensitive predicate (e.g., 'T.C IS NULL' , 'T.C IS NOT NULL' ). This has been fixed.
An example: select dim1, dim2, sum (val1), stddev (val2) from tt group by cube (dim1, dim2) having dim1 is not null or dim2 is not null |
536808 | The server tracks dependencies of views on other views and tables. If a view referenced another view and the view definition of the referenced view was "flattened" or "inlined" within that of the referencing view, then the server could have failed to correctly record the dependency information. The server now behaves correctly when recording dependency information in this situation. Any existing views can have their dependency information recorded correctly by being recompiled. |
536921 | Applications using the iAnywhere JDBC driver, could have crashed or hung if a process ran out of memory. This has been fixed so that it will now either fail gracefully, or cause an assertion with an appropriate error message, depending on the circumstances. |
536966 | The server may have crashed if a rank function (see SQL Functions->Function types->Rank functions in the SQL Usage guide) was used on constants. The row_number() function in the example below:
select x from ( select V1.*, row_number() over ( order by b ) AS x from ( select *, 7 as b from T1 order by 1 ) V1 ) V2 is used on column "b" of the nested table expression "V1", and column "b" is a constant there. This has been fixed. |
537126 | When running on multiprocessor machines, statements with joins may have caused a server crash in rare conditions. This is now fixed. |
537147 | If an application prepared a non-INSERT statement (i.e. a DELETE or an UPDATE statement) and used PreparedStatement.addBatch() followed by PreparedStatement.executeBatch() to execute a wide DELETE or wide UPDATE, then the results of executing the batch were unpredictable. Prepared batches were intended to be used for wide inserts only, but the iAnywhere JDBC driver did not restrict the usage to wide inserts. The driver now imposes this restriction and will throw an exception if an application attempts to use addBatch()/executeBatch() on a non-INSERT statement. |
537153 | On AIX systems, in some very rare circumstances, the server could have crashed while listening for network broadcasts. This has been fixed. |
537164 | The server assigns a unique object id for every object created in the database. The object ids are stored in the catalog table SYS.ISYSOBJECT. When objects are deleted, their ids are reused for new objects when the ids being released are at the end of the currently allocated range. Under concurrent execution of DDL operations it was possible for the server to avoid reusing some object ids even when it was possible to do so. There was no likely adverse effect of this deficiency, which has now been corrected. |
537170 | The Interactive SQL utility (dbisql) would have crashed when the Plan Viewer window was oipened if the SQL Anywhere plugin was not registered. This has been fixed. |
537171 | The search condition REGEXP and system function REGEXP_SUBSTR() were using the database's collation to determine if a literal, or character class range, in the pattern matched the string. For example, if the database was case insensitive and accent insensitive, matches were case insensitive and accent insensitive as well. Ranges were evaluated using the collation sort order. This resulted in different behavior than other tools such as Perl, Java, .NET, etc. This has been fixed so that REGEXP and REGEXP_SUBSTR() only match a literal in a pattern if it is the exact same character. Ranges in character classes (for example '[A-F]') only match characters which have character set encoding greater than or equal to the encoding of the first character in the range (A in '[A-F]') and less than or equal to the encoding of the second character in the range (F in '[A-F]').
Note, this change does not affect the SIMILAR TO search expression, which continues to use the collation to determine character equivalence and evaluate character class ranges. |
537172 | In some cases, an execution plan using a parallel execution strategy could have used a low-memory fallback strategy, even though there was sufficient memory for it to complete. The QueryLowMemoryStrategy property would have increased if the low memory strategy for the operator was used. This problem has been fixed. |
537177 | The search conditions SIMILAR TO and REGEXP, when used with the sub-character classes [[:upper:]] and [[:lower:]], were case insensitive on a case insensitive database. This has been fixed so that [[:upper:]] only matches upper case characters and [[:lower:]] only matches lower case characters, regardless of the database case sensitivity. |
537333 | HTTP clients going through the Relay Server may now optionally include the IAS-RS-Cookie header with the value set to 'reset' in the first request within the session. This was added in order to defeat the old standard cookie memorized by HTTP proxies, like the Blackberry MDS. If the client has full control of cookie caching, and a new http session will not reuse an old cookie, then implementation of this option is not needed in the client. This feature is suitable for Blackberry devices behind MDS, where the client application does not have real control on when to end the underlying HTTP session. |
537337 | Calling the ODBC function SQLGetProcedureColumns() would have failed with the error -143 "Column 'remarks' not found" when using a SQL Anywhere ODBC driver from a version prior to 10.0 and connected to version 10.0 or later server. This was due the ODBC drivers prior to version 10.0 referencing the SYSPROCPARM.remarks column in the SQLGetProcedureColumns() function, which had been dropped in version 10.0 and later database files. The SYSPROCPARM.remarks column has been re-added as a constant NULL. |
537391 | A connection may have held table or row locks even after a DDL statement had failed. This has been fixed. |
537399 | The search condition REGEXP, and the system function REGEXP_SUBSTR(), were treating _ (underscore) and % (percent) as meta characters to match any character or any characters respectively. Also, if a caret (^) was in a character class, but not the first character after the open square bracket (for example [a-e^d]), then it was treated as a subtraction character class operator. These behaviours were different than other tools such as Perl, Java, .NET, etc. This has now been fixed so that _ and % are not meta characters for REGEXP and REGEXP_SUBSTR(); and a caret which is not the first character after the open square bracket now matches a caret.
The search condition SIMILAR TO has not been changed. For SIMILAR TO, _ matches one character, % matches any number of characters and [a-e^d] matches a, b, c and e. |
537555 | Dropping a table could, in rare circumstances, have caused the server to fail assertion 102806 "Unable to delete row from SYSTABLE". This has been fixed. |
537558 | A side effect of the combined fixes for Engineering cases 533936 and 536335 was to cause Sybase Central to crash when attempting to expand the table tree view in the MobiLink plugin. This problem has now been fixed. |
537560 | It was possible for calls to DB_Property( 'DriveType' ) on AIX systems to erroneously return "UNKNOWN". A buffer used to enumerate the various mounted filesystems may have been too small. This has been fixed. |
537575 | Sybase Central would have crashed if it was connected to the utility database and then connected to another database running on the same server. This has been fixed. |
537579 | The QAnywhere client (qaagent) would have silently initialized a new database the first time it was run. This has been fixed so that it now is mandatory to initialize a new database as a QAnywhere message store by running qaagent with -si, as a separate step. |
537595 | The changes for Engineering case 534179 introduced a problem where the QAnywhere Server's logging messages could have been output as garbled text. This has now been corrected. |
537609 | If a synchronization contained tables for which no rows were uploaded or downloaded, the MobiLink server would have allocated more memory than was neccessary. This has been fixed so that the memory usage will be proportional to the number of columns in empty tables multiplied by the number of upload transactions. In tests with 50 concurrent syncs of 200 empty tables with 6 columns per table, the peak memory used by MobiLink server dropped by 178MB, or about 3kB per column. Systems that synchronize many empty tables, or use transactional uploads (i.e. the -tu option on dbmlsync), will see improved performance with this fix. |
537610 | Some queries with an illegal CONTAINS search condition could have caused the server to crash. This has now been fixed. |
537616 | Under rare circumstances, the server could have gone into an infinite loop after a non-recurring scheduled event was run. Any attempts to communicate with the database on which the event was scheduled would have blocked. This has been fixed. |
537620 | The sync_request phase time was incorrect in the MobiLink monitor. It was usually 0, but could be negative. This has been fixed. |
537747 | If an application used the iAnywhere JDBC driver with either a Microsoft SQL Server, or DB2, ODBC driver, and the application did not explicitly close Statement or PreparedStatement objects, then it was possilbe that the application would have hung at garbage collection time. This problem has now been fixed. |
537748 | When running the server in 'in memory' mode, the server would still have enforced the per-connection temporary space limit, even though no temporary files are used when running in 'in memory' mode. This has been fixed. |
537774 | Under rare circumstances, clients running on Unix systems, could have crashed on disconnect. This has now been fixed. |
537786 | As of version 11.0.0, DML operations on temporary tables are allowed to have full transactional semantics (i.e. commit and rollback) on read-only databases. However, the support for this feature was not fully enabled. This has been corrected.
Additionally, the creation of savepoints for temporary objects on read-only databases is also now supported. |
537787 | If a C++ application had been created using the DBSync API, it was possible that this application would not have been able to connect to the a MobiLink client started in server mode, if the machine supported IPv6. This has now been fixed. |
537800 | If an application executed a remote query with a malformed field or dotted reference in the select list, then it was possible that the server could have crashed. An example of such a query is:
select c1.ref(), max( c2 ), c2 from t1 where c1.ref() is a meaningless expression. This problem has now been fixed and a proper error message will be returned to the application. |
537804 | When the size of a long varchar or long binary column exceeded 32 KB on Windows, or 1 KB on Windows Mobile, the column may not have been read correctly by the OLE DB provider. This problem has been fixed. |
537917 | A download_delete_cursor script that returned NULL and non-NULL values for the primary key columns of a synchronized table would have made the MobiLink client behave erratically: the client could have deleted rows that should not have been deleted, or could have displayed the following error message:
SQL statement failed: (100) Row not found This problem has been fixed. The MobiLink server will now complain if a download_delete_cursor returns NULL as well as non-NULL values for the primary key columns of a synchronized table, and will then abort the synchronization. The download_delete_cursor script must return NULL values for all the primary key columns (the MobiLink client will delete all the rows from the corresponding sync table) or non-NULL values (the client will delete specific rows specified by the primary key values). |
537923 | Execution of some queries involving procedure calls could caused a server crash. This is fixed. |
537962 | If an error occurred when executing a Java or .NET synchronization script, and operations had been performed on the connection returned from the DBConnectionContext.getConnection method, it was possible for those operations to have been committed to the consolidated database. In order for this to have occurred, the Java or .NET synchronization script would have to have been executed before any SQL scripts were executed in the transaction by the MobiLink Server. As a workaround, a SQL synchronization script that does nothing could be defined that executes at the start of the transaction. For example, define a begin_upload connection event that calls a stored procedure, that does nothing, to prevent a problem in the handle_uploadData event resulting in operations performed in the handle_uploadData event from being accidentally committed. This problem has now been fixed. |
537965 | Executing a STOP JAVA command may have, in rare circumstances, caused the server to crash. This has been fixed. |
538098 | The space previously used by deleted rows was not being reclaimed and reused on the mirror server of a mirroring system. As a result, the mirror server's database could have grown faster than the database on the primary server. This space would have eventually be reclaimed if the mirror server became the primary server. This has been fixed. |
538099 | Attempting to copy a large number of values in the "Results" pane could have caused Interactive SQL (dbisql) to crash. This has been foxed so that an error message is now displayed and the copy is aborted. |
538128 | Attempting to upgrade the mirrored database in a mirroring system, using the Upgrade utility (dbupgrad), or by executing an ALTER DATABASE UPGRADE statement, would have resulted in transaction log entries which could not be replayed on the mirror server. An error will now be given if an upgrade is attempted on a database which is currently being mirrored. |
538145 | MobiLink servers with web edition licenses had an incorrect feature set. This has now been corrected. |
538146 | Under some update patterns, concurrent changes to text indexes created with the IMMEDIATE REFRESH clause, could have caused assertion failure 110400. This has now been fixed. |
538156 | Long running MobiLink Monitors could have hang or crashed with a RuntimeException "the monitor doesn't send any-order commands". This has been fixed. |
538275 | If a query execution plan contained a Group-by Ordered (GrByO) operator in a particular stylized access plan pattern containing an outer joing, and the group-by node had a string or NUMERIC value in the result, then it was possible for the server to crash while processing the statement. The crash would have depended on the order and values of rows processed by the plan. This has been fixed. |
538292 | When Sybase Central was used to create a proxy table to a remote table in an ADS database, accessing the proxy table to perform queries or updates would have failed. This problem has now been fixed. It should be noted that in order to use proxy tables to an ADS table, the ADSODBC class must be used. Using the generic ODBC class will continue to cause access problems for ADS proxy tables. |
538303 | If while executing an ATTACH TRACING statement, the tracing server was stopped, the server being traced could have crashed. This has been fixed. |
538305 | The server console's checkpoint begin and end messages were not being displayed when the server was run in 'in memory' mode with Checkpoint only (-im c). This has been fixed. |
538306 | If multiple connections executed DDL statements concurrently, then, under very rare circumstances, it was possible for the server to behave incorrectly. This problem has been resolved. |
538317 | The Windows Mobile Deployment wizard was always writing to sqlany11.cab, rather than the filename specified by the user. This has been fixed. |
538324 | Attempting to create a table with a varchar(36) column with a default of newid() would have failed with a syntax error. The column could have been later altered to add the newid() default, but the generated default values would have been garbage. These two bugs have now been fixed. |
538346 | When the QAnywhere Agent was started for the first time, and another the qaagent to fail to start with an error similar to:
InternalError: User 'DBA' has the row in 'ml_qa_global_props_client' locked Source statement: CREATE SYNCHRONIZATION SUBSCRIPTION TO ml_qa_user_group.ml_qa_repository_pub FOR "sender-rules" OPTION sv='ml_qa_2' This has been fixed by now having the QAnywhere Agent acquire exclusive locks on tables involved in the publication, before creating the synchronization subscription. |
538347 | If the MobiLink server was started unsuccessfully (i.e invalid parameter, unable to connect to database, invalid stream specified), and no logging option was specified (-o or -ot), then the server would have displayed an error dialog and waited for the shutdown button to be pressed. After waiting about a minute for the manual shutdown, the server could then have crashed. This has been fixed.
Note, this problem should only have occurred on systems where a GUI was used. |
538480 | In rare circumstances, the server could have crashed while disconnecting if -zl, -zp, sa_server_option( 'RememberLastStatement', 'YES' ) or sa_server_option( 'RememberLastPlan', 'YES' ) were used. This has been fixed. |
538484 | The server allows the use of host variables with the INSERT statement, to insert multiple rows into the database in a single request. Under certain circumstances, the server could have crashed when block inserts were executed in the server. This has been fixed so that the server now generates an error message instead in these circumstances. |
538547 | The search conditions SIMILAR TO and REGEXP, and the fuction REGEXP_SUBSTR() could have given incorrect results for some patterns if the string being searched was more than 250 bytes in length. The search string could be 250 bytes in length if it contained as few as 63 characters and the database character set was multi byte (including NCHAR strings). It was possible that a pattern would not have matched a string that it should have. In rare cases the server could even have crashed. This has now been fixed. |
538694 | An application that did not explicitly close Statement, PreparedStatement or CallableStatement objects may, in rare cases, have crashed when closing a Connection object. This problem has now been fixed. |
538698 | The 'tempfilename' property would have returned a value when running in In-Memory mode, even though neither supported In-Memory modes use a temporary file. This has been fixed so that the 'tempfilename' property now returns NULL when the server is running in In-Memory mode. |
538700 | UltraLiteJ did not work with cookie injecting proxy servers, such as the Relay Server. This has been fixed.
Note that on the BlackBerry, the MDS may cache cookies for the devices that go through it, and so UltraLiteJs cookie behaviour may be different from other remotes. In particular, cookies sent to the remote may be cached for longer than the duration of a sync. When using a proxy other than the Relay Server, ensure that the optional cookie fields, defined in RFCs 2109 and 2965 dealing with cookie caching, are properly set, or disable this feature in your MDS. The Relay Server is unaffected by this caching, but other cookie injecting proxies may be affected by it. |
538737 | When a mirror server was started in preferred mode, it was possible for the synchronization between the primary and the mirror to have failed. This has now been fixed. |
538743 | When attempting to use a MobiLink Java Start class that made use of UltraLiteJ, an error similar to "<Main> [-10150] Linkage error while loading class: 'jdbssint' Error description: 'ianywhere/ultralitej/Configuration'" would have occurred, and the server would have failed to start. The problem was due to class name conflicts, which have been corrected. |
538862 | If ALTER DATABASE UPGRADE was executed twice, using the same connection, the second execution would have failed. The upgrade scripts did not remove some temporary objects used by the scripts. This has been fixed. |
538863 | The Database Documentation Wizard could have crashed Sybase Central if it ran out of memory. A number of changes have been made to reduce the amount of memory needed to generate documentation, so that it now reports an out-of-memory error and leaves the program in a state where it can safely continue working. |
538865 | Applications using TLS on Mac OS X systems, may have experienced crashes. This has been fixed. |
538882 | If the stored procedure debugger was used to trace execution of a procedure containing a variable defined as UNIQUEIDENTIFIER, the value and datatype for the variable would not have been displayed. This has been fixed. |
538883 | If the ansi_close_cursors_on_rollback option was set to 'ON', and request logging of plans was enabled, the server could have crashed. This has been fixed. |
538904 | If an application using the iAnywhere JDBC driver called the method ResultSet.isLast() when the result set was positioned on the last row, the call would have correctly returned a value of 'True', but the result set position would have been move to be after the last row. The problem has now been fixed.
Note, this problem does not occur if the result set is not positioned on the last row. |
538912 | Right-clicking on a result set, then selecting the item "Copy/Copy Cell" from the menu, would only have copied the cell value if the cell had previously been left-clicked. This has been corrected so that left-clicking is no longer necessary. |
538920 | The Database Documentation wizard would have reported an unhelpful error message when a user, which was not a member of the SYS group, logged in . The wizard used a number of queries which referenced system tables without the appropritate creator qualifier. This has been fixed. |
538931 | The Create Service Wizard would have provided default paths for 32-bit executables when 64-bit executables were available on a 64-bit version of Windows. This has been corrected so that default paths for 64-bit executables are now provided if they are available; otherwise, default paths for 32-bit executables are provided. |
538936 | The Dbmlsync Integration Component could have crashed during a call to the Run method. As well, the OS would sometimes have detected a heap error. This has been fixed. |
538953 | The Relay server may have failed to relay http responses for a several minutes after seeing an rsoe uuid mismatch on down channel connect. This would have been rare, as it required the down channel to be renewed right before an up channel renewal, plus the up channel renewal must have renewed the uuid before the down channel was authenticated. The Relay Server would have eventually detected an error on writing over the failed down channel and would have been able to recover, however http responses or portions of it relayed within that period were lost. This problem has been fixed and a rsoe uuid mismatch should not occur on a down channel unless this is caused by invalid running duplicated instances of the Relay Server with the same backend server identity. |
538954 | Server Initiated Synchronizations, using persistent connections, didn't scale well as it required persistent resource per connected client on the backend server, as well as onintermediaries like the Redirector or Relay Server. This limitation may have caused large deployments to require a server farm, which is not supported until version 11.x. Now with this change, an alternative solution is provided based on light weight polling. This alternative is based on a new caching notifier in the MobiLink server, and a client API for polling the notification (MobiLink Lightweight Polling API). The caching notifier refreshes the current set of notifications by executing a request_cursor against the database at a setable frequency. The cache is exposed for clients to poll without involving database access, nor authentication via the same MobiLink server port.
Caching notifier A caching notifier is a notifier with a request_cursor that return a result set with 1, 2 or 3 columns. The first column is the key of the notification, the optional second column is the subject of the notification and the optional third column is the content of the notification. A caching notifier doesn't need gateways or tracking information in order to push notifications down to clients. Clients are expected to initiate connection and poll at the cache refresh frequency. Users may define multiple caching notifiers for different business logic, and they can co-exist with other regular or caching notifiers. MLLP API Development resources are found under the following location %SQLANY10%\MobiLink\ListenerSDK\windows\src\mllplib.h %SQLANY10%\MobiLink\ListenerSDK\windows\x86\mllplib.dll %SQLANY10%\MobiLink\ListenerSDK\windows\x86\mllplib.exp %SQLANY10%\MobiLink\ListenerSDK\windows\x86\mllplib.lib (import library for the dll) MLLP client will dynamically load various ML client stream library. Example MLLP client app Please see %SQLANYSH10%\samples\MobiLink\SIS_CarDealer_LP2 |
538963 | The Relay server was holding on to workers when finished serving Afaria traffic. A new command line option "-af" has been added to the Relay Server Outbound Enabler (rsoe) so that the Relay Server will be notified when the backend server disconnects. The relay server will then abort waiting for the entire content length to be satisfied. Without this option, rsoe will not notifiy the Relay Server when the backend disconnects and a worker in the Relay Server has finished relaying responses from an Afaria server, but will wait for more data until a timeout (default 8 minutes) before exiting. Older Relay Servers are not compatible with this newer rsoe. Newer Relay Server remains backward compatible with an older rsoe though. |
539056 | For a statement of the form "EXEC <linked_server_name>..dba.myproc", Microsoft SQL Server 2005 passes a statement of the form {?=call "dba"."myproc" } to the SQL Anywhere OLE DB provider. It passes in a single integer parameter for binding with a status of DB_E_UNAVAILABLE. The SQL Anywhere OLE DB provider had always checked the status of parameters and accepted one of DBSTATUS_S_DEFAULT, DBSTATUS_S_ISNULL, or DBSTATUS_S_OK. Any other status was flagged with an error. As such, the above example would have failed with an error. Since the parameter is OUTPUT-only, the status of the parameter can be ignored, as the status for any OUTPUT parameters will be set after the statement has been executed and any OUTPUT parameters will be filled in. The OLE DB provider behaviour has been changed to ignore the incoming status of OUTPUT-only parameters. This allows the EXEC statement to execute successfully. |
539077 | The changes for Engineering case 533936 introduced a problem where calling the JDBC method Statement.cancel() did not work for queries that did not return a result set. This has been fixed. |
539085 | A number of changes have been made to improve the performance of the Interactive SQL utility over networks with high latency. All the changes are related to minimizing the number of server requests. |
539091 | The 64-bit server for Sun Solaris performed poorly when executing queries. This has been
fixed. |
539094 | If an application was using the iAnywhere JDBC driver to generate one or more result sets by making DatabaseMetaData calls, then there was a chance the DatabaseMetaData result sets would not have been garbage collected until connection close time. Note that at most 3 of these result sets would have remained open until connection close. This problem has now been fixed. |
539095 | If a mirroring server was accidentally started a second time, the second instance could have crashed after displaying an error. This has been fixed. |
539106 | In some cases where expressions were evaluated in stored procedures or batches outside of SELECT, INSERT, UPDATE or DELETE statements, it was possible for the expressions to be evaluated incorrectly. The incorrect behaviour would have appeared if arithmetic expressions were used with one argument a DATE, TIME, or TIMESTAMP, or both arguments were strings. In these cases, the incorrect domain could have been used for the arithmetic expression if it were used in an IF, CASE, IN, or concatenation operation.
For example, the following select improperly returned '0002', the correct answer should be a numeric with value 2. create variable @v_res long varchar; set @v_res = if 1=1 then '0002' else '1' - '2' endif; select @v_res This problem could have also resulted in conversion errors being returned in cases where they should not, or missed in cases where they should have been generated. This problem has now been fixed. |
539113 | Attempting to execute queries with some illegal constructs involving the CONTAINS search condition, couls have lead to a server crash. This has been fixed. |
539128 | If an UltraLiteJ database had a publication defined that contained only some of the synchronizable tables, and that publication was synchronized, any changes waiting to be uploaded in the tables that were not yet sync'ed would have been lost. They would still have been in the database, but would have been marked as having been uploaded.
Also, UltraLiteJ was incorrectly identifying to MobiLink that tables being synchronized were in all publications currently sync'ed and UltraLiteJ was incorrectly sending the last download time of publications. Both of these problems have been fixed. |
539257 | If an UltrLiteJ synchronization failed, an error complaining about a dropped connection would sometimes have been printed to the log. This has been fixed. |
539289 | Applications using iAnywhere JDBC driver may have hung when calling the method ResultSet.get*(). This has been fixed.
Note, this problem was introduced with the changes for Engineering case 533936. |
539308 | On Windows CE devices, the text of the server usage message was mangled. The message box dialog on CE was expecting utf-16 text, but was incorrectly being passed OS charset text. This has been fixed. |
539309 | If the MobiLink Server had been started with the -nba+ switch, it was possible for the MobiLink Server to have crashed if a non-blocking download acknowledgment was received from a remote database, and the MobiLink Server had lost all its connections with the consolidated database. The MobiLink server will now properly report that all connections to the consolidated database have been lost. |
539356 | The Interactive SQL utility (as well as all the graphical administration tools) did not work with authenticated servers. This has been corrected. |
539358 | Multiple ORDER BY expressions could have caused an exception when there existed an index with fewer columns than the number of ORDER BY expressions. This has been fixed. |
539496 | At verbosity level 3 or above the Relay Server was logging a faulty protocol version of the connecting Outbound Enabler. The Relay Server also did not completely log the OE_REQUEST_RS_PEER_LIST packet. Although these problems were not affecting the Relay Server's functionality, they have been fixed. |
539499 | If the Overview, Details Table or Graph were disabled in the MobiLink Monitor, closing the Monitor and restarting it would have resulted in a Java null pointer exception. This has been fixed. A workaround is to edit the settings file (.mlmMonitorSettings in version 10 and earlier, .mlMonitorSettings11 in version 11) to restore display of the disabled feature. For the Overview, change ShowOverview=false to ShowOverview=true. For the Table, change ShowTable. For the Graph, change ShowGraph. |
539609 | When running in In-Memory, No-Write mode, only one LOAD TABLE statement was allowed to execute on the database at a time. This was due to the fact that LOAD TABLE, when not running in In-Memory mode, uses the checkpoint log for its page-level undo information, and there can only be one page-level undo operation active on a given database at a time. However, the In-Memory No-Write mode does not use a checkpoint log and therefore has no need of page-level undos. This has been fixed for performance reasons. As a consequence, when running in No-Write mode, multiple, concurrent LOAD TABLE statements may now be active at any point in time, to the same or different tables. |
539620 | In certain rare and highly timing sensitive cases, the server could have hung when shutting down, if an xp_cmdshell() procedure was still running. This has been fixed. |
539627 | Some lines printed to the MobiLink server log would not have caused LogListeners to fire. In particular, warning 10082, "MobiLink server has swapped data pages to disk out:<...> concurrently used pages:<...>", never triggered LogListeners. This has been fixed. |
539637 | The Check for Updates feature in the Interactive SQL utility (as well as all the graphical administration tools) would always have returned "Unable to contact update server". This has been fixed. |
539681 | If a connection string included the LINKS parameter, but included an unrecognized protocol type (eg. due to a typo), the error message would have been: "Trying to add unknown port", which was not indicitive of the problem. This has been corrected so that the message is now: "Trying to add unknown port '<port>'" where <port> is the invalid port type. |
539756 | On systems other than Windows, the Database Documentation wizard would have displayed the generated HTML files in a poorly formatted way. There was nothing wrong with the HTML files, it was just that the component used to display them was inadequate. This has been corrected so that the wizard now attempts to find an installed web browser and uses that to display the files instead.
Note, users can always view the documentation using whatever browser they choose, as a work around to this issue. There was nothing wrong with the HTML files. It was just that the component used to display them was inadequate. Users can always view the documentation using whatever browser they choose to work around this issue. |
539772 | Installs created by the SQL Anywhere Deployment wizard would only have appeared in the Add or Remove Programs list in Control Panel, for the users that installed the MSI. This behaviour has been changed. The install will now appear in the Add or Remove Programs list for all users. |
539799 | Notifier errors were cataglorized as MobiLink server errors. Errors such as failing to resolved a delivery path to a remote device, and/or failing a push attempt, was resulting in an error line in the MobiLink server log that began with an "E.". This also caused an new entry in the system event log. Notifier errors can be highly repeatative, if the business logic was not implemented in a way that minimized failing attempts. Since these failures are not affecting syncs, they have been recataglorized as informational messages that begin with "I." instead. Two sub labels, "<SISI>" and "<SISE>" have also been added to differentiate notifier informational message and notifier error message.
Notifier informational message will now take on the following format: I. YYYY-MM-DD HH:MM:SS. <Main> <SISI> ... Notifier error message will now take on the following format: I. YYYY-MM-DD HH:MM:SS <Main> <SISE> ... |
539805 | Customer contact us asking for some feature like Oracle's 'PRAGMA AUTONOMOUS_TRANSACTION'.
After some researches I received the following answer from internal newsgroup (sybase.internal.asa.helpdesk) I believe the SA feature that can provide functionality similar to what Oracle's autonomous transactions do is events. In SA, events run as independent transactions with their own transaction control and can be triggered from within other transactions without affecting the triggering transaction. Here is an example: CREATE TABLE t1( c1 int ); CREATE EVENT ev HANDLER BEGIN INSERT INTO t1 VALUES( 99 ); commit; END; INSERT INTO t1 VALUES (1); TRIGGER EVENT ev; ROLLBACK The effect of the code above is to rollback the transaction that triggered the event but retain the committed transaction executed by the event. Howerver cust argue that 'Event' at SQL Anywhere are not equal of Oracle's 'PRAGMA AUTONOMOUS_TRANSACTION'. According cust with 'Events' he cannot capture its return, but with Oracle's 'PRAGMA AUTONOMOUS_TRANSACTION' he can. Checking the SQL Anywhere 10 manual, we can see: Event errors are logged to the database server console. After each execution of an event handler, a COMMIT occurs if no errors occurred. A ROLLBACK occurs if there was an error. Event handlers execute on a separate connection, with the permissions of the event owner. To execute with authority other than DBA, you can call a procedure from within the event handler: the procedure executes with the permissions of its owner. The separate connection does not count towards the ten-connection limit of the personal database server. So, cust request to us open a feature request to implement at SQl Anywhere a feature like Oracle's 'PRAGMA AUTONOMOUS_TRANSACTION'. |
539807 | On Mac OS X systems, if the server was started on a non-default port (i.e. other than 2638), and with an IPv6 address as the value for the MyIP option, a UDP listener would not have been started on the default port. As a result, the server would not have been able to locate the server via broadcasts unless the sever's port was explicitly specified in the client's connection string. This has now been fixed. |
539812 | The MobiLink server name given by the -zs command line option was not shown in the title bar of the MobiLink server window. This problem is corrected. |
539813 | A new command line option (-sv) has been added to the MobiLink Listener to allow for specifying the script version used for authentication. The default value is ml_global. |
539933 | A newer database release has been supplied that fixes various issues with long-running servers. |
540048 | When attempting to set the non_keywords option to a value that contained a keyword already listed in the current value of the non_keywords option, an invalid option setting error would have been reported. This has been fixed. |
540071 | If an application used a prepared statement to insert an empty string via a parameter marker into a long varchar column of a proxy table, then the server may have hung, or have given a strange error. Note that inserting an empty string as a string literal works just fine. This problem has now been fixed. |
540090 | After installing SQL Anywhere version 11.0.0 on a non-1252 code page system (such as Chinese, Japanese or Korean), the demonstration database (demo.db) does not contain image data in the Photo column of the Products table. The column values are NULL. This problem has been resolved. The mkdemo.sql script has been revised to use client-side reads (READ_CLIENT_FILE function) to populate the Photo column of the Products table.
To correct existing demo.db databases: 1 start demo.db using dbeng11 or dbsrv11 2 change to the scripts directory of the install 3 run the following script: SET TEMPORARY OPTION allow_read_client_file = 'on'; UPDATE Products SET Photo=READ_CLIENT_FILE( 'adata\TankTop.jpg' ) WHERE Products.ID=300; UPDATE Products SET Photo=READ_CLIENT_FILE( 'adata\V-Neck.jpg' ) WHERE Products.ID=301; UPDATE Products SET Photo=READ_CLIENT_FILE( 'adata\CrewNeck.jpg' ) WHERE Products.ID=302; UPDATE Products SET Photo=READ_CLIENT_FILE( 'adata\CottonCap.jpg' ) WHERE Products.ID=400; UPDATE Products SET Photo=READ_CLIENT_FILE( 'adata\WoolCap.jpg' ) WHERE Products.ID=401; UPDATE Products SET Photo=READ_CLIENT_FILE( 'adata\ClothVisor.jpg' ) WHERE Products.ID=500; UPDATE Products SET Photo=READ_CLIENT_FILE( 'adata\PlasticVisor.jpg' ) WHERE Products.ID=501; UPDATE Products SET Photo=READ_CLIENT_FILE( 'adata\HoodedSweatshirt.jpg' ) WHERE Products.ID=600; UPDATE Products SET Photo=READ_CLIENT_FILE( 'adata\ZippedSweatshirt.jpg' ) WHERE Products.ID=601; UPDATE Products SET Photo=READ_CLIENT_FILE( 'adata\CottonShorts.jpg' ) WHERE Products.ID=700; |
540092 | The Interactive SQL utility could have crashed if a DESCRIBE statement was executed together with an OUTPUT statement that immediately followed it. This has been fixed. |
540094 | In rare circumstances, an outgoing mirroring connection attempt to a partner, or to the arbiter, may have hung indefinitely. This has been fixed. |
540195 | When a connection attempted to autostart a server, but then failed to connect, the client incorrectly attempted to autostart the server three times in some cases. This has been fixed so that the client will now only attempt to autostart the server once. |
540200 | When running the MobiLink server with minimal verbosity, and using the MobiLink Listener (dblsn), the message "Disconnected from consolidated database" would have appeared in the server log. This has been corrected. The connection used by dblsn will now be reused by the next dblsn client. |
540201 | On Mac OS X systems, an application may have taken a very long time to connect to a server if the server was found through an LDAP server and both the client and the server are IPv6-enabled. On Mac OS X, in order to establish a connection to a link-local IPv6
address, the scope (interface) ID must be specified. If a scope ID is not specified, it defaults to 0. A connection attempt where the scope ID is incorrect may take a long time to time out and fail. When a link-local IPv6 address was registered with LDAP, the scope ID was not included in the IP address that was registered. Doing so would not be useful, since scope IDs for the same link can vary from machine to machine. If an application obtained such a link-local address from LDAP and attempts to connect to it, in effect it will attempt a connection with a scope ID of 0. This has been fixed so that now an attempt to if the scope ID is 0 is refused on Mac OS X systems, including when the HOST connection parameter is used in the connection string with a link-local IPv6 address with no interface ID specified. Note that if the wrong non-zero interface ID is specified, a connection will still be attempted. |
540205 | If a remote server was defined using one of the Remote Data Access JDBC classes, then changing the value of the quoted_identifier option would not have resulted in changing the value of the quoted_identifier option on the remote. This problem has now been fixed. |
540219 | If an application called a procedure that references a proxy table, and that procedure was subsequently used in the FROM clause of a SELECT statement along with the WITH clause, then there was a chance the the server would have crashed. This problem has now been fixed. |
540220 | The server could have hung, or even crashed, if an HTTP or HTTPS connection was cancelled (i.e. the client application closed the socket) while a request was being processed. This has been fixed. |
540227 | On Linux x86 and Solaris SPARC systems, the encryption libraries have been updated to use Certicom 5. |
540263 | An UltraLiteJ database may have expanded needlessly, especially in the presence of updates, either via SQL statements or synchronizations. The routine to search free space on an existing page was not always recognizing when there was room to contain a row. This has been corrected. |
540275 | Incorrect results would have been obtained when evaluating expressions with hexadecimal constants that were larger than integer values. This has been fixed. |
540349 | The UltraLite Initialize Database utility (ulinit) would have reported a syntax error if the reference database contained a foreign key on a table with the keyword 'name'. Ulinit was failing to quote the table name in the foreign key statement generator. This has been fixed. |
540354 | UltraLiteJ could have thrown an ArrayIndexOutOfBounds exception during sync if a column in the consolidated could have stored more characters than the remote column. For this fix to be effective mlodbc11.dll must be 11.0.0.1541 or later. |
540369 | If request level logging of procedures was enabled, and a FORWARD TO statement was executed on a remote server from an Open Client or jConnect application, then there was a chance the server would have crashed. This problem did not occur if a non-TDS based client was used, or if request level logging of procedures was not enabled. This has been fixed. |
540371 | In rare circumstances, the server could have crashed while disconnecting, if the connection had created temporary procedures. This has been fixed. |
540380 | On AIX 5.3 systems, the ApproximateCPUTime connection property could have returned a value that was impossibly large. This has been fixed. |
540387 | When an application made an external environment procedure call, and then issued a commit followed by another external environment call, there was a chance the server would have crashed. This problem should not show up if either the original or external connection was accessing a temporary table. It has now been fixed |
540388 | UltraLite databases restrict the ORDER BY clause, when used with UNION, to referencing select list items by ordinal value rather than by name. Violations of this restriction was not diagnosed correctly in some situations. UltraLiteJ has been corrected to now issue the exception SQLE_INVALID_ORDER, to be consistent with other versions of UltraLite. |
540390 | A comparison between an integer and a BINARY value (in a SQL statement) would have caused a conversion error, 'Cannot convert numeric to a binary'. This has been corrected. |
540392 | Using the Ping utility (dbping) with the -m command line option (use ODBC driver manager)
to attempt to connect to the Web Edition server would have resulted in the error "This server is not licensed to support 'ODBC' connections". This has been corrected. |
540393 | If a DSN pointed to a Web Edition server, the ODBC Administrator would have given the error "This server is not licensed to support 'ODBC' connections" when the "Test Connection" button was used. This has been fixed. |
540407 | In the dbmlsync log file it was possible for a message to occasionally be omitted, or for two messages to be mixed together. For example, a line like the following might occur in the log:
E. 2008-08-06 16:24:34. Timed out trying to readTimed out trying to read 7 bytes. This has been fixed. |
540530 | Depending on the language and character set of the operating system, the usage message could have been truncated. Running under an English language locale did not expose this problem. A buffer used for character set translation was under-sized. This has been corrected. |
540536 | Certain complex regular expression patterns could have caused the server to hang for a few seconds or more. Patterns which could have caused this problem were unlikely to be used in practice, as they needed to be over 100 characters long and have certain unlikely characteristics. This has been fixed so that regular expression patterns that could have caused the server to hang will now generate the error "Statement size or complexity exceeds server limits" (-890). |
540557 | If the operating system's character set did not match the database's character set, non-ASCII server messages obtained using the system procedure sa_server_messages(), would have been mangled. The server was not converting from the database's character set to the operating system's character set before returning the text. This has been fixed. |
540569 | Statements using EXISTS() subqueries with INTERSECT and EXCEPT may have returned incorrect results. This would have occurred when at least one of the select lists inside the EXISTS() subquery used "*". This has now been fixed.
For example: select filename, file_id from t1 where ( exists (select * from t1 except select * from t2) OR exists (select * from t2 except select * from t1) ) |
540575 | When in Profiling Mode in Sybase Central, clicking the Index Consultant, or DBISQL, icon for a statement on the Details tab, could have resulted in a syntax error. The problem was caused by syntax errors in SQL statements used by Sybase Central, which have now been fixed. |
540579 | Attempting to connect to a partially constructed RIM BlackBerry database could have caused a NULL POINTER exception. It was assumed that an existing RIM BlackBerry database would contain a page[0]. This situation now causes an UltraLiteJ exception to be thrown. |
540681 | Running out of non-cache memory may have caused the server to hang. This has been fixed. |
540690 | The "Check for Updates" entry on the Windows Start menu was missing. This has been fixed. |
540698 | Calling the OleDbDataReader GetString() method may have failed if the source string had a length of 0, or it may have returned a string that was missing the trailing null termination character when the source string length was greater than or equal to 1 (i.e., "abcde" comes back as "abcd"). This problem has been fixed. |
540703 | When attempting to execute a query that references a proxy table mapped to a DB2 table, and one of the columns in the DB2 table was of type "varchar for bit data", there was a possiblility that fetching data from the proxy column would have resulted in data truncation. This problem does not exist for BLOB, "char for bit data" and "long varchar for bit data" DB2 columns. The has now been fixed. |
540708 | If a failover occurred in a mirroring system, automatic checkpoints would not have occurred on the new primary server. Stopping and restarting both servers would have corrected the problem. This has been fixed. |
540725 | The Migrate Database wizard could have failed to display messages in the messages dialog if it was connected to two or more databases running on the same server. The wizard was listening for asynchronous messages on the wrong connection. This has been fixed. |
540729 | Attempting to cancel the Migrate Database wizard would have caused Sybase Central to crash. This has been fixed. |
540789 | If several connections attempted to concurrently execute CREATE, DROP or ALTER statements for a global temporary table, or its indexes, the server could have crashed. This has been fixed so that a global temporary table and its indexes can no longer be altered or dropped if other connections have previously referenced the table until those connections have disconnected. |
540797 | Printing results in landscape orientation did not use the full page area. The print attribute which specified the page margins did not reverse the printing area width and height when printing in landscape. This has been corrected. |
540800 | The Interactive SQL utility (dbisqlc) could have incorrectly reported a syntax error when executing an INPUT statement if the user or table name required quoting to be a valid identifier. This has been fixed. |
540823 | If a case-sensitive database was created prior to version 10 and was initialized with collation 857TRK, the Unload utility (dbunload) would have failed to unload it correctly. This has been fixed. |
540826 | The window which showed long binary column values would have shown incomplete (truncated) data and a corrupt image if the column held a graphic and the result set did not contain the table's primary key. Now, instead of showing partial data, an error message is displayed which advises users on how to remedy the problem.
A similar problem affected the display of long text values, and it has also been fixed. |
540921 | Attempting to access a remote server defined using one of the JDBC classes, could have caused the server to crash if Java failed to start. This problem has now been fixed. |
540927 | Attempting to execute a query that referenced a proxy table mapped to a table in an ADS database with a WHERE clause that contained a timestamp column, could have failed with a conversion error. When generating the remote query, the server was using the wrong format specification for converting the timestamp value to a string value. This problem has now been fixed. |
540933 | The passthrough feature is enabled automatically when scripts are found in the ml_passthough_script table. In order to process these scripts Java is used. On Mac OSX, the Java VM is not available for 32-bit applications, causing the MobiLink server to give an error and shut down. On Mac OSX, the MobiLink server no longer checks for these scripts. |
540965 | If a LOAD TABLE statement was executed on a table with an autoincrement column and caused the range of values for the autoincrement column to be exhausted, the server would have crashed. This has been fixed, and a "Column '<column-name>' in table '<table-name>' cannot be null" error is now given. |
540984 | The Connection page of the property sheets for publications, MobiLink users and synchronization subscriptions, would have ignored an object's CommunicationType setting and would always have selected the TCP/IP radio button. This has been fixed. |
541053 | A query containing an EXITS() predicate and returning distinct rows may have generated an incorrect result set. For this to have occurred the EXISTS predicate must have been able to be flattened into the main query block, and a KEYSET root must have been used for the query. The incorrect result set may contain duplicate rows. This problem has now been fixed. |
541055 | Some CONTAINS queries may have intermittently taken much longer than they should (e.g. minutes rather than seconds with a query of several frequently occuring words and 1-2Gb of indexed text). This has been fixed fixed. |
541056 | Using the INSTALL JAVA ... FROM expr statement, or performing an unload and reload of a database that contained Java objects, could have resulted in recovery issues later on. This problem has now been fixed. |
541059 | The php driver source code was missing php_sqlany_ver.h on Unix platforms. This has been corrected. |
541060 | The server, in rare circumstances, could have hung updating string columns. This has been fixed. |
541062 | If an UltraLiteJ synchronization had failed, the next synchronization could have sent the wrong set of last download times. This has been fixed. |
541072 | Under rare circumstances, a query plan using the Merge Join algorithm with an GroupBy ordered on the right hand side of the join, could have returned incorrect results. This has been fixed. |
541073 | On AIX 6, 64-bit software would not have found the LDAP support libraries, even if they were in the LIBPATH. The location of the LDAP system libraries was changed in AIX 6. The 64-bit library is in:
/opt/IBM/ldap/V6.1/lib64/libibmldap.a and the 32-bit library is in: /opt/IBM/ldap/V6.1/lib/libibmldap.a This has been fixed. Note that you still need to ensure that the directory with the LDAP libraries are in the LIBPATH. For example, for 64-bit libraries: export LIBPATH=/opt/IBM/ldap/V6.1/lib64:$LIBPATH and for 32-bit libraries: export LIBPATH=/opt/IBM/ldap/V6.1/lib:$LIBPATH As a work around to use SQL Anywhere LDAP support with AIX 6, create links in /usr/lib as follows (must be root): cd /usr/lib ln -s /opt/IBM/ldap/V6.1/lib64/libibmldap.a libibmldap64.a ln -s /opt/IBM/ldap/V6.1/lib/libibmldap.a |
541075 | If the MobiLink Server was processing an invalid upload stream, it was possible for the MobiLink Server to have crashed. The MobiLink Server will now fail the synchronization. |
541173 | The following problems with GIF files have been fixed in the window used to display binary column values:
1. When inserting a GIF file into a binary column, a thumbnail is now displayed. Previously, the thumbnail remained empty. 2. The image format and dimensions were not displayed when viewing a binary column value which contained a GIF image. |
541175 | It was possible, although likely rare, for the server to crash on shutdown. This has been fixed. |
541188 | When run on Unix systems, the Interactive SQL utility (dbisqlc) would have crashed opening the Options->Configure menu. This has been fixed. |
541200 | Some missing items to the graphical and long plans have been added as follows:
1 - HAVING predicate was not dumped in the long plan for any GroupBy physical operator. 2 - HAVING predicate was not dumped for GroupBySortedSets physical operators in the graphical plan. 3 - The number of extension pages was missing in "Table Reference" section of the graphical plan. 4 - The 'Estimated Cache Pages' was missing in the long plan. |
541201 | When running Application Profiling, the start_time and finish_time columns of the sa_diagnostic_request table were incorrectly set. The column start_time was set to the correct start time plus the value from the duration_ms column, while the column finish_time was set to the correct start time plus twice the value from the duration_ms column. This has now been corrected. |
541202 | Statements using derived tables on the null supplying side of a left outer joins may have returned syntax errors. For this to have occurred, the derived table must have been unflattenable (i.e. it contained GROUP BY, ORDER BY, etc.) and have been used in the null-supplying side of the outer join. There must also have existed a predicate in the ON condition, which was local to the derived table (e.g., "ON .... DT.C = 10 .... "), and referenced the derived table column with a complex expression. This has now been fixed. |
541297 | If a GRANT or REVOKE of EXECUTE permission for a procedure did not include the procedure's owner, the entry in the transaction log would also not have included the procedure's owner. This has been fixed. |
541310 | If dbunload was used to attempt reloading a version 9 or earlier database that needed recovery, the dbunload support engine would have failed an assert and shut down. The assert failure has been fixed, but pre-version 10 databases needing recovery still cannot be reloaded with dbunload. If such a reload is attempted, dbunload will now display the error message "Failed to autostart server". The database will need to be started using using a pre-10 server, and if it then recovers successfully, it can be reloaded after the pre-10 server is shut down. |
541313 | The 'blocking' option was not included in the result set of the sa_conn_properties() stored procedure. This has been corrected. |
541322 | Use of the NEAR operator in a CONTAINS query may have returned incorrect results. This would have occurred when using a MANUAL or AUTO refresh index that had been refreshed several times. This has now been fixed. |
541333 | Under concurrent access, a connection may have blocked on row locks waiting for other connections that had long released their row locks. This would only have happened
if the connection had no changes to commit. This has been fixed. |
541335 | Windows that display long text result values did not consistently warn that only a portion of the value was being displayed. Specifically, if the value was longer than 65536 characters, but the maximum trunction length was set even higher, no warning was displayed. This has been fixed. |
541420 | In very rare circumstances, likely under heavy concurrency, the iAnywhere JDBC driver could have crashed. This has been fixed. |
541439 | Certain SQL statements would have returned null after being prepared. This has been corrected. |
541470 | If a procedure or view was created containing an expression that included subtraction of a negative constant, the procedure or view would not have been stored correctly. This has been fixed. |
541478 | The table name was not reported for SQLE_PRIMARY_KEY_NOT_UNIQUE when this error was encountered during a synchronization. This has been fixed. |
541575 | When RSA encryption was in use by the server or client on Mac OS X systems, a crash was likely under very low memory conditions. This has been fixed. |
541576 | When RSA encryption was in use by the server or client on Mac OS X systems, memory could have been leaked. This has been corrected. |
541586 | If a CREATE EVENT statement was executed without including the owner name for the event, the statement recorded in the transaction log did not include the current user's name as the owner. This has been fixed. |
541591 | After installing the SQL Anywhere software on a non-1252 code page Windows operating system (such as Chinese, Japanese or Korean), the demonstration database (demo.db) has a 2K page size. On 1252 code page systems, the demonstration database has a 4K page size which is expected. Some examples in the documentation may not work on non-1252 systems as a result. In particular, if a database is started on a server that has a 2K page size, databases that have larger page sizes can not be started on the same server.
To work around this issue, the demo.db database can be recreated using the dbinit, dbisql and the Scripts\mkdemo.sql script. Alternatively, the dbunload tool with the -ap option can be used to rebuild the database. |
541594 | The default for the Relay Server Outbound Enabler (RSOE) command line option -cr url_suffix was the Windows path, even on Unix. Now the RSOE default url_suffix on UNIX is /srv/iarelayserver as documented. |
541615 | If an application made a remote procedure call to a procedure that returned a result set with unsigned data types, there was a possibility that the call would have failed with a conversion error. This problem has now been fixed. |
541622 | If a Transact-SQL CREATE PROCEDURE statement appeared within a BEGIN ... END block, the syntax error given would have been "Syntax error near 'end' on line nnn", where nnn was the line corresponding to the end of the block. Now the error points to the first point at which the server detected a dialect conflict. |
541630 | Queries using the CONTAINS search conditionwith phrases longer than three words, or adjacent NEAR operators with more than three words, could have returned false matches. This happened if all of the pairwise conditions match, but in different places in the string. For example, for the phrase "a b c" the pairwise conditions are the existence of "a b", "b c" and "a * c" where * means any word. Therefore, the string 'a b x b c x a x c' will match this phrase even though it should not. The problem is now fixed. |
541734 | The Service utility (dbsvc) now supports creating services for the Relay Server (rshost) and the Outbound Enabler (rsoe) using "-t rshost" and "-t rsoe" respectively. |
541736 | Under some rare, timing-dependent circumstances, the Interactive SQL utility (dbisql) could have crashed after closing one of the windows used to view long result values. This has been fixed. |
541739 | When deploying a synchronization model for an UltraLite remote database to a SQL file, then using Interactive SQL to run the SQL file, errors could have occurred for DROP statements if the object did not exist, or CREATE statements if the object already existed. A user would have had to choose to ignore these errors. This has been fixed. Now, the generated SQL file uses Interactive SQL options to suppress errors that can be ignored. |
541742 | Virtual tables were considered non-updatable, which was incorrect. The server may have crashed if an UPDATE statement targeted a virtual table. This has been fixed. |
541744 | If a CREATE EXISTING TABLE command was used to create a proxy table to a remote server using one of the JDBC remote server classes, then the server would have leaked memory. This problem has now been fixed. |
541747 | The sample stoplists, the list of terms to ignore when building a text index, were corrupted for some languages. This has been fixed. |
541756 | When an application used one of the C External Environments to return a result set back to the server, returning a NULL value would have either resulted in a conversion error or a crash of the external environment. This problem has now been fixed. |
541767 | The system function next_connection() could have returned temporary connections (eg. those with connection IDs greater than 1000000000). This has been fixed so that the only temporary connections that will now be displayed are event connections. |
541770 | If an application connected to a database with a multi-byte character set made a remote procedure call using one of the JDBC remote server classes, then there is a chance the server could have either hung or crash. For this to have occurred, the remote procedure must return a result set containing long character columns, and the proxy procedure must not have initially been defined with a proper result clause, This problem has now been fixed. |
541772 | Calling the system function property('FunctionMaxParms',0) would have returned NULL, instead of the correct value 0. This has been fixed. This corresponds to the maximum number of arguments for the abs function. |
541783 | Calls to the sqlany_get_column() function in the C API library used by the data access modues for the various scripting languages (for example, PHP, PERL, Python, etc.) would have returned an incorrect value for the length field when fetching A_BINARY or A_STRING column information. This problem only affected 64-bit platforms. The length field is a size_t pointer and was being set to a 32-bit value, but on 64-bit platforms, size_t is a 64-bit value. This was fixed so that the length field points to the correct 64-bit or 32-bit value. |
541857 | Transactions blocked on a row lock placed by an INSERT, UPDATE, or an isolation level 2 or 3 FETCH, may have waited on the wrong connection, or may have waited indefinitely (until the transaction was forcibly aborted). For this to have occurred, the connection holding the lock must have been in the process of disconnecting when the transaction blocked. While correctness was not affected, application performance could have suffered. This has now been fixed. |
541861 | The server when run on Solaris systems, had poor performance compared to previous versions. Specifically, the TCP/IP communication was slower. Serveral changes have been made to correct this. |
541870 | Some versions of Windows Vista are misidentified as Windows Server 2008. Among other places, this would have shown up in the server console window, and with the 'platform' property. The GetVersion system call is unable to distinguish between Server 2008 and Windows Vista. This was corrected by changing the Getversion function to GetVersionEx. |
541908 | For some forms of simple DELETE statements on tables with computed columns, the server may have returned the following error:
*** ERROR *** Assertion failed: 106104 (...) Field unexpected during compilation (SQLCODE: -300; SQLSTATE: 40000) This has been fixed. |
542016 | When rebuilding a pre-10.0 database using the Unload utility (dbunload) with the -an or -ar command line options, dbunload could have hung under very rare conditions on certain Windows systems. This problem has only ever been observed on a few machines configured as Domain Name Servers (DNS), but the hang could have occurred under other conditions as well. This has been fixed. |
542139 | Sybase Central would have reported errors when attempting to browse a database that had the quoted_identifier option set to Off. SQL statements sent to the database had reserved words that were used as system table columns quoted (for example, SYS.SYSTAB."encrypted"). This did not work if the quoted_identifier option was Off, so the plug-in now temporarily sets it to On. |
542175 | The names of objects in the transaction log were not being qualified with owner name for some statements. Now, object names in the transaction log will be qualified with the owners names when the latter are not specified for the following :
- the REFERENCES clauses of CREATE and ALTER TABLE statement - the TABLE, [MATERIALIZED] VIEW, PRIMARY KEY, COLUMN and INDEX clauses of the COMMENT ON statement - DROP and ALTER INDEX statements |
542185 | When the properties of the visual or non-visual version of the Dbmlsync ActiveX Component were examined from a development environment, it would incorrectly have been described as "iAnywhere Solutions Dbmlsync ActiveX Component 9.0.1". The string has now been changed to properly reflect the true version of the component. |
542186 | Under rare circumstances, diagnostic tracing could have failed to record some cursor information for statements within procedures, for example, information about cursor close time and the graphical plan. This has been fixed. |
542199 | Attepting to start the Interactive SQL utility (dbisql), or any of the other Java administration tools, may have failed with a error that it could not load MSVCR71.DLL. This occurred if the machine does not already have MSVCR7.DLL in the path. This has been fixed. |
542208 | A query using a CONTAINS search condition over a MANUAL or AUTO refresh index that searched multiple columns, would never have returned rows where the first search column was NULL, even if the others were not NULL and had matches. This is fixed. |
542213 | Executing queries with temporary tables may have caused the database to grow unbounded. Row pages and schema pages were not bing properly released for temoporary tables. This has been corrected. |
542239 | If the Admin Mode Connection Script wizard was used to create event scripts for handle_UploadData and handle_DownloadData events, they would get an "unknown event" error when syncing. The problem was that the event scripts were created with the names "handle_uploaddata" and "handle_downloaddata" (note the differences in case). This has been fixed. |
542342 | If a conversion error occurred while constructing the string to be executed by EXECUTE IMMEDIATE within a procedure, the error might not have been reported, possibly leading to a server crash. This has been fixed. |
542344 | In a SQL Anywhere SOAP response, Column "string" data greater than 250 bytes in length may have contained garbled characters if the data was character set converted. This has been fixed.
Example: SA running iso-8859-2 database receiving a SOAP request with an Accept-Charset: UTF-8 HTTP request header will character set convert its response from ISO-2 to UTF-8. |
542349 | Executing an SQL query batch using the Perl, PHP or Python drivers, that contained a SELECT statement in addition to other SQL queries that did not return a result set, could have returned the error: -180 'Cursor not open' error. This has now been fixed.
For example: IF EXISTS( ... ) then DROP ... ENDIF; CREATE PROCEDURE ( ... ) BEGIN SELECT ... END; |
542356 | A query with a GROUP BY clause that referenced the same alias at least twice, would have incorrectly returned a syntax error.
For example: SELECT item = 'abc' FROM product p LEFT OUTER JOIN sales_order_items GROUP BY item, item This has been now been corrected. |
542397 | The DISH service does not set the HTTP Content-Type response header, which has occasionally caused Internet Explorer 7 to fail to render the WSDL. This has been fixed so that the response headers now include Content-Type: text/xml; charset="utf-8".
Note, the charset qualifier is not included in 9.0.2 since its output is in database character set. This change is in accordance with the WSDL 1.1 specification, see http://www.w3.org/TR/wsdl#_Toc492291097. |
542482 | On Mac OS X systems, if the path specified in the "Database" field of the "New Server" dialog in DBLauncher contained spaces, the server would have failed to start the database. This has been fixed. |
542514 | In a SQL Anywhere SOAP response, binary data types greater than 250 bytes in length were not base64 encoded. This has been fixed, and applies to SQL Anywhere SOAP services that have been defined with DATATYPE ON or DATATYPE OUT. |
--EOF--