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

随着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
279353 When an SPX connection to an ASA server running on NetWare was disconnected, it was possible for the NetWare server to abend. This has been fixed.
279359 When using the Procedure Debugger, the wrong source code would be displayed if the following occurred:

1 - Connected to a database,

2 - Disconnected from the database,

3 - Connected to a different database

From then on, attempting to display the source to any stored procedure usually displayed source for a different procedure. This problem is now fixed.

279372 When multiple MobiLink users were defined on a remote database, with overlapping publications, synchronization may not have proceed correctly. This problem could have manifested itself on a remote database where all the following were true.

- at least 2 MobiLink users were defined, say U1 and U2

- at least 2 publications are defined, say P1 and P2

- there existed some operation O, that affected both P1 and P2

- only U1 had a subscription to P1

- only U2 had a subscription to P2

Under these circumstances, if the subscription U1/P1 was synchronized, followed by the subscription U2/P2, then O may have been uploaded for U1/P1 but not U2/P2. This problem is now fixed and did not occur if the -u switch was used to specify the MobiLink user on the dbmlsync command-line.

279445 When a non-HTTP client tried to connect to a MobiLink HTTP server which used cookies, the server did not check for the protocol mismatch, causing both the server and client to hang. This is now fixed.
279448 Using LOAD TABLE on a table with a NOT NULL computed column could have corrupted the database, if the table contained check constraints and the CHECK CONSTRAINTS option for LOAD TABLE was enabled. If the column allowed NULL, the value of the computed column would be NULL regardless of the compute expression. This is now fixed.
279463 A Unix client application may have failed to connect to a local server via shared memory.

One of two scenarios may have been seen:

1 - the engine may report a message similar to:

[unixshm] AttachToSharedMem p=18874 e=__SQLAnyCli__18874_1824660827lx id=2 n=<NULL> o=0 s=4096 d=1 errno=0 FAILED

2 - If the Unix server's name length was greater or equal to 31 characters long, the client may have reported a message similar to:

[unixshm] AttachToSharedMem p=18874 e=the_name_of_the_local_engine_xx id=2 n=<NULL> o=0 s=4096 d=1 errno=0 FAILED

In both cases, the client library would have reported back to the application that it could not connect to the server. These problems are now fixed.

279483 Adding a connection level event script could have fail, when using a DB2 consolidated configured to use SyncDB2long.class and SyncDB2long.sql. The table "ml_connection_script" was being referenced as "ml_connection_scri".
279517 The dbunload utility would have created an incorrect reload.sql file, if a column with a user defined datatype modified the DEFAULT value or CHECK constraint.

For example:

CREATE DOMAIN speed_type INT DEFAULT 50 CHECK (@a < 100);

CREATE TABLE speed_violations (

driver char(40)

speed speed_type );

ALTER TABLE speed_violations MODIFY speed DEFAULT NULL;

ALTER TABLE speed_violations MODIFY speed CHECK NULL;

The reload.sql would not have contained the ALTER TABLE statements to change the DEFAULT and the CHECK. This has been fixed.

279544 After Java objects were loaded using the LOAD TABLE statement, they could have been corrupted or not viewable in Sybase Central or dbisql. This was due to the objects not being fully initialized before de-serialization was attempted. They now are.
279554 If there were multiple SPX connection to an ASA server running on NetWare and one of these connections disconnected, then one or more of the other SPX connections could have hung. This has been fixed.
279576 If a query involved more than 40 proxy tables on multiple remote servers, there was a very good chance the query would have crashed the server. This problem has now been fixed.
279593 When using an upload_update event, an ODBC function sequence error may have occurred when the following conditions were true:

- the table contained blobs (binary or character)

- one or more of the blobs (but not all) were NULL

This has now been fixed.

279629 When importing data from a Lotus 1-2-3 spreadsheet, DBISQL was misinterpreting INTEGER records if the values they contained were negative. In that case, the imported value was always 32767 or 65535. This has been fixed.
279700 If a database containing proxy tables was unloaded and then subsequently reloaded, the reload could have sometimes failed with an "index not unique" message. This problem has now been fixed.
279708 Upgrading an ASA version 6.0.x database to a 8.0.x database, didn't upgrade ML system tables properly. The upgrade logic that copied scripts from ul_script to ml_script didn't explicitly name columns, and the implicit ordering caused the values in the script and script_language columns to get swapped. This has now been fixed.
279732 When synchronizing a subscription for a user (say U2), if dbmlsync encounters an update operation where the pre-image of the operation belongs to no publication subscribed to by U2, but the post-image belongs to some publication subscribed to by U2, then the update should be uploaded as an insert, since the row is expected to not exist on the consolidated database. When all the conditions below were true, dbmlsync failed to convert the update to an insert. As a result MobiLink would issue a warning and ignore the update.

- at least 2 MobiLink users were defined, say U1 and U2

- at least 2 publications are defined, say P1 and P2

- U1 is subscribed to P1. U2 is subscribed to P2. No subscription exists between U1 and P2 or between U2 and P1.

- P1 and P2 both contain a table T1, but with different WHERE clauses or one publication has a WHERE clause and the other does not

- there exists a row R in T1 that satisfies the WHERE clause for P1 but not for P2

- an update operation, O occurs on R and the post-image of the update satisfies the where clause for P2

In this case, when P2 is synchronized, the update operation O would not be converted into an insert and so will be ignored by MobiLink.

279739 Under the following conditions, the next available value for a column having a GLOBAL AUTOINCREMENT default value would not have been set correctly:

- Database recovery was performed at startup.

- The table containing the column was referenced in the transaction log during recovery.

- An INSERT into the table with no value specified for the GLOBAL AUTOINCREMENT column was attempted before shutting down the database.

279744 Opening the "Find Server" dialog from the "Connect" dialog, then using the Windows task bar to activate some other application and then reactivating dbisql again, would have caused the "Connect" dialog to be brought to the top, instead of the "Find Server" dialog. The problem was that the "Connect" dialog was not enabled, the "Find Server" dialog had to have been activated and closed first. This would have been difficult to do, especially if the "Connect" dialog happened to completely obscure it. This problem has been fixed.

Note, this same problem affected all of the ASA administration tools -- dbisql, Sybase Central, dbconsole, and the Procedure Debugger.

279781 It was possible for either end of a synchronization, (UltraLite, dbmlsync or a MobiLink Server worker thread), to consume 100% CPU in the TCP/IP layer. This problem could also have affected HTTP clients, since HTTP is built upon TCP/IP as well. It is now fixed.
279836 A CREATE INDEX statement may have caused an assertion within the server, if the column list for the index contained duplicates. This problem has been corrected.
279841 Starting a database with the Runtime Server, (rteng8.exe), would have caused an empty log file for the database to be created. This is now fixed, but a workaround was to force the database to not have a log by running "DBLOG -n database-file".
279849 In an ADO application, a call to MovePrevious after a call to MoveLast could have caused an application to crash, if the rows contained large text columns. This has now been fixed.
279969 After rebuilding a Mobilink remote database using dbunload -ar, the DBMLSync utility would have returned the error:

No off-line transaction log file found an on-line transaction log

starts at offset ...

as dbunload did not save the current transaction log and reset the start and relative log offset in the rebuilt database. This has been fixed.

280050 If a prepared statement caused an error when executed, (e.g. Update attempted on non-updatable query), a second attempt to execute the same prepared statement could have crashed the server. This could also have happened when attempting to execute an update or delete on a non-updatable view.
280167 When updating variant array data through the ASA provider, the array data could have been omitted, have been updated with incorrect values or the update could have failed. This could alsi have happened using ADO, if a Variant type was used to insert data into a field in a recordset. This problem is now fixed.
280188 The INPUT statement would have failed to import data, if the table name in the INPUT statement was qualified by an owner name, and it was responsible for creating the database table. For example, when DBISQL executed the following:

INPUT INTO dba.myTable FROM myData.dbf FORMAT FOXPRO

it would have incorrectly created a table called "dba.myTable" and incorrectly reported the error:

ASA Error -131: Syntax error near ')' on line

This has been fixed, but a workaround was to remove the owner name prefix from the table name.

The problem occured only with the following file formats: DBASEII, DBASEIII, EXCEL, FOXPRO, LOTUS.

280201 If a database table with a timestamp column contained any rows at the time that the TRUNCATE_TIMESTAMP_VALUES option was set to 'ON', and the DEFAULT_TIMESTAMP_INCREMENT option was not set to 1, then updating a row in this table without simultaneously updating the timestamp value(s) in the row could cause assertion 103102 to be raised, if the row's width was increased. This has been fixed.

Note that turning on the TRUNCATE_TIMESTAMP_VALUES option or increasing the DEFAULT_TIMESTAMP_INCREMENT when there is timestamp data in the database will not guarentee that the pre-existing timestamp values will be truncated appropriately. This may lead to unexpected behaviour, particularly in replicating environments. If you need to change either of these options, it is highly recommended that you unload your data, dbinit a new database, set the options appropriately, then reload your data. These steps will ensure that all timestamp values in the new database are truncated correctly.

280238 In order to use syncronized publications, (specified with -v on ulgen command line), the analyzer generates a #define statement in order to specify which publications to syncronize. These are of the form UL_PUB_(PUBNAME). However these #defines were not being written to a header file unless C++ code was being generated. For regular ESQL code the #defines were not accessable. Now the #defines are placed in generated-file-name.h, (For generating C output), or in generated-file-name.hpp, For C++, ie. using -t C++ on ulgen command line), where generated-file-name is the name of the generated C or CPP file generated. You need to include the appropriate header file in any source file that needs the UL_PUB_ #defines
280262 Executing ALTER DATABASE CALIBRATE could have generateg the following spurious error:

"At least one of the dbspaces was not calibrated."

and could also have failed to calibrate some dbspaces. This problem is now fixed. The above error is still issued if one of the dbspaces being calibrated is smaller in size than the threshold value of 800 pages.

280268 Comments on triggers were not being unloaded with the trigger owner by dbunload. This could cause the reload.sql to generate a 'table not found' error during the reload.
280289 If a referential action trigger, (e.g. a CASCADE foreign key), was executed while procedure profiling was enabled, then the server would have crashed when an attempt was made to retrieve the profile information. This is now fixed.
286089 If a UNIQUE table constraint consisted of a large number of columns, dbunload would have created a very long line in reload.sql for the ALTER TABLE ADD UNIQUE statement, because all column names were put onto the same line. These long lines may have caused problems for text file editors. Now dbunload puts one column name per line just like for the CREATE INDEX statement.
286090 The ALTER DATABASE CALIBRATE [SERVER] statement can be used to recalibrate the cost model for all dbspaces in the database. A dbspace is considered for calibration only if its size exceeds 800 pages. When the server found a dbspace, it stopped looking at the remaining dbspaces and returned immediately with an error. Now the server will consider all existing dbspaces and calibrate all that meet the minimum size requirement. Further, the server will no longer issue an error if it succeeds in calibrating all eligible dbspaces. An error will still be raised, if no eligibile dbspaces exist or the calibration fails for some other reason.
286100 If an attempt to connect to a local server failed and the logon dialog was kept open to try and connect to a remote server, it would always have failed to connect. This has been fixed.
286131 The database server did not correctly save the gathered statistics on BETWEEN predicates, when the predicates were on character type columns with a declared domain length greater than 7. These statistics will now be saved and used correctly
286165 A LOAD TABLE statement, not using any of the STRIP ON, ESCAPES ON or QUOTES ON clauses, would have inserted incorrect data for the last value in the data file, if the last row of the data file did not end in a newline character. This is now fixed.
286167 To correctly create views based on other views, the dbunload utility allows for specifying an iteration count, (-j option), for view creation statements. When using -j the reload script checks to ensure that all views have been created. If a views has not been created the error message "Table 'viewname' not found" is displayed. When using dbunload -j with -ar, -ac or -an, the error message was:

"Illegal cursor operation attempt"

which was not helpful. This has been fixed, dbunload will now display the error message

"Table 'viewname' not found" in these cases as well.

286173 When viewing table data through the Visual Studio .Net Server Explorer, character data had an extra byte (usually a square box) appended to it. This has been fixed.
286180 When run on AIX 5, the server could have taken an unusually long time to start. This has been resolved.
286263 When optimizing queries with a high join degree, the enumeration process will now take into account the number of outer-joins a preserved side table belongs to, when ranking the candidates during enumeration. Also, high join degree queries will nolonger use the operators Sort Merge Outerjoin and Block Nested Outerjoin.
286264 When fetching data using the DT_DECIMAL data type, unneccessary work was done on the server which affected performance. This extra work is no longer done.
286265 The optimizer's enumeration process will now cost first pipelined join methods, (e.g., Nested Loops), if the inner table has a unique index that can be explored or the inner table has more than 50% of the pages in the cache.
286271 The server was spending slightly more CPU time than necessary, when executing nested-loop joins. The difference would have been most apparent for joins when all data was cached and the right hand side of the join returned 0 or 1 row for each outer row. The extra work the server did has been removed.
286276 Both the MobiLink Server and the MobiLink ASA Client may have reported the error "Protocol error" or the MobiLink Server alone may have reported the error "A network read failed. Unable to read data from the remote client", during ynchronization. The client would then have stopped and not have been able to synchronize any more. Both of these problems have been fixed.
286287 The database server collects information on selectivities of predicates during query execution. Under some situations, selectivities of predicated on string data were not saved and were lost on database shutdown. These selectivities are now correctly saved.
286311 If an Ultralite database was reset after performing at least one successful synchronization and a communications error occurred on the first sync attempt after being reset, then MobiLink would have failed with a 'sequence number too small' error. Ultralite would have been unable to sync until Mobilink was manually adjusted with a new sequence number. Alternatively, if Ultralite sync'd exactly once before it was reset,

then modified rows in the Ultralite client would never have been uploaded. In this

case synchronization would have continued and no error was reported. These problems are now fixed.

An Ultralite database may be reset by deleting the persistent store, or by

changing the sync user name.

286402 The server could have crashed on the first Java request made after the server started. This problem would only have occurred for databases initialized with JDK1.3.1 or higher. It is now fixed.
286624 If a non-communication error occured during a download, MobiLink may have reported that it was unable to finish writing the download stream, instead of reporting the client error it should have received. This has been fixed.
286636 If a select statement caused a warning to be generated, (eg. "Null value eliminated in aggregate function"), ASAProv would sometimes have returned an error, causing applications to stop processing the result set. As a result ADO applications could report errors such as "Invalid operation - EOF or BOF has been reached". Now warnings, with the exception of a problem that occurs when dealing with a truncation warning, are no longer treated as an error.
286637 Executing a LOAD TABLE statement against a table with an invalid CHECK constraint, could have caused the server to crash. This has been fixed
286696 When a client application using TCP/IP or SPX disconnected from the server, an error "[Sybase][ODBC Driver]Disconnect error: Transaction rolled back" could have occurred, (error number 01002). By default, the timeout for a disconnects was 5 seconds. On a busy server, it could take longer than 5 seconds to hear back from the server and this would result in the message described above. There was no provision for a user specified timeout, so a new connection parameter has been added to specify the disconnect timeout value, (the default is still 5 seconds).The new option, "TIMEOUT=n" or "TO=n", is specified in the TCP/IP or SPX communications option string.

Example:

rc = SQLDisconnect( hdbc );

if ( (rc == SQL_ERROR) || (rc == SQL_SUCCESS_WITH_INFO) ) {

/* get the error message */

286760 The ASA 8.0.0 server for NetWare, from builds 2271 to 2306, could have generated 'Namespace exhausted' or 'out of prepared statements' errors, when using Java in the Server. This has been fixed.
286783 Doing a Replace All could have caused a hang or crash for some search/replace compinations like replace * with ** or ' with ''. This is now fixed.
286808 When profiling a procedure that contained a carriage return and line feed character at the end of each line, a box would appear in the source code of the profiling details panel. This has been fixed.
286891 If a CASE expression contained only constant WHEN values and included an ELSE value, NULL would have been returned instead of the ELSE value, if the lookup value was NULL. In the following example, the value of "rslt" when "c1" is NULL should be 'other', but was returned as NULL before this fix.

create table case_null( pk int primary key, c1 int, expected char(10) );

insert into case_null values (1,1,'one');

insert into case_null values (2,2,'two');

insert into case_null values (3,3,'other');

insert into case_null values (4,null,'other');

commit;

select

c1,

case c1

when 1 then 'one'

when 2 then 'two'

else 'other'

end as rslt,

expected

from case_null;

286909 The statement string returned by sa_get_request_times() would have included a trailing double-quote and newline character. These have now been removed.
286981 After adding a row to a result set which does not contain the primary key, the user is now warned that the default or computed values may not be shown and that the query should be rerun in order to display the row correctly. Previously, this message was displayed only when updating a row, now it is displayed when adding a row. This applies only to modifying table data directly in the Results pane in DBISQL, and also to the "Data" details panel for tables in the ASA plug-in for Sybase Central.
287012 Fetching more than 2 records in a result set would have truncated any text or blob values at 200 bytes. This is now fixed.
287034 Updating a forward only cursor via ADO could have resulted in an error stating "An invalid fFetchType value was specified". This is now fixed.
287078 Upgrading a database would have failed, if the database had the option PERCENT_AS_COMMENT = OFF. The message was:

"Error in file sybprc50.sql at line 2473 with sqlcode -131

SQL error (-131) -- Syntax error near '' on line 62

This has been fixed

287103 If a server was extremely busy, connection attempts over links other than shared memory may fail with the error "Database cannot be started -- ???". This has been fixed.
287206 when a custom collation was not in the script custom.sql, running dbinit -z or dbunload -ac/-an, only printed the message "Database creation failed" . Now the error message

is "Database creation failed Collation "name" not found".

287271 The VALIDATE TABLE statement could have complained of missing index entries, when in fact all entries did exist exist or might not have complained when entries did not exist. As well, keyset cursors might have misbehaved when repositioning and spurious 100801 assertions were possible. For these problems to have occurred the index associated with the failing operation must have been trie-based, the associated row must have appeared in the first entry of the leaf page, and it must have been possible, (ignoring uniqueness constraints), to insert an entry with the same value on the previous leaf page. These errors should have been relatively rare, (the most common being the spurious VALIDATE TABLE failures.)
287296 Character data fetched in a .Net WebService application could have had the last character of the data truncated. An off-by-one error was fixed.
287307 Temporary strings longer than the database page size could have become corrupted. For this to have occurred, the page size of the affected database must have been smaller than the server page size, (this problem could not have occurred if the database page size was the same as the server page size). One manifestation of this problem was spurious syntax errors for long statements or queries. This has now been fixed.
287347 The server could have crashed when inserting values into a B-Tree index. This could only have occurred when inserting into an index built with the fast index creation code and only when inserting a small value, (one that would force a leftmost internal B-Tree page to split). This is now fixed.
287352 Predicates that compared a date column to an integer constant, (or variable), were not treated as sargable by the optimizer, hence the optimizer would not have considered the use of an index for such predicates. For example, in the query

Select * from sales_order where order_date = 19931010

the comparison predicate would not be treated as sargable, so if an index existed on column order_date, it would not be utilized. This problem has been corrected.

287447 The server could have sent back a column description with an invalid MBCS character, or filled the server's temp file, (and eventually assert), when all of these following conditions existed:

- the database was using a multibyte collation

- the select list contained an expression using multi-byte characters which was greater than 255 bytes long, and was not aliased

- the client application issueed a describe cursor request

This has been fixed, but a work-around is to provide an alias to the long expression.

287488 A race condition existed, when loading user group definitions, that could have caused the server to crash. Group definitions are only loaded once for each user, the first time it is referenced at startup or after a DDL statement changes user or group definitions, so the likelihood of the problem occurring was very small, and would not have occurred on single-CPU Win32 platforms. This problem is now fixed.
287725 Supplying a string value to insert into a binary column, where the string required truncation to fit, could have caused incorrect values to be inserted into the row.
287854 Using ADO and fetching backward through a cursor (using MovePrevious) until hitting the start of the result set (BOF) and then fetching forward (using MoveNext) would have incorrectly set EOF on the first MoveNext after hitting BOF. This is now fixed.
287923 A threaded client application could hang calling db_fini, if using embedded SQL or SQLFreeEnv, if using ODBC. This is now fixed
287939 Using the INPUT command with INPUT_FORMATs of dBaseIII or FoxPro, would have failed if the files had extra padding bytes in their headers. These files can now be read.
287989 If a keyset-driven (ESQL SCROLL) cursor was opened over a query that referred to an aggregate function in the select list, the aggregate function could have been computed over NULL instead of the correct argument. For this situation to have occurred, the argument to the aggregate function must have been a complex expression (such as x+y or CAST( x as DOUBLE)), and the argument must have been referred to in the query in a location below a materializing operator feeding the grouping operator, and the columns referred to in the complex expression were not used elsewhere above the materialzing operator. In addition to cursors, some UPDATE statements could have had the same problem. For example, a keyset-driven cursor over the following query would have returned NULL for the 'mx' attribute:

select *

from R R1

join

( select R2.y, max(R2.x-1)

from R R2 join R R3 on R2.y=R3.y

where R2.x-1>0

group by R2.y ) DT(gb,mx)

on R1.y = DT.gb

where R1.x < 5

288044 The "Connect" menu item was always enabled, even when already connected. Clicking 'Connect' while already connected caused the current connection to be closed, and the "Connect" dialog to be opened. Similarly, the "Disconnect" item was enabled, even when not connected, although clicking "Disconnect" while not connected did nothing. Now both menu items are only enabled when appropriate.
288046 A SQL statement like the following:

SELECT e.emp_id into #temp

FROM dba.employee e

WHERE e.emp_id IN

( SELECT o.sales_rep

FROM dba.sales_order o

WHERE o.sales_rep = 299

);

is rewritten as:

SELECT DISTINCT e.emp_id into #temp

FROM dba.employee e, dba.sales_order o

WHERE o.sales_rep = 299 and e.emp_id = dba.sales_order

but the generated DISTINCT was being ignored. This could have caused more rows to be inserted into #temp than there should have been. The DISTINCT is no longer ignored

288068 Disjunctive clauses that contained two or more predicates that referenced the same expression as one operand, and an identical constant as the other operand, were incorrectly processed during rewrite optimization and may have yielded incorrect results. For example,

Select *

From Product

Where id < 601 or id = 601

would have resulted in the second predicate being dropped from the query altogether; hence the product row with id 601 would not have appeared in the result set. This is now fixed.

288136 Calling ULData::PalmExit() would have closed the UltraLite store, but would not have remembered that it was closed. If the database was deleted after this time, a call to ULData::PalmLaunch would still have believed that the database was still open and would not have recreated it. Multiple consecutive calls to either PalmLaunch or PalmExit did not check to see if the database was open or closed. Now, both PalmLaunch and PalmExit check the status of the database and correctly set the flag to remember if it's open or closed.
288217 The custom build step for custdb.sqc for the Pocket PC 2002 emulator, incorrectly used the DSN "UltraLite 9.0 Sample", it has been correctled to "UltraLite 8.0 Sample".

Also, the default x86em UltraLite runtime has been changed from emulator to emulator30. The x86em target of CustDB should compile and link without requiring any changes with Pocket PC, but when linking for Windows CE 2.11, the link settings must be manually changed to link against the UltraLite runtime in the emulator directory instead of emulator30.

288225 When using TCP/IP with DoBroadcast=NONE, (aka UseUDP=NO), 6.0.x clients would have failed to connect to 8.0.x servers. This has been fixed
288265 If a query contained a predicate of the form:

( x BETWEEN y AND z, 10.0)

where 10.0 was user estimate of the selectivity of the BETWEEN predicate, the server would ignore the supplied estimate and revert to the built-in default. Further, if a query contained a predicate of the form:

(x >= 10, 5.0) AND x <= 11

the user estimate of 5.0 would again be ignored by the server. This has been fixed.

288267 If a client application made multiple connections, and the first connection did not use debug logfile, but subsequent connection(s) did, some debug logfile messages (including TCP/IP specific messages) would be missing. On Unix, some debug logfile messages (including TCP/IP specific messages) would be missing for all connections.

These problems have been fixed.

288325 Running the dbunload utility with either of the -an or -ar options could have generated a syntax error. This would have occurred very rarely, only if "go" appeared as the last two characters in its 32K buffer. This is now fixed.
288342 When the command line options, -o or -ot, were specified on dbmluser, it would have created an empty file. This is now fixed.
288362 Overwriting an existing NT service may fail with the error messages:
The specified service has been marked for deletion
Error creating service "servicename".
This has been fixed.
288424 When fetching string data using the System.Data.OLEDB components, various errors could have occurred. These included "Object reference not set to an instance of an object", data exceptions, infinte recursion errors and application faults. The problem has been fixed.
288427 A query that had an ORDER BY clause and had a table with an index whose columns were all equated to constants, could have returned rows in an order that did not match the ORDER BY clause. This is now fixed.
288451 When running an encrypted database on Windows CE and using the server option -ep, (Prompt for encryption key), the server did not prompt for the key. This has been fixed.
288455 When the procedure debugger is at a breakpoint, View/Other/Query allows a query to be executed and the result set displayed. If the query was longer than 255 bytes, it would have caused the server to crash. This problem has been corrected.
288465 Attempts to use a Java class that had been replaced by a newer instance could have given incorrect results, caused an endless loop, or a crash. This is now fixed.
288515 If an unsigned integer or smallint value was used as the argument to the abs() function and the value was greater than the maximum value for the corresponding signed type, the result would be incorrect. For example, the expression:

abs(cast(65535 as unsigned smallint))

returned 1 instead of 65535. The correct value (65535 in this example) is now returned.

288531 The following problems related to direct editing of table data have been fixed:

Updating a row could have failed, (the row was silently rolled back), if either

a) The table had no primary key and at least one TIME or TIMESTAMP column, or

b) There was a primary key, and one or more of the key columns was a TIME or TIMESTAMP

Deleting under these circumstances is not supported. The user is now notified that the update has failed in these cases.

Updating a row would have failed, (the row was silently rolled back), if the result set contained a TIME or TIMESTAMP column, even if that column was not in the primary key. The row is now correctly updated.

Deleting a row could have failed, (the row was silently rolled back), if either

a) The table had no primary key and at least one TIME or TIMESTAMP column, or

b) There was a primary key, and one or more of the key columns was a TIME or TIMESTAMP

Deleting under these circumstances is not supported. In these cases, the row had been removed from the result table in the "Results" pane even though it had not actually been removed from the database. The row is now left in the "Results" table and the user is notified that the row was not deleted.

288570 If a query with an order by clause is executed with an optimization goal of 'first-row', and there exists an index that can be used for satisfying the order by clause, then a likely optimal plan is one that uses that index and a pipelined execution strategy. However, the server could instead have chosen a plan that did not use the index and materialized the entire result set before returning the first row. The problem is more likely to be seen when the estimated cost of the query is relatively small. The server will now pick an optimal plan in this case.
288626 When clicking on the "Browse" button to browse for a file or directory, if the corresponding file or directory name text field was empty, then the chooser would initially open at the current user's home directory. Now, the last directory visited via a chooser in the current session of Sybase Central will be displayed.

Note that if the corresponding file or directory name text field is not empty, then the chooser will attempt to open at the directory contained in the text field.

288633 If a stored procedure exception handler called another procedure to deal with the error, and the called procedure executed a RESIGNAL, the RESIGNAL would have been ignored. This is now fixed.
288639 A new option has been added to the ODBC datasource configuration dialog, labelled "Suppress fetch warnings". Checking this option will suppress warning messages from the database server from being returned to the application. Prior to version 8.0.0, the only warnings that were returned when fetching were truncation warnings and row-updated warnings. As of version 8.0.0, a wider range of warnings are possible. The new checkbox was introduced since some applications are not equipped to handle warnings

returned on a fetch.

288657 When run on Windows platforms, the server could have hung during start up, if multiple servers were starting at the same time, with the same name. The server will no longer hang, only one engine with the same name will start successfully.
288664 If a trigger used alias to reference the old and new row values and if one of the two alias names was not defined, for example:

create trigger trig1 before update on T1

// referencing old as oldname -- missing definition

referencing new as newname

for each row

begin

if oldname.col1 > newname.col1 then

message 'Test'

end if;

end

then no error was detected during execution of the trigger. The above IF condition was always false. This has been fixed. Now the error "Correlation name 'oldname' not found" is returned as expected.

288782 Prior to this fix, neither the download_cursor nor the download_delete_cursor could be implemented as a call to a stored procedure on some supported consolidated databases. Now this should work with all supported consolidated databases.
288823 If a stored procedure, which returned a result set, was run 12 or more times in a connection, it could have returned an empty result set. The problem would appear if prefetching was enabled. This is now fixed.
288826 When using the Unload Database wizard to unload and reload a database that contained Java classes, JAR files or tables with Java columns, on a server that didn't contain Java support, the unload would have succeeded, but the reload would have failed. The Unload Database wizard now allows for excluding from the reload file any references to these Java objects, so that the reload SQL can be used on a server without Java support.
288840 When an Embedded SQL application closed a cursor, some memory associated with the cursor was not freed until the first of the following events:

- the prepared statement used to open the cursor was dropped

- the cursor was reopened

- the connection was disconnected

Now this memory is freed immediately on the cursor close.

289017 Any query search condition x=y would return FALSE, if the declared type of x was java.lang.Object. If the declared type of x was another java class, the comparison would be performed using the isEqual() method of the class.

For example, the following would incorrectly return 0:

create variable v1 java.lang.Object;

create varaible v2 java.math.BigDecimal;

set v1 = new java.math.BigDecimal(12);

set v2 = new java.math.BigDecimal(12);

select count(*) as cnt from sys.dummy where v1=v2

However, the following query would correctly return 1:

select count(*) as cnt from sys.dummy where v2=v1

This error could have caused database recovery to fail if a column declared as java.lang.Object appeared in a table without a primary key. This is now fixed.

289032 When a plan file was loaded with DBISQL, if the original SQL contained any of the following characters:

- Less-than sign (<)

- Greater-than sign (>)

- Ampersand (&)

- Apostrophe (')

- Quotation mark (")

the SQL Statement field would have contained the XML escape sequence corresponding to these characters, rather than the characters themselves. Here are the escape sequences:

- Less-than sign (<)

- Greater-than sign (>)

- Ampersand (&)

- Apostrophe (')

- Quotation mark (")

Now the SQL Statement field contains what it did when the plan for the statement was created (i.e. the actual characters appear rather than their escape sequences.)

289051 Files created by the OUTPUT statement in FIXED format, were always terminated by "\n", even if the convention for the host operating system was "\r\n" (e.g. on Windows). This has been fixed.
289130 If a DISCONNECT event handler was defined, a disconnect which caused an auto-shutdown of the database may not have caused the event handler to be executed. This problem would have happened on single-processor servers, but was unlikely to happen on multi-processor servers, unless the database server was started with the "-gt 1" command-line option to limit the number of OS threads used. The DISCONNECT event handler will now execute correctly.
289183 When a Java UltraLite encountered a MobiLink user authentication error, if the application was shutdown and rerun it would have reported a communication exception instead of invalid userid and password, as it did the first time. Now the application will correctly report the invalid userid or password error on subsequent runs.
289188 When running UltraLite Java and trying to synchronize, if an out-of-memory error occurred, especially after uploading data, UltraLite would have lost information about the uploaded data and tried to upload the same data over and over again, causing non-unique index errors on the MobiLink server. In some cases, the .udb file was corrupted and the database file had to be rebuilt. Now if a memory error occurs, a fatal error is set and the synchronization stops.
289219 DBISQL would have reported an internal error if a stored procedure was called and it's result was saved to an Excel file using the OUTPUT statement.

Eg:

CALL sa_eng_properties;

OUTPUT TO props.xls FORMAT EXCEL

This is now fixed.

289259 When editing a row in Sybase Central on a table's "Data" page (or in DBISQL in the "Results" panel), if none of the column values were changed and then ENTER was pressed, a message would occur warning that the row could not be updated. The message was really trying to say that no rows were updated because no rows had changed. Now, Sybase Central skips updating the database if it detects that the new column values are the same as the old ones. This is more efficient, and has the side-effect of eliminating the warning message.
289286 If a client application fetched string data with a length larger than 199 bytes through the ASA Provider, and conversion of the data was required (eg. from ascii to unicode), the data returned to the application would have been truncated. Visual Studio .Net data access components (including DataTable and DataAdapter classes) would be subject to this problem. It is now fixed.
289294 The results of the last synchronization can now be retrieved using a new function in the UltraLite runtime:

C API: ul_bool ULGetSynchResult( p_ul_synch_result );

C++ API: bool ULConnection::GetSynchResult( p_ul_synch_result );

A new struct has also been created to store these results:

typedef struct {

an_sql_code sql_code; // synchronization sql code

ul_stream_error stream_error; // communication stream error info

ul_bool upload_ok; // TRUE if upload worked

ul_bool ignored_rows; // TRUE if uploaded rows were ignored

ul_auth_status auth_status; // authentication status

ul_s_long auth_value; // actual value by mobilink

// to determine auth_status

SQLDATETIME timestamp; // timestamp of the last synch

ul_synch_status status; // status info used by observer function

} ul_synch_result, * p_ul_synch_result;

An application must allocate a ul_synch_result object before passing it to ULGetSynchResult, which will fill it with the result of the last synchronization. These results are stored persistently in the database.

289309 DBISQL was seen to hang on startup intermittently on Windows 98 machines. The hang usually happened when the splash screen was opened. The problem was related to the Java Runtime Environment's use of DirectDraw on Windows. This fix disables the JRE's use of DirectDraw on Windows 95/98/Me.
289351 When inserting numeric values into a database using ODBC or OLEDB could have resulted in a corrupt numeric value being stored in the database. This has been fixed.
289423 If the begin_connection synchronization script caused an error, and the handle_error event returned a value of 4000, indicating that the Mobilink Server should be shutdown, it would not have been shut down. This has been fixed and the MobiLink server should shutdown as expected.
289515 When making a connection via jConnect, if the remote password login parameter was set to a large value, (for example when using the technique of adding database filename to the remote password and the database file path was large) then there was a very good chance that the connection would have failed with a message like "invalid user_id". This problem has been fixed.
289531 The TABLE TYPE dropdown in the Query Editor, (ie TOOLS->EDIT QUERY), would have listed each table type multiple times, depending on how many disconnects and reconnects had occurred since dbisql was started. This is now fixed.
289554 For simple queries of the form:

SELECT <col-list>

FROM <single table>

WHERE <column> = <constant> [AND ...]

if the constant did not have the same domain as the column, then the engine could have returned an error (could not convert <constant> to ...), returned rows that did not match the search condition, or it could have failed to return rows that would normally be returned.

For example, the following query:

select *

from department

where dept_id=100.1

would have returned the row with dept_id=100. Before the fix, the constant was always converted to the domain of the column, and the comparison was performed in the domain of the column. If the constant could not be converted to the domain of the column (for example, comparing a smallint column to 60000), then a conversion error was generated. If a numeric constant was compared to a string column, the number was converted to a string and compared lexically; the correct behaviour should convert the string column to a numeric type for comparison to the number.

This incorrect behaviour only occurred if the query was simple enough to bypass optimization (see the QueryBypassed property). Queries containing features such as joins, grouping, and complex search conditions would not be affected by this issue.

In cases where the constant can not be converted to the column domain without loss of precision, both the column and constant are now converted to a common comparison domain, and the comparison is now performed in the comparison domain. In this case, an index can not be used to satisfy the search condition.

289566 When attempting to set the ISQL_LOG option permanently, the value was not actually changed in the database. Logging was turned on/off, but the setting was lost once the connection was closed. Now the option is saved properly.
289843 When the option optimization_logging was set 'on', the server should have output a row to the SYSOPTREWRITE table for each query rewrite optimization applied to each statement for that connection. This was not occurring. It has now been fixed.
289889 Synchronization options defined for a Publication, MobiLink user or Synchronization Subscription would not have appeared on the Extended Options page of an object's property sheet, if the option names were defined in mixed or upper case, (ie,

"ScriptsVersion" or "SENDCOLUMNNAMES".) This problem has been corrected.

Note that since any settings made on the property have always used lowercase option names, this problem would only appear if an option was set by some means other than the property sheet; for example, using the "CREATE SYNCHRONIZATION SUBSCRIPTION" statement.

289947 If the file asasrv.ini, (.asasrv.ini on Unix platforms), was large, connection attempts could be slow or even fail. This has been fixed.
289973 Creating a unique index on existing data that contained nulls, could have resulted in a corrupt index. For this to have occurred, the index being built must have contained duplicate entries (containing nulls), have been large with respect to cache size and the table must have been relatively unordered. This problem has been fixed.
289982 The UltraLite Generator will now output the SQL as a comment, to the C++ classes it generates.
289983 When calling a stored procedure through ASAProv, if an output parameter was created in the application with a length of one byte, no data would have been returned for that parameter. While this is now fixed, a workaround would be to create the parameter with a length of 2 bytes or more, then a one byte output parameter will be returned correctly.
289992 For long MobiLink Monitor sessions, synchronizations in the Overview could have overlapped and synchronizations that met higher-precedence watches could be obscured by synchronizations that met lower-precedence watches. Now synchronizations that meet higher-precedence watches are not obscured.
290019 Prior to this fix, the user name and/or script version would not be displayed for synchronizations that failed during authentication.
290040 If a column was modified by opening the Column property sheet from within the Table Editor, the change would be lost if no other changes were made in the Table Editor. This has been fixed.

In addition, the Apply button is no longer displayed when a Column property sheet is opened from inside the Table Editor, since any changes made from a Column property sheet are actually applied when the Table Editor's Save menu item or toolbar button is clicked.

290114 SQL Remote may have complained about missing transaction logs, due to a problem tracking the log offset. This problem has been fixed.
290133 LOAD TABLE gathers and generates statistics on columns when certain conditions are met. These statistics are subsquently fine tuned when queries are executed. However, updating the data can leave the statistics in a stale state until further queries are executed. If an application uses LOAD TABLE to load some columns with data that is all or mostly nulls and uses a subsequent update statement to populate these columns with non-null values, then the statistics for these columns could have been very wrong, resulting in bad performance for the first query run against this data. LOAD TABLE has been modified such that it will no longer generate statistics for those columns that are loaded with data that contains NULL values for more than 90% of the rows being loaded.
290138 When running in console mode, DBISQL would not have displayed BINARY values correctly, they would have appeared as a string similar to "[B" followed by up to 8 hexadecimal digits. Now, they appear as "0x" followed by a string of hex digit pairs. This problem was restricted to results printed on the console. It did not affect the windowed mode of the program, nor was the OUTPUT statement affected.
290143 LOAD TABLE gathers and generates column statistics on both base and temporary tables. The statistics for base and global temporary tables are saved in the catalog for future use. However, it is not desirable to save column statistics on global temporary tables because the data in theses tables does not persist. LOAD TABLE has been changed so that it no longer saves statistics on global temporary tables.
290169 The fix for issue 265354 introduced a problem where a valid statement such as that shown below would receive "Syntax error near "="":

select @var=x

from T

where exists(...)

This is now fixed.

290174 A stack overflow could have occurred when the server was processing a sort during query processing, leading to a segmentation violation on Unix platforms. This problem is now fixed.
290255 Attempting to build an application with Microsoft Visual Studio using /Zi for debug information against dblib could have failed when linking. The error from Visual Studio 6 was:

dblibtm.lib(sqlcadat.obj) : fatal error LNK1202: "<path>\vc60.pdb" is missing debugging information for referencing module.

The library dblibtm.lib has been fixed so that the link error no longer occurs.

290390 When a synchronization occured, if there were operations at the end of the log that did not affect the upload then the section of log that contained those operations was rescanned at the next synchronization. As a result the next synchronization took more time than it needed to. This behavior has been corrected
290430 If the datediff() function was used to compute the difference in seconds between two timestamps, the result would be incorrect if all of the following conditions were true:

- the first timestamp was later than the second timestamp

- the microsecond components of the two timestamps were not equal

- the value of seconds plus microseconds for the first timestamp was greater than that for the second timestamp

For example:

select datediff(second,'2002/06/23 12:00:00.100','2002/06/23 12:00:00.000')

would return -1 instead of 0. The correct value of 0 is now returned.

290436 Phantom and anti-phantom locks were being incorrectly obtained on enties in the primary key index, when inserting or deleting Foreign Keys containing NULLs. These lock are no longer obtained.
290450 If a stored procedure was defined as returning N columns but actually returns M columns,(where M < N), the client could have crashed if more tham M columns were bound. This has been fixed.
290469 If a client application fetched string data with a length larger than 199 bytes through ASAProv, and conversion of the data was required, (eg. from ascii to unicode), the data returned to the application could have been missing the last byte. Visual Studio .Net data access components, (including DataTable and DataAdapter classes), would have been subject to this problem. The correct data is now returned.
290554 If a database was unloaded while the server was running with a language other than English or French, the day names in the event definitions in the reload.sql script would not have been understandable by a server running with a different language, (that was also neither English nor French). This was fixed by changing sa_event_schedules to use full-length English day names regardless of locale.

Similarly, schedules defined using short-form English day names would not have been understood by a server running with a language other than English. Full-length English day names are recognized regardless of the language used by the server.

290558 The DataDirect ODBC drivers, have been updated, which will improve driver stablilty.

NOTE: The iAnywhere branded DataDirect driver for ASE rely on a stored procedure called sp_tables. This stored procedure was not in the GA version of ASE 12.5. Brining ASE up to a SWR of 10242 will reintroduce the sp_tables stored procedure.

290595 In the past, dbmlsync could not have coalesced some combinations of operations that could have been obtained when trigger actions were not being uploaded. These unsupported combinations might have been encountered if, between 2 synchronizations, the following series of actions were applied to some row R that was in a table mentioned in the publication being synchronized. (Note R did not have to satisfy the where clause for the publication.)

1. Some operation (insert,update or delete) was applied to R outside of a trigger.

2. An operation was applied to R from inside a trigger.

3. Another operation was applied to R outside of a trigger.

When dbmlsync encountered one of these unsupported combinations it would abandon synchronization and display a message box with the title "Assertion Failure" and text similar to "file dbtools\.\mergeupd.c at line # ????".

These cases are now correctly handled by dbmlsync and this message should no longer appear.

290629 For queries where the optimizer had an accurate count of the number of rows (e.g., no search conditions and a single base table), the optimizer could have returned the wrong estimate of the number of rows in SQLCOUNT after an open, if TOP n or FIRST was specified in the query. Now the lesser of table size or the row limit is returned, rather than always the table size. If a positive number is returned in SQLCOUNT, it should be an accurate count of the rows that will be returned; if it is negative, it is the best guess of the optimizer. As a consequence, applications such as dbisqlc which use the SQLCOUNT as an accurate row count if it is positive could behave incorrectly with such queries.

For example:

select top 1 * from employee order by emp_fname

would have appeared to return no rows in dbisqlc.

290662 The result of the truncnum() function, (also called "truncate"()), could have been an invalid numeric value, if the value of the second parameter, which is the position at which to truncate, was greater than the scale of the first argument and the number of digits before the decimal was non-zero. For example,

select truncnum(1.23,3)

This is now fixed, but a workaround is to cast the first argument to have a higher precision. For example:

select truncnum(cast(1.23 as numeric(5,2)),3)

290743 If a query contained an IF or CASE expression that used a LIKE predicate where the pattern was not a constant (for example, it referred to a table column or a function of table columns), then the predicate could incorrectly return UNKNOWN. For this to occur, the IF or CASE expression must have been evaluated in multiple contexts within the evaluation plan (possibly due to predicate inference) or there must have been a keyset driven cursor (possibly implicit due to an INSERT or UPDATE).

For example, the following query returned an incorrect answer before this fix:

select if dept_name like dept_name then 1 endif

from department

order by dept_name

for update

(the for update clause is used to force a keyset driven plan).

This problem is now fixed.

290788 If a JDBC request was cancelled, then there was a chance the JDBC application would have failed with an unexpected exception. This problem was most likely to occur when closing a JDBC cursor. The problem has now been resolved.
290846 A query involving a trie-based index could have returned incorrect results or spurious RI constraint violations could have occurred or have been missed, (possibly resulting in a corrupt database). For any of these to have occurred, an index probe performed during the operation in question must have searched for a particular value and have visited the slot after the last entry on a leaf page. This problem is now fixed.
290909 An ANY or ALL predicate in the WHERE clause of a publication may have been evaluated incorrectly during an INSERT. This has been fixed.
290957 If the Return_date_time_as_string option was 'ON' (as it is for DBISQL), creating a procedure which returned a date/time column in its result set and which did not declare the result set explicitly, would have caused the result set column to be recorded as CHAR rather than DATE in the catalog. For example:

create table dateTable(

id int not null primary key,

dateCol date );

create PROCEDURE dba.Test()

BEGIN

select id, dateCol from dateTable;

END;

In the above example, the second result set column for the procedure would have been defined as CHAR rather than DATE. This has now been corrected.

291067 If only whitespace was selected in the "SQL Statements" field when the Query Editor was opened, dbisql would have reported an internal error. This has now been fixed.
291070 When accessing the database via ASAProv, if a user opened a cursor, fetched some rows and then tried to get a row count on the cursor, the provider would have returned either 1 or 0, instead of the actual row count. Now, the actual rowcount is returned or -1 if it is unable to determine the actual rowcount, (in compliance with the OLEDB spec.)
291086 Error checking and execution of queries with a GROUP BY clause could have failed in many cases, resulting in failure to give an error, wrong results, or server crashes.

A problem could have appeared any time an alias was defined in one context and used in another (where possible contexts are inside and outside an aggregate function, in the select list, in the WHERE clause, in the HAVING clause, and in the ORDER BY clause).

For example, the query

select max(e), emp_id e from employee

did not return an error, although it should have because emp_id appears in the select list but not the GROUP BY clause. Errors are also not returned in most cases involving views or derived tables. For example, the query

select tname, List(distinct cname)

from sys.syscolumns

where tname = 'systable'

should have returned an error because tname does not appear in the GROUP BY clause.

Problems could also have occurred when an expression was formed from GROUP BY elements without exactly matching one, or when subselects were aliased and used in the WHERE clause of a grouped query. In general, any grouped query using aliases, views or derived tables was suspect. These problems are now resolved

291229 Clicking the shutdown button on dbmlsync, while the upload was being sent or while the download was being applied, would have caused the dbmlsync window to disappear immediately, but the process would not have terminated for some time. During this time dbmlsync would continue to appear in the task list, disk activity might be observed and dbmlsync would have maintained its database connections. If another instance of dbmlsync was started during this time, an error message like "unable to register 'sybase.asa.dbmlsync' " would have been generated. This has been corrected.
291232 This fix corrects a problem where the server would quietly terminate.
291233 Using the same OLEDB command object to execute a command more than 1024 times, would have caused an out of memory error. This has been fixed.
291280 If the command line utilities (like dbbackup, dbinit etc) were started with invalid switches, they would have returned exit code 0 (EXIT_OKAY). This has been fixed. Now when started with invalid switches, they will return 255 (EXIT_USAGE, invalid parameters on command line)..
291318 Selecting data from a long varchar column in a proxy table, via ODBC, would have caused the last byte of every 255 byte chunk to go missing. This has now been fixed.
291409 The dbisql option, Command_delimiter, could not be set to be a backslash ("\"). When it was, dbisql would have reported a "Lexical error". This has been corrected and now a backslash can be used as a command delimiter without any error.
291542 MTS support was inadvertently disabled in the 8.0 ASA ODBC driver. MTS support is now restored.
291641 The dbremote switch "-os" has been changed so that it works as it did in older versions of the software. The output log file was not always being truncated and renamed at the specified size.
291648 Executing Java code within the server, could have caused it to hang, if an exception was thrown. The server could not have been shut down when this occurred. This problem is now fixed.
291803 If the confirm_received column of SYSREMOTEUSER contained NULL, the dbunload utility would have generated an incorrect sa_setremoteuser procedure call in reload.sql. The wrong call to sa_setremoteuser contained unprintable characters, no value for confirm_recieved or the confirm_received value of the previous sa_setremoteuser call. This has been fixed.
291904 It is now possible for one of the indexes on a table to be declared as a clustered index, which causes the table rows to be stored in an "approximate" key order corresponding to the index. In particular, LOAD TABLE will now insert rows into the table in the order of the index key and INSERT will attempt to put new rows in the same table page as the one containing adjacent rows as par key order. It should be noted that clustering provided by this new feature is approximate, i.e., while the server makes an attempt to preserve key order, total clustering is not guaranteed. Also, the optimizer will now assume that the table rows are stored in key order and cost index scans accordingly. Over time, as more rows are inserted and clustering degrades, order can be restored via the use of REORGANIZE table which will now rearrange rows according to the clustering index (if one is not declared, the order used will be P Key as before.
291909 Trie-based index corruption was possible if a multi-byte string being indexed ended with a partial character (i.e. a lead byte followed by less than the requisite number of follow bytes). This is now fixed.
291978 Repeatedly dropping another connection could have caused the server to fail, usually with a streams protocol error. For this to have happened, a number of drop connection requests (greater than four) must have been issued before the first one took effect. Further, the connection being dropped must have been working on a request, possibly blocked and the time taken to cancel the request must have been greater than the time to receive the drop requests. This is now fixed.
291982 When a new SQL or Java connection or table script was created, the first line of the script would have contained a -- or // comment with the script version and event name. This is no longer the case. The comment is no longer added to the script since these comments are problematic for some ODBC drivers.
292006 Creating, dropping or altering a publication could have caused errors such as "invalid expression near '???'", when a stored procedure was called which uses one of the tables involved in the publication. This has been fixed, but a workaround is to stop and restart the database after modifying the publication.
292049 Running the following query in dbisql, while connected to "UltraLite 8.0 Sample":

call ul_add_statement( 'custapi', 'Bogus', 'SELECT cust_id, cust_name, bogus_col_name FROM ULCustomer WHERE cust_name LIKE ?' )

would have resulted in the error: invalid expression near 'select ulplan(@statement)', which was not very informative. The message now indicates that the column bogus_col_name does not exist.

292161 Calling VALIDATE TABLE with a view name, or using dbvalid and explicitly listing a view name, would have caused the server to crash. This is now fixed.
292425 Disconnecting from a database while the graphical plan viewer was open, would have caused dbisql to report an internal error the next time a key was pressed. This has now been fixed.

The sequence of actions to reproduce the problem were:

1. Display the graphical plan for any query

2. Click on the text field which makes up the right half of the graphical plan viewer.

3. Press the F12 key to disconnect from the database.

4. Press F11 to connect to the database. DBISQL would report an internal error.

292514 If the value of @@error or @@rowcount was assigned to a variable using a SELECT statement involving more than one variable assignment, the values assigned for @@error or @@rowcount would have been incorrect. For example, the procedure below would display 1 as the value for @@rowcount when it should have been 0:

create procedure sybprob001() as

begin

declare @error_var int,

@rowcount_var int,

@table_name varchar(256)

select @table_name = table_name

from sys.systable

where table_name like '%blah%'

select @error_var = @@ERROR, @rowcount_var = @@ROWCOUNT

message 'error_var should be 0, is ',@error_var

message 'rowcount_var should be 0, is ',@rowcount_var

end;

call sybprob001();

This problem is now fixed. If only a single variable assignment was made, the value would have been correct.

292520 Calling sa_table_fragmentation() or sa_index_density() wcould have crashed the server if a remote table was defined in the database. This is fixed, but a workaround is to specify a table name to be analysed when calling either procedure, rather than omitting all parameters and having the procedure analyse all tables.
292525 Assertion 201119 was possible when deleting from a keyset driven cursor. The following conditions were necessary:

1. Primary key was a trie-based index

2. Keyset driven cursor was used (possibly because of a DELETE with a self-referencing table)

3. Rows were deleted from the base table after the keyset table was populated

At this point, the server could have attempted to delete rows that are not in the base table.

292540 The MobiLink ASA Client, (and SQL Remote for ASA), may have complained that "Log operation at offset X has bad data at offset X + x" for versions less than 8.0.0 or "No log operation at offset X in the current transaction log" for versions greater than or equal to 8.0.0". The problem was that DBMLSync or DBRemote had already updated their systable with a wrong log offset in the previous run. This could have happened if

1) the last log operation in the latest offline transaction log was a "Commit"; and

2) in the online transaction log, there was no actual data to be uploaded or replicated.

This problem is now fixed.

292564 The mnemonics on the "Start Logging" and "Stop Logging" menu items in the "SQL" menu have been changed (and now work). Previously, the mnemonics for the two items and their parent menu were all "S" -- a case that was not handled. Pressing "ALT+S, S" simply closed the menu without activating the menu item. Now, the mnemonics work as you might expect.
292619 Using the SIMILAR() function on databases with a multibyte character set could have returned incorrect results or caused the server to crash. This is now fixed.
292621 The server's temp directory can be controlled on CE platforms by setting the HKEY_CURRENT_USER\Software\Sybase\Adaptive Server Anywhere\8.0\TempFolder value in the registry. The engine will attempt to create the specified directory if it does not exist but the parent of the specified directory must already exist. If the directory specified by TempFolder does not exist and cannot be made, \Temp will be tried. If \Temp does not exist and cannot be made, the server will use the current directory.
292648 If a procedure assigned a variable with the result of a subselect and then returned a result set later on, the result set was sometimes not picked up by the client. For example, consider the following procedure:

create procedure DBA.test()

result(xlicencas integer)

begin

declare xLicencas integer;

declare xConnection integer;

set xConnection=(select NEXT_CONNECTION(null,null));

set xLicencas=34;

select xLicencas

end

The "set xConnection=(select NEXT_CONNECTION(null,null));" line would have caused the result set of "select xLicencas" to be dropped by the client. This problem has now been fixed.

292656 When updating numeric fields in an ADO recordset through ASAProv, several problems could have occurred. The value could have failed to be updated at all, it could have been updated with the decimal point in the wrong place, or it could have been updated to a value completely different from the one specified in the update. These problems have been fixed.
292673 When using VIM message replication with DBRemote the error message: "VIMSetMessageItem error code 1" could have occurred. This error would have stopped replication. It was more likely to have been seen when using ccMail. This problem has been fixed.
292791 Closing a DBISQL window while a query was still executing, would not have stopped the query. It would have continued running even though the window was closed. Now, the program asks if you really want to close the window, and if "Yes", the query is aborted before the window is closed.
292795 Using the Sybase Central feature, Log Server Messages, with Log messages to a window selected, could have caused Sybase Central to hang. This has now been fixed.
292812 When connected to the utility database, using strings longer than approximately one page in size could have caused the server to crash. The problem would have occurred if the length of the query text was long or of a long string was generated (eg, "select repeat( 'x', 10000 )). Strings in the utility database are now silently limited to approximately one page in length.
292992 To set up an Adaptive Server Enterprise database version 12.5 or later as the consolidated database in a MobiLink installation, you must use the syncase125.sql setup script. This file, along with setup scripts for other supported databases, is included in the MobiLink\setup subdirectory of your SQL Anywhere 8 directory.
293018 When the reload.sql script, generated by the dbunload utility, was run to rebuild a database, it may have returned a permission denied error when attempting to grant table or columns permissions. This would have happened if the user who originally granted the permission no longer had the appropriate permission at unload time. This problem has been fixed. All grants for table and column permission now use the new additional FROM {grantor} syntax and run under the DBA user specified for the unload.
293080 Logging SQL statements to a window could have caused Sybase Central to hang. This has now been fixed.
293086 Building the PRC-Tools 2.0 version of the custdb sample generated the message "Unable to find mobilink.bmp." This would have also resulted in the synchronization status dialog being blank when running custdb.prc. The bitmap that was missing has now been added.
293087 For queries that return a large number of rows (for example, more than 10^32), even in an intermediate result, the optimizer could have incorrectly returned the error:

-727 "The optimizer was unable to construct a valid access plan"

These types of queries can appear when no join conditions are specified between tables. For example, the following query would have given the error as the result of the FROM clause is 10^40 rows:

select * from TBig0 T0, TBig1 T1, TBig2 T2, ...., TBig20 T20 where 1=2

if table TBig<n> had 100 rows or more.

These types of queries are generated by some applications to collect schema information before posing a query with an actual WHERE clause

293120 When fetching scripts from an Oracle consolidated database, some Oracle drivers had problems fetching Unicode, the script would have appeared to be "?????????????????". This is now fixed.
293122 In rare cases a consolidated dbremote could have sent messages that would cause errors the remote database involving undeclared and redeclared variables. The remote could also have missed data operations. This would have been most likely to happen when the consolidated was sending large messages to many remotes with a small or unset memory value (the -m command line flag). This problem is now fixed.
293160 If the CREATE SYNCHRONIZATION SUBSCRIPTION or CREATE SYNCHRONIZATION USER statement was used to set the 'use_cookies' MobiLink connection setting on a publication, MobiLink user or synchronization subscription object, and then Sybase Central was used to edit the object, then the 'use_cookies' setting would have been removed. In fact, the setting

was never displayed on the Connections page of the object's property sheet. Now, 'use_cookies' and any other advanced connection settings are displayed in an 'Advanced parameters' text field on the Connection page of the object's property sheet, and this value is retained when changes to the object are saved.

293163 It was possible that SQLDescribeColW or SQLColAttributeW would have attempted to write past the end of the user's buffer, depending on the connection's CHARSET and the database's Collation Sequence. This could have caused the ODBC driver to crash or return incorrect results. This problem has been fixed.
293186 Assertion 201119 could have been generated when using a write file with a compressed database file. This has been fixed.
293189 The user name passed into a user script could be truncated if the first user name for the same worker thread was smaller and a DataDirect ODBC driver was used. The work around was to use the command line options "-ps 0".
293212 ASA 8.0.0 introduced support for caching of execution plans in stored procedures. This caching avoids optimizing statements every time they are executed. In 8.0.0, this caching was not enabled for queries that returned result sets from procedures. This new feature enables that support.
293215 If the asasrv.ini (.asasrv.ini on Unix) file was large, connection attempts could have been slow or have even failed. This has now been fixed. The asasrv.ini file will now only cache the most recent 100 entries.
293302 Create table was taking a significant amount of time to complete when creating a table with large number of columns. The time taken would have increased exponentially with the number of columns in the table. This problem has been fixed.
293306 The server will no longer attempt to update statistics during recovery and when executing "simple" DELETE and UPDATE statements. Simple statements are those that are not optimized and are executed directly by the server.
293317 If a subquery contained an outer reference to a subselect, then the results of the referencing subquery could have been incorrect. For example, the following query showed the problem:

SELECT ( SELECT 1 FROM sys.dummy D1 WHERE R.row_num IS NOT NULL ) AS A1

FROM dbo.rowgenerator R

WHERE ( SELECT 2 FROM sys.dummy D2 WHERE A1 IS NOT NULL ) IS NOT NULL

293340 On case sensitive databases, it was possible that the Mobilink Plugin would insert the incorrect password into the ml_user table. This has now been fixed.
293384 Concurrent inserts into an empty index, or deleting the only entry from an index, could have resulted in a corrupt index, if it was a trie-based index. Assertion 200602 was a likely symptom. This was more likely to have occurred on Unix and multiprocessor Windows-based systems. It is now fixed.
293407 A multithreaded Java Application could have crashed during Garbage Collection, if a thread waiting on a Java Monitor was notified before garbage collection began. This is now fixed.
293423 Queries that used a comparison-based index could have returned incorrect results, (typically more rows than expected).

For example:

create table table1(c1 char(6) primary key);

insert into table1 values('Austra');

select * from table1 where c1 = 'Australia';

would have returned 1 row when none should have been returned.

For the problem to have occurred, a column must have been searched for a value 'xxxyyy', where 'xxxyyy' truncated to the width of the column was 'xxx' and 'xxx' appeared in the column, (this could have affected non-string columns as well). Moreover, the index must have been fully hashed. This is now fixed.

293528 Sorting connections in the disconnect dialog and then selecting multiple connections to disconnect would have throw an exception. This has now been fixed.
293539 Dbmlsync would have treated downloaded deletes that were for rows not present on the remote database as an error. Now, they are not longer treated as an error. As a result of this change, the sp_hook_dbmlsync_download_sql_error hook will no longer be called when a not-found delete is encountered.

If verbosity is turned on, then informational messages will be generated that indicate the number of not found delete's encountered for each table and which rows they were for.

293635 Java UltraLite applications would have reported all index pages were full, and no space was left to create new index pages, (ArrayIndexOutOfBound exception), when there were only seven pages fully occupied. Actually, Java UltraLite is designed to have a maximum of 256 index pages. This is now fixed.
293782 A failed autocommited statement could have caused the server to assert ( 102300 - File associated with given page id is invalid or not open ), if the ANSI_CLOSE_CURSORS_ON_ROLLBACK option was set and the autocommited statement that was being executed was part of an open cursor. This has now been fixed.
293788 Calling xp_sendmail functions simultaneously, from different connections, could have caused unexpected behaviour, up to and including a server crash. This has been fixed, but in order to take advantage of it, several system procedures need to change. Databases created, or rebuilt, after this change will have these new procedures, but for existing databases, the following script will make the necessary changes:

-- START OF SCRIPT

insert into dbo.EXCLUDEOBJECT values ( 'xp_real_stopmail' , 'P' )

go

insert into dbo.EXCLUDEOBJECT values ( 'xp_real_startmail' , 'P' )

go

insert into dbo.EXCLUDEOBJECT values ( 'xp_real_sendmail' , 'P' )

go

CREATE function dbo.xp_real_startmail(

in mail_user char(254) default null,

in mail_password char(254) default null,

in connection_id int )

returns int

external name 'xp_startmail@dbextf.dll'

go

ALTER function dbo.xp_startmail(

in mail_user char(254) default null,

in mail_password char(254) default null )

returns int

begin

declare connection_id int;

select connection_property( 'Number' ) into connection_id from dummy;

return( xp_real_startmail( mail_user, mail_password, connection_id ) )

end

go

CREATE function dbo.xp_real_stopmail( in connection_id int )

returns int

external name 'xp_stopmail@dbextf.dll'

go

ALTER function dbo.xp_stopmail()

returns int

begin

declare connection_id int;

select connection_property( 'Number' ) into connection_id from dummy;

return( xp_real_stopmail( connection_id ) )

end

go

CREATE function dbo.xp_real_sendmail(

in recipient char(254),

in subject char(254) default null,

in cc_recipient char(254) default null,

in bcc_recipient char(254) default null,

in query char(254) default null,

in "message" char(254) default null,

in attachname char(254) default null,

in attach_result int default 0,

in echo_error int default 1,

in include_file char(254) default null,

in no_column_header int default 0,

in no_output int default 0,

in width int default 80,

in separator char(1) default '\t',

in dbuser char(254) default 'guest',

in dbname char(254) default 'master',

in type char(254) default null,

in include_query int default 0,

in connection_id int )

returns int

external name 'xp_sendmail@dbextf'

go

ALTER function dbo.xp_sendmail(

in recipient char(254),

in subject char(254) default null,

in cc_recipient char(254) default null,

in bcc_recipient char(254) default null,

in query char(254) default null,

in "message" char(254) default null,

in attachname char(254) default null,

in attach_result int default 0,

in echo_error int default 1,

in include_file char(254) default null,

in no_column_header int default 0,

in no_output int default 0,

in width int default 80,

in separator char(1) default '\t',

in dbuser char(254) default 'guest',

in dbname char(254) default 'master',

in type char(254) default null,

in include_query int default 0 )

returns int

begin

declare connection_id int;

select connection_property( 'Number' ) into connection_id from dummy;

return( xp_real_sendmail( recipient, subject, cc_recipient, bcc_recipient, query, "message", attachname,

attach_result, echo_error, include_file, no_column_header,

no_output, width, separator, dbuser, dbname, type,

include_query, connection_id ) );

end

-- END OF SCRIPT

293862 If a statement in a stored procedure received an execution error, such as division by zero, a conversion error, or a deadlock error, then subsequent executions of the statement could have given the error:

-853 "Cursor not in a valid state"

This is now fixed, but a work-around would be to set the database option Max_plans_cached to 0.

293867 If it is possible to satisfy the ORDER BY clause of a query by means of an index scan in either direction, the server attempts to do so in order to avoid the sort. When the index scan was being done in a backward direction, the server would have failed to avoid the unnecessary sort. As an example, consider the following query:

select * from systable where table_id > 30 order by table_id desc

The server would have executed this query by performing a backward primary key index scan of systable as desired, but then also would have sorted the result set on table_id. The sort operation was not needed because the result set was already in the proper order due to the index. Now the server will no longer execute this unnecessary sort, resulting in improved performance.

293904 The first fetch of a query using an index scan could have taken significantly longer in 6.0.04 builds 3774 and later. This is now fixed.
293998 If an archive backup to a tape drive was attempted on a NetWare server and libsybbr.nlm was NOT loaded, the backup would have failed with error -692, "Could not execute backup/restore DLL (syb_open) entry point." This has been fixed. As a workaround, load libsybbr.nlm on the server before attempting the backup.
294020 DBxtract and DBunload would hang if the reload database was on a different server and an internal unload or an internal reload was requested. Now, when the unload database and reload database reside on different servers, a message is returned which indicates that the unload and reload must be external.
294107 Trying to unset a PUBLIC option, while there were still user settings for that option, would have caused the error:

"Invalid option '%1' -- no PUBLIC setting exists"

This was incorrect and confusing. Now the following error occurs:

"Cannot unset PUBLIC option '%1' since user settings exist"

294124 Queries with complex WHERE conditions containing at least one OR predicate may have returned incorrect results. Which queries were affected is difficult to assess, as the likelihood of the problem was low and depended on the ordering of the conditions in the original expression. As a workaround, reorganizing the predicates in the query's WHERE clause may prevent the problem from occurring. As an example, the following query

SELECT test.errorfield, test.keyfield

FROM test

WHERE

test.errorfield = '001DUQVPYNM'

AND ( test.field1 <> 'd'

AND test.field1 <> 'D'

AND test.field1 <> 'd'

AND test.field1 <> 'D'

AND (( test.field6 = '1') OR ( test.field6 = ' '))

AND (('2002-07-12' <= test.field5 OR test.field5 = '1800-01-01' )

AND('2002-07-12' >= test.field4 OR test.field4 = '1800-01-01' ))

AND test.field2 = '001'

AND test.field3 = '01')

would be incorrectly simplified to

SELECT test.errorfield, test.keyfield

FROM test

WHERE

(( test.field6 = '1') OR ( test.field6 = ' '))

AND (('2002-07-12' <= test.field5 OR test.field5 = '1800-01-01' )

AND('2002-07-12' >= test.field4 OR test.field4 = '1800-01-01' ))

This has been corrected.

294145 Specifying a long filename when using LOAD TABLE on a NetWare server may have resulted in error -602 "Cannot access file". This has been fixed.
294162 If a query referenced the ROWID() function with a parameter being the name of a declared temporary table created in the select, the server would have crashed. Now, the server gives the error:

-142 "Correlation name '%1' not found"

For example, the following query demonstrates the behaviour:

select rowid(#temp)

into #temp

from sys.dummy

294165 An INSERT ... ON EXISTING UPDATE statement could have failed , but only when updating a row, with error -189 "Unable to find in index 'T' for table 'T'". The fault would only have occurred if the INSERT affected (inserts/updates) more than one row, and the update (that fails) was on the second or subsequent row affected. The fault would not have occurred if there were computed columns on the table being inserted into. Currently, this iwa most likely to show up as a dbmlsync problem. It has now been fixed.
294193 Calling the system procedure xp_sendmail could have crashed the server when using SMTP. This is now fixed.
294215 When an sp_hook_dbmlsync_upload_end procedure was defined, dbmlsync would sometimes have faileed with the following error message:

Error: getFillDictEntrySQL() An input entry has not been set

when a log offset mismatch occurred between the remote and consolidated databases or if an error occurred during the upload phase of synchronization. This was an internal error message and should never be seen by users. The success or failure of synchronization was not affected by this message. This problem is now fixed and the message should no longer appear.

294229 If a LOAD TABLE statement resulted in an error (e.g. a conversion error), a subsequent call to a stored procedure which referenced the table could have caused the server to crash. The procedure must have been called at least once prior to executing the LOAD TABLE statement. This problem is now fixed.
294234 The server could have overstated the actual file fragment count for a file via the 'DBFileFragments' property, the 'LogFileFragments' property or in the server's message window when it opened a file. Typically, the fragmentation could have been incorrect after a disk defragmenter was run because relocated fragments were not always coalesced into one fragment even if they are physically adjacent on the disk. The fragmentation count should now be reported correctly.
294269 If the PCTFREE value for a global temporary table was changed via the ALTER TABLE statement, the changed value did not persist and was lost at the end of the connection. This has been fixed and the changes will now persist.
294409 If the option PUBLIC.Auditing was set to ON, an operation which caused a referential action trigger to be fired (e.g. a cascading DELETE) would have crashed the server. This has been fixed.
294536 The following two errors that could have occurred when copying wide character strings from the database, have been fixed:

1. Indicator variables used in a fetch on a non-nullable column type were ignored. For all other domain types, UltraLite would always set the indicator variable properly, even if the column was declared as not null.

2. If the destination buffer for a wide character strings was too small and the value needed to be truncated, the resulting string would not be null-terminated. Now the UltraLite runtime will remove one more character to make room for the null character at the end.

294537 If a file address was specified as a UNC address (eg. \\server\volume\subdir), messages received by dbremote running on NetWare would have been processed correctly, but no messages would have been sent (an error would have been displayed). This has been fixed.

Note that UNC addresses are only valid on NetWare if the server matches the name of the server on which dbremote is running.

294547 If a view or derived table contained a subselect in the select list, the column was not used elsewhere, and the view or derived table was used inside of an ANY, ALL, or IN predicate, then the server could have failed with the following assertion:

"Internal database error *** ERROR *** Assertion failed in f:\src\db\engine\language\parser\copytree.c at line 616 (Parser assertion: Subqueries not copied during copy_with_annotation)

The following queries are examples that caused the problem:

CREATE TABLE X( ( table_name varchar(50), publication_name varchar(50));

SELECT table_name

FROM X

WHERE table_name NOT IN (SELECT foreign_tname FROM SYSFOREIGNKEYS)

(Note: SYSFOREIGNKEYS contains a subselect for column 'columns', which is not used)

SELECT table_name

FROM X R1

WHERE table_name NOT IN

( SELECT col1

FROM ( SELECT table_name col1,

( SELECT table_name

FROM X R2 ) col2

FROM X R3

) DT

)

The error would not have appeared if the select list item for the ANY/ALL predicate was a not-null column, nor would it have occurred if the subselect column was used in the ANY/ALL subquery. This has now been fixed.

294575 If the short plan (returned by the EXPLANATION function) for an UPDATE or DELETE statement was long (approximately one database page or larger), then the server could have crashed when executing the statement. Further, queries could crash the server if the short plan was long and the option Query_plan_on_open was 'On'. This has now been fixed.

This problem was most likely to occur when a view was used which contained a number of subqueries.

294677 This fix corrects a number of problems related to the handling of single-line comments by DBISQL:

1 - single-line comments which did not end in a carriage return, line feed, or carriage return/line feed pair would have been corrupted before being sent to the database server.

For example, running:

dbisql -q -d1 "message 'X' -- testing"

would have printed

message 'X' -----------

instead of

message 'X' -- Testing

2 - if the "d1" command line option was specified, and the file started with a comment, that comment was displayed twice on the console. Now the comment is displayed only once.

3 - comments appearing within CREATE PROCEDURE or CREATE FUNCTION statements were being sent to the database server followed by an additional blank line. This extra blank line has now been removed.

294728 Variable length output parameters returned from stored procedures were not always accessible to .Net applications, (ie C#, Visual Basic and Visual C Ver. 7), using ADO. This has been fixed.
294800 If a request was cancelled and the application was terminated before the cancel completed, it was possible in rare cases for the connection to remain until the server was shut down. The connection which remained would keep any existing locks, use an engine "thread" (-gn parameter), and could not be dropped by DROP CONNECTION. For this problem to have occurred, the request which was cancelled must have returned more data than the communication buffer size. This problem is now fixed.
294808 As of 8.0.1, the MobiLink server uses savepoints with bulk operations, so that if an error occurs, the operation can be rolled back to a savepoint and then go into single-row mode to determine the row that caused the error. Unfortunately, when the ODBC driver is unknown, it is possible to attempt to execute invalid SQL. Now, when theODBC driver is unknown, savepoints are not used.
294817 If the server was started with -z command line option, it would have displayed "liveness packet received" for each liveness packet it received from a client. This could have resulted in a large server output log. These messages have been removed.
294844 If an upload fails it will be retried, if the current row array size is larger than one (-s parameter). Before retrying, the uploaded data is rolled back. If the upload failed again, the rollback may not have been attempted unless an error handler script or begin/end upload script was available. The rollback should now always be done.
294929 If a fatal error occurred (eg. disk full) during an auto-reload (dbunload -ac/ar/an) the server could have hung when trying to shutdown. This is now fixed.
294940 Predicates are ordered by category and by selectivity. In an AND predicate, predicates that are estimated to accept fewer rows should be ordered earlier to reject rows as quickly as possible. A bug caused the ordering of the first two predicates to be wrong, with the predicate that accepted more rows evaluated before one that accepted fewer rows. This has now been corrected.
295041 The number of arguments to an expression is limited by the database page size, with the limit being approximately:

( <page-size> - 128 ) / 8

If an expression was built with more arguments than this limit, the assertion:

101515 "Memory allocation size too large"

would fail.

A large number of arguments can be supplied to some built-in functions such as coalesce, ifnull, and so on, or to user functions. Further, when building an IF or CASE expression, the engine builds an expression that has as arguments all of the expressions used in predicates in the IF or CASE condition. If any expression was built with many arguments, the above assertion would fail.

After the fix, we give a syntax error:

-156 "Invalid expression near '%1'"

for an expression with too many arguments. Further, constant expressions are no longer included in the special argument to IF and CASE expressions.

295097 If an error occured during an upload, all operations included in the failed upload were lost, (they were not resent during the next upload), when all the following conditions were true:

1) Dbmlsync was run so that it completed more than one synchronization of the same publication before it shut down. This could have happened when scheduling options were used or if the restart parameter in the sp_hook_dbmlsync_end hook was used to restart a synchronization.

2) An error occured during the upload phase of synchronization, after which another synchronization attempt was made.

3) Log scan polling was enabled. This is the default, logscan polling can be disabled using the -p command line option or the DisablePolling extended option.

4) The -n command line option had only been used once on the command line.

5) There was no publication not specified with the -n switch that included part of a table that was also included in a publication specified with the -n switch.

This problem has been corrected.

295129 The follow problems have been fixed:

1 - Column statistics (i.e., histogram) could have contained inaccurate selectivities after a frequency value was added in the middle of an existing range,

2 - Column statistics generated by LOAD TABLE could have contained inaccurate selectivity estimates in some situations,

3 - The server will now do a much better job of estimating join selectivities where the join attributes include columns that contain nearly unique data values, but are not declared as UNIQUE

4 - The server will now generate better selectivity estimates for columns that have no histograms, e.g., because the number of rows in the table is too small.

295135 When a scheduling option was specified, dbmlsync would have crashed, if it encountered an error while loading synchronization information from the remote database. It now treats these errors as fatal and terminates immediately when one is encountered.
295144 The dbmlsync start dialog on CE was not able to handle command line switches with quotes. Common symptoms were failing to connect to a running database or an error reporting an invalid option value when quotes are involved in the Command switches field. The problem is now fixed.
295218 Executing a SQL statement which contained double-width punctuation symbols could have caused DBISQL to report a "Lexical error". A common occurrence would have been when running the resulting RELOAD.SQL script after unloading a database with a multi-byte character set. The problem would have shown up if the database contained column names which contained double-width punctuation characters, (such as parentheses). This is now fixed so that such scripts can now be run without error.
295225 When fetching strings or blobs larger than 200 bytes through the ASA provider, the last byte would have been truncated if no data conversion took place. This has been fixed.
295384 Indexes and foreign keys explicitly created by a user can now be renamed with an ALTER INDEX statement:

ALTER INDEX indexname rename-spec

ALTER [INDEX] FOREIGN KEY rolename rename-spec

rename-spec:

ON [ owner.]tablename RENAME [ AS | TO ] newname

295468 Calling sa_disk_free_space when connected to an ASA server running on NetWare may have returned incorrect values. This has been fixed.
295482 When a SELECT statement which was preceded by a comment was executed, the row count would not have appeared in the status bar. Now it does.
295492 When dbmlsync's scheduling option was used to schedule a subscription for synchronization, if the subscription was dropped, dbmlsync would crash at the next scheduled synchronization time for that subscription. Now if the subscription is dropped, dbmlsync will issue an error message and make no further attempts to sychronize the dropped subscription.
295500 If xp_cmdshell was called when the server was running on a Windows .NET Operating System (eg Windows .NET Server), the server could have crashed. This has been fixed.
295673 Code in the reload.sql file to check if the maximum user_id in SYS.SYSTABLE in

the new database matched the maximum user_id in the old database (and executed a

RAISERROR 17001 if they were different) has been removed.

295700 The code generated by the UltraLite analyzer was wrong for CASE expressions where the arguments could have been null. This has been fixed.
295788 A NullPointerException could have occurred if two statements were executed, one immediately following the other. The problem did not occur every time, being sensitive to the scheduling of tasks within DBISQL itself. This has now been fixed.
295804 In some cases the parser could have used an incorrect value of 15 for default precision for numerics, ignoring the actual setting for the option. As a result, large literal values could have lost precision beyond the 15 digits. As an example, the value 9223372036854775000 would have been parsed as 9223372036854770000. This problem has been fixed. Please note that this problem will not effect large values that are input as string because these values are not converted by the parser into the equivalent numeric values. So, a literal value of '9223372036854775000' would not be effected by the problem.
295808 Index scans at isolation levels 1 & 2 could have returned rows that did not meet the search criteria, if there were also concurrent updates. This is now fixed.
295840 If the jdemo.sql script,(found in samples\asa\java), was cancelled before it completed, a failure in the Java VM could have caused the server to crash. This has been fixed.
295841 The server was not able to handle more than 1024 TCP/IP client connections. This has now been fixed and the server should be able to handle as many connections as allowed by:

1) the maximum number of open file descriptors allowed by the OS, and

2) the available memory on the machine

As a side affect, threaded client libraries no longer uses SIGIO for event notification. Non-threaded UNIX clients still depend on SIGIO for TCP/IP I/O event notification.

If the number of connections is expected to exceed 1024, then it's

recommended to increase the liveness period from the default value of 120.

295975 Giving an invalid vilename when trying to specify a non-default database name on the Palm VFS filesystem would have resulted in a memory error in the runtime, instead of the expected 'file not found' message. This behaviour has been corrected.
295979 If a checkpoint occurred during an undo operation, the database could have been left in an unrecoverable state until the next checkpoint occurs. An undo operation is performed in the following situations:

- a rollback of a subtransaction

- a rollback to a savepoint

- a failed DML statement

- a cancelled statement (the undo actually occurs just before the next statement on that connection is executed).

A rollback of a full transaction was not affected by this problem. Checkpoints are now prevented during undo operations.

296078 If the autosave option was enabled, opening the Monitor would have overwritten the previous autosave file, so autosaved information could not have been viewed after the Monitor was stopped. Also, exceptions could have occurred writing or reading the autosave file, and autosave would have only worked for the first connection to a MobiLink server. These problems have been fixed. Now if autosaving is enabled, it starts when the Monitor connects to a Mobilink server and stops when it disconnects. Thus previous autosave results will be preserved until connecting to a MobiLink server.
296087 The dbtran utility could have translated offline transaction logs that did not belong to the running database and generated a single SQL file that included all the transactions from these non-related transaction logs as well as the related transaction log files, if all these transaction logs shared the same directory. Now it checks that the redo_end of the last offline log strictly matches the redo_begin of the next online log.
296095 When changing the SQL Remote Send Frequency for the consolidated user on a remote database through the SQL Remote tab of the Database Properties dialog, it was possible to break replication. Possible symptoms included data not being sent from the remote, or the consolidated database continuously reporting that there was a missing message. This has now been fixed.
296129 A remote query containing a CAST or CONVERT over a User Defined Function would incorrectly pass the funtion to the remote server, instead of processing it locally. For example:

select cast( rolf(c1) as float) into #temp from t1;

The function rolf, that returns a double, would have been processed in full passthrough mode, instead of no passthrough. This problem has now been fixed.

296243 When the server was running on NetWare, and clients had connected and disconnected many times in a short period (a few minutes), the NetWare server could have abended with a "CPU Hog" message. This was more likely if the server was very busy and one or more connections were sending or receiving large amounts of data. This has been fixed.
296282 When run on Unix platforms, "dbunload -an" would have created a database whose log file had a name like "foo.db.log". This has been corrected.
296288 Columns described as CHAR(10) and VARCHAR(10) would both have been described as VARCHAR(10) by the ODBC driver. This behaviour matched the historical behaviour of the server, which also did not distinguish between the two types. Recent versions of the server are now able to distinguish these types, but this behaviour was not available to ODBC applications. A new database option has been added, ODBC_distinguish_char_and_varchar, which can have the value 'On' or 'Off'. The option value is read by the ODBC driver when a connection is opened, and is used to determine what value to return when describing CHAR columns. When the option has the value 'On', CHAR columns are described as CHAR. When the option has the value 'Off', CHAR columns are described as VARCHAR. The default value of the option is 'Off'.
296293 Under some rare conditions, queries with an ORDER BY clause, partially satisfied by an index, may have returned an unsorted result set. The conditions under which this may have happened were:

- The query contains an ORDER BY clause of the form col1, col2, ...., expr1, expr2

- There exists an index IDX matching (col1, col2, ... ) (i.e., only a prefix of the ORDER BY clause is matched by an index)

- There exists a WHERE equality predicate on at least one of the IDX columns

- The best plan chooses the index IDX as an access method

Example:

SELECT T.Y, R.Z

FROM T, R

WHERE T.X = 1 AND R.Z = T.Z

ORDER BY T.Y, R.Z

where the table T has an index IDX on (T.X, T.Y )

This is now fixed.

296325 When dbmlsync is sleeping, if its top-level window receives a window message, registered using the name "dbas_synchronize", will wakeup and perform a synchronization. If dbmlsync is already performing a synchronization, the message will be ignored. This feature has been available on CE platforms since version 8.0.0, now it is available for all win32 platforms.
296333 The server bypasses the optimizer and uses a cheaper mechanism to execute "simple" queries. When this bypass mechanism was used on INSERT, DELETE or UPDATE statements, the server would not have honoured a CANCEL request on these statements. These statements are now cancellable.
296369 The "-d" server command-line option was documented as disabling asynchronous I/O; however, it has never served that purpose in 6.x and above. On Netware platforms "-d" forces the use of POSIX I/O (which also disables async I/O). On Windows platforms, "-d" has been completely ignored ever since 7.0.0. In 6.x on Windows 3.1, "-d" forced the use of "fast" I/O to bypass some performance problems with DOS's handling of large files on a FAT filesystem. In all other cases, "-d" was ignored in 6.x too.

The usage text for "-d" on Netware has been changed to "use POSIX I/O". The usage text for "-d" on Windows has been removed, but the option is still allowed on the command line and will continue to be ignored.

296404 It was not possible, using the Event Schedule property sheet, to create a schedule without a start date. In addition, opening the property sheet on a schedule which did not have a start date, would have caused Sybase Central to crash. Now you can create and edit schedules without start dates.
296415 Using client side cursors to fetch datetime values through the ASA oledb provider (ASAProv), would have failed or returned #ERROR instead of the actual value. This is now fixed, but a work around would be to use server side cursors.
296580 The Table pane of the MobiLink Monitor was not updating the display of a row until a new row was added or some other user action caused the row to be redrawn. This has been fixed. Rows are now updated at the same time that the Chart pane is updated, such as when new data is received from the MobiLink server.
296607 Each time the MobiLink Monitor was closed and reopened, the height of the Table pane would shrink by one pixel. This has been fixed.
296669 When calling xp_sendmail using SMTP, the first word of the body of an email message could have been removed by some SMTP servers. The fix was to add a carriage return/linefeed at the beginning of each body. Now this gets stripped out instead of the text.
296692 On File Save, there was no warning if an existing file was about to be overwritten . This has been fixed, a prompt has been added when a file is to be overwritten.
296711 The locate() function takes an optional third parameter which specifies the starting offset for the search. As of this change, if the starting offset is negative, locate() will return the last matching string offset rather than the first. A negative offset indicates how much of the end of the string is to be excluded from the search. The number of bytes excluded is calculated as (-1 * offset) - 1.
296731 When fetching data as Unicode strings, SQLGetData could have returned the wrong value for the string length, when the database character set was UTF8. This would only have occurred when the buffer being fetched into was larger than the UTF8 string length, but smaller than the string length once it was converted to Unicode. This has been corrected.
296935 Passing a subquery expression as a procedure argument could have crashed the server. The subquery must have been part of another expression for the crash to have occurred; simple subquery arguments result in a syntax error.

For example:

call myproc(coalesce(null,(select 1)))

A syntax error will now be generated for all subqueries used as any part of a procedure argument. To pass a subquery to a procedure, assign the subquery result to a variable and pass the variable to the procedure.

296969 If the MobiLink server setup and/or upgrade scripts were applied in the "chained on" mode, the database server would complain "Stored procedure 'procedure_name' may be run only in chained transaction mode.", when the MobiLink server stored procedures were executed in a "chained off" mode and vise versa. This problem is fixed. Now these procedures can be executed in both the "chained on" and "chained off" modes, regardless of how there were applied.
296999 When running with a database file that was created with Version 7.0 or before, and had not been upgraded to 8.0, then the query optimizer could have used selectivity estimates that were too low (as low as 0%) leading to inefficient execution plans. In cases where the plan was particularly poor, this could have appeared as an infinite loop. This is now fixed.
297000 DBMLSync would not have reported an error, even if the requested starting log offset was beyond the end of the active transaction log (this can happen if the remote database is restored from a backup. Then it could have stopped working once the transaction log of this remote database has grown beyond this requested starting log offset. This is now fixed.
297062 If a prepared statement that involved proxy tables and host variables was executed, it would have very likely caused the server to crash. In the case where the server did not crash, the result set returned would very likely have been incorrect. This is now fixed.
297091 Ct. wants to stop the database automatically when heavy problems like corruptions make the whole server unusable. He needs this to prevent other databases running on the same serverengine to become unusable because one database has problems. He now sees that if one database has problems the whole server becomes inaccesible/unusable and/or freezes.
297168 When running the Unload or Extract Database wizards, if the option to reload into a new database was checked, a new database name was specified and then the option was unchecked, the reload would occur anyway, ignoring the fact the option was unchecked. This has been fixed.
297330 The Session Properties dialog had fields incorrectly labelled "First synchronization start" and "Last synchronization end." If an MLM file was read or a connect was made to a MobiLink server, these values might not be the same as the start or end of any synchronization. They have been changed to "Monitor session start" and "Monitor session end" to correctly label the values.
297415 The server collects statistics during normal query execution and uses the gathered statistics to "self-tune" the column histograms. The new option 'Update_statistics' can be set to 'OFF' which disables this gathering of statistics during query execution. By default, the option is turned 'ON'. The option does not affect changes to statistics as a result of updates to data (ie LOAD/INSERT/UPDATE/DELETE). Under normal circumstances it should not be necessary to turn this option off.
297472 After a DELETE statement was executed on a column contained in an index, the statistics for that column may have been heavily skewed for values in the affected range.

For example, after running the following SQL code:

create table foo ( c1 int primary key );

insert into foo values (1);

insert into foo values (3);

create statistics foo;

delete from foo where c1 < 2;

the foo.c1 histogram ( displayed by "call sa_get_histogram( 'c1', 'foo' )" ) would have incorrectly reported the selectivity of values between 1 and 3 to be 0.7. This issue has now been fixed.

297566 A hash join with complex join conditions of the form:

f( g( R.x ) ) = T.x

could have caused the server to crash or give wrong results, if the value g( R.x ) was used above the join.

For example, the following query caused the problem:

select right( left( R1.z, 10 ), 1 ), 1

from R R1, R R2

where left( left( R1.z, 10 ), 6 ) = R2.z

and (R1.x+1 > 0, 0 )

for read only

This is now fixed.

297603 When using an Address Windowing Extensions (AWE) cache, the server could have crashed or reported assertion failures such as 101412, 201100, 201102, and 201114 (all of which are "page number on page do not match page requested"). Other assertion failures were possible and, in rare circumstance, database corruption could have occurred. The problem was not likely to have occurred on single-CPU machines. This has been fixed.
297686 Adding a statistic to the chart via the file menu and then re-opening the file menu would have yielded the same addition menu item instead of a removal menu item. This has now been fixed.
297699 When opening a Monitor file, where the session length was much longer than the longest synchronization (e.g. a one year session with a longest sync of 4 seconds), the Monitor could could have crashed the Java VM. This has been fixed.
297705 If the "Edit Source Path" menu item was clicked, then the "Help" button on the resulting dialog was clicked, the help window opened but could not have been closed. It was being incorrectly parented to the main Debugger window, rather than to the modal dialog from which the help window was opened. This has been fixed.
297714 When dbremote (or ssremote) encounters an error when trying to delete a file using the FILE based message link, the delay between the failure and the next attempt to delete the file can now be set using the "unlink_delay" message control parameter for the FILE based message link.

For example :

SET REMOTE file OPTION "public"."unlink_delay" = '10';

Dbremote will pause 10 seconds before attempting to delete the message again. The number of attempts made to delete the file (five) has not changed.

297813 The Unload Database wizard now allows specifying a subset of tables to be unloaded. The wizard lists either all tables that are currently displayed in the database's Tables folder, or only those tables belonging to a particular user. From this list a subset of tables can be selected for unloading. Note that users that are currently filtered

out (via the database's "Filter Objects by Owner..." menu item) are not displayed, nor are their tables.

The wizard can now be used to unload and reload into an existing database as well. Sybase Central must be connected to both databases to use this feature. A connection to another database can be made from within the wizard, in the event that the wizard was started before establishing a second connection.

In addition, several changes have been made to streamline the unload process. The wizard now only asks for a reload file if needed (as opposed to unloading and reloading into a new or existing database), and only asks for a unload directory if table data is also being unloaded. The wizard only asks whether to use an internal or external unload and reload if it is unloading into a reload file. If reloading into a new database, internal unload and reload are used. If reloading into an existing database, internal unload and reload are used if both databases are running on the same server and have the same character sets; otherwise, external unload and reload are used.

Finally, the Extract Database wizard has also been extended to support the above features, with the exception of extracting a subset of tables, since normally all tables referenced in publications belonging to a particular remote user will be extracted.

297828 A point of contention existed which could have reduced concurrency on SMP machines, when using outer joins that supplied NULL rows. This situation could be recoqnized by observing CPU use on a mult-processor system at about 1 CPU, while the number of active requests was high, and many of the active requests were using outer joins that supply NULL rows. The point of contention has now been removed.
297833 If a computed column referenced another column in the table, then the computed column could havw been updated incorrectly to NULL or based on an old value of the referenced column if the update or insert statement had a subquery with an outer reference to a column of the table being updated.

For example, the following update would have caused the issue:

create table compute_test (

id char(10),

name char(40),

compute_name char(40) compute(name)

);

insert into compute_test(id,name)

select 'dba', 'test2'

from compute_test T

where 0 = ( select count(*) from sys.dummy where T.id=current publisher );

In addition to having the subquery appear explicitly in the update or insert statement, the problem could also have occurred if a publication referenced a column of the table.

This has now been fixed.

297863 It was possible to define multiple consolidated users on the same remote database with a SQL command similar to :

GRANT CONSOLIDATED TO u1,u2 TYPE FILE ADDRESS 'u1','u2';

This command now returns an error.

297878 The function signatures of 揼etLastDownloadTimeXXX� and 揷ountUploadRows� in the UltraLite JDBC class JdbcDatabase, are incorrectly documented. The functions documented are the internal implementations used by Java UltraLite runtime. They are awkward for end user to call in the application program. The correct function signatures should be those defined in class JdbcConnection.

In some Java UL applications like CustDB, the program obtains a JDBC connection to the local database through JDBC URL and database driver. No instance of JdbcDatabase will be created inside the scope of application program (it is automatically created in the scope of runtime code). In situation like this, many methods defined in JdbcDatabase cannot be called. Methods most likely to be called include user authentication methods 揼rant()�, 搑evoke()�, and synchronization status methods 揼etLastDownloadTimeLong()�, 揼etLastDownloadTimeDate()�, 揷ountUploadRows�. These methods should be defined in the JdbcConnection class as well.

揼etLastDownloadTimeCalendar()� should be dropped because Calendar is an abstract class in Java. The correct way for users to access a timestamp is through the Date class.

297917 After pausing the MobiLink Monitor, the Overview and Chart should not be updated. However the Overview would have been updated if it was caused to be redrawn (eg. by covering and uncovering part of the Overview). Also when it was unpaused, the box in the overview would be momentarily drawn in the wrong position. Now the Overview correctly pauses, and the Chart and Overview are updated to the most recent data as soon as the Monitor is unpaused.
297919 If the first argument of the ROUND() function was decimal, the result of the function had the same datatype, precision and scale as the first argument. If the second argument was negative, it was possible that the result would have had a larger precision that the first argument, and return an error.

For example, the following should both return 1000.000:

SELECT round(1232.955,-3)

SELECT round(953.343,-3)

The second returned an error since it required a larger precision.

Now, the precision of the result is adjusted. A workaround is to cast the first argument to have a larger precision:

select round( cast(953.343 as numeric(7,3)),-3)

In normal usage, the first argument would be a column or variable with a sufficiently large precision.

298000 If a Java stored procedure executed a query which referenced a proxy table, rows could have been omitted from the result set. A common appearance of the problem would have exhibited as missing every other row of a result from a proxy table. This is now fixed.
298001 When calling a SQL procedure that declared an external java method which produced a result set, dbisql when using the JDBC-ODBC bridge would have reported an invalid cursor operation. This problem is now fixed.
298285 In rare circumstances, indexes could be corrupted by internal server cursors. Internal server cursors are used by the server during the execution of many types of statement, usually to access system tables. This is now fixed.
298299 Due to an off-by-one error in the logic which filtered system procedures out of the list of procedures received from the server, the "Lookup Procedure Name" dialog could have shown a single system procedure, depending on the order in which procedure names were returned from the server. The first item in the list was never subject to the filter. This is now fixed.
298372 The server would have crashed on shutdown, when running on Windows CE .NET. This is now fixed.
298374 The server provides concurrency control for reading and updating the column statistics so that any changes to the statistics can take place safely in the presence of multiple simultaneous requests accessing the same statistics. The concurrency control method used could have caused the server to slow down unacceptably at very high rates of access (in one test the problem was observed after the number of concurrent users exceeded approximately 1500). The server now uses an improved concurrency control method and the problem should no longer occur.
298383 The Import Wizard could have reported an internal error if, on the second page, the "Use an existing table" radio button was selected and the name of a nonexistent table was entered, and then went on to the import the file. Now, users are not allowed to leave the second page if the table does not exist.
298410 The following changes have been made:

Added: property( 'LicensesInUse' )- determines the numbers of "seats" or "concurrent users" currently connected to the network server. Each "seat" or "concurrent user" is determined by the number of unique client network addresses connected to the server, not the number of connections. For example, if three client machines are connected to a server, and each client machine has two connections, select property( 'LicensesInUse' ) is '3'.

Corrected: property('ProcessCPU') - now correctly returns the total process time in seconds. It was incorrectly returning two times the property('ProcessCPUUser') on Windows platforms.

Corrected: db_property('IdleCheck'),db_property('IdleChkpt') and statistics "Idle Actives/sec" and "Idle Checkpoints/sec" - now return correct values (before they always had values of 0)

298423 The configured caret color used by the syntax highlighting editor in DBISQL was being ignored. This meant that the caret color would remain the system default caret color (the color you'd see used for the caret in Notepad, for example). Now the configured color is used.
298511 Queries with views or derived tables in the null-supplying side of an outer join (left outer, right outer or full outer joins) may have returned an incorrect result set under these conditions:

- there was a local predicate referencing only the view in the WHERE clause of the main query block and this predicate was not null-rejecting (for example, "View.column is null").

- the view or derived table could not have been flattened (e.g., it is a grouped view, or it contains an UNION)

- the OUTER join could not have been transformed into an inner join

Example:

SELECT * FROM employee a

LEFT OUTER JOIN

(

SELECT * FROM employee

UNION

SELECT * FROM employee

) b

ON (a.emp_id = b.emp_id)

WHERE b.emp_id IS NULL

This is now fixed.

298526 When using the OLEDB driver to retrieve schema rowsets, the rowset properties were sometimes incorrect and could have (depending on the application) caused every second row to be missing. The properties which could be wrong were DBPROPSET_ROWSET, DBPROP_BOOKMARKS and DBPROP_IRowsetLocate and have been corrected.
298559 In MobiLink Monitor's New Watch (or Edit Watch) dialog, the table listing conditions did not make it clear what unit of time was being used. It would show seconds and milliseconds, always using a period for the decimal separator. This has been fixed. Times in the table are now displayed in ISO 8601 format.
298595 The MobiLink server could have failed with an ODBC function sequence error when a zero length blob was inserted or a statement-based update was issued, with blobs that were NULL or zero length. This has now been fixed.
298598 The data from the rs_lastcommit table was being unloaded from the database twice when dbunload was run. Besides being listed in the excludeobject table, as a table requiring its data to be unloaded, there was explicit code to unload the data from rs_lastcommit in dbtools. This code has been removed.
298602 Fetching the second row of a result set in an updateable cursor, where one of the columns had more than 200 bytes of data, would have resulted in an error. This has now been fixed.
298604 On Unix, with the option -v+, Mobilink could have output some wrong SQL statements in the log file when Mobilink logged native SQL statements. When doing the conversion between multibyte and Unicode characterss, a NULL termination character was missed. This is now fixed.
298612 If a query contained a predicate that trivially evaluates to FALSE (e.g., c1 BETWEEN 5 and 10), the optimizer would have realized that the predicate would have caused the result set to be empty. However, in some cases (e.g., if a GroupByHash appeared in the plan above the filter), the server could still have caused memory to be allocated. Depending upon the estimated size of the result set without the predicate that evaluates to FALSE, enough memory could have been allocated that could result in the server running out of available memory. This problem has now been fixed.
298807 Providing connection information on dbisql's command line, (in either the argument to the "-c" option or in the SQLCONNECT environment variable), would have caused it to fail to connect if all of the following were true:

1. the "-odbc" option was used, and

2. connection was to the default local server, and

3. no data source was specified a in the connection parameters

This is now fixed.

.

In this case, DBISQL would open the "Connect" dialog from which you could successfully log in.

298849 The server now allows one extra connection above the connection limit, to allow a user with dba privileges to connect and drop other connections, in case of an intentional or accidental denial-of-service attack. Note that "connection limit" here refers to either the hard-coded 10-connection limit of the personal server, or the value specified by

the -gm switch, and has nothing to do with licensing.

298851 If primary keys for uploaded data contains string columns, dbmlsync running on CE may have produced an incorrect upload stream, if non-UTF8 characters were involved. This problem is now fixed.
298858 Dbmlsync may have crashed, due to a buffer overrun, if it encountered non-blob strings longer that 32759 bytes (the ASA limit is 32767). The problem is now fixed.
298906 Calling a Java in the Database object which created a zip file using 'java.util.zip.ZipOutputStream', with either JDK 1.1.8 or 1.3, would have reported a bad CRC error. This has now been fixed.
298907 Selecting a plan view node with a large amount of detail HTML would not cause the right-hand detail viewer to update in an acceptable amount of time. This could be reproduced by getting the graphical plan for a simple query (select * from some_table), selecting any node, and then re-selecting the root (SELECT) node. Toggling between two nodes would eventually have caused the rendering delay to increase.

This response time has been improved (although a delay is still noticeable) and the performance no longer degrades with repeated selections.

298914 The UltraLite analyzer would have generated code for some queries that declared the same variable name twice. This has been fixed.
298948 The server could have leaked memory when calling a trigger on a table that contained columns with check constraints. This is now fixed.
298957 When a procedure which did not return a result set was opened in Embedded SQL using EXEC SQL OPEN, the procedure was executed and the SQLE_PROCEDURE_COMPLETE warning was returned. After receiving this warning, attempting to close the cursor gave a SQLE_CURSOR_NOT_OPEN error, and attempting to open a cursor with the same name gave a SQLE_CURSOR_ALREADY_OPEN error. Now the cursor is in the closed state if the open returns SQLE_PROCEDURE_COMPLETE, and opening a cursor with the same name will succeed.
299030 After rebuilding an ASA primary database using dbunload -ar, running the Replication Agent would fail with the following error:

Unable to find log offset ...

Error processing log due to missing log(s)

Dbunload did not save the current transaction log and reset the start and relative log offset in the rebuilt database. This has been fixed.

299055 You no longer need DBA authority to connect the Mobilink Server to an ASA database.
299058 Tilde (~) characters were not allowed in unquoted file names. Attempting to use them caused the error "Lexical error". This problem has been fixed.
299060 ASA now supports slightly larger standard cache sizes by allowing the cache to be allocated in up to 4 contiguous pieces where only two were allowed previously. Some DLLs load at addresses which fragment the address space and limit the amount of memory that can be allocated with only two pieces. With this change, perhaps 100MB to 200MB of additional memory may be allocated for a standard cache, depending on the system. For AWE caches, this change means that more address space will now be available for mapping to physical memory which will reduce the number of mapping operations which must be performed.

Also with this change, the minimum AWE cache size has changed from (3GB-256MB) to 2MB. It is recommended, however, that a traditional cache be used if a traditional cache of the desired size can be allocated. Recall that AWE caches do not support dynamic cache sizing and that AWE cache page images are locked in memory and therefore they cannot be swapped out if memory is needed by other processes in the system.

299066 If an UPDATE statement used an index on a column defined with DEFAULT TIMESTAMP, it could have looped infinitely. This is now fixed.
299081 When using ASA as a consolidated database for MobiLink, if any of the tables to be synchronized were located on a remote server (ie proxy tables), the MobiLink server would have encountered the following error:

"Feature 'remote savepoints' not implemented"

and failed the synchronization. This case is now detected and silently worked around.

299102 The table sys.dummy was previously implemented as a real table. As the single row was fetched from this table, the corresponding table page was temporarily latched while reading the column out (as is done for all base tables). Since the dummy table contains only one row, there was a strong possibility that multiple clients would be concurrently attempting to latch the same page. This could lead to reduced opportunities for parallelism, and in some cases could lead to the formation of convoys. These symptoms could be observed by noting that the CPU use on a multi-processor system dropped to about one processor, while many requests were active or unscheduled; at the same time, many of the active requests referenced the sys.dummy table.

To address this issue, the sys.dummy table is now implemented in a manner that bypasses the latch on the table page. This is only possible because the dummy table has known contents which can not be modified. Further, the sys.dummy table no longer appears in Lock nodes in the graphical plan, and if only the sys.dummy table is present, a Lock node may now be omitted where it was previously required.

299106 A point of contention existed which could have reduced concurrency on SMP machines, when using work tables (tables used for operations such as sort, group-by, and distinct). This situation could be recoqnized by observing CPU use on a mult-processor system at about 1 CPU, while the number of active requests was high, the HashContention property was high ('Contention: Hash Chains' performance counter), and many of the active requests were using work tables. The point of contention has been removed.
299109 Search conditions of the form "col LIKE '<prefix>%' " can usually use an index (ie sargable), if the prefix does not contain any wild card characters. For these conditions, the engine infers range bounds of the form "col >= '<prefix>' AND col < '<prefix#>'", where <prefix#> indicates a version of the prefix string that has been incremented. For example, if the following appears in a query:

emp_lname like 'SI%'

then the optimizer will add additional predicates:

emp_lname >= 'SI' AND emp_lname < 'SJ'

Note that the last character, 'I', has been incremented to the next character in the collation; in this case, 'J'.

For prefix strings that consisted only of the last character of the collation sequence (for example, 'Z'), the server did not form the incremented prefix, did not form the upper bound for the column and the lower bound was not included. Because of this, an index would not be used for the column. Now, for conditions of the form:

emp_lname like 'ZZ%'

the lower bound will be added by the optimizer as follows:

emp_lname >= 'ZZ'.

An index will be selected for this column, if it would have been used for the added range predicate.

Note that conditions such as "emp_lname LIKE 'SZ%'" are treated by adding:

emp_lname >= 'SZ' AND emp_lname < 'T'

and can use an index before and after this change.

299110 In some circumstances, fetching backward on an index scan could have caused the index scan to fetch all rows prior to the current position, back to the beginning of the table. Even without backward fetches from the client, this situation could have arisen due to prefetching.

This situation can be detected by higher-than expected running times combined with a larger than expected CacheReadIndLeaf property (the 'Cache Reads: Index Leaf' performance counter).

299117 A point of contention was present that could cause convoy phenomena to form. These phenomena could be detected by seeing that the CPU usage on a multi-CPU system dropped to about 1 CPU, while the number of active requests was high and the 'Contention: Engine' performance counter or EngineContention engine property was high.The convoys were most likely to form with requests that accessed a table through an index, with all of the indexed pages in cache. This point of contention has been removed.
299119 Queries having DISTINCT and ORDER BY may have returned the incorrect order if the ORDER BY clause was satisfied by an index and DISTINCT was executed as a DistinctHash.

Example:

select DISTINCT T.y

from T

where T.x > 100

order by T.x

If an index scan was used for the table T (the index on T.x) and DistinctHash was used, the result may not have been sorted. This is now fixed.

299120 Simple queries such as the following:

SELECT *

FROM T

WHERE T.x = ?

would not have used an index on T.x, if the value of the host variable was NULL. In order for this issue to appear, the query must have been sufficiently simple to bypass optimization. For example, it must have contained only one table with no aggregates nor disjuncts.

The predicate T.x = ? will match no rows if the host variable is NULL. While no rows were returned before this change, a complete sequential scan of the table was performed. This scan is not longer done. Further, the graphical plan would not have shown the sequential scan in this case, as the graphical plan does not use the optimizer bypass.

299125 For FIRST ROW optimization, the optimizer governor favors the plans with no materialization (e.g., no SORT or HashJoin operators). Only if a very cheap materializing plan (i.e., N times cheaper than the best non-materializing plan) is found, will the best plan be set to the very cheap plan. In some cases however, the very cheap plans were incorrectly discarded and an expensive non-materializing plan was chosen as the best plan. This has been corrected.
299222 Under certain conditions, an empty result set was not produced when GROUP BY was used and no rows were obtained. The one-row result set contained meaningless values. This has been fixed.
299223 A valid query containing a CASE expression in both the SELECT list and the GROUP BY clause, may have failed with SQLCODE -149. For this to have occurred, the CASE expression must omit the final ELSE clause. A simple reproducible is

SELECT CASE dummy_col WHEN 0 THEN 'Q1' WHEN 1 THEN 'Q2' END from dummy

GROUP BY CASE dummy_col WHEN 0 THEN 'Q1' WHEN 1 THEN 'Q2' END;

This has been corrected.

299224 Under certain conditions, an empty result set was not produced when GROUP BY was used and no rows were obtained. The one-row result set contained meaningless values. This has been fixed.
299231 Attempts to connect to more than one server via jConnect would have failed, if the servers were running on the same machine. The error message would report that the database could not be started. This has been fixed.
299246 With the UltraLite Java runtime (ulrt.jar) that did not include secure stream classes from Certicom, attempting to use the HTTPS protocol would have given a stack trace. This has been fixed. The HTTPS option is now disabled unless the UltraLite Java runtime includes the secure stream classes from Certicom.
299297 The database server could have reported a fatal error or assertion failure due to a failed IO operation. The error message displayed may have been "Fatal error: Unknown device error", "Fatal error: no error", "A write failed with error code: (1453)", "A write failed with error code: (1450)", or some other form of fatal error or assertion failure message.

Certain errors such as 1450 and 1453 can (apparently) be reported by NT during "normal" operation. The server now retries IOs that fail with one of these particular error codes up to 100 times. If the IO does not succeed after 100 attempts, the server will now report the error as a fatal error (same message as before). It is impossible to know whether 100 attempts will give the OS sufficient time to remedy whatever problems it is having.

It is believed that the OS reports these errors when available memory is low. A work around may be to ensure that the system is not low on memory.

299301 Running the dbunload utility with options -ar or -an would not have created a reload.sql file that had check constraints turned off. This may have caused errors when loading data into the new database. This is now fixed.
299351 The UltraLite analyzer was generating a C++ function prototype for the Open method of a ULResultSet object with duplicate variable names. This would happen if a host variable was used more than twice to represent a value for the same column in a query. For example: SELECT * from T where x > ? OR x < ? OR x = ?.

This has been fixed, the parameter names are now unique.

299361 During checkpoints, more writes might have been performed than necessary to write out table bitmaps. Unnecessary writes are no longer done.
299362 UltraLite applications written for Palm devices would have failed to link, with an unresolved symbol ULLoadUnaligned32 error, as of build 3055. This has now been corrected.
299364 Using DBISQL with the JDBC-ODBC bridge and executing SQL with no command delimiters as

in the following example:

create table dbtran_T1(

pk integer not null,

c1 varchar(100) null,

primary key(pk)

)

INSERT INTO dbtran_T1

VALUES (1,'rm1')

INSERT INTO dbtran_T1

VALUES (2,'rm2')

COMMIT WORK

would very likely have caused dbisql to crash or silently exit. This problem has now been fixed.

299368 If the server was running in bulk mode (see the "-b" command line option) and a transaction caused a rollback, then in some rare situations it was possible for the database to become inconsistent as far as the catalog is concerned. This problem has now been corrected. As a consequence of this fix, the server will now employ the rollback log during the bulk mode and not use the transaction log as before.
299440 When using large fonts with Windows,, the MobiLink Monitor's New Watch and Edit Watch dialogs could have truncated text in the Remove button and in the time units combo box, if a time-based property was selected. This has been fixed.
299441 DBISQL(java) reports for a result set multible times

There was an error reading the results of the SQL statement.

The displayed results maybe incorrect or incomplete

The same result set does not give an error in dbisqlc.

299466 The network server now supports the LocalOnly TCP option (eg. -x tcpip(LocalOnly=YES), which restricts connections to the local machine. Connection attempts from remote machines will not find this server (regardless of connection parameters), and dblocate running on remote machines will not see this server. This parameter effectively

turns the netwark server into a personal server, without the personal server limitations(i.e. no connection limit, no two CPU limit, etc.)

299521 An update statements that sets a date column to the same value like:
UPDATE T1 set Col1=Col1
may crash the engine. After rebuilding the db file the problem does not happen.
The db file was created with version 7 and the data in the column are maybe wrong
or corrupted. but we should not crash. dbvalid did not return any error.
299546 If executing a statement resulted in a long error message being returned from the server, then retrieving that error message using the JDBC-ODBC bridge would likely have crashed the application or resulted in very strange behaviour. This problem has now been fixed.
299548 Pressing the F8 key while DBISQL was busy executing a statement, would have caused it to report an internal error. This has been fixed.
299561 Calling the system procedure sa_locks() multiple times, while the server was busy, may have caused the server to crash. This is now fixed.
299575 If the main Sybase Central window was partially off screen, any dialogs that were opened may also have been partially off screen. This has now been fixed.
299584 After a row is added to an oledb rowset (ADO recordset), its edit state is set to DBPENDINGSTATUS_NEW (ADO adEditAdd). If column values are then set for the row, the edit state should not change, but the ASA provider was changing it to DBPENDINGSTATUS_CHANGED (ADO adEditInProgress). Now it will no longer do this for newly added rows, so they will retain their DBPENDINGSTATUS_NEW (aado adEditAdd) state until the row is committed to the database or the changes are rolled back.
299615 The following sequence of statements would have resulted in a server crash:

create table table1 (col1 int, col2 int, col3 int );

create view v1 as

select col1, col2, col3 from table1;

alter view v1 (col1) as

select col1, col2, col3 from table1;

The ALTER VIEW statement included a column list for the view which did not match the SELECT list. An error is now reported.

299630 When applying the 8.0.1 maintenance patch to an 8.0.0 installation, the encryption libraries (libdbtls8[_r].so) do not get upgraded to the 8.0.1 version. A side affect of this, is that applying 8.0.1 EBFs to an upgraded 8.0.0 install will not apply the EBF as the encryption library is of an older 8.0.0 version.

This is now fixed with the 8.0.2 patch, but a work around would be:

In the maintenance install directory, copy the file 'encryption_ml' in the 'files' directory to 'encryption' and rerun the install. This will ensure that the encryption libraries get updated. A regular 8.0.1 EBF can be applied to the updated 8.0.0

install.

299664 Using the ASA oledb provider to access a database from Powerbuilder would have failed as of versions 7.0.4.3382, 8.0.1.3062 and 8.0.2.4076. This was due to a problem introduced as part of the fix for issue 270447. This problem has now been corrected.
299721 The VALIDATE TABLE statement, or the dbvalid utility, could have spuriously reported missing index entries. When checking a foreign combined index, (ie 5.x format), with the FULL CHECK option, entries containing some, but not all, nulls would have generated a spurious report of a missing index entry. This is now fixed.
299754 Executing a statement which contained two consecutive comments, and the first comment contained an unmatched quotation mark, and the second comment contained a question mark, would have caused dbisql to report the error: "JZ0SA: Prepared Statement: Input parameter not set, index: 0".

For example, the statement below would not have executed:

CREATE PROCEDURE test AS

BEGIN

-- "a

-- ?

END

This problem, which is related to issue 217915, has been fixed.

299786 The UltraLite analyzer was generating a macro that was not defined, when processing a query that used the STR() function with the last 2 (optional) parameters omitted. The analyzer has been changed so that it generates the defined macro with the default parameters supplied, if they are not specified.

A workaround is to add the macro:

#define UL_STR_CHAR_DOUBLE( l, dst, s1 ) \

ULStr( UL_STRING(dst), s1, (ul_s_long)10, (ul_s_long)0 )

to the user抯 ulprotos.h file. This workaround only works if both optional parameters to the function are omitted.

299822 Connection.getTable(), TableSchema.getOptimalIndex() and TableSchema.getIndex() would have returned SQLE_CLIENT_OUT_OF_MEMORY when the table or index requested could not be found. Now SQLE_INDEX_NOT_FOUND or SQLE_COLUMN_NOT_FOUND is correctly returned.
299855 When attempting a connection from an aplication running on a 32-bit Windows platform, and specify a non-existant datasource name, the ODBC Driver Manager will report an error. On Unix or Windows CE, when not using a Driver Manager, a similar error will now be reported by the ODBC driver. Previously no error was reported and the driver would go ahead and attempt to connect, often resulting in a non-informative error message such as 'database server not found'. An unexpected side effect of this change is that a connection string that contained an invalid datasource name could have connected successfully, if there was enough additional connection parameters to establish a connection. With the new change, an error will be reported instead.
299872 In some circumstances when a connection was established while the server was shutting down the server could crash. Database files are not affected. This affected UNIX servers only and has been fixed.
299936 A new property, QueryCachedPlans, has been added which shows how many query execution plans are currently cached. This property can be retrieved using the CONNECTION_PROPERTY function to show how many query execution plans are cached for a given connection, or DB_PROPERTY can be used to count the number of cached execution plans across all connections.

This property can be used in combination with QueryCachePages, QueryOptimized, QueryBypassed, and QueryReused to help determine the best setting for the MAX_PLANS_CACHED option.

299947 Expressions of the form '0-(expr)' could have given the wrong answer, namely '(expr)', where (expr) is any expression.

For example:

select 0-1; ---> gives 1 incorrectly

select 0.0-1.0; ---> gives 1 incorrectly

Now the correct answer is returned.

299979 If a version 8.0.1 installation was upgraded to version 8.0.2, the ASA performance counter objects would have appeared twice in the list of objects in the NT performance monitor. This has now been fixed.
300072 Two new statistics have been added to the Windows Performance Monitor; a database object, "Connection Count" and an engine object "Comm: Licenses In Use", to track the number of connections in use.
300073 When using an external procedure or function written in Delphi, the server could have crashed with a floating point exception. The DLL would have enabled a number of floating point exceptions that are masked by default. While the proper fix would be to rewrite the external procedure or function, the server will now reset/restore the floating point control word at appropriate points.

Code, such as the following, can be used to explicitly set the floating point control word:

const

MCW_EM = DWord($133f);

begin

Set8087CW(MCW_EM);

end;

300081 Executing a CREATE SERVER statement with an unsupported class on NetWare would have succeeded, but executing a CREATE EXISTING TABLE on that server would have caused the NetWare server to abend. This has now been fixed. Note that 'asajdbc' is the only supported class on NetWare.
300084 The option APPEND { ON | OFF } has been added to the UNLOAD and UNLOAD TABLE statements. The default for APPEND is OFF. With APPEND ON the output file will not be overwritten if it already exists. Instead, the engine will append any unloaded data to the end of the file.
300109 Columns were always being reported as not nullable through the ASA provider. This was most noticeable when generating datasets in Visual Studio .NET. The AllowDBNull property would always be false, even if a column allowed nulls. This has been corrected.
300115 When executing multiple consecutive

MESSAGE ... TYPE WARNING TO CLIENT

statements, dbisql may not have displayed the messages in the correct order. For example, when executing the following compound statement:

begin

message 'one' type warning to client;

message 'two' type warning to client;

end

message "two" would have displayed before the message "one". This problem has been fixed.

300125 When reading a script file which contained an EOF character, (0x1A), DBISQL would have reported a "Lexical Error" rather than interpreting the character as an end-of-file marker. Now the end-of-file character is recognized correctly.

Note that the end-of-file character is optional in script (.SQL) files.

300128 The minimum cache size calculated by a server running on a Windows platform would have been different from one running on a UNIX platform. This change makes the behaviour consistent.

Assuming that no -cl parameter was specified when starting a server:

1) Prior to this change, if -c was specified, a Windows server would set the min cache size to be the same value as the -c value (i.e. the same as the initial value) whereas a UNIX server would make the min cache size 2MB. This change makes all platforms use the Windows behaviour in this situation: min cache size is the same as the initial cache size.

2) Prior to this change, if _no_ -c was specified, the initial cache size is computed by the server to be an appropriate size based on the size of the database(s) being started. A Windows server would use this initial cache size value as the minimum cache size, whereas a UNIX server would make the min cache size 2MB. This change makes all platforms set the minimum cache size to a platform-specific minimum value as follows: CE: 600K, all other Windows platforms: 2M, all UNIX platforms: 8M

300139 Under Windows 95, there was no response to a right-click on the server icon in the system tray. This has now been fixed.
300192 When running the server on NetWare 4.x, it required that TCPIP.NLM be already loaded on the NetWare server. This requirement has been removed, it is now loaded dynamically.
300203 Using Syntax 2 of the FORWARD TO statement could have caused the local ASA server to crash. An example is as follows:

forward to SOME_REMOTE_SERVER;

select * from systable; ===> CRASH

Whereas the following:

forward to SOME_REMOTE_SERVER {select * from systable}

was not a problem. This has now been fixed.

300214 Calling TableSchema.isColumnGlobalAutoIncrement() with an invalid column name would have caused a crash. It now throws a SQLException with SQLE_COLUMN_NOT_FOUND.
300231 When multiple threads running Java code tried to disconnect at about the same time, a thread deadlock was possible. This has been fixed.
300349 Estimates for search conditions are updated as queries are evaluated, based on the number of times that a predicate is found to be true. Before this change, conditions that were found in disjunctive clauses (OR'ed conditions) might not have been used to update the statistics. Similarly, conditions appearing in IS [NOT] {TRUE|FALSE|UNKNONWN} conditions, also might not have updated the stored selectivity estimates.

For example, the following query would not have updated the selectivity of column T.x nor T.y.

SELECT *

FROM T

WHERE T.x = 1 OR T.y = 2

Note that only the first predicate that is evaluated for a given table can be used to reduce the selectivity estimate for a condition, but any predicate can raise the estimate.

300375 When editing a BIT value and then switching to a new row the change would be lost. This has now been fixed. This problem occurred in dbisql as well.
300401 Running the dbexpand utility on Unix platforms, was taking a long time to expand a compressed database file. This has now been greatly improved.
300402 Executing the system procedure, xp_startmail, would have returned either 0 (success) or 2 (failure), which maked diagnosing xp_starmail failures difficult.

Now xp_startmail, (as well as xp_sendmail and xp_stopmail), returns one of

the following:

Value Description

0 Success

2 xp_startmail failed

3 xp_stopmail failed

5 xp_sendmail failed

11 Ambiguous recipients

12 Attachment not found

13 Disk full

14 Failure

15 Invalid session

16 Text too large

17 Too many files

18 Too many recipients

19 Unknown recipient

20 Login failure

21 Too many sessions

22 User abort

23 No MAPI

24 xp_startmail not called (xp_sendmail and xp_stopmail only)

300404 Specifying -mn "" on the dbmlsync commmand line would have caused it to crash. This has been fixed.
300425 In order to make cost based decisions on which indexes to use, the optimizer needs to know some physical properties or statistics of the various candidate indexes. These statistics include the number of leaf pages in and the depth of an index. The server was obtaining the approximate index statistics by performing run time sampling of indexes which could have been an expensive operation, especially when optimizing small queries with a large number of potential indexes to choose from. The server will now maintain the required statistics as each index is updated. Not only will the statistics now be available to the optimizer at virtually no cost, the statistics will also be accurate.

The new statistics will persist in SYSATTRIBUTE in the form of one row for each statistics for an index. The rows in SYSATTRIBUTE will only be created when required, e.g., a row for index depth will be created only when the index depth increases to 2. The statistics will be maintained for all indexes including those on catalog tables. Also, the VALIDATE statement will now verify that the statistics on the specified index(es) are accurate and will generate an error otherwise.

300469 If a statement had a host variable whose datatype could not be determined from the context of the query (for example, SELECT NULLIF( ?, ? )), the analyzer would have generated an error message like: "Statement at null(-1) could not be processed". In 7.x, the analyzer would not have generated an error message at all, but would have generated code that could not have been compiled. The analyzer now generates an error message that indicates which host variable is in question and that the user should use the CAST() function to set the datatype.
300483 Under some circumstances, the statistics gathering in the server during query execution could have caused a divide by zero floating point exeception. Usually, these exceptions do not cause any significant problems. The problem has been fixed.
300502 If errors occurred during the Prepare_for_download and/or Download events, the MobiLink server would have commited the upload on the server side quietly, without notifying the client. The ASA client would the have displayed the error "communication error..." and rolled back the upload. In the next run, dbmlsync would again have complained with "Progress offset mismatch, resending upload from the consolidated database's progress offset". This problem is now fixed.
300534 The analyzer could have generated code after a generated return statement. This code was only defined for the Palm platform and it was defined to free memory. This has been fixed.
300584 An assertion failure could have been generated when using an aggregate function in a GROUP BY clause. For example, the following query could have caused the assertion failure:

102300 (8.0.1.3067) File associated with given page id is invalid or not open

select DT.TID

from sys.syscolumn C,

( select T.table_name, max( table_id ) TID

from sys.systable T

group by T.table_name

) DT

where C.column_name = DT.table_name

group by DT.TID

In order for the problem to have occurred, an intervening work table must have appeared between the first GROUP BY clause and the second. THis has now been fixed.

300649 The list of statistics displayed on the Statistics tab for a server was incorrect and incomplete. Several database statistics were incorrectly included in the list (their values would always be displayed as zero) and many server statistics were missing. Now, the list contains the complete set of server statistics, which is a subset of the results returned from the stored procedure sa_eng_properties().
300775 Attempting to apply an EBF on machines having only the Client portion (i.e., no database server) of Adaptive Server Anywhere installed would have failed. This has been fixed.
300796 The server automatically generates histograms on columns being loaded via the LOAD TABLE statement. The size of a histogram that was being generated during LOAD TABLE was unnecessarily large. Now LOAD TABLE will generate histograms with the same sizes as the equivalent histograms created by the CREATE STATISTICS statement.
300847 If the path to a database file contained brace characters (eg.

"E:\test\{test}\sample.db"), applications using dblib or odbc could not have autostarted it. This has been fixed. Note that starting a server directly on the file (eg. dbeng8 E:\test\{test}\sample.db) was not a problem.

300858 In the Adaptive Server Anywhere Programming Guide, chapter 6 Embedded SQL Programming, section Library function reference for db_register_a_callback function. The callback prototype for DB_CALLBACK_MESSAGE is incorrect. It should be:

extern void SQL_CALLBACK MessageDBRequest(

SQLCA * sqlca,

unsigned char msg_type,

an_SQL_code code,

unsigned short length,

char * msg );

300903 Entering an invalid query like the following, (note missing table alias B):

DELETE FROM t1 A FROM t2 WHERE A.c1 = B.c1

where both t1 and t2 were remote tables, would have caused the statement to be passed to the remote server, instead of being rejected immediately. This problem has now been fixed.

301012 If a server was started on the same machine as another server of the same name, which was was in the process of shutting down, the server could have hung. Also, if a client attempted to connect via shared memory to the newly started server, while the previous server with the same name was still shutting down, the client could have hung. This problem has been fixed.
301078 When using

DBBACKUP -r -n

or

BACKUP DATABASE DIRECTORY 'bkup_dir'

TRANSACTION LOG RENAME MATCH

the current transaction log is renamed and the log copy is also renamed using a matching name in the form YYMMDDnn.log. Previously, there was no way to cause the log copy to be renamed if the active log was truncated.

As of this change, the following methods can be used to rename the log copy:

DBBACKUP -x -n

or

BACKUP DATABASE DIRECTORY 'bkup_dir'

TRANSACTION LOG RENAME

TRANSACTION LOG TRUNCATE

301081 Dialogs in the MobiLink Monitor deviated from the Windows Interface Guidlines in the following ways, which affected keyboard accessibility:

- The Watch Manager, New Watch and Edit Watch dialogs did not have default buttons.

- OK, Cancel and Help buttons had mnemonics. Windows applications do not use mnemonics for these buttons because there are standard keyboard shortcuts (Enter for OK, Esc for Cancel and F1 for Help).

- Due to a JDK 1.3 bug (fixed in JDK 1.4), the default button would be the last button to have the focus.

These problemhave been corrected.

301110 A stored procedure cursor declared using the form:

DECLARE CURSOR c USING variable-name

could have caused an error or returned incorrect results. The problem would have occurred after the procedure had been called more than 11 times. While this is now fixed, a workaround is to set the value of the Max_plans_cached option to 0.

301116 The server could have crashed when executing the MESSAGE statement. This is now fixed.
301210 If a procedure which is no longer valid (eg. syntax in the procedure is no longer supported), then preparing the procedure for execution via ODBC would have caused the server to crash. This has been fixed and the error message 'procedure is no longer valid' will now be returned to the application.
301242 Using 'LOAD TABLE' to load data into a table could have caused some data to 'disappear'. For example, after loading 5000 rows of data into an empty table the statement 'select count(*) from table' could return a value less than 5000. Also, selecting all of the rows could return some subset of the rows that were loaded. All of the following would need to be true to experience this problem:

1) The table into which the data was loaded was empty

2) The table into which the data was loaded contained more than one database page

3) The resulting table after the 'LOAD TABLE' statement contained at least 100 database pages

Databases experiencing this problem should be rebuilt. Unload the database using DBUNLOAD and make sure to unload the data 'ordered'. CAUTION: If you do an 'unordered' unload of the database the missing rows will be permanently lost.

301264 The default behaviour in dbmlsync was to not upload cascaded deletes or operations performed in triggers. This could have caused the results of a synchronization to depend on when synchronization occurs, like the situation described below.

Suppose table T1 contains a foreign key to table T2 with the 'ON DELETE CASCADE' option. T1 ad T2 are defined identically on the remote and consolidated databases. The following operations occur:

1. Insert R2 into T2

2. Insert R1 into T1 (R1 contains a foreign key reference to R2)

3. Delete R2 for T2

4. Step 3 results in a cascaded delete which results in R1 being deleted from T1

If a synchronization occurs after steps 2 and 4, then the consolidated and remote databases end up in the same state. On the first synchronization dbmlsynce uploads:

Insert R2 into T2

Insert R1 into T1

On the second synchronization dbmlsync uploads:

Delete R2 from T2

On the consolidated database, R1 will be deleted from T1 by a cascaded delete. Thus, neither R1 nor R2 is left in either database.

However if a synchronization only occurred after step 4, then a synchronization error occurs. In this case, dbmlsync will coalesce the insert and delete of R2 into a no op and upload no operation on T2. However, it will still upload the insert of R1 into T1. When this insert is applied on the consolidated database a referential integrity violation occurs because R1 has a foreign key that refers to R2 and R2 has never been uploaded.

To resolve this situation, dbmlsync now treats cascaded deletes and deletes that occur in a trigger specially. When it encounters a trigger/cascaded delete, dbmlsync now checks if there is a previous operation on the same row already included in the upload stream. If an operation exists the delete will be coalesced with that operation and uploaded. Otherwise the delete will be ignored.

In the example above this new behaviour prevents the error when a synchronization occurred after step 4, by preventing the insert of R1 from being uploaded.

301293 A MobiLink client on a Pocket PC 2002 device, using ActiveSync synchronization over an ethernet connection, would have failed to find the ActiveSync provider on the desktop. This is now fixed.
301342 Validating the database may have changed the rowcount (column "count") value in SYSTABLE. The first validation would have given the error 'Run time SQL error -- row count in SYSTABLE incorrect'. Validating the database a second time would have returned no error. The rowcount value in SYSTABLE is now no longer updated when validating the database.
301414 The START DATABASE statement now allows a database to be started in read-only mode or with log truncation on checkpoint enabled.

New syntax:

START燚ATABASE燿atabase-file

[燗S燿atabase-name燷

[燨N爀ngine-name燷

[燗UTOSTOP爗燨N爘燨FF爙燷

[ WITH TRUNCATE AT CHECKPOINT ]

[ FOR READ ONLY ]

[燢EY爇ey燷

301415 When -d is specified on the dbmlsync command line, dbmlsync attempts to drop any connections that are preventing it from locking tables for synchronization. If the database engine was slow dropping the connections, synchronization would fail with a message like:

SQL statement failed: (-210) User '<username>' has the row in '<tablename>' locked

In this situation dbmlsync now tries for longer than it did in the past so failures of this type should be much more infrequent.

301419 An INSERT WITH AUTO NAME embedded within a stored procedure would have failed, usually with SQLCODE -207.

For example:

CREATE TABLE T (

PKEY INTEGER NOT NULL DEFAULT AUTOINCREMENT,

DATA1 INTEGER NOT NULL,

PRIMARY KEY ( PKEY ) );

CREATE PROCEDURE P()

BEGIN

INSERT T WITH AUTO NAME SELECT 1 AS DATA1;

END;

CALL P(); -- ASA Error -207: Wrong number of values for INSERT

Using WITH AUTO NAME on an INSERT statement on its own (outside of a procedure context) would work have worked correctly. This is now fixed.

301502 When an OLE DB schema rowset is opened to retrieve the parameter information, the ASA provider executes the stored procedure 'sa_oledb_procedure_parameters' which takes four parameters 'inProcedureCatalog', 'inProcedureSchema', 'inProcedureName' and 'inParameterName'. If the 'inProcedureSchema' parameter was not specified by, (such as is done by Delphi applications), the default value of 'current user' was used. If this was not the same as the user that created the procedure, no records would have been returned. This is now fixed by changing the default value of 'inProcedureSchema' to the empty string ('').
301567 The event_parameter function can now be used to determine the name of the schedule which caused an event to be fired. The value of:

event_parameter('ScheduleName')

will be the name of the schedule which fired the event. If the event was fired manually using TRIGGER EVENT or as a system event, the result will be an empty string. If the schedule was not assigned a name explicitly when it was created, its name will be the name of the event.

301575 When there were approximately one hundred idle connections with liveness enabled, liveness packets would have been sent out in large bursts. These bursts could potentially have caused performance problems or dropped connections. This fix attempts to avoid sending liveness packets in large bursts.
301603 The sa_validate stored procedure would return errors containing garbage values. This has been fixed.
301739 On Unix platforms, using File Save As in the MobiLink Monitor would have written the file to the initial directory displayed in the dialog, instead of the last directory chosen. If the user did not have write permissions in that directory, then the Monitor would have given an inappropriate "file ... could not be found" message. Also, on both Windows and Unix the Monitor would not have added an extension, if there was a period anywhere in the file path. So an error message would have resulted, if the file name did not end in either .csv or .mlm, and you could override the file type specified in the dialog by typing the other file extension as part of the file name.

These problems have been fixed. The MobiLink Monitor now saves to the expected directory for both Windows and Unix. Trying to save to a directory without write permission on Unix, now gives a "file ... could not be accessed" message. For both Windows and Unix, the Monitor now adds the extension chosen in the Save dialog, if it is not already at the end of the file name.

301764 Coding a loop searching for values using table.FindFirst.. table.FindNext would have failed because table.FindNext would have always returned False, even when the search was found.

Workaround:

Instead of looping on table.FindNext, check for table EOF

Instead of:

While table.FindNext

' process match

Wend

Use:

Do

table.FindNext

If table.EOF Then Exit Do

' process match

Loop

301923 If a personal server was running, and a network server was also running on another machine with the same name, and there is an entry in the asasrv.ini file for the remote server, dbisql would have connected to the remote server even without having specifying an engine name or links. This could have happened on any dblib / odbc connection that specified LocalOnly=YES. This has been fixed.
301929 In rare circumstances, the backup copy of a transaction log created by the image-backup form of the BACKUP statement could have been corrupt. The bug does not apply to "archive backups" created by the BACKUP statement nor does it apply to the dbbackup command line utility. The problem which is now fixed, was more likely to show up on SMP machines and could only happen if operations were being performed while the log was being backed up.
301968 A query with a merge join, meeting the following conditions, may have returned too few rows:

1 - The join condition was an equality predicate, (call this predicate P1).

2 - There was a non-equality predicate referring to columns from both tables, (call this predicate P2).

3 - At least one row from the left hand table, joined to multiple rows from the right hand table.

4 - P2 rejected at least one row that would be in the result, if P1 was the only predicate in the query.

4) Merge join is chosen by the optimizer.

This has been corrected.

302150 If store encryption was enabled, but no key was supplied in the storage parameters, the key could not have been subsequently changed (attempts to open the database would have failed). Now this case is permissible, but the database is still not actually encrypted to begin with, if no key is supplied -- encryption must be enabled and a key specified to encrypt the database.

In addition, an error is now returned if an empty string is passed to ULChangeEncryptionKey. The motivation for this is that an empty key cannot be specified in the storage parameters string. There would be no way to decrypt such an encrypted database (that is, specifying an empty key would not do it).

302180 When using the JDBC-ODBC bridge, calls to PreparedStatement.getMetaData() were returning null all the time. This is now fixed.
302216 The error message "The system DLL kernel32.dll was relocated in memory. The application will not run properly. The relocation occurred because the DLL c:\program files\sybase\SQL Anywhere 8\win32\dbserv8.dll occupied an address range reserved for windows NT system DLLs. The vendor supplying the DLL should be contacted for a new DLL.", could have been displayed when attempting to start the server. This has been fixed.

This error message only seemed to occur after applying a specific Microsoft Hotfix (Q299444).

302224 Dbmlsync was leaking TLS indexes and memory on the first failed MobiLink connection attempt. The leak did not grow for subsequent connection failures throughout the process. This is now fixed.
302303 An ODBC application could have crashed, if it called SQLGetDiagRec or SQLGetDiagRecW with the record number parameter greater than 2 and there were three or more diagnostic records. This has been fixed.
302304 A new feature has been added such that when the dbmlsync top-level window receives a window message registered using the name "dbas_synchronize" while sleeping, it will weakup and perform a synchronization. If dbmlsync is already performing synchronization, the message will be ignored.
302305 Performance improvements were done for several internal functions used by the optimizer. These changes may reduce the OPEN time for very complex queries.
302314 For statements used in the procedures, plans may be cached after a training period (i.e., after a procedure has been called a few times). For statements for which it is anticipated that the plans will not change too often, the training period is now shorter, hence, the plans are saved much sooner than before. Statements in this category include UPDATE/DELETE/SELECT statements on one table with a WHERE equality predicate on the primary key.
302330 Selecting property('TempDir') when connected to a NetWare server would have returned a random string on 8.0.1, or "SYS:" on 8.0.2 and up. On NetWare, temp files for a database are located in the same directory as the database, so the value of this property is meaningless. It has now been changed to return an empty string.
302337 If dbisqlc was minimized and executing a SQL script and an error occurred, it would have appeared as if dbisqlc has stopped functioning. The window could not be restored and no error dialog appeared. The error dialog was just invisible, so to workaround the problem, clicking the dbisqlc icon in the taskbar and hitting the 'enter' key would allow dbisqlc to continue processing.

As of this fix, when an error occurs the dbisqlc window will be restored and the error dialog will appear

302368 DBISQL would have reported an internal error, if an INPUT statement was executed which read a FIXED format file and all of the following were true:

- The table contained more than one column

- The INPUT statement contained a COLUMN WIDTHS clause

- Fewer column widths were given in the COLUMN WIDTHS clause than there are columns in the table

- The INPUT statement did not explicitly list the table columns

302381 It was possible that a client application, using the ASA provider, could have overwritten memory when updating or inserting a record in an ADO recordset or through the irowsetupdate or irowsetinsert interfaces. This has been fixed.
302394 There are a number of corrections to SQLSetPos and SQLBulkoperations for a variety of problems.

We now correctly set the row status array in many more situations.

We now correctly select which row status array to update; either the one passed in SQLExtendedFetch or the one specified by SQLSetStmtAttr(SQL_ATTR_ROW_STATUS_PTR).

We now correctly set the rows processed counter specified by SQLSetStmtAttr(SQL_ATTR_ROWS_FETCHED_PTR) in many more situations.

We now correctly set the row count value returned by SQLRowCount in many more situations.

Please note that bookmark values are not supported, at present, when adding rows using keyset driven cursors in SQLBulkOperations(SQL_ADD).

When the SQL_ATTR_CONCURRENCY setting is SQL_CONCUR_READ_ONLY, then SQLBulkOperations(SQL_ADD, SQL_UPDATE_BY_BOOKMARK, or SQL_DELETE_BY_BOOKMARK) returns an error (HY092). This is the setting for static cursors so, beginning with version 8.0, they can no longer be used to obtain bookmark values for SQL_ADD.

We now diagnose cases when SQLSetPos is called after SQLBulkOperations is called and before SQLFetchScroll or SQLFetch is called.

We no longer insert empty rows, in SQLSetPos(SQL_ADD), for those rows marked SQL_ROW_IGNORE using the row operation array.

We no longer ignore rows where the corresponding row status array value was SQL_ROW_NOROW.

We now set the row status array value to SQL_ROW_NOROW when a "row not found" erorr occurs in SQLBulkOperations(SQL_DELETE_BY_BOOKMARKS, SQL_UPDATE_BY_BOOKMARKS, SQL_FETCH_BY_BOOKMARKS). We no longer try to access bound column data in SQLBulkOperations(SQL_FETCH_BY_BOOKMARKS) when a "row not found" error occurs.

We fixed a problem when updating more than 1 row using SQLBulkOperations(SQL_UPDATE_BY_BOOKMARKS).

We fixed a problem when fetching more than 1 row using SQLBulkOperations(SQL_FETCH_BY_BOOKMARKS).

We no longer inspect the row operation array for SQL_ROW_IGNORE in SQLBulkOperations(SQL_ADD).

302400 A bug has been fixed that could have caused any of the following problems with dbmlsync when running on Windows CE:

1) Crashes

2) Hanging

3) failure to add messages to the message log

302410 Batch statements executed outside procedures, triggered the deletion of all cached plans. For example, when the following script was executed, the plans saved during the execution of the procedures 'proc1' and 'proc2' were all deleted after the message statement, (the MESSAGE statement is considered a batch). Now, only batch statements that change the plan cache, triggers the deletion of cache. In the example below, the cache plan is left unchanged after the message statement.

EXEC proc1;

EXEC proc2;

Message 'some message';

302457 If a query contained an IN predicate on a table which had an ORDER BY clause on another column, the rows could have been returned in an order that did not match the ORDER BY clause. For the rows to be mis-ordered, the following conditions must hold:

- An index is selected on the table to satisfy the IN predicate

- The IN predicate appears in the index before the column in the ORDER BY

For example, the following query could exhibit the problem if an index on T(a,b) was selected:

SELECT * FROM T WHERE T.a IN (1,2) AND T.b>3 ORDER BY T.b

This is now fixed.

302473 The server could have hung, with with 100% cpu utilization, if it attempted to delete a page from a table in a corrupt database. Now, the server will fail with assertion error 200608, (Corrupt links between pages {page id} and {page id} in table {table name} -- transaction rolled back), if mislinked table pages are detected.
302554 SQLColAttributes and SQLColAttribute would have returned the type as "char" for the following column types:

LONG VARCHAR

BINARY

VARBINARY

LONG VARBINARY

BIGINT

TINYINT

BIT

GUID

The correct type name is now returned.

302555 Calling the ODBC function SQLGetInfo() for SQL_OJ_CAPABILITIES would not have reported that "Full outer joins are supported" (SQL_OJ_FULL). SQL_OJ_FULL has now been added to the list of outer join capabilities.
302606 Support for the Borland compiler was missing in 8.0.x releases. In particular:

- compiling dbtools.h failed

- the dbtools and dblib import libraries (dbtlstb.lib and dblibtb.lib) were missing

- samples\asa\c\makeall.bat failed to build using the Borland compiler.

This has been fixed. Note that due to a limitation of newer Borland linkers, Borland compiler built Embedded SQL applications must now compile and link src\sqlcadat.c (in the Adaptive Server Anywhere install directory) into each Embedded SQL application. This is in addition to linking against dblibtb.lib.

302620 MobiLink synchronization was not working for the following three Japanese characters when used with a Japanese database (collation 932JPN):

0x8160 Wave Dash

0x8161 Double Vertical Line

0x817c Minus Sign

The has been fixed.

302635 It was possible for an INSERT statement, using the ON EXISTING UPDATE clause, to silently fail if the row it was attempting to modify was locked. This is now fixed.
302654 ActiveX for Ultralite for CE is now available for the Pocket PC 2002 Emulator (Intel 386 architecture).
302754 The below statement returns the error:

Msg 13829, Level 12, State 0:

ASA Error -823: OMNI cannot handle expressions involving remote tables inside

stored procedures

if exists( select 1 from test where id=1)and exists( select 1 from test where id=1)

print "toto"

go

302757 If a procedure, trigger, view or event handler was created with a trailing semi-colon, the preserved format of the object definition would have included the semi-colon as well. This would have resulted in an error if the database was later rebuilt. The semi-colon is now removed when the object is created. A workaround is to recreate the affected objects without the trailing semi-colon. The following queries can be used to find affected objects:

select * from SYS.SYSTABLE where substr(source,length(source),1) = ';'

select * from SYS.SYSPROCEDURE where substr(source,length(source),1) = ';'

select * from SYS.SYSTRIGGER where substr(source,length(source),1) = ';'

select * from SYS.SYSEVENT where substr(source,length(source),1) = ';'

302789 When an ActiveSync synchronization was initiated, the desktop provider would wait 30 seconds for a response from the client and would fail if it didn't receive it. This timeout value can now be set using a new -t flag when running dbasinst to register the ActiveSync provider. Here is a description of the -t flag from dbainst's new usage:

-t<n> the desktop provider should wait n seconds for a

response from the client before timing out; the

default is 30

dbasinst stores the timeout value in the registry under "HKEY_LOCAL_MACHINE\SOFTWARE\Sybase\MobiLink\ActiveSync Synchronization\Connection Timeout".

302812 In very rare situations, the server could have crashed while attempting to shutdown in response to a dbstop command with a connection string or when a client tried to disconnect normally. This is now fixed.
302822 If code executed in a user implemented shutdown listener called addShutdownListener() or removeShutdownListener() during shutdown, an exception could have apeared in the MobiLink output log and some shutdown listeners may not have been called at shutdown time. This is now fixed.
302905 The server would have crashed if a null expression was passed into a string parameter when calling an internal stored procedure. This is now fixed.
302917 When writing preserved syntax to the reload.sql file, no newline was added between the end of the object syntax and the 'preserve format' statement. This meant that if a procedure, trigger, view or event handler was created with a trailing comment, an error would occur when trying to rebuild the database. While this is now fixed, a workaround for the problem is to avoid placing a comment at the end of the object.
302923 When the stream connection string contained an invalid value for the "version" option (ie. anything other than "1.0" or "1.1"), or an invalid value for the "content_type" option (ie. anything other than "fixed" or "chunked"), the stream would have leaked a few bytes of memory. It was possible for synchronizations to succeed, even though the options are specified incorrectly. Both the HTTP and HTTPS streams were affected and are now fixed.
302925 Using a Database, Message Type or User property sheet to set a publisher's, consolidated user's or remote user's address for SQL Remote, would have removed any backslashes in the address unless they were doubled up. They needed to be double up each time a change was made to settings on the page of the property sheet. This has been fixed.
302927 Calling the 2.0 ODBC function:

SQLTransact(henv, SQL_NULL_HDBC, type);

where type = SQL_COMMIT or SQL_ROLLBACK and a NULL statement handle, would have failed to commit or roll back the transactions on all open connections associated with the enviroment handle. Similarly, calling the 3.0 ODBC function:

SQLEndTran(SQL_HANDLE_ENV, henv, type);

where type = SQL_COMMIT or SQL_ROLLBACK would also have failed to commit or roll back the transactions on all open connections associated with the enviroment handle. This is now fixed.

302936 It was possible that an application could have crashed, or failed to insert a row, when calling the rowset update function (or the AddNew and Update functions) in ADO. This has now been fixed.
302959 A query with a proxy table and an alias in the select list may have caused the server to crash or hang with 100% cpu utilization. This is now fixed.
302966 The Mobilink server, when using the HTTP or HTTPS stream, could have crashed on shutdown. On Windows, this would have left the Icon in the Task Bar. This is now fixed.
303048 A FOR statement in a stored procedure would have created string variables for date, time or timestamp expressions in the SELECT list of the FOR query, if the Return_date_time_as_string option was ON. Now, the variables are created with the same data types as the expressions.
303115 If a procedure had an OUT paramter of type binary, long binary, varchar or longvarchar then attempting to execute the procedure using the JDBC-ODBC bridge would not have worked. This problem has now been fixed.
303124 This change resolves a number of sporatically problems which could have been seen:

- failing to connect to the utility_db running on a network server

- failing to connect to a server while using a FILEDSN (or any ODBC DSN on UNIX)

For either of the above to have occurred, the file containing the utility_db's dba password (util_db.ini) or the FILEDSN, or the UNIX ODBC DSN must have had the following properties:

- the DSN being used was the last one in the file

- the last line of the DSN was the last line in the file

- the last line of the file was either not terminated, or terminated with a single line-feed char (i.e. not carriage-return/line-feed as on Windows platforms)

For example, the client could have failed to connect to the utility_db on the first attempt, but be successful if the exact same client connect string was specified a second (or third) time. Then if tried immediately again it could have failed again, etc.

This has been fixed, but a work-around is to add a blank line to the end of the file.

303136 When running on Windows CE dbmlsync would sometimes have failed a synchronization with the error message "Cannot load dbsock8.dll". Other DLL's, such as dbhttp8.dll, could also have reported as have failed to load. Once the error occurred it was likely to have occurred consistently until the device was reset. A new switch has been added to resolve this issue. The syntax of the new switch is -pd <dllname>;<dllname>;.... For example

-pd dbsock8.dll

-pd dbsock8.dll;dbhttp8.dll

To resolve the problem identify the communication protocols to be used by dbmlsync during this synchronization then use the -pd switch to preload the DLL's used for those protocols as follows

tcpip dbsock8.dll

http dbhttp8.dll

https dbhttps8.dll

We STRONGLY encourage everyone using dbmlsync on CE to use this switch even if they have not encountered the error.

303141 When dbmlsync was run using the DBSynchronizeLog entry point in the dbtools DLL, a crash could have resulted if an 8.0.2 or later version of the dbtool8.dll was used with an older version of the a_sync_db structure. The a_sync_db structure is used to pass parameters to the DBSynchronizeLog entry point. This problem has been fixed.
303208 If a procedure had an INOUT parameter, then executing the procedure using the JDBC-ODBC bridge would have resulted in an error.
303278 An INSERT ... SELECT statement, which contained a UNION involving a non-existent user-defined function, would have caused a server crash when executed. This problem has now been fixed and a "procedure not found" error message will now be returned.
303294 The server collects statistics on predicate selectivities during query execution and updates the existing column statistics accordingly. The server was missing some opportunities of lowering incorrect statistics when doing multi-column index scans. This problem has now been fixed.
303297 If a parameter or column was fetched as numeric and then retrieved as bigdecimal, the bridge fails to convert the value correctly. Ths problem has now been fixed.
303298 Synchronizations with HTTP 1.1 and nonpersistent connections through a proxy server could have failed. This is now fixed.
303302 Synchronizations using HTTP through a proxy server would have failed, if the proxy server changed the content encoding of the message body from fixed length to chunked. This is now fixed.
303304 Calling the ODBC function SQLGetInfo() for SQL_GROUP_BY, would have incorrectly returned the capability SQL_GB_NO_RELATION, (The columns in the GROUP BY clause and the SELECT list are not related). Now, the correct capability SQL_GB_GROUP_BY_CONTAINS_SELECT is returned, (The GROUP BY clause must contain all non-aggregated columns in the select list).
303370 An assertion failure such as:

102300: File associated with given page id is invalid or not open.

could have occurred when processing a query that skipped a string column that appeared on a continuation page. A continuation page is used for a row when a row does not fit entirely on one page. For example, this can occur if a column is added to an existing table.

303384 If a remote table A had two separate foreign key columns c1 and c2, both referencing table B. the sa_migrate system procedure would have attempted to import both foreign keys as a single foreign key relationship; ie (c1, c2) references B(p1,p1), resulting in the error "foreign key p1 already referenced". This problem has now been fixed.
303389 When looking up the selectivity estimates for a predicate on values currently out of range of the column histogram, the server could have used an inappropriate values, such as 0%. Now, the server handles these cases of selectivity look-ups and subsequent updates more appropriately.
303401 An server crash could have occurred if the following conditions were true:

- optimization logging was enabled

- the option LOG_DETAILED_PLANS was set to ON

- the query being logged was a complex statement

- the optimization strategy for the query was *not* being logged through the use of one of the PLAN() functions.

This is now fixed.

303402 The sa_migrate system procedure would have migrated indexes incorrectly. For example, given a table T with columns c1,c2,c3,c4,c5 with index i1 on column c1, and index i2 on columns c2 and c5. The generated indexes for the local table would have had two separate but identical indexes, i1 on columns c1,c2 and c5 and i2 on columns c1,c2 and c5. This problem has now been corrected.
303457 If a procedure, trigger, view or event handler contained a right brace character, the original source format for the object was not saved. The object would still have been created correctly and would function properly, but its appearance would be altered when viewed from Sybase Central. This has been fixed. A workaround is to remove the right brace character, if it appears only in a comment, or replace it with \x7d or CHAR(0x7d) if it appears within a string.
303563 If the SUBSTR function was used to obtain a substring of a LONG VARCHAR column and the third argument was not provided, a value of 32767 was used. The function worked correctly if the first argument was a variable. Now a value of 2147483647 is used. For expressions such as variables, where the string length is known when the expression is built, the actual string length will continue to be used as the third argument.
303576 The MobiLink server memory usage would have increased over time as synchronizations occurred, even if the synchronization did no processing. This has been corrected.
303602 When attempting a BACKUP DATABASE operation on Windows CE, the process would have failed with the error message:

IO Error 5 doing 'fstat' on file '<backup file name>'.

Ensure that all PC cards are inserted and that storage space is available.

Retry/Cancel.

This has been corrected.

303608 This change fixes a number of provider problems when used with PowerBuilder. Note that a PowerBuilder problem still exists which causes an error dialog when creating catalog tables when connecting to a Database Profile from PowerBuilder for the first time.

The problems fixed include:

1. IDBInitialize::Initialize no longer requires the Data Source property (DBPROP_INIT_DATASOURCE). Before this fix, all connection properties were ignored if there was no Data Source property and the OLE DB driver prompted for connection information.

2. IOpenRowset::OpenRowset was not correctly using passed in properties to determine cursor type & updatability. This also affects ITableDefinition::CreateTable if ppRowset is not NULL.

3. IColumnInfo::GetColumnInfo now only includes bookmark column info if bookmarks are enabled on the rowset.

4. IRowsetUpdate::Update now allows non-NULL pcRows and NULL prgRows. This affects 8.0.0 and up only, since the 7.0.4 OLE DB provider did not give an error in this case. (The Microsoft MSDN Documentation states that this is an error, but I expect that Microsoft OLE DB drivers actually allow this).

303630 On Windows platforms other than CE, if no environment variable was set to define the location for ASA temporary files, a database could not have been started. The temporary file will now be created in the directory where the server was started.
303656 The JDBC-ODBC bridge did not properly handle OUT parameters of type TIME, DATE and TIMESTAMP. Sometimes a strange error message may have been thrown when retrieving the OUT paramter, while at other times an unexpected result would have been retrieved. This problem has been fixed.
303657 When using the JDBC-ODBC bridge, if a parameter was of type INT, SMALLINT, TINYINT, BIGINT, BIT, REAL, DOUBLE or FLOAT and had the value NULL, then calling getObject would have returned the value 0 instead of returning a null object. This problem has now been

fixed.

303704 Pressing F1 to launch the context-sensitive help would have caused a stack trace. This was due to an incompatible help file which was shipped with the EBFs. This has now been corrected.
303715 If dbmlsync was scanning an operation in the log file and all the following were true:

- The operation is on a table in the publication

- The where clause in the publication excludes this operation from being sent

- No further operation in the log file on this row caused this operation to be ynchronized

then in rare circumstances, it was possible for dbmlsync to have generated an invalid upload stream. This would most likely be seen as a "Protocol Error" in the Mobilink server. This has been fixed.

303735 If MobiLink Monitor was started from the Start menu or from a command prompt in a root folder (such as C:\) then the default autosave file name would have had double slashes (such as C:\\autosave.mlm). Also, the Browse dialog would have opened in the user's home folder, rather than with the file specified in the text box. These problems have been fixed.
303784 The system procedure xp_stopmail would always have had a returncode of 16 (invalid session handle), even if the previous calls to xp_startmail and xp_sendmail succeeded. While this problem is now fixed, it would only have appeared on databases created by ASA 7.0.4 build 3386 or later. Databases created by earlier versions of ASA should not exhibit this problem.
303869 The Str() function was converting a decimal value to a string incorrectly. This has now been corrected.
303920 When the progress offset in the consolidated database differs from that in the remote database, the MobiLink server will send the consolidated database progress offsets to the remote and ask that it synchronize again, and then waits. However, if the requested offset was too small (old logs had been deleted), or too big (log offset had not been generated), or the offset was in the middle of a log operation, DBMLSync would display an

error, ignore the synchronization request and abort the synchronization. Then the MobiLink server would generate the error "Unable to read from the 'tcpip' (or 'http') network connection". Now if DBMLsync cannot find the requested offset, it sends the MobiLink server an empty upload stream (an upload without any actually user data), plus an error message. The MobiLink server will display this error message and abort the synchronization.

303926 As of version 8.0.2 the cipher used to encrypt the data stream was changed from Certicom_tls to ECC_tls. For the Mobilink server, both names were kept for backwards compatibility, however this was not done for Ultralite. The documentation currently reads:

"For Hotsync and Scoutsync, the stream parameters need to be specified in the stream parameters in much the same way as for Adaptive Server Anywhere MobiLink clients. The format is:

security=cipher{ keyword=value;... }

where cipher must be certicom_tls... "

This should have read as:

"where cipher must be ecc_tls..."

For backwards compatibility, ecc_tls can also be specified as certicom_tls.

304034 Inserting into a proxy table would have caused a server crash, if the INSERT statement used the ON EXISTING UPDATE clause. The ON EXISTING UPDATE clause is not supported when inserting into proxy tables and will now cause a syntax error.
304086 When using the JDBC-ODBC bridge, a race condition could have occurred when calling the following methods, if JDBC objects created on the same connection were used concurrently on different threads:

- IStatement.getColStrAttr

- IResultSetMetaData.getCatalogName

- IResultSetMetaData.getColumnLabel

- IResultSetMetaData.getColumnName

- IResultSetMetaData.getColumnTypeName

- IResultSetMetaData.getSchemaName

- IResultSetMetaData.getTableName

This could have resulted in wrong results or crashes. The problem is now fixed

304151 Executing an ALTER EVENT statement, to delete an event handler, was not setting the "source" column in the SYSEVENT table to NULL. This is now fixed.
304202 On Unix platforms, when editing table data in Sybase Central, (or dbisql), pressing the TAB (or SHIFT-TAB) key would have resulted in the focus moving over two cells instead of just one. This has now been fixed.
304242 Some long messages displayed by dbisql, (or Sybase Central), would not have been properly word wrapped when running on Unix platforms. Instead, the entire message would appear on one line which would be truncated. Long messages now word wrop correctly.
304250 The STUFF function did not work properly on strings containing multibyte characters. It now handles MBCS strings correctly.
304262 If more than about 200 characters were specified in the parameters text area of a service's property sheet, then the next time the property sheet was opened, the parameters would be empty. This has been fixed.
304465 The system procedures sp_tsql_environment and sp_reset_tsql_environment were setting options using option names that did not match the case in the SYSOPTION system table. This caused problems with databases created with certain collations. These procedures have now been changed to use option names with a case matching those in the SYSOPTION table.
304478 When connecting to a busy Mobilink server using HTTP or HTTPS, the communication error 65 (Unable to connect a socket) could have occurred. A failed connect attempt caused an error condition to be set that prevented retries. This has been corrected.
304495 When using DBISQL and the JDBC-ODBC bridge any attempts to execute a batch with variying multiple result sets would have failed. For example:

begin

select 1,2;

select 3

end

This problem has now been fixed.

304512 When an offline transaction log ended with a zero-byte string for the last valid log operation, SQL Remote could have reported "Log operation at offset X0 has bad data at offset X1" (where X1 > X0 ), if this last log operation was on the last log page, or "Transaction log file file_name1 overlaps with log file file_name2", if this last log operation was not on the last log page (log files contain one or more unused pages).

This problem could have happened in DBMLSync and DBLTM as well. The problem has been fixed.

304559 When attempting to change the list of filtered owners for a WIN_LATIN5 (Turkish) database, the error "ASA Error -143: Column '@p0' not found" would have been displayed. This has been fixed.
304584 Starting the Mobilink server with two instances of an HTTP based stream could have caused the stream to behave erratically. This is now fixed.

For example:

dbmlsrv8 -c ... -x http {port=22222} -x http {port=88888}

304604 Queries containing FULL OUTER JOINs and at least five (5) quantifiers may have suffered from a poor access plan. In particular, in such cases the ASA optimizer would only have considered nested-loop full outer join (JNLFO) for each FULL OUTER JOIN in the query.

This problem has been corrected.

304698 If the 8.0 ASAprov oledb provider was used to connect to a database running on an ASA 7.0 server or the codepage for the database character set was not installed, the connection will fail with the error:

"The system does not support conversion between Unicode and the requested character set, substituting the current ansi codepage".

This is now treated as a warning instead of an error.

304715 If errors occurred during upload DELETEs (for example, deleting rows that do not exist in the consolidated database) and the MobiLink server was running in a multiple-row mode (the command line switch -s X was used with X > 1 or no -s was specified), it may not have updated the progress offset in the consolidated database, but it would have informed the client to update the progress offset in the remote database. Therefore, the progress offset in the consolidated database would have been smaller than that in the remote database after the synchronization. In the next synchronization, DBMLsync would have complained with the error "mismatch progress offset" and then uploaded the transactions that have been uploaded in previous synchronization again, if all the previous transaction

log files were still available. However, if "Delete_old_logs" was on in the remote database, the previous transaction log files may have been deleted, and then DBMLsync would have complained with "missing transaction log(s) before file log_file_name". These problems are now fixed.

304766 If the connection that was used for processing incoming messages was dropped, SQL Remote

for ASA would have gone into an infinite loop display the error: "SQL statement failed: (-101) Not connected to a database". The errors SQLE_CONNECTION_TERMINATED and SQLE_NOT_CONNECTED were not handled properly. This problem is now fixed.

304839 Using the dbunload utility with the -ar (or -an) and -o <outputfile> command line options would successfully have rebuilt a database, but the output messages would still have appeared on the console and not have been placed in the specified output file. This is now fixed.
304918 Attempting to call a Java method immediately after upgrading a database to add Java support, caused a misleading error message "not a public Java class." The documentation of the ALTER command states "If you add Java in the database, you must restart the database before it can be used." BUT this could be missed while working through the "Invoice sample." The message has been changed to now say "The database needs to be restarted for this Java related command."
304950 During a ULSynchronize call, the ul_synch_info output fields were not necessarily set. This would only have been a problem if ULInitSynchInfo was not called before each synchronization (because ULInitSynchInfo clears all output fields), but the documentation did not explicitly state this was a requirement. Now all output fields are always set, so it's possible to call ULSynchronize twice without an intermediate ULInitSynchInfo call if desired.
304960 When making a connection to an ASA remote server, via ODBC, the Remote Data Access layer now names the remote connection ASACIS_? where "?" gets replaced with the connection id of the local connection. This feature is useful if a customer needs to drop the remote connection in order to cancel a remote request.
304975 When attempting to create a proxy table to a MS SQL Server table that had a uniqueidentifier column, the Remote Data Access layer would fail with an unsupported datatype error. As of this change, the proxy table now successfully gets created with the uniqueidentifier column being mapped to a local column with a user-defined data type of uniqueidentifierstr, who's base thpe is char(36). Hence querying the uniqueidentifierstr column will force the SQL Server ODBC driver to convert the uniqueidentifier column to a string. Users can then use strtouuid to map the uniqueidentifiersrt to a uniqueidentifier. The sa_migrate scripts have also been modified such that migrating a SQL Server table with a uniqueidentifier column will result in creating a base table that also has a uniqueidentifier column. The migrate scripts will handle converting the uniqueidentifiersrt to a uniqueidentifier prior to inserting the value into the base table.
305093 Dbmlsync would have incorrectly deleted rows from the download stream which had NULL foreign key values, if all of the following were true:

- table T contained a foreign key and one or more of the columns of row R involved in the FK was NULL.

- another row, R2, existed in the download stream that dbmlsync had to delete, due to a legitimate RI violation, involving the same foreign key in which R had a NULL value.

This behaviour has been corrected.

305107 When the provider copied column values to its data buffer, a column could have been partially overwritten by a subsequent column, if an intervening column was the empty string. This has been fixed.
305153 If an integrated logon was invalid (ie the logon request was coming from a machine on a different domain and cannot be properly verified) then the connection would seem to have succeeded even though the client would eventually time out. The problem has been resolved and a proper error message is now returned immediately.
305297 When rebuilding a database into a new database with a different collation, statistics for string columns will no longer be reloaded
305313 The database server could report a "Fatal error: database error" when a sequential scan was being performed on a temporary table using group reads (which requires a database initialized with 8.0.0 or later and the table must be 'large'). The problem would have occurred very infrequently and would only have occurred if the temporary table pages were located near the end of the temporary file. This problem has now been fixed.
305412 If a blob column was updated using oledb (eg. through ADO cursors ), the ASA provider could have crashed. This is now fixed.
305454 When positioning to the last row in a result set containing only 1 row, the RowCount value reported would have been 0, when it should have been 1. This could have occurred using SQLExtendedFetch() or SQLFetchScroll() with a FetchOrientation of SQL_FETCH_LAST, or with the RDO MoveLast, and a result set with exactly one row.

The problem has been fixed.

305469 In dbmlsync, when the sp_hook_dbmlsync_download_end hook was called, an extra entry with the name 'continue' was being added to the #hook_dict table. The value for this entry was alway FALSE. The entry was unintentional, undocumented and has now been removed.
305477 Database scripts that took longer then the 'contd_timeout' setting could have caused the HTTP link to time-out a connection, which would have caused the synchronization to fail. This has been fixed.
305487 The Import Wizard could have failed to import a file if all of the following conditions were true:

- data was being imported into a new table (i.e. the table did not exist before running the Import Wizard),

- the file being imported was ASCII, FIXED, or SQL,

- the name of a column was changed from the defaults ("Column1", "Column2", etc.)

The wizard would have failed with a message saying that Column1 (or whatever the original column name was) could not be found. This problem has now been corrected.

305551 A new command line switch, "-vp -- show progress offsets", has been added to the MobiLink server. With this command line switch, (-v+ may also be used), the MobiLink server will log the consolidated and remote progress offsets in its output file for each publication in every synchronization. The publications may include those that are explicitly involved in the current synchronization, as well as the ones that are not explicitly involved, but are in the same remote database. If the consolidated progress offsets do not match the remote progress offsets, the MobiLink server will print these offsets in its output file, no matter whether this switch is used or not.
305568 Since 8.0.0 we have shipped dbtool8.dll and dbmlsync.exe for CE. The dbtool8 DLL contained most of the logic for dbmlsync and the executable just did command line processing, then called the DLL. The dbmlsync executable is now linked against a static library containing the same code that goes into dbtool8.dll, resulting in an executable that no longer depends on the DLL and consumes about 240K less memory.

The dbtool8 DLL for CE will continue to be shipped, as it is required by dbremote and can be used through the dbtools interface to programatically access dbmlsync's functionality

305630 When run against a database initialized with a Turkish collation sequence, dbmlsync would have failed to initialize the TCPIP communication stream. The error returned would be: "Invalid communication type: 'tcp齪'". TCPIP should now initalize correctly.
305634 When building the upload stream dbmlsync may have displayed a message box with the caption "Assertion Failure" and the text "File 'mergeupd.c' at line #873. Try to enter debugger?", (the line number in the text of the message might have varied). This message would have been reported if the extended option SendTriggers was set to 'off' (this is the default), a row that belonged to one of the publications being synchronized was deleted, then inserted inside of a trigger then deleted again. This has now been fixed.
305678 A request to a remote server, that is taking a long time, can now be cancelled provided the remote class is ODBC based. If the cancellation is successful, control will be returned to the client with an appropriate error message; if on the other hand the request can not be cancelled, then the engine will continue to wait until the request completes.
305784 When building an upload, if dbmlsync encountered a certain sequence of operations for a row being uploaded, it could have uploaded an incorrect operation on that row, created an invalid upload stream, or displayed a message box with the caption "Assertion Failure" and the text "File 'mergeupd.c' at line #873. Try to enter debugger?". The line number in the text of the message would have varied.

The sequences that could have caused this problem were, (although it might not reproduce consistently):

- insert a row R, stop synchronization delete, delete row R, start synchronization delete, insert a row with the same primary key as R

- if the dbmlsync extended option "SendTriggers" was off, insert a row R, delete row R inside of a trigger, insert a row with the same primary key as R

- if the dbmlsync extended option "SendTriggers" was off, insert a row R, update row R inside trigger so that it belonged to no publication, update row R so that it again belongs to the publication

This is now fixed.

305817 Pressing the ESCAPE key while a menu was open did not close it. Now it does.
305860 If a result set had a column of type unsigned smallint, unsigned int or unsigned bigint, and the value of the column was greater than the largest smallint, int or bigint (respectively), then retrieving the column using the ASA JDBC-ODBC bridge would have resulted in a "value out of range error". This problem has now been fixed.
305871 If an attempt is made to execute a SQL statement after disconnecting from a database, dbisql will attempt to reopen the connection and execute the statement. This reopening of the connection would have failed if the connection auto-started the . That is, if a DSN, FDSN, or DBF connection parameter was given. This has now been fixed.
305885 If a connection belonging to the plug-in was closed outside of Sybase Central, either due to a DROP CONNECTION statement being executed on another connection or the server being shutdown, the error "Connection already closed" would have been displayed on subsequent attempts to execute a statement and the user was required to explicitly disconnect the already closed connection. Now, when a closed connection exception is detected, the connection is automatically removed from the plug-in's list of registered connections. In addition, any other connections to databases on the same server are tested to see whether the connections are still open. Note that closed connections are only removed if the main viewer window has focus and there are no unsaved changes. If a property sheet, wizard or dialog is opened, then the closed connection messages will continue to be

displayed until the main viewer window is active again.

305902 It was possible that any of the following commands could have written the OPTION clause incorrectly to the database:

CREATE SYNCHRONIZATION USER, ALTER SYNCHRONIZATION USER, CREATE

SYNCHRONIZATION SUBSCRIPTION, ALTER SYNCHRONIZATION SUBSCRIPTION, CREATE

SYNCHRONIZATION SITE, ALTER SYNCHRONIZATION SITE, CREATE SYNCHRONIZATION

DEFINITION, ALTER SYNCHRONIZATION DEFINITION, CREATE SYNCHRONIZATION

TEMPLATE, ALTER SYNCHRONIZATION TEMPLATE.

This has now been fixed.

305913 If the following procedure was created using Sybase Central, a syntax error would result when trying to rebuild the database:

create procedure mytest() as

select 1

go

Note that the procedure ends with a SELECT statement having no FROM clause. The server treats the "go" as an alias for the last SELECT list item; otherwise, a syntax error would be given when trying to save the procedure definition in Sybase Central. The "go" is included in the preserved-source string and causes a syntax error on rebuild.This problem is similar to issue 302757. The trailing "go" is now removed when saving the procedure definition.

.

305936 Clicking the window close button, (the title bar button with an "X" in it), would not have closed the dialogs listed below:

- the dialog which reports errors in SQL statements

- the data prompt dialog used for the INPUT ... PROMPT statement.

This has been fixed now so that the dialogs close.

306021 An isolation level 3 scan could have returned null values unexpectedly. This is now fixed.
306023 The ASAProv OLEDB provider could have failed when accessed by multiple threads concurrently, with failures more likely to have occurred on multi processor machines than single processor machines. One instance of this failure was the error DB_E_BADTYPENAME(0x80040E30) from ICommandWithParameters::SetParameterInfo. This is now fixed.
306063 Inserting a row could have caused assertion 200601. This would only occur when doing an insert using the 'ON EXISTING UPDATE' clause. The row being inserted must not have been in the table (ie. no update happened). The table to which the row was being inserted also needed to have been involved in replication for the assertion to occur. The resulting database file was not corrupt. This has been fixed.
306120 When creating a column in the UltraLite schema painter, if the default value chosen was not compatible with the column datatype chosen, the schema painter would have issued an uninformative error message. It now indicates that the column type and the default do not match.
306122 When creating an index with the UltraLite Schema Painter, if an index name was specified that already existed, the existing one was over written without warning.  The index creation dialog now prevents a user from creating an index with the name of an existing index.
306125 With ANSI_INTEGER_OVERFLOW set to 'on', select 470488670*16 would have returned -1062115872 on Unix platforms. This has been corrected so that the behaviour is to return an overflow error.
306131 When a table is added to a Mobilink consolidated database, it is assigned a unique tableid. Scripts created to work on this table will use this tableid when loaded from the database. If the tableid had a value greater than 65535, it was possible that the script would not have loaded, or the wrong script would have been loaded. This has been corrected.
306135 It was difficult to enter the following types of numbers as values when editing a table in the "Results Pane":

- Negative numbers (e.g. "-123")

- Real numbers that began with a decimal point (e.g. ".123")

- Numbers in exponential notation (e.g. "1.23e2")

For example, typing the number -123, would have caused a beep when the "-" was typed and would not have allowed it to be entered in the editing box for the table data. A workaround for this was to type the number without the minus signt, then add the minus sign after. This bug affects ASA plug-in for Sybase Central as well. This is now fixed in both dbisql and Sybase Central.

306157 If a user disconnected from Sybase Central, which had been connected to a database server via the JDBC-ODBC bridge, and had selected from a table and viewed its data, Sybase Central would have quietly exited. This problem has now been fixed.
306170 In a Visual Basic RDO application, when updating columns in a result set, the updates fail after the first rowset has been processed. A MoveNext would fail with an error "Not Enough fields allocated in SQLDA". The problem has been fixed.
306179 When used on the dbping command-line, the -o switch was not being parsed correctly. Therefore, instead of sending its output to a file, dbping -o would display the usage message. This has been corrected.
306204 The UltraLite Schema Painter would not have properly updated the icons for columns in the primary key, if the operation was cancelled.

For example:

- Edit an existing table

- Alter the primary key by adding a column to it

- Cancel the editing of the table

Refreshing the application would make it appear as though the column that was added to the primary key (but should have been discarded) was in fact in the primary key. This has been fixed.

306233 The UltraLite Schema Painter would have displayed a meaningless error message when cancelling a save.

For example:

- Load a schema file

- Make a change to the schema file (add a column to a table for instance)

- Choose to create a new schema file and provide a filename

- When a message box informs that the previous schema must be closed choose OK.

- When a message box informs that the previous schema has changes that should be saved, click Cancel.

The error message indicated that a file already exists. It no longer displays that message but returns the user to the new schema file dialog.

306245 When altering a primary key for a table in the UltraLite Schema Painter, if the user pressed Cancel and then went to alter the key again, the columns that were added but cancelled appear to be back in the primary key. This has been fixed.
306301 When using multiple threads with UltraLite (and hence multiple connections), rows could have been lost or not visible, the database could have appeared corrupt, or synchronization could have failed. The incorrect connection number could have been used in any given call. This has been fixed.
306324 Attempting to create an event with a "WAIT AFTER END" clause would have crashed the server.

For example:

create event MyEvent

schedule MySchedule start time '10:00PM' on ('Thu','Fri')

handler

begin

backup database directory 'd:\\backup'

wait after end

transaction log truncate

end

This has now been fixed.

306336 If a function had a badly defined return statement as in the following case:

create function f() returns varchar(10)

begin

return systable.table_id;

end

then using the function would have resulted in a server crash. This problem has now been fixed and server will now return an appropriate error message.

306344 When calling the Mobilink system procedure ml_add_table_script on DB2 with a "null" script parameter value, it would have failed with the message: SQL4302N Java stored procedure or user-defined function "DB2ADMIN.ML_ADD_TABLE_SCRIPT", specific name "SQL021223140150845" aborted with an exception "[IBM][CLIDriver] CLI0115E SQLSTATE=38501". Note, the name "SQL021223140150845" may be different on different systems. Both ml_add_connection_script and ml_add_table_script had this bug, which has been fixed.
306467 Calling sa_get_eng_properties on a operating system platform with a large amount of memory, would have displayed properties like "MainHeapBytes" as a negative number. This can also be demonstrated by calling the property() function directly.

Example:

select property( 'MainHeapBytes' );

This has been fixed.

306470 Databases created with a 7.0.4.3407 server would have failed to start with any newer release of the server, (e.g., any 8.x server), with a "capability 27 missing" error.

This problem has now been fixed.

306474 If a blob column was updated using the ASA provider,(eg. through ADO cursors ), it could have crashed or updated the data incorrectly. This has been fixed.
306536 If a query contained a grouped subquery in the HAVING clause, and the grouped subquery referenced an aggregate function from the main query, then an incorrect result set may have been returned. This is now fixed.

The example below illustrates this issue: the subquery is a grouped query and the aggregate function "min(p.quantity)" is an aggregation that must be computed in the main query block:

select id

from product p

where quantity < 28

group by id

having ( select COUNT(*)

from product p1

where 28 >= min(p.quantity) ) > 0

306580 Queries with LIKE predicates containing a NULL escape character were being evaluated as if there was no escape character. Now LIKE predicates containing a NULL escape character evaluate to NULL. This new behaviour matches the ANSI standard.
306609 The following applies to UltraLite synchronization on the Palm using the HotSync conduit. When no synchronization stream parameters were specified by the application in the ul_synch_info passed to PalmExit, the conduit will check the registry as documented for parameters to use. If the registry contains no parameters, a default of tcpip to localhost is used.

Previously, specifying no synchronization stream parameters required setting ul_synch_info.stream_parms to NULL. Now, a setting of NULL or an empty string will cause the registry to be checked for parameters to use. If an application needs to force default parameters (overriding the registry), it should set ul_synch_info.stream_parms = "stream=tcpip;host=localhost";

306639 Executing a MESSAGE statement while in passthrough mode using DBISQL would have caused a server crash, if the DBISQL connection was made using jConnect. An error (-707 Statement is not allowed in passthrough mode) is now reported.
306643 When trying to create a new service, checking the properties of an existing service, or creating a new integrated login, it was possible to for Sybase Central to crash if a large number of local users were defined on the system. This is now fixed.
306763 If the TCPIP parameter MyIP, was not a valid IP address, (or the keyword NONE), (i.e. "-x tcpip(MyIP=mypcname)"), a value of 255.255.255.255 was used instead. This has been fixed, only IP addresses (in standard "dot notation") or the word "none" are allowed. Anything else will give an error on startup.
306920 If the following conditions were all true:

- the -x switch was specified on the dbmlsync command line

- the progress value on the remote was behind the progress value on the consolidated

- the LockTables extended option was set to 'off'

then dbmlsync would have failed to generate an upload and report the following error :

"No log operation at offset of n in the current transaction log" The number n would be the ending log offset of the current transaction log. This has been fixed.

306963 A query in which an ORDER BY DESC was satisfied with a trie-based index could have returned no rows, instead of the intended results. This could also have happened with an ORDER BY ASC, if it was satisfied with a descending index. This has now been fixed.
306988 Starting a server with both the -x tcpip(DoBroadcast=NO) and -sb 0 switches would have caused it to crash. This has been fixed.
307143 If a view or derived table was defined with a constant column and the constant column was equated with another constant in a query, the server may have crashed. This has been fixed. The example below illustrates this case, the column X is defined to be 0 in the derived table DT definition and it is equated with the constant 2 in the predicate "DT.X = 2":

create table #temp1 (X int);

insert into #temp1

select * from

( select X=0 from

product p1, product p2

where p1.id = p2.quantity ) AS DT(X)

where DT.X = 2

;

307157 If a join predicate is of the form "L.X = R.X" where L.X is a unique column, and R.X is not a foreign key column, then the estimated selectivity for the predicate "L.X = R.X" is now computed based on the number of distinct values of the column R.X. For this estimates to be close to the real selectivity, R.X must have an up-to-date histogram or an index on <R.X> must exist. Note, for an index to be useful, the database must have been created with an 8.0 2 or later server.
307174 When connected to a database via the JDBC-ODBC bridge, empty strings in LONG VARCHAR columns were displayed as NULL, rather than empty strings. This has been fixed.

This problem affected the ASA plug-in for Sybase Central as well.

307194 If a JAVA or .NET handler for the report_error event was defined and it used parameters and no script was defined for the handle_error event, Mobilink would report an error similar to: "Not enough arguments to execute script: "moderr.report_error". 5 arguments are needed only 0 are available.". This is now fixed.
307239 Specifying a File DSN as part of the connection string could have caused any of utilities to crash. This has been fixed.
307354 Under certain rare conditions, the "Get" functions generated by the C++ API would have been missing code fragments, resulting in compilation errors and/or erroneous results. This has now been fixed.
307381 Selecting the "Insert spaces" option in the editor's "Customize" dialog, would have been ignored, and would have been set back to "Keep tabs". This has been fixed.
307385 The MobiLink server could have crashed on shutdown. This was unlikely to have affected synchronizations. It has now been fixed.
307388 When a second MobiLink monitor attempted to connect, it would have received an "unable to read N bytes" error. It now will get an error indicating that another user is monitoring.
307415 When using the Remote Data Access feature to attempt to create a proxy table to a Microsoft Access database, the server may have failed with a "table not found message". This problem occurred when the file path of the Access database was longer than 63 characters. The problem has now been fixed.
307579 When attempting to drop a table, with the UltraLite schema painter, on a newly created schema file could have failed with SQLCODE 0. Attempting to drop the table again, would have properly dropped the table. This is now fixed so that the table is dropped on the first attempt.
307606 When upgrading to a new minor release of Adaptive Server Aanywhere, after having applied an EBF to the previous version where the EBF was newer than the minor version being installed, the performance counters could have failed to install correctly. During installation, the user may see an error message such as "unable to register dbctrs8.dll: -4".

For example, if a user installed 8.0.1 GA followed by 8.0.1.3080 EBF, then upgraded to 8.0.2 GA, the installation may fail because 8.0.1.3080 EBF is newer than 8.0.2GA.

This is now fixed, but the problem may be worked around by deleting the dbctrs8.ini and sqlactnm.h files in the win32 directory before installing 8.0.2 GA.

307615 The MobiLink option -vh dumps out the schema, but it didn't display the column names, it substituted the name with Column #n. This option has been improved. For clients that don't send the column names to MobiLink, the schema logging will be the same as before; but for clients that do send the column names, MobiLink will now substitute the column names in place of Column #n.
307751 If when executing a .SQL file using the READ statement, the file contained a CONNECT statement where the user name was a parameter to the .SQL file, and it was enclosed in double-quotation marks, the CONNECT statement would have failed.

For example, if the following statements were in a file called TEST.SQL:

PARAMETERS user_name;

GRANT CONNECT TO "{user_name}" IDENTIFIED BY "{user_name}";

GRANT DBA TO "{user_name}";

CONNECT USER "{user_name}";

and were executed by:

READ TEST.SQL [test]

an error would have occurred that the user "USER" did not exist. This has been fixed.

A workaround for the problem is to remove the quotation marks from the CONNECT statement.

307945 If a client application did not specify the CommLinks, (or LINKS), parameter in a connection string and links other than Shared Memory had already been used by the client application, then the running links were used instead of links=shmem. Now, not specifying the LINKS parameter is always the same as specifying links=shmem.

Note: if an ODBC data source only had the shared memory link selected, then no CommLinks parameter was specified on the connection.

307980 If a query used SELECT FIRST, the optimizer might have chosen a poor access plan; in particular, the optimizer might have made a poor choice of the index to use with a particular query. In the reported case, the customer had a query of the form

SELECT FIRST *

FROM base_table

WHERE <condition>

ORDER BY <indexed column>

In this case, the <condition> in the WHERE clause was highly selective, and could be used as a sargable predicate (that is, the engine could use an index on base_table). However, because of a costing error, the optimizer instead chose a plan utilizing the index on the column specified in the ORDER BY clause, a much more expensive choice in real terms.

This has now been fixed, but as a workaround, one could replace SELECT FIRST with SELECT TOP 1.

307991 When displaying data for views that referenced proxy tables, duplicate rows would have been shown, if the connection to the database was made using jConnect. This has been fixed so that the correct rows are now displayed.
308011 The server could have crashed after warning of a fatal error, (most likely due to an out of disk condition). This has been fixed.
308012 In the Create Database wizard, on the Collations page, there is an option to choose to create the database with the default collation, but the actual collation name was not displayed. Now it is.
308031 As an ASE compatibility feature, ASA was zero-padding binary strings for TDS connections, (ie jConnect). Since the ASA behaviour did not match ASE behaviour, (ASA zero-padded nullable strings, whereas ASE zero-padded not null strings), and zero-padding gave the impression that a zero-padded binary value was equivelent to a non zero-padded binary value in ASA, when in reality it was not, the zero-padding feature has now been removed. ASA will no longer zero-pad binary for a TDS connection.
308123 If a view contained a UNION and was defined with a SELECT *, which was no longer valid as columns had been added to the tables referenced in the view, a query referencing that view could have caused a server hang. This has been fixed.
308131 The UltraLite Schema Painter allows schema files to be read and stored as XML files. Loading a schema in XML format and saving it and then attempting to load another XML file (without shutting down the schema painter) would have caused an error message saying the file didn抰 exist or was invalid. This is fixed.

A workaround would be to shut down the Schema Painter after saving an XML file and start it up again to load another file.

308177 In rare cases, it was possible that the server could have crashed when a TCP or SPX connection was being dropped due to a liveness or idle timeout, or through use of the DROP CONNECTION statement. This would only have happened on Win32 platforms and has now been fixed.
308245 When function IRowsetLocate::GetRowAt was called to fetch result set rows using bookmarks; for static and keyset cursors, ASAProv may have missed a row due to an invalid offset for some bookmark values. This is now fixed.
308297 If a forward-only, read-only cursor was opened with a query that was optimized to use a merge join, then the error:

-187 "Illegal cursor operation attempt" 09W02

could have been returned. For example, this error would be returned when re-fetching the current row. This has now been fixed.

308323 If a SQL stored procedure was defined as an external java procedure and the access modifier for the java method was private, calling the stored procedure would have executed the method instead of giving an error. Now, the server will report a PROCEDURE_NOT_FOUND error when such procedure is called.
308327 UltraLite schemas created by the Schema Painter, or ulxml utility, would have had their case-sensitivity reversed. For case sensitive databases, when case should have been respected, it was ignored, and for case insensitive database, when case need not have been respected it was. This has been corrected.
308329 This change works around a problem in Codewarrior 6 and 7, where they would sometimes not handle compiling an application with an empty segment. This problem would have lead to an error while running the application, such as "Application has just read from low memory... ". A fix was put into a Codewarrior 7 patch, which was included in all versions of Codewarrior 8 and 9. The empty segment in the Codewarrior 7 Certicom runtime has been removed.
308330 Attempting to connect, using jConnect, to a UTF8 database using a userid which contained non-ASCII characters, would have failed. This has now been fixed.
308346 Table names were being duplicated in the table expression lists on the Joins page of the Query Editor. Table names should now only be listed once.
308347 If a client application did not specify the CommLinks or LINKS parameter in a connection string, and links other than Shared Memory had already been used by the client application, then the running links were used instead of links=shmem. Now not specifying the links connection parameter is always the same as specifying links=shmem. Note that if an ODBC data source only had the shared memory link selected, then no CommLinks parameter was specified on the connection.
308349 The QueryEditor would not have allowed an ORDER BY for the case were a table was being joined to itself and the same column from each aliased table was being used in the ORDER BY. This has now been corrected.

For example:

SELECT "m"."emp_lname", "e"."emp_lname"

FROM "DBA"."employee" AS m JOIN "DBA"."employee" AS e

ON "m"."emp_id" = "e"."manager_id"

ORDER BY "m"."emp_lname" ASC , "e"."emp_lname" ASC

308370 Entering a non-numberic value in the Go To Line dialog would have caused dbisql to crash. This is now fixed.
308372 When using the Find facility, the last character of last line was never found when the search direction was up. This is now fixed.
308440 Running 'TRUNCATE TABLE' on an already corrupted table could have resulted in other database objects also becoming corrupted and would only have happened in extrememly rare circumstances. 'VALIDATE TABLE' would have found the corruption both before and after the 'TRUNCATE TABLE' command. Assertion 200607 has now been added to catch this case.
308449 The ODBC driver may have occasionally reported the lengths of strings incorrectly, when dealing with multibyte character sets. The data was returned correctly, but the length would sometimes be too long. The length reported should now be correct.
308450 In version 8.0.1, the UltraLite schema information output by the analyzer was extended to support additional features, including sending column names to Mobilink. This resulted in more data segment usage by the generated code, possibly exceeding the Palm limitation of 64kb. The extended schema information for columns may now be omitted to decrease data segment usage. To enable this feature, define the preprocessor symbol UL_OMIT_COLUMN_INFO before compiling all generated files. (In CodeWarrior, this #define should be added to your prefix file; for PRCTools, use the -D option.)

Note: when this feature is enabled, the following features are not available and must not be used:

- send_column_names synchronization parameter

- schema upgrades (applies to 8.0.2 and later)

308453 For Palm applications, the ULSEGDB segment output by the analyzer contains row management code for all tables. If an application had a large number of tables, the ULSEGDB segment may have exceeded the maximum size of 64k. A workaround when this occurs is to edit the generated file and insert extra segments manually.

The analyzer now outputs optional segment divisions within ULSEGDB code which are enabled individually by defining a corresponding preprocessor symbol. There is an optional segment division at each table. The segments are named ULSTn where n is an integer (the table number), and each is activated by defining UL_ENABLE_SEGMENT_ULSTn.

For example, suppose an application has 5 tables. The generated code will resemble:

start ULSEGDB segment

start ULST1 segment (if UL_ENABLE_SEGMENT_ULST1 defined)

<code for first table>

start ULST2 segment (if UL_ENABLE_SEGMENT_ULST2 defined)

<code for second table>

...

start ULST5 segment (if UL_ENABLE_SEGMENT_ULST5 defined)

<code for fifth table>

Defining only UL_ENABLE_SEGMENT_ULST4 will leave tables 1 through 3 in ULSEGDB but put tables 4 and 5 into ULST4.

Extra segments should be enabled as required to avoid exceeding the segment maximum size. Note also this assumes generated code segments have been enabled by defining UL_ENABLE_SEGMENTS (and UL_ENABLE_GNU_SEGMENTS if applicable). In CodeWarrior, these #defines should be added to the prefix file; for PRCTools, use the -D option.

308507 When connected to a database via the JDBC-ODBC bridge, the "Auto commit" option was implicitly on all the time, so that a commit was being done after every statement. This has been fixed so that commits are now implicitly done only if the "Auto_commit" option is "On".

This problem did not affect connections that used jConnect.

308527 If a database was initialized with the blank padding option, (dbinit -b), it was impossible for dbmlsync to hover at the end of the transaction log. This has now been fixed.
308632 Adaptive Server Anywhere allows one index on a table to be specified as clustered. This specification can now be changed via the ALTER INDEX statement without the need to recreate the index. Note that this statement only changes the specification of the index but does not reorganize the data. So, if the clustered index on a table is changed, then depending upon the key composition for the old and the new clustered index, the data may no longer be clustered on the new clustered index. Remember that the clustering of an index in ASA is only a hint to the server and the clustering of data is not guaranteed. However, if so desired, clustering can be restored by using the REORGANIZE TABLE statement.
308639 When the server running a remote database encountered an error during download, and the MobiLink server was expecting a download acknowledgement, there would have been extra communication errors in the MobiLink log. The first error would have been "Download failed with client error -NNN", and then spurious communication errors would have followed. This has now been fixed.
308663 If the option wait_for_commit was on, it was possible to commit a transaction that had inserted a foreign key with no matching primary key. For this to have happened, all of the following conditions must hold:

- the foreign key in question must have been larger than any existing primary key,

- another transaction (also with the wait_for_commit option on) must have inserted the same foreign key before the first transaction commited, and must have done so while the foreign key was greater than any existing primary key,

- between the two foreign key insertions, enough primary keys must have been added to fill the last leaf page and at least one of these keys must be subsequently deleted (before the second foreign key insertion).

- the index used to enforce the constraint must have been a uncombined (split) comparision-based index.

This has now been fixed.

308693 When the name of a file was entered in the "Database File" field on the "Database" page of the "Connect" dialog, and then the ESCAPE key was pressed while the "Database File" field still had focus, an internal error would have occurred.

This has been fixed.

This problem also affected the ASA plug-in for Sybase Central, the Stored Procedure Debugger, and DBConsole.

308770 If the length of the view's name in a CREATE VIEW statement exceeded 119 bytes, the server would have crashed. Now names of up to 128 bytes are allowed. If the size of the name is over 128 bytes, the error 'Identifier ... too long' will be reported.
308815 The UltraLite Schema Painter would have given a warning if an attempt was made to create a table with a name that was already in use. Clicking OK on the error message and providing a new name for the table would have caused the Schema Painter to crash. This is now fixed.
308830 Command line options have been added to the MobiLink Monitor so that it can open a file or connect to a MobiLink server on startup. This allows for file associations to be setup for MLM files or have the Monitor connect to a MobiLink server, then close and save results to a file when disconnected (either from the GUI or from the the MobiLink server shutting down). The following command will show the options: dbmlmon -?
308844 The dbtsinfo utility would have always displayed NULL for a database property called PatriciaTrees. This property had been replaced by one called CompressedBTrees, but dbtsinfo continued to refer to the old name. This is now fixed.
308847 If an attempt to connect failed, an error dialog with a "Show Details" button appeared. Clicking this button shows a summary of the connection parameters used in the attempt. Prior to this fix, the user name and password were displayed twice and the password was shown in clear text. Now the user name and password appear only once and the password is displayed as a series of asterisks.
308855 When connecting to an authenticated ASA remote server using Remote Data Access, the connection would not have been auto-authenticated. As a result, the connection would become read only after the 30 second time out. This problem has now been resolved and all connections to ASA remotes are now auto-authenticated. Note that the Remote Data Access class must be either asaodbc or asajdbc.
308876 If CHAINED was set to off (as is the default with TDS connections) and a statement was closed, then all locks were not released even though they should have been. This problem has now been fixed.
308965 A new option, OPTIMISTIC_WAIT_FOR_COMMIT, has been added to aid in migrating 5.x applications to 8.x. By default, OPTIMISTIC_WAIT_FOR_COMMIT is 'off', when it is set to 'on' locking behaviour when WAIT_FOR_COMMIT='on' is changed as follows:

- no locks are placed on primary key rows when adding an orphan (fk row with no matching pk row)

- if a transaction adds a primary row, it will be allowed to commit only if the transaction has exclusive locks on all foreign rows that reference the primary row at the time the primary row is added.

This option is meant to mimic 5.x locking behaviour when transactions add foreign rows before primary rows (with the proviso that no two transactions concurrently add foreign rows with the same key value). Note that this option is not recommended for general use as there are a number of scenarios in which transactions will (counterintuitively) not be allowed to commit, including:

- if transactions concurrently add foreign rows with the same key value when the primary row does not exist, at most 1 of the transactions will be allowed to commit (the one that adds the corresponding primary row).

- if a transaction deletes a primary row and then adds it back, it likely will not be allowed to commit (unless it has somehow obtained exclusive locks on all of the matching foreign rows).

308999 Clicking the Help button while in the Query Editor, would have done nothing. It now correctly displays the help screen.
309015 When an event is executed, it runs on its own connection. If an event connection was dropped (either from Sybase Central or using the DROP CONNECTION statement), the server would have crashed, if it had been started with the -z switch. This has now been fixed.
309074 When connected via the JDBC-ODBC bridge, if an output parameter was registered as DECIMAL and then subsequently fetched using getBigDecimal, the bridge would have thrown a "Rounding Necessary" error, instead of properly returning the output parameter. This is now fixed.
309181 Inserting a new row into a table, (via right-clicking Results pane a selecting "Add"), which contained a BIT column, would have inserted the wrong BIT value in the following were true:

- if the BIT value had a default of "1", and

- if the BIT value was not explicitly set by the user, and

- connected using jConnect.

This has been fixed. This bug affected the table "Data" panel in the Adaptive Server Anywhere plug-in for Sybase Central as well.

309290 An UPDATE statement of the form:

update Employee e

set e.emp_fname ('x')

where:

- the column to be updated was qualified with a correlation name

- the "=" was missing

- the expression being assigned was enclosed in parentheses

would result in a server crash. An error (Set clause for column 'a' used incorrectly) will now be reported.

309294 When specifying connection parameters, if one of them was the "Encryption" parameter and it had an incorrect value, then an unhelpful error message is reported.

Example:

LINKS=TCPIP;ENC=ECC-TLS(trusted_certificates=sample.crt)

would have displayed the following message:

Parse error: Bad value near ''

This has been fixed. The following message is now displayed:

Parse error: Bad value near 'ECC-TLS(trusted_certificates=sample.crt)'

309296 In the presence of concurrent DDL or LOCK TABLE operations, it was possible to commit a transaction that had inserted a foreign key with no matching primary key. For this to have occurred, all of the following conditions must have been true:

- the committing transaction must have deleted a primary row for which there were foreign references

- another transaction must have had the foreign table's schema locked exclusively (via DDL or LOCK TABLE)

- the DDL or LOCK TABLE operation must have been the first use of the foreign table since it was loaded

- the committing transaction must have had blocking off (or possibly be involved in a deadlock)

- the index used to enforce the constraint must have been an uncombined (split) index.

This problem, which could also have resulted in a server crash, is now fixed.

309298 When using SQLGetData to fetch Unicode strings, the indicator could occasionally have been incorrect, multiple columns were being fetched from the same row, and if the strings were being fetched in pieces. This has been fixed.
309299 When the database store was set as in-memory (ie no persistent file), Java UltraLite would have experienced corrupted temp table when doing updates. This is now fixed.
309350 When trying to view the table data for a proxy table, if the data could not be retrieved because the userid or password for the remote database was no longer valid, the "Add" (row) toolbar button and context menu items were still enabled. This was inappropriate, and could have caused an internal error if clicked.

This has been fixed; the toolbar buttons and menu items in the context menu are now properly enabled.

309512 The error and warning counts passed to the following scripts:

upload_statistics

download_statistics

synchronization_statistics

could have been wrong. The most likely wrong value was one that was non-zero when it should have been zero. Less likely, the counts could have been smaller than expected. Similarly, the error and warning counts displayed by the MobiLink Monitor could also have been wrong. This has ben fixed.

309611 If a column having a default value was modified using Sybase Central to remove the default, the catalog change would have been made immediately, but inserts into the table would continue to use the default until the database was restarted. This has now been fixed.
309620 If a file selected via the "File/Run Script" menu item, was in a directory starting with the letter "n" (e.g. "c:\new\test.sql"), and the platform was Windows, a file not found error would have occurred. This has now been fixed.
309628 When fetching data via ASAProv from a database which used a multibyte collation, and charset conversion was requested, the returned length of the converted string was not set correctly. This could have caused unintended behaviour in ADO applications. This is now fixed.
309653 Executing an UPDATE WHERE CURRENT OF cursor statement in a batch or stored procedure would have caused the server to hang, if the cursor was not updateable and ansi_update_constraints was on. This is now fixed.
309658 Database validation would fail to recognize missing entries in a PK with respect to a FK. Validation was not finding missing entries in a primary key when checking a foreign key. As a result, it was possible to get referential integrity violations while rebuilding a database or index even though validation showed the database was fine. The validation now occurs as documented. That is, for foreign key indexes, validation ensures that the corresponding row exists in the primary table. As a result of this change, database validation may now take longer.
309682 When starting the MobiLink Notifier in an environment where the default locale language was either German or French, would have caused the exception "java.util.MissingResourceException". This problem is now fixed. A workaround is to execute java.util.Locale.setDefault( new Locale( "en" ) ) in a static initializer in the first class listed in the StartClasses or by some other mean for changing the default locale for the JVM instance (e.g. setting System.properties in java code or using the -D switch. Please see, Sun's documentation)
309847 An expression such as "x LIKE y" would have caused the server to crash if 'y' evaluated to a string longer than the database page size (approximately). Now, the server will report the error, SQLSTATE_PATTERN_TOO_LONG if 'y' is longer than one page.
310019 The returned value for SQL_DBMS_VER was only displaying the major version of the server that the driver was connected to. For example, for ASA 7.0.4, the string returned was "07.00.0000" and, for Adaptive Server IQ 12.4.3, the string "12.00.0000" was returned.

This has been corrected. For Adaptive Server Anywhere version 7.0.4 the string returned for SQL_DBMS_VER is now "07.00.0004". For Adaptive Server IQ version 12.4.3, the string "12.04.0003" will be returned.

310101 Trying to disable OLE DB Connection Pooling by adding "OLE DB Services = -2" in the connection string of the ASA OLEDB provider, would have caused a "R6025 Pure Virtual Function Call" error, when a second query was executed. This has now been fixed.
310190 The collation info in schema files (.usm), required to sort Unicode characters, was corrupt. The schema files generated by ulview, ulinit or ulxml, all showed the same problem. The effect of this was that Unicode strings with non-ascii characters (ie Unicode values >= 128 ) may have had unexpected results; values may have sorted incorrectly, and upper/lower case conversions may have been incorrect. This has now been corrected.
310279 In certain circumstances, if a sort operation ran out of memory, rows could have been incorrectly omitted from the result of a query. In the case where rows were omitted, the QueryLowMemoryStrategy property would be incremented. This has been fixed.
310304 The documentation incorrectly states that when using the C++ API, storage parameters can be passed to the UltraLite runtime either by using the UL_STORE_PARMS macro or by passing them directly to the ULData::Open method. Actually, using the ULData::Open method is the only way parameters can be passed.
310325 This change implements a Greek collation, 1253ELL, for the Windows code page 1253. The "collation name" or description is "Code Page 1253, Windows Greek, ISO8859-7 with extensions". When creating a new database in a Greek Windows environment, 1253ELL will be selected automatically if a collation is not specified.
310458 For an outer join query with constant columns on the null-supplying side, the constant columns would not have been set to NULL in null-supplied rows. For example, the result of the query:

select * from employee left outer join (select 102) dt(x) on (emp_id=x)

would have had 102 in the x column of every row. Now, the value 102 appears only for rows where emp_id is 102, and NULL in every other row. The same error occurred for subqueries in the select list. For example:

select * from employee left outer join (select (select first emp_id from employee)) dt(x) on (emp_id=x)

This problem is now fixed.

310577 If dbremote was running in hover mode or if dbmlsync was running on a schedule, and either process was running with the -x switch to rename and restart the transaction log, then after the log was renamed for the first time, neither dbremote nor dbmlsync would have sent changes to the consolidated database until the process was restarted. Now, if the online log is renamed when in hover-mode, the data in the last page is processed and then the log-scanning process is shutdown and restarted.
310616 A failed connection attempt could have returned the error "Server not found" (-100) when there was a failure other than just not finding the server. Now connection failures will return the error "Connection error: %1" (-832), where %1 gives some information about the failure. Creating a debug log file using the LogFile connection parameter usually provides more detailed information about the failure.

Examples of where "Connection error" is now returned where "Server not found" was previously returned include:

dbping -c "links=tcpip" - missing server name

dbping -c "links=tcpip{dobroad=none};eng=myengine" - missing host parameter

dbping -c "links=tcpip{clientport=7777};eng=myengine" - if TCP/IP port 7777 is already in use (eg from a previous connection)

dbping -c "links=tcpip;eng=myengine" - if the machine is out of available TCP/IP ports etc.

The behaviour of links=all was also changed to always attempt the shared memory connection before other links are attempted (to be consistent with links=tcpip,shmem, for example). Previously, if an application had used the connection string including "links=tcpip" and then one including "links=all", the second connection would attempt to connect over TCP/IP before shared memory, but now attempts to connect over shared memory first.

310638 A table containing an indexed numeric column could have become corrupt if the value of the precision option was changed to a value smaller than that of some of the values that existed in the table, and rows containing such values were subsequently modified. This has been fixed.
310640 The ASE compatibility procedure, sp_columns, now orders the result set so as to be in the same order as if run on an ASE system.
310658 If a database server was started as an NT service, using the LocalSystem account, non-administrative users would still have been able to kill the database server process using the task manager or a command-line based kill program. With this fix, non-administrative users no longer have the ability to kill the database server process.
310700 When purging locks from the lock table, the lock table entries could have become misordered. It was unlikely that this would have caused problems other than assertions 200300, 200301 or 200302. For this problem to have occurred, there must have been active keyset cursors and the database either must have had more than 1 dbspace, or more than 1,000,000 pages in the system dbspace. This is now fixed.
310709 Queries containing ANY or ALL subqueries may have returned errors (such as SQLE_CANNOT_OPTIMZE_QUERY). if the ANY/ALL subquery contained aliases on subselects.

For example:

select (select count(*) from R) as A

from T

where 1 <> ALL (select A from S )

This has now been corrected.

310784 The persistent index statistics could have been incorrect after an index reorganization. This problem only affected trie-based indexes and has now been fixed.
310792 When running dbconsole, the dialog that opens when right-clicking on a connection and choosing Details, could have opened too high, such that the title bar and some of the buttons and fields were off the top of the screen. This has now been corrected.
310866 ASAProv was returning incorrect string values for database with a UTF8 collation. The UFT8 string values were converted to the required string type(ie DBTYPE_STR, DBTYPE_WSTR or DBTYPE_BSTR), but the null terminator was not being set. This is now fixed by null terminating the string.
310881 When altering a table involved adding a column with a computed or default value, row locks were obtained which, if table was large, could have caused the operation to fail. The row locks were redundant, since there already was an exclusive schema lock. The row locks are no longer obtained.
310887 DBISQL would have reported an internal error, if it was opened from Sybase Central, (Right-click on the database icon and click "Open Interactive SQL"), and a number of statements were executed all at once, followed by an EXIT statement.

For example:

CREATE VARIABLE value INT;

SET value = 1;

EXIT value

It did not matter what the statements did, just that there were more than one, and that the last one was an EXIT.

This problem has been fixed.

310912 When using the JDBC?ODBC bridge, warnings were not always being reported back to the application.

For example, using DBISQL connected via the JDBC-ODBC bridge, executing the following:

set temporary option ansinull = 'on';

select count(NULL) from dummy;

will cause an warning dialog "null value eliminated in aggregate function". Executing the following statement:

select top 10 * from rowgenerator;

would have return no. This problem has now been fixed.

310932 Queries containing the NUMBER(*) function and an EXISTS predicate could have returned incorrect values for the NUMBER(*) function, if the EXISTS sub-query was flattened. The incorrect values would have been zero for each row. After this fix, the correct row number is returned.
311055 If a computed column referenced another column which appeared in a CHECK constraint, the computed column could be incorrectly set to NULL.

For example, the following table definition would have caused the problem:

create table T(

x integer check( 2*x >= 0 ),

y integer COMPUTE (2+x)

)

An UPDATE statement that modified 'x' (to a non-NULL value) would have left 'y' set incorrectly to NULL. This problem has now been fixed.

311099 When describing a read only cursor result set of a stored procedure or batch which has references to tables contained in publication articles, the error "QOG_BUILDEXPR: could not build EXISTS" could have been reported. THis is now fixed.
311194 When a table was opened with an index, after column objects for that table had been referenced, may have thrown the error SQLE_METHOD_CANNOT_BE_CALLED.This has now been fixed.
311195 In versions of ASA earlier than 8.0.0, assertions 101201, 104802 and 104803 could have occurred while defragmenting a database log file, if it was in use by a server running with the -m command line option to truncate the log file at a checkpoint. In versions 8.0.0 and later, assertions 100908, 100909 and 104802 could have occurred in this same situation.

When running with the -m option, the log file is truncated at each checkpoint, but this truncation could not have occurred if the file was being defragmented concurrently. This has now been fixed.

Note: Use of the -m switch is not advised, please read the documentation before using this server command line switch. To avoid database file fragmentation, it is recommended that where this option is used, the transaction log be placed on a separate device or partition from the database itself.

It is also not recommended to defragment any database files while they are in use.

311234 When connected to a database with a UTF8 collation,ASAProv converts from UTF8 to Unicode. This conversion may have used a wrong string length, which would have caused the run-time heap to have become corrupted. Also, the string buffer was not initialized before converting the UFT8 strings. These problem lead to various failures using VS.Net, and have now been fixed.
311274 When using database with a Japanese collation, characters with a second byte of \x7d, would have caused a syntax error (ASA error -131) if they appearred in object names in CREATE PROCEDURE/FUNCTION/TRIGGER statements. This problem has been fixed.
311280 When querying the datatype of TIME, DATE, or TIMESTAMP columns of an ASA database, the ASA provider returned different values than Microsoft's provider, MSDASQL. This has now been corrected.
311508 Binary data imported from an ASCII formatted file would not have been loaded correctly if the data appeared as an unquoted sequence of hex digits, prefixed by "0x". (This is the format generated by DBUNLOAD and DBISQL's OUTPUT statment.) This has now been fixed.
311526 Calling SQLFetchScroll or SQLExtendedFetch, with a rowset size of more than 32767 rows, would have failed with incorrect results, if the result set was larger than the rowset. This is now fixed.
311584 If any any of the following conditions were true, dbisql, (or any of the administration tools), could have failed to connect to a database:

- the "Connect" dialog was being used

- the JDBC-ODBC bridge was being used

- a value in the "Start line" field contained a blank.

The exact error message varied, depending on what other connection parameters were specified and whether the database server was already running or not. This problem has been fixed. A workaround is to connect using the jConnect driver instead of the JDBC-ODBC bridge. Note, this was a problem in the administration tools, not the JDBC-ODBC bridge per-se.

311704 When editing table data in the "Results" panel of DBISQL an internal error could have been reported if an existing cell was being edited and an invalid value for the cell was entered, or a new row was added and invalid data was entered in one or more of the cells,

and then a different row was selected by clicking with the mouse or by pressing the UP or DOWN keys. An error message about the invalid data would have ben displayed, and the row selection would change. Attempting to go back to the row with the bad data and correct it would then have caused an internal error. This problem has been fixed. Note, this problem also applied to the ASA plug-in for Sybase Central.

311850 When creating a stored procedure which returned a result set and the result set datatypes were not explicitly specified, if one of the result set columns was NUMERIC and the precision of the column was calculated as greater than 128, a server crash would have resulted. This has been fixed. A workaround is to explicitly specify the result set datatypes.
311851 Scrolling through a trie-based index to before the first row and then scrolling forwards, could have resulted in the scan terminating prematurely. This is now fixed.
311888 A query with a GROUP BY clause that involved concatenation, could have caused a server crash.

Far example:

create table B( city char(20), state char(20));

select city || state

from B

where city || state not in

(select city || state from B

group by city || state);

For the crash to have occurred, the table B must have contained a combination of empty and non-empty strings. This has been fixed.

312098 The server could have attempted to update the wrong database page. If a number of transactions, (two or more), were concurrently reading a page, and one transaction updated the page, there was a very small, but non-zero, chance that it might have updated the wrong page. In many cases this would have resulted in an assertion indicating a page number or page type mismatch. This would likely only have occurred on Unix and multiprocessor (hyperthreaded) NT systems. This is now fixed.
312114 Table lists in the Test Script's Options dialog sometimes didn't reflect the current setting of the order of tables for testing. Synchronization tables could have disappeared in both the 'Synchronized Table Order' list and the 'Synchronization Tables' list and thus would have been unable to be selected for testing.

For example, if a few tables were added to the 'Synchronized Table Order' list, OK was clicked in the Options dialog and then the Options dialog was opened again, the selected tables would all applear in the 'Synchronization Tables' list and the tables that were previously in 'Synchronizaton Tables' would have disappared.

This problem has been fixed.

312221 A permissions problem with derived tables has been fixed.
312222 If a table in the FROM clause of an EXISTS or IN subquery had a local predicate of the form "T.X = T.Y", the query may have returned an incorrect result set. For this to have happened, T.X or T.Y must be in the select list or be used in another predicate of the form "T.X = outer reference column".

For xample:

select *

from R, S

where R.X IN ( select T.X

from T

where T.X = T.Y )

and S.Z = R.Z

312241 A PRINT statement could have displayed an unreadable message in the server console or log file if the database's character set(for example utf8) was different from the OS's character set ( for example Japanese CP932 ). This has been fixed.
312345 If an EXECUTE IMMEDIATE expression in a stored procedure contained a reference to an undefined variable, the server would have crashed.

For example:

CREATE procedure foo( IN tablename varchar(256) )

BEGIN

EXECUTE IMMEDIATE 'SELECT * FROM ' || table_name;

END ;

call foo('DBA.sales_order_items');

The problem has been fixed and a "Column not found" error is now generated.

312388 Severs running on Win32 multi-processor systems could have hung, crashed or failed with an assertion, due to a bug which allowed two threads to be active simultaneously in a critical section. This issue was unlikely to have appeared on single processor systems. It has now been fixed.
312389 When disconnecting from a MobiLink server, the ASA client, dbmlsync, may have crashed, hung, or have issued a spurious error at the end of a synchronization. This is now fixed.
312536 The next available value for a GLOBAL AUTOINCREMENT column could have been set incorrectly in the following situation:

- an INSERT into the table was executed using a value for the column outside the range for the current setting of Global_database_id. This could happen if rows from other databases were downloaded as part of a synchronization.

- the server was shutdown abnormally (e.g. by powering off) before a checkpoint occurred.

The next time the database was started, the next available value for the column would have been set incorrectly. If an INSERT was then attempted with no value provided for the column, the error "Column '<col>' in table '<table>' cannot be NULL" would have been reported. If the database was again shut down and restarted, an INSERT into the table would have attempted to use the first available value in the range for the current setting of Global_database_id. Note that if rows had been deleted from the table, this could result in a value being generated which had previously been used and which might still exist in another database. Resetting the value using sa_reset_identity() would correct the problem, assuming an appropriate value to use can be determined. This problem has now been fixed.

312697 The dbunload utility will now unload a column list to LOAD TABLE statements that it generates in the reload.sql file. This is to facilitate easier reordering of the columns in a table. One can now unload data using dbunload, drop the tables and recreate them with the new column order and the reload.sql can be used to repopulate them.
312857 A call to SQLMoreResults was returning SQL_NO_DATA_FOUND, instead of SQL_ERROR, when a batch contained a statement with an error. According to the ODBC specification, if one of the statements in a batch fails, and the failed statement was the last statement in the batch, SQLMoreResults should return SQL_ERROR. This has been corrected.
312905 Fetching more that 200 characters, using the OLEDB provider, into a DBTYPE_BSTR could have left garbage data following the valid column data. This has been fixed.
312906 The SQL generated by the ASA provider's ITableDefinition and IOpenRowset methods was not being correctly quoted. These methods would have failed if the table name was specified as owner.name or if any object name was a keyword or not a valid identifier. For 7.0.4 only, if ITableDefinition or IAlterTable methods generated SQL that was over 255 characters, these methods could fail. This has been fixed.
312932 Using statement-based scripts could have caused an ODBC error, if the -zd switch was not used when starting the MobiLink server. The upload_new_row_insert and upload_old_row_insert events were affected by this. This has now been fixed.
312950 The following problems, all related to the way DBISQL handled the DBKEY connection parameter, have been fixed.

- DBKEY values which contained number sign ('#') characters were being mangled. This would have prevented connecting to an encrypted database.

- if the DBKEY parameter was specified on the DBISQL command line, but there was not enough information to connect, the Connect dialog was opened, but the Encryption Key field was not filled in. Instead, the DBKEY value appeared in the Advanced Parameters field.

313070 The ULPublicationSchema.Mask property was always returning 0. This is now fixed
313144 When using the OLEDB driver, (or ODBC), on Windows CE devices, Japanese characters with object names (e.g. table names) having a second byte of \x7b, could have caused access violations or application errors in client applications. A workaround is to use double quotes to quote the object names. This problem is now fixed.
313209 For very complex WHERE clauses in disjunctive form, new IN predicates are now generated that can be used as sargable predicates. For an IN predicate of the form "T.X IN ( constant_1, constant_2, ...)" to be generated, it is necessary to have in each term of the disjunction, a predicate of the form "T.X = constant_i". In the example below, the query Q1 is transformed into the query Q2 where two new sargable IN predicates were generated.

Example:

Q1:

select *

from T

where (T.X = c1 and T.Y = c2) or

(T.X =c3 and T.Y = c4) or

(T.X = c5 and T.Y = c6) or

(T.X =c7 and T.Y = c8) or

(T.X = c9 and T.Y = c10) or

(T.X =c11 and T.Y = c12)

Q2:

select *

from T

where T.X IN ( c1, c3, c5, c7, c9, c11) and T.Y IN (c2, c4, c6, c8, c10, c12)

and ((T.X = c1 and T.Y = c2) or

(T.X =c3 and T.Y = c4) or

(T.X = c5 and T.Y = c6) or

(T.X =c7 and T.Y = c8) or

(T.X = c9 and T.Y = c10) or

(T.X =c11 and T.Y = c12))

313305 When run on Solaris, the server could have crashed on a CREATE PROCEDURE statement if it included a statement like: UPDATE ... SET ... FROM, and the FROM clause

had more than 4 tables. This has been fixed.

313309 Calling a stored procedure in Visual Basic .Net could have resulted in the error "syntax error or access violation: near '?' " This is now fixed.
313392 If the GA install of SQL Anywhere did not use the default Start Menu folder, (ie Programs\SybaseSQL Anywhere xx), subsequent EBFs would have created this folder. This has been corrected, no folder is created by the EBF.
313503 When the dbmlsync command line contained a site or publication name that encoded differently in the remote database, the synchronization would have failed. The problem is now fixed.
313603 If a sitename contained characters from a Multi-Byte Character Set, dbmlsync would have failed to find the subscription or perhaps crashed. This problem is now fixed.
313686 If a stored prcedure executed a RAISERROR statement to signal a user defined error, the provider would not have returned the exception to the application. Instead, the application would have received the error "object reference not set to instance of an object". The correct RAISERROR message will now be returned.
313708 If the fetch of a row from a result set resulted in some sort of error (eg. conversion error), this error was suppressed by the provider and the rowset was marked as having no more rows. Now the error is properly propogated back to the client.
313762 The customers application gets assertion 200302
313786 The Database Initialization utility dbinit, could have failed if the SQLCONNECT environment variable specified a database file name (DBN). This has been fixed so that the SQLCONNECT environment variable does not affect dbinit.
313788 When using the Managed provider, columns with a TIME datatype are mapped to .NET TimeSpan DataRows when VS.NET generates strong-typed DataSet classes for XSD files. The provider was failing to fill the DataSet because the it was returning DateTime values for the TIME columns and TimeSpan values could be cast to DateTime values. This was fixed by converting TIME columns to TimeSpan values and adding a new method GetTimeSpan to the AsaDataReader class.
313797 An InvalidCastException would have been thrown by the .NET Common Language Runtime when generating an UPDATE command that had a SELECT sub-querey which returned decimal columns. This has been fixed.
313803 When executing a parameterized query to insert a row into a table, if a parameter value was of type DECIMAL and the precision was not specified, an incorrect value was inserted into the table. Fixed by setting the precision to 30 for decimal values with an unspecified precision.
314159 Adding columns between creating and selecting from a view caused the server to fail.
314168 Assertions 100307 or 101412 could have occurred with encrypted databases when reading pages from the temporary file or a dbspace. This has been fixed.
314230 Under certain conditions, the SQL preprocessor (or ULGEN) would have created incorrect UltraLite code for queries which used an index in which there were columns ordered as DESCENDING. This resulted in no rows being retrieved for the query. This has now been fixed.
314279 When sequentially scanning a large table, there was the possibility of cache corruption when the scan completed. This was unlikely to be observed on single processor NT/W2K/XP platforms, and was likely to be rare in any case. It is now fixed.
314725 If a procedure generated a result set using a SELECT on a view, and the view was on a table that was part of a SQL Remote publication, and the first call to the procedure was made using a read-only cursor, subsequent calls to the procedure could have resulted in a "column not found" error. This error referred to columns in the SUBSCRIBE BY part of the publication definition. Now, subsequent calls to the procedure will treat the SELECT as read-only.
314828 Error strings returned from the server through a TDS connection, could have had garbage characters preceding the message. This has been fixed
314830 Passing large blobs to external functions was slow, as an "optimization" for quickly reading blobs was not being used. There was also a possibility of incorrect results when accessing blobs piecewise. It was possible that if the first fetch was for exactly 255 bytes, the second fetch would have returned the first n bytes again, not the next n bytes (following the first 255). These two problem have now been fixed.
314861 The MobiLink server may have crashed when executing an ODBC statement that had been previously executed. This would only have occurred if the script happened to be identical for two different tables. This was most likely to have occurred when using download_delete_cursor and the truncate table feature, where the script was typically "select NULL". One workaround is to add some comment text to the script to make it unique. This problem has now been fixed.
314893 When using Java to write MobiLink synchronization logic, if the connection to the MobiLink server used the JDBC-ODBC bridge, a fetched timestamp could have had an incorrect value. In particular, the value would have been wrong if the timestamp column in the database had non-zero milliseconds. This has now been fixed.
314969 If the Database Object Debugger was launched from Sybase Central and a connection made, then if dbisql was also launched from Sybase Central and a connected made, it, the Object Debugger and Sybace Central would all have hung. This has now been fixed.
314977 The OLEDB provider had a number of problems when used it with a Borland Delphi built application:

- the provider could have overrun memory when fetching 200 bytes or less into a buffer smaller or the same size as the actual data, when fetching binary data into DBTYPE_VARIANT or any data into DBTYPE_STR or DBTYPE_BYTES. This could have caused the application to crash as well as other problems.

- the provider could have used an incorrect length when getting data from parameters of type DBTYPE_VARIANT containing DBTYPE_ARRAY. This could have caused the wrong length of data to be used and possibly the application to crash.

- NULL binary input parameters may have resulted in E_OUTOFMEMORY

- pessimistic locking was used when optimistic locking should have been used, resulting in reduced concurrency and possible application blocking.

These problems have now been fixed. In 7.0.4 and 8.0.2, the locking type has not been changed since an 8.0.0 or higher engine is required and the change can cause the engine to choose a different cursor type.

315129 The server could have failed with assertion 101414 - 揂WE mapping failed", even when Address Windowing Extentions were not being used, (ie -cw). This was unlikely to occur on uniprocessor systems, so forcing the engine to run on a single processor might be a work around. This is now fixed.
315130 Extra debug logging to the HotSync or ScoutSync log can now be enabled for the Palm conduit by setting environment variables.

UL_DEBUG_CONDUIT: When this variable is set, a message box will pop up on conduit loading/unloading to confirm entry into the conduit. Requires user intervention to proceed.

UL_DEBUG_CONDUIT_LOG: When set to 1, basic logging will be written to the log, possibly including synch parametrs, registry locations and attempts to load libraries. When set to 2, basic logging as well as more detailed IO logging will be written to the log

315241 The Schema Painter was unable to open a user defined XML file that contained a publication with a large number of tables. When the user tried to open this schema file,

the Schema Painter failed, returning an error indicating that the publication could not be created because a table did not exist. The table name displayed in the error sometimes contained a full table name, but always contained various garbage characters. This is now fixed.

315262 When opening a query in dbisql, parts of some of the query may have had the quotes stripped off. The query editor's parser was being too agressive when parsing parts of a SQL statement. This is now fixed.
315340 The server could crash while executing a remote procedure call that takes input parameters. This would only occurred if the remote server was using the ODBC server class This has been fixed.
315364 If an application executed a single SQL statement that ended with a semicolon, the server would have interpreted this as batch and did not allow output parameters. In the following ODBC example the prepare of a procedure call has a semicolon at the end which causes an error during execution:

SQLPrepare( "Call sp1( ?, ? );" )

SQLBindParam( parameter 1, of type SQL_PARAM_OUTPUT)

SQLBindParam( parameter 2, of type SQL_PARAM_INPUT)

SQLExecute; --> HY105 error (invalid parameter type)

This problem has now been fixed

315382 When modifying a MobiLink password for a user in the user's properties page, the password would have been updated to the wrong value. This has now been corrected.
315386 In certain rare situations, the database server could have crashed while running dbunload with the -ar, -an or -ac commandline options. This problem has now been fixed.
315388 The analyzer generated macros UL_CAST_DOUBLE_LONG and UL_CAST_LONG_DOUBLE were not defined. For example, the following query:

SELECT CAST( POWER( 2, T.exp ) as UNSIGNED INTEGER) FROM T

would have failed to compile. This has been fixed, the macros are now defined.

315415 When attempting to reload a database with dbisqlc, it could have failed with an error that it could not open a data file that was greater than 2GB in size. This problem has been corrected. A workaround is to use dbisql (Java version); however, dbisql is not available on deployment platforms.
315471 A new built-in function has been added with the following syntax:

DB_EXTENDED_PROPERTY ( { property_id | property_name },

[, property-specific_argument

[, { database_id | database_name } ] ] )

This new function, db_extended_property(), is similar to db_property(), but it allows an optional property-specific string parameter to be specified. The interpretation of the property-specific argument depends on the property id or name specified in the first argument. Calling db_extended_property( x ) is equivalent to calling db_property( x ).

Two new properties have been added: FileSize and FreePages. Each of these properties can take an optional argument which specifies the dbspace for which the property is being requested.

The dbspace can be specified as any of the following:

- the name of the dbspace

- the file_id of the dbspace

- 'translog' to refer to the transaction log file

- 'temp' to refer to the temp file

- 'writefile' to refer to the write file

If the dbspace does not exist, the property function will return null. If the name of a dbspace is specified and an id or name of a database which is not the database of the current connection is also specified, the function will also return null (since it is not possible to query the system tables across databases) except that the well-known name 'system' will still be accepted.

FileSize returns the length of the specified database file in pages. For the system dbspace on databases created with 8.0.0 or later, FileSize includes the size of the checkpoint log which is located at the end of the database file.

FreePages returns the number of free pages in the specified file. FreePages is only supported on databases created with 8.0.0 or later. For the transaction log, FreePages returns the number of completely empty, unused pages between the current logical end of the log and the physical end of the log file. When using a write file, FreePages on a dbspace will return the number of free pages in the virtual dbspace represented by writefile. FreePages on the writefile itself returns the number of pages free in the writefile that can be used to create new mapped versions of database pages. That is, pages may appear free to a dbspace but, from the point of view of the write file itself, they are actually allocated and in use inside the write file as images of pages.

If no property-specific argument is provided for either of these properties, the system dbspace is assumed.

315473 A new command line option -vp (or -v+), "show progress offsets", has been added to the MobiLink server. With this newoption, the MobiLink server will log the consolidated and remote progress offsets in its output file for each publication in every ynchronization. The publications may include those that are explicitly involved in the current synchronization, as well as the ones that are not explicitly involved in the currently synchronization, but in the same remote database. If the consolidated progress offsets do not match the remote progress offsets, the MobiLink server will also print these offsets in its output file, no matter whether -vp or -v+ is used or not.

UltraLite sequence numbers (ie. ml_user.commit_state on the consolidated side) are also shown.

315474 When run on an AIX machine using IBM's Power4 processor, the server could have hung or crashed. When the server would have hung, the CPU usage would have gone to 100%. This problem would only have bee seen on SMP machines. The P/630, P/670, and P/690 machines are some of the IBM machines that currently use the Power4 chip. This has now been fixed, but a workaround is to use the bindprocessor command to bind the ASA server processes to one CPU.
315475 The syncase125.sql script, which sets up MobiLink system tables, was not updated when 8.0.2 was released. It is now fixed, but can be updated manually by ading the following to the end of the file:

exec sp_procxmode 'ml_add_user', 'anymode'

exec sp_procxmode 'ml_add_table_script', 'anymode'

exec sp_procxmode 'ml_add_lang_table_script', 'anymode'

exec sp_procxmode 'ml_add_java_table_script', 'anymode'

exec sp_procxmode 'ml_add_dnet_table_script', 'anymode'

exec sp_procxmode 'ml_add_connection_script', 'anymode'

exec sp_procxmode 'ml_add_lang_connection_script', 'anymode'

exec sp_procxmode 'ml_add_java_connection_script', 'anymode'

exec sp_procxmode 'ml_add_dnet_connection_script', 'anymode'

go

315543 If a client's character set did not match the database's character set, the embedded SQL GET DATA statement could have returned incorrect results. This is now fixed.
315556 Complex queries with sargable IN predicates may have had a less than optimal plan, due to the optimizer underestimating the size of intermediate result sets.

For example, if a table T has a primary key on the columns (T.A, T.B) and, in a complex query, the predicates "T.A = constant" and "T.B IN ( constant1, constant2, ..)" are used to create a partial index scan on (T.A, T.B), the number of rows returned by the partial index scan may have been underestimated. This has been corrected so that the optimizer now calculates a reasonable estimate.

315593 If a column was defined as NUMERIC and the GLOBAL AUTOINCREMENT value generated for an inserted row would have been greater than 2**31, the value assigned to the column and the value returned for @@identity were incorrect. This has been fixed. Note that the use of BIGINT is recommended in this situation for improved efficiency.
315656 The shortcut to the sample database installed on Japanese Windows CE machines was referencing asademoj.db, instead of asademo.db. This has now been corrected.
315662 If MobiLink called a user implemented .NET script and the script had an incorrect signature (argument list), then the MobiLink server would have shut down. The MobiLink server now aborts the synchronization only and continues to accept connections.
315667 When a Smart Device application, that had opened a Data Reader, terminates without closing the connection or the Data Reader, a managed AsaException and a native exception would have occurred. This is now fixed by closing the Data Reader when the connection is closed.
316016 If a query in a stored procedure contained a builtin function that was used either with no parameters or only constant parameters, then the function might only have been evaluated periodically, not every time that the query was executed. This was a result of plan caching, which cached the results of evaluated functions. For deterministic builtin functions, the caching did not change behaviour as the same answer would be returned for every execution of the function. However, for some functions such as rand() or connection_property(), the value of the function could be different even though the identical parameters were supplied. The caching logic has been changed so that functions which might return different values for the same inputs are now no longer cached. When using a reusable cursor, expressions over these builtin functions may now be slightly less efficient.
316036 When the MobiLink Server was running against ASE, if the ASE server was shut down for some reason and restarted, the MobiLink server would have kept running, not knowing the ASE server had been restarted. The MobiLink server will now detect that the ASE server has been restarted and reconnect.
316073 Histogram updates during query processing can, in some rare and yet undetermined circumstances, cause some selectivity estimates to become invalid. This in turn can cause inefficient query plans to be chosen. The problem can be detected by looking at the selectivity estimates in query plans, the estimates can show up as values such as -1.IND#. The server will now clean up these invalid estimates when loading histograms.
316104 If an event handler was running when an attempt was made to upgrade a database, the upgrade would have failed to start, since another connection was active. Now the upgrade will wait for the event handler to complete before proceeding.
316106 If the Java VM failed on server startup, the server might then have crashed when shutdown. This has now been fixed.
316107 Attempting to use the Migrate Database wizard to migrate tables from a remote server, for which the database name was not specified, would have failed if the remote server was anything other than an ASA server. This has been fixed.
316231 If a procedure definition contains a percent sign, '%', it is treated either as the modulo operator or a comment delimiter, based on the setting of the Percent_as_comment option. If this option was set to OFF before such a procedure was created, the percent sign would have been stored in the catalog; otherwise, the it would have been changed to the double dash comment delimiter. If a procedure definition stored in the catalog contained a percent sign and the first user to call the procedure had Percent_as_comment set to ON, the procedure may have failed to load or may have performed incorrectly. Also, rebuilding the database may have failed, as the percent sign would have been treated as a comment delimiter and could have resulted in a syntax error. This has been fixed. Existing procedures containing a percent sign should be re-created after this fix before attempting to rebuild the database. A workaround is to use the remainder() function instead of using the percent sign as modulo operator.
316408 Executing a CREATE DATABASE statement while the server was under a heavy load, could have resulted in the server hanging. This has been fixed.
316467 If ExecuteNonQuery was called in an ASACommand object to drop a table that didn't exist, an error would have occurred. After that the AsaCommand object could no longer have been used. This has now been fixed.
316471 If an error occurred while transferring data between the old and new databases using one of the dbunload command-line options -ac, -an or -ar switches, dbunload could have hung and the server would have used 100% of one CPU. Now dbunload will report the appropriate error message(s).
316472 When using the Schema Painter on Windows 9x, a conversion from usm to xml produced a corrupt xml file that would not then open in the Schema Painter, and could not have been converted back to a usm file. This has now been fixed.
316673 If a table is locked exclusively with LOCK TABLE ... IN EXCLUSIVE MODE, the server will by default, no longer acquire row locks for the table. This can result in a significant performance improvement if extensive updates are made to the table in a single transaction, especially if the table is large relative to cache size. It also allows for atomic update operations that are larger than the lock table can currently handle (approx. 2 - 4 million rows).

A negative side effect of this change is that keyset cursors over a table locked in this fashion will not work as expected (they will return row changed warnings for every row in the cursor if any row in the database has been modified). This is most likely to affect updateable cursor with an ORDER BY (in which case the engine could turn it into a keyset cursor).

This behaviour can be disabled by setting the SUBSUME_ROW_LOCKS option 'off' ('on' by default for 9.x and up). While this feature has been added to 8.0, it has been left 'off' by default.

316688 When using the JDBC-ODBC bridge to select a variable of type java.math.BigDecimal, the value would have been returned as a binary instead of as a string.

For example:

create variable d java.math.BigDecimal;

set d = new java.math.BigDecimal(1000);

select d;

This problem has now been fixed.

316700 The MobiLink Monitor window would always show a title of "Started - MobiLink Monitor" after saving a file or using the View/Go To command. This has been fixed.
316870 When a commit was done by a transaction while it is in the middle of a page level backup, it could have caused database corruption if a subsequent operation that required a page level undo (ie ALTER TABLE or LOAD TABLE on a table with existing data) failed and a checkpoint was done while the operation was in progress. This is now fixed.

Note that this is not likely to affect most users, since the existing backup tools do not exhibit this behaviour, but it may have occurred with a user written backup tool using the page level backup api.

316904 Attempting to create a proxy table to a remote table with a primary key column which was a keyword would have failed. For example, attempting to create a proxy table to a table that had a primary key column named "time" would have failed. This problem has now been fixed.
316905 When using sa_migrate() to migrate a set of tables owned by a particular user, the migration scripts would also migrate any views, global temporary tables and system tables that were also owned by that user. The migration scripts now only migrates base tables.
316908 The version number reported by the Managed Provider dll did not contain the build number. The number displayed was always 8.0.2.0. This has now been fixed to also display the build number.
316976 If an expressions which never returns NULL, even when its arguments were NULL, could have caused an assertion failure when used in a query containing an outer join if hash join was selected as the execution method.

For example, the following query would have caused the problem to occur:

select e.emp_id ee, isnull( d.dept_head_id, 999 )de

from employee e left outer join department d on ee=de

order by emp_fname

Errors include the following: "Unknown Device Error", although other fatal errors or assertion failures were possible. This has now been fixed.

317082 After an application connected to a local engine or server via the shared memory, the local application could not be killed using the 'End Task' action in the task manager -- even if the user was an Administrator. The problem was introduced by the change for QTS 310658 (Non-administrative user could kill database server started as LocalSystem NT service). The problem was reproduced on Windows 2000 Professional SP3 but could not be reproduced on Windows 2000 Server SP3. This has now been corrected.
317112 The QueryEditor was not qualifying tables with the owner name, which lead to problems when there were multiple tables with the same name. Now it uses the users id if it matches one of the tables owners, otherwise it guesses and picks the last table found with a matching name.
317126 When using an OLE DB RowsetViewer with an OLE DB Tables schema rowset ( or other schema rowsets ), without setting the TABLE_SCHEMA restriction (or other SCHEMA restrictions), the returned rowset only contained entries created by the current user, the other entries are missing. This has now been fixed.
317240 Procedure profiling was not availble on a case-sensitive db (the menu entries to use it were missing). This has now been fixed.
317268 The QueryEditor was not parsing the ORDER BY clause correctly,if the query had a HAVING clause. This is now fixed.
317279 The Windows CE ODBC driver was using the connection parameters from the first connection's FILEDSN for future connections even, if a different FILEDSN was subsequently used. This has been fixed.
317464 When running the server with the -q switch, if an error occurred during startup, a messagebox containing the error would still have appearred. Now, the error dialog will not be displayed and the engine will silently fail to start. However, if the server is running as a service, the error message will be logged to the application event log
317536 The COMMENT ON COLUMN statement could sometimes have set an incorrect comment string. This would have been more likely to occur if the statement appeared as part of a batch containing other strings. The comment will now be set correctly.
317600 Fetches from Microsoft Access 2000 to an ASA database could have been significantly slower than from Access 97. The performance difference would have been more noticeable when fetching over a LAN or WAN. This has been fixed.
317604 When an ADO recordset which returned multiple resultsets was opened, fetching the second resultset would have caused the application to crash. This problem, which has now been fixed, was introduced by the change for QTS 310101.
317638 The reload.sql script created by dbunload was not quoting user names that apppeared in CREATE SYNCHRONIZATION USER statements, causing a rebuild to fail if the username contained spaces or consisted of numbers only. This has been fixed.
317705 A System.InvalidCastException was thrown when calling AsaDataAdapter.Fill, if a column value was null and the type of the corresponding DataColumn was different from the type of the database column. Fixed by returning a DBNull.Value if the column is null.
317780 When using a keyset-driven (value sensitive) cursor, attempting to fetch from the cursor after an error was reported on a previous fetch could have caused the server to crash. This has been fixed, and now fetches on any cursor types, after an error has been reported on a prior fetch, return the error: "Cursor not in a valid state", -853
317852 A stored procedure or function that concatenating integers as strings, could have caused a server crash.

For example:

declare x integer;

set x = 888;

set x = x || 888;

This is now fixed.

317916 When a program using ADO.NET is built, the version number including the build number of the iAnywhere.Data.AsaClient.dll is stored in the program. When an EBF was installed, the old version of the data provider dll was replaced with a newer one, and the program would then not have load correctly. This has been fixed by installing a 'publisher policy' file that tells the .NET Framework to map older versions of the data provider dll to the newly installed version.
317930 The Query Editor was producing bad SQL when given a query of the form:

SELECT *

FROM a join b,

(c join d ) join e

The parser was not processing the comma properly when it was followed by a bracket. This has now been fixed.

317934 When the -x command-line option was used with ulgen, some of the filenames generated with #include statements used absolute file names. This has now been changed to instead generate relative file names.
317953 In the Mobilink system tables, ml_script and ml_script_version, the datatype LONG VARCHAR was being used in Oracle databases. Since Oracle does not have a LONG VARCHAR datatype, this column was being created with a LONG datatype, but LONG is now being deprecated in Oracle 9i. The LONG columns have now been changed to the CLOB datatype, and existing databases will be changed when upgraded.
317962 The UNCONDITIONALLY keyword of the STOP ENGINE statement was not being handled correctly by dbisql. When executing a STOP ENGINE statement, a STOP ENGINE UNCONDITIONALLY statement was actually sent to the database server, and when executing STOP ENGINE UNCONDITIONALLY, a STOP ENGINE statement was sent to the database. This has now been fixed.
317965 The STR function could have returned invalid data or crashed the server, if the numeric expression parameter was less than -1E126. This has been fixed.
318137 A shared memory connection could have failed on Windows CE platforms after unloading and reloading dbodbc8.dll.

For example, if a client application:

1) made a shared memory connection

2) disconnected

3) unloaded dbodbc8.dll

4) reloaded dbodbc8.dll again

5) attempted another shared memory connection within a few seconds of the previous disconnect

Then the second connection attempt could fail. A debug log (generated using the LOGFILE connection parameter) would indicate that shared memory could not be started. This has been fixed.

318140 If the method ResultSet.getAsciiStream was used to get an AsciiStream of a string column (char, varchar or long varchar), the AsciiStream returned would not have given the proper ascii representation of the string. This is now fixed.
318315 After connecting using jConnect, attempting another connection to a different server would have failed, if a different port was used. This problem is now fixed.
318320 Viewing data from a proxy table which referenced a table which no longer existed, would have caused dbisql to report an internal error. This problem appeared only when connecting using the ASA JDBC-ODBC bridge. Note, this same problem affected the "Data" details panel in the Sybase Central ASA plug-in as well. Both are now fixed.
318321 The JDBC-ODBC bridge was not handling conversions from float to integer correctly. If setObject was used with an object type of float or double and a target SQL type of integer, smallint or bigint, calling executeUpdate would sometimes have incorrectly failed with a conversion error. This problem has now been fixed. In the cases where the conversion error is valid (as in an overflow or underflow case) the error is still returned as expected.
318392 Creating a udb file using a version 8.0.2 usm file, would have resulted in it being corrupt and could not have been opened. This is now fixed.
318451 When using a multi-row (wide) insert, if the first inserted row had NULL host-variables and also unspecified columns (defaulting to NULL), then the second inserted row could insert incorrect values into the unspecified columns. It was also possible for the server to write bad data to the transaction log, resulting in a corrupt transaction log.
318486 If Connection.createStatement or Connection.prepareStatement was used without specifying a particular result set type and concurrency, then the bridge would have used a default result set type of scroll sensitive, instead of forward only (as specified by the JDBC specification). The bridge now defaults to forward only. Note that the concurrency was, and still is, read only (as specified by the JDBC specification).
318618 If Sybase Central was started without an initial connection and a database was then created, after the creation progress dialog was closed, it waould have thrown a NullPointerException. This has been fixed.
318632 If fetching through a cursor backwards resulted in the cursor being positioned before the start of the result set, fetching forwards again might have returned error 100, "row not found", not the first row. The could only have happened if the query useed a comparison-based index scan which was bounded below (typically indexed_value >/>=/= constant). This is now fixed.
318670 When there was an internal analyzer error, the ulgen utility would have displayed the message 揟here was an error running the analyzer." So problems like the Java VM being out of memory might have been missed. Now it displays the name of the Java exception and a stack trace if possible. Also in this fix, the maximum Java VM heap size was bumped up from its default value to 200 MB (the current default setting for Sybase Central) to decrease the likelihood of running out of memory.
318798 ASA Servers running on Windows 2003 Server would not have been found by the dblocate utility. Now they are found.
318803 Using the string concatenation operator ( || ) could have caused the server to crash or return a runtime error. This whould only have occurred if one of the strings was a long varchar.

Code of the following form could have caused the problem:

declare x long varchar;

select a into x from test where id = 1;

set x = x || ', this should fail with an error';

as a workaround use (it's actually more efficient):

declare x long varchar;

select a || ', this shouldn't fail' into x from test where id = 1;

This is now fixed.

318816 If a FORWARD TO statement was executed via EXECUTE IMMEDIATE in a stored procedure, a syntax error would have resulted. The statement will now be executed correctly.
318823 A NullReferenceException would have been thrown when creating a new connection if dbdata8.dll was not found in the iAnywhere.Data.AsaClient.dll's directory or the application's working directory and the registry key(HKEY_LOCAL_MACHINE\Software\Sybase\Adaptive Server Anywhere\8(9).0\Location) was not found. This is now fixed.
318840 The statement, ALTER DBSPACE ... ADD ... which grows a dbspace, would not have executed if other connections to the server existed. The error 42W19 (-211) "Not allowed while '<username>' is using the database" would have been reported. The statement is now allowed to execute when other connections to the server exist.
318855 If a ULConnection object抯 Close method was called before a ULColumn or ULIndexSchema object was released, Visual Basic would have crashed. This would have happened if a ULColumn or ULIndexSchema object was declared globally for instance. This has been fixed.
318868 Attempting to call methods on a ULIndex object would have resulted in incorrect errors. This would have happened if the index was set before the table was opened, and then the table was opened and closed.

For example:

Set t = Conn.GetTable(揟�)

Set idx = t.Schema.GetIndex(搃dx�)

MsgBox 揘ame = � & CStr(idx.Name) � this is OK

t.Open

t.Close

MsgBox 揘ame = � & CStr(idx.Name) � this would fail

A similar problem existed with column objects (instead of index objects). This has been fixed, so now the last line of example will succeed.

318872 If an error such as a conversion error occurred after some of the rows of a group-by had been processed, then the server could have crashed. For the crash to have occurred, the expressions in the grouped query must have contained strings or decimal values. This problem has been fixed
318875 A change in the syntax has been made to the built-in function:

DB_EXTENDED_PROPERTY ( { property_id | property_name },

[, property-specific_argument

[, { database_id | database_name } ] ] )

For the properties FileSize and FreePages, the property-specific_argument 'temp' has been changed to 'temporary', so that there is consistent usage for the temporary file across different statements. The orginal value 'temp' is still allowed for existing usage.

318880 If the Index Consultant was used to analyze a workload containing more than 999 statements, the server would have crashed. This has been fixed.
318881 If a database was not shut down cleanly after having run the Index Consultant, recovery would have failed and the database could not be started. This has been fixed.
318929 When run on linux, the plug-ins Help>Adaptive Server Anywhere x>Online Resources menu item did nothing. It has been removed.
318930 When a connection to a server attempted to start the IPX/SPX link on a Windows 9x machine, which did not have IPX/SPX installed, it would have hung. A work around is to force the server to start without the IPX/SPX port enabled (eg. dbsrv9 -x tcpip my.db). This is now fixed.
318938 If an application using the OLEDB driver read a bitmap from a longbinary column and wrote it to a file, the application would likely have crashed. If the longbinary column had length N, then the driver copied N+1 bytes, changing a byte in memory that it did not own. This has been fixed.
318939 A connection using TLS encryption (ecc_tls or rsa_tls) would have been very slow on Windows 9x, or on NT/2000/XP, if the "dll=wsock32.dll" TCP parameter was used. The connection was so slow that it may appeared to have hung. This has been fixed.
318952 If you chose a table, selected the Data tab and then right-clicked Table to choose "View Data in Interactive SQL" from the context menu, nothing would have happened. This has now been fixed.
318954 Make sure you installed the Windows CE components when you installed ASA 8.0.

Launch the SimpleCE project by clicking on the "Samples\ASA\ADO.NET\SimpleCE\Simple.sln" or whatever is appropriate for your PC. Accept the Visual Studio conversion message if you see one.

If you see the message "The .net assembly 'iAnywhere.Data.Asaclient' could not be found" then perform step 1, otherwise go to step 2.

Step 1. Right-click on "Simple" in the Solution Explorer pane (in the top right part of the Visual Studio display). Select "Properties".

In the Simple Property Pages window, select "References Path" (as shown below). If you are running Visual Studio.NET, change the "C:\Program Files\Sybase\SQL Anywhere 8\ce\" to your ASA 8.0.2 "ce" directory. If you are running .NET.2003, point to the "ce\VSNet2003" folder instead of "ce" since there is an iAnywhere.Data.AsaClient.dll there for Visual Studio .Net 2003.

Get rid of any other paths (such as "E:\src80\db\...") that you might see since they do not apply.

Step 2. Try building the application.

If you see a "Resource transformation" error message about Form1.resx, then perform step 3, otherwise you should have an error-free build.

Step 3. Double-click on Form1.cs in the Solution Explorer window to open the form designer (or click on Form1.cs and select the "View Designer" button in the Solution Explorer window). Move the button on the form and this will cause a new and correct resx file to be generated. Try rebuilding now and there should be no more error messages.

318985 Database corruption, revealed by assertion messages, could have been possible when executing a "LOAD TABLE" statement that failed (eg. due to a duplicate primary key). This is now fixed.
319085 If the first query referencing a table after a database was started contained an error in the WHERE clause, subsequent queries would return the error:

Cannot find an index for field '<column name>'.

Every field must have at least one index. Current IndexCount = 0.

The database would have needed to be restarted to correct the problem. This has been fixed.

319109 Running setup in Record mode would have listed Documentation as an option, but if selected the external install would not have been launched correctly. The external installs were not intended to be available when recording an installation. An external install must be run standalone to generate a silent install for that option. External installs are no longer an option when recording an install.
319111 Dbmlsync would sometimes have failed to identify ALTER TABLE operations that applied to tables being synchronized. This prevented dbmlsync from generating the error message "Table 'tablename' has been altered outside of synchronization.." when a table with operations that needed to be uploaded was altered. This has now been fixed and the error message will now be generated when needed.
319165 Updating VARBINARY and LONG BINARY values in the Results panel of dbisql, or the Data tab of the Sybase Central Plug-in, was not being allowed. This has been fixed. As well the Table Editor is now more lenient of what can be typed in for BINARY, VAR BINARY and LONG BINARY values. The usual syntax of "0x" followed by pairs of hex values is still supported. However, anything else will now be sent to the server as a string which the server will convert into a BINARY value.
319206 All the columns in SYS.SYSSYNC and SYS.SYSREMOTEOPTION, and their views, wre selectable by any user. This may have exposed sensitive data in the following :

SYS.SYSSYNC.server_connect

SYS.SYSSYNC."option"

SYS.SYSREMOTEOPTION."setting"

This has been fixed by revoking SELECT permission on the SYSSYNC and SYSREMOTEOPTION tables from SYS and only DBA is now granted SELECT permission. The following new views have been created for the PUBLIC group:

SYS.SYSSYNC2

SYS.SYSREMOTEOPTION2

These views select the same columns of the original table, except they hide sensitive columns dynamically based on whether the user is a DBA or not. When the value is hidden, a string equal '<hidden>' is returned.

The following views are also updated to perform the same dynamic hiding on the sensitive columns.

SYSSYNCS

SYSSYNCDEFINITIONS

SYSSYNCTEMPLATES

SYSSYNCSITES

SYSSYNCUSERS

SYSSYNCPUBLICATIONDEFAULTS

SYSSYNCSUBSCRIPTIONS

SYSREMOTEOPTIONS

The Sybase Central plugin has also been updated to use the views instead of selecting from the tables directly.

319250 Calling the system function "property( 'PlatformVer' )" would have incorrectly returned 'Windows .Net build ...' on Windows 2003. Now it returns 'Windows 2003 build ...'.
319257 Starting the MobiLink Monitor with command-line option /? would have shown an error opening /? as a file, instead of showing the usage. This has been fixed.
319280 The setting for the option Optimization_goal, was incorrectly being changed for some queries, from FIRST ROW to ALL ROWS. This has been corrected
319282 Calling the system function "property( 'platform' )", incorrectly returned 'Windows 2000' on Windows XP and Windows 2003. Now it returns 'Windows XP' and 'Windows 2003' respectively.
319295 Queries with "= ANY (subquery)" or "<> ALL (subquery)" predicates may have returned incorrect results, if:

- the ANY or ALL subquery contained a table T1 that was flattened;

- there existed at least three tables, including T1, joining on the same column, (ie "T1.X = T2.X and T2.X = T3.X and T3.X = T1.X" )

This is now fixed.

319381 If the command line switch -b (trim blank padding of strings) was used and a download_delete_cursor contained only the primary key columns in the "SELECT ..." statement, the MobiLink synchronization server could have crashed. This problem is now fixed.
319383 When using the Index Consultant to analyze workloads containing statements with updates over multiple columns on a given table, the updates would have shown up as unanalyzable and would not have been included when optimizing the indexes. This has now been fixed.
319387 On Win32 platforms, a client may have failed when closing a tcpip or http connection, with a system error 10093. This has now been fixed.
319390 .NET application may not have worked properly if the version of native dll (dbdata8.dll) did not match the version of managed dll (iAnywhere.Data.AsaClient.dll). Now, when the managed dll loads the native dll, it checks the version. If the native dll's version is not the same as the managed dll's version, an error message is displayed.
319428 The database server, when run on NetWare, would have eventually stopped accepting SPX connections, and may have hung on shutdown. This was due to the server running out of memory and has been fixed.
319445 If a parameter to a web service was longer than 250 bytes, it would have been truncated. The resulting length would have been the original length modulo 256. This is now fixed.
319465 The server could have crashed when run on 64 bit platforms when executing a sort or hash-based operation. This crash has been fixed.
319516 On WindowsXP, the location numbers for the Sybase Central window were set incorrectly when the window was maximized and closed. This has now been fixed.
319569 The -zs server option allows a size limit to be placed on the request level log file. This limit can now be adjusted dynamically, without restarting the server, by executing:

call sa_server_option('request_level_log_size',nnn)

where nnn is the size limit for the file in bytes.

319655 Using the Table Editor could have cause an exception to be thrown. For example, editing a column and switching to another tree node or pressing 'F5' to refresh while on the Data tab of a table. This has been fixed.
319724 When setting an unknown property at connection time, the JDBC-ODBC bridge would have throw an exception. The bridge now ignores the property, which is the behaviour of the Sun bridge.
320016 The syntax for 'ALTER DATABASE CALIBRATE TEMPORARY DBSPACE' has been changed to 'ALTER DATABASE CALIBRATE DBSPACE TEMPORARY' in order for the syntax to be consistent with other similar statements.
320021 The server maintains row counts for catalog and user tables in the system table SYSTABLE. The row count for the table system SYSATTRIBUTE could have become incorrect during database operation. The incorrect row count could have caused an error during database validate, in addition to causing other problems. This has been fixed, the server will now keep an accurate count of rows in SYSATTRIBUTE.
320022 Breakpoints could not be set in procedures or triggers owned by the user dbo. This has now been fixed so that dbo procedures and triggers created by the user are now debuggable. System procedures and triggers owned by dbo are still not available.
320035 Using the Create Database wizard to create a database without a log file, would have created a database with a log file anyway. The log file would have had the same name as the database file. This has been fixed.
320036 The Options dialog (selected from Tools>Options menu) can now be opened even when not connected to a database. The controls for options which are stored in the database are disabled.
320043 Calling the CSCONVERT function with a string larger than the database page size, would have crashed the server. CSCONVERT is called by some of the external system functions like XP_SENDMAIL. As a result, a call to XP_SENDMAIL with a message body larger than the size of a database page would likely have crashed the server. This has been fixed.
320064 If dbisql was opened from Sybase Central and the mouse was moved over any of the Sybase Central toolbar buttons while it had focus, a tooltip appearing would have caused focus to move to the Sybase Central. This problem has been fixed.
320085 Attempting to run dbisql -nogui on Unix platforms not running X, would have failed with an internal error. This has been fixed, dbisql -nogui can now be run without the need for an X server.
320153 ASA allows you to create a table and a procedure with the same name. The object_id procedure (and any procedure that uses it) requires a unique name. To avoid a conflict with this requirement, choose a different name for the table or procedure. Note also that other DMBS may not allow duplicate names for tables and procedures. This is how ASE behaves in this regard.

1> create table otto (a int)

2> go

1> create proc otto as begin select 1 end

2> go

Msg 2008, Level 16, State 1:

Procedure 'otto', Line 1:

The object 'otto' is not a procedure so you cannot create another procedure under that group name.

320155 Using REORGINIZE TABLE ... INDEX to reorganize a Compressed Btree index on a very large table would have crashed the server. This is now fixed.
320187 Using the Upgrade Database wizard to upgrade a database and checking the "Shut down the database when the upgrade completes" check box (which is the default), would have failed when shutting down the server with the error message "The database '<name>' could not be

shut down". This has been fixed. Note that the upgrade would be completed successfully; it was only the shut down that would have failed.

320239 If remote function was defined (using CREATE FUNCTION ... AT ...), and it did not fully qualify the function name in the location string, then attempting to call the remote function would have crashed the server. This problem has now been fixed.
320245 Executing queries with aliases on uncorrelated subselects used in EXISTS, NOT EXISTS, ANY, ALL, IN or NOT IN subqueries, may have caused a server crash. This may have ocurred if the subquery had only one outer reference and this was the alias and the subquery was in a predicate which was considered for subquery optimization.

For example:

SELECT (SELECT c1 FROM t3 WHERE t3.akey='xyz') AS foo

FROM t1,t2

WHERE t1.c2=t2.c2

AND t1.pk NOT IN (SELECT t4.pk FROM t4 WHERE c4=foo)

This has now been fixed.

320277 When installed on Windows 2003, the Services folder in the ASA and MobiLink plug-ins for Sybase Central would not be available. This has been fixed.
320339 Executing a SELECT ... INTO ... would have crashed the server if it contained a single row aggregation which returned a string type and execution of the SELECT failed with an error. This is now fixed.
320357 Using the Embedded SQL syntax, the statements:

EXEC SQL GET DESCRIPTOR sqlda :hostvar = DATA

or

EXEC SQL SET DESCRIPTOR sqlda DATA = :hostvar

could have failed to copy the correct amount of data if the host variable type was DECL_DATETIME, DT_TIMESTAMP_STRUCT, DECL_LONGVARCHAR, DT_LONGVARCHAR, DECL_LONGBINARY or DT_LONGBINARY. The SQLDATETIME structure used by the TIMESTAMP_STRUCT structure is 14 bytes on platforms which do not require alignment, and 16 bytes on those that do. Code with the length of the structure appropriate for the current machine was being generated by sqlpp. Now sizeof(SQLDATETIME) is used in the generated code instead.

320379 When running dbisql on a Japanese version of Windows 2000, the READ statement would misinterpret Japanese characters. This problem has been fixed.
320389 Index scans on databases create with a version prior to 5.0, (that may have been upgraded), could have returned too many rows. This problem only affected indexes that were not fully hashed. This problem has been fixed. The recommended work around would be to do an unload/reload of the database, but rebuilding the affected indexes would do as well.
320516 In a datasource file on Windows CE, the long form of a connection parameter could not have been specified, only the short form. For example, DATABASEFILE could have been specified, but not DBF. This has been fixed so that either form can now be specified for all parameters.
320531 During analysis by the Index Consultant, certain complex queries could have caused the server to crash. This has now been fixed.
320533 During analysis, the Index Consultant could have caused the server to exhaust memory. Immediately before doing so, the server would have gone to 100% CPU usage and the consultant client would appear to hang. This has been fixed.
320534 At a random point during the capturing of an index tuning workload, the Index Consultant, and any client applications currently running, would have hung with no CPU usage. This has now beed fixed.
320535 When given a very large workload of queries (greater than 15,000 in a typical case), and the number of captures topped a certain limit, the server and Index Consultant would have hung. When viewed in the Windows Task Manager, the server would have consumed almost all free memory on the machine. This has been fixed.
320537 When used from dbisql, if given a query contained a statement terminator (ie. a semicolon) inside a string, the Index Consultant would have reported that only one query could be analyzed at a time, and refuse to analyze it.

For example:

select * from T1 where T1.X = ';' order by T1.X;

Aditionally, the error message displayed in this case referred to the statement in the "SQL Comments" window, when it meant the "SQL Statements" window. Both of these problems have now been fixed.

320578 A new option, (under Tools>Options>General), "Prompt to connect on startup" has been added to open the Connect dialog on startup if no command line options are specified. The default is for the option to be on.
320581 When using SQLGetData on a SQL_WCHAR column, fetched from a UTF8 database, the resultant indicator value was incorrect if the data was obtained in chunks.

When using SQLGetData to convert binary data to a SQL_WCHAR column, the resultant indicator value was incorrect.

For binary to wide character conversions, if the data was fetched in chunks, the pieces would be placed in the wrong location in memory. The terminating NULL wide character was placed in the wrong location in memory.

For binary to wide character conversions, the call to the translation DLL passed the wrong type, SQL_CHAR instead of SQL_WCHAR, for wide characters. In some cases, it passed the wrong length as well.

These problems have been corrected.

320615 Validate Index ensures that each referenced row exists in the index, but it did not ensure that each referenced row could be found. Now each row is looked up by value. Note that Validate Table does check for this.
320616 Reorganizing a comparison-based index with many entries (more than 3,000,000 in a database with a 2k page size) would have corrupted it. This is now fixed.
320645 The server could have crashed when searching a trie-based index for long strings not in the column's domain. Typically for this to occur, the string would have to have been greater than 255 characters in length.
320657 The Watch Manager was missing mnemonics for lists boxes. These have now been added.
320659 If a remote database contains only one publication and dbmlsync is running in scheduling synchronization, dbmlsync will run in hover-mode. Whenever errors occur in an upload, dbmlsync should completely shut down the log scanning layer and restart it again. However, this would not have occurred. This problem is now fixed.
320668 When an OleDbDataReader was open on a connection to a Japanese database (Default collation=932JPN), string values were truncated when fetched. The length of the returned strings was taken as the number of characters, when it should be the number of bytes. This has now been corrected.
320708 The QueryEditor and the Expression Editor did not fit on the screen when the resolution was set to 800x600. These windows have been resized to fit an 800x600 screen.
320753 After upgrading a database through Sybase Central, a dialog containing the error message "The database <dbname> could not be shut down" would appear, and the database would not have been shut down, although the upgrade was successful. This has been fixed.
320876 When using the Foreign Key wizard on Unix versions of Sybase Central, in some instances the last foreign column selection chosen by the user would be ignored. This has been fixed.
320882 Writing a message to the server window with the MESSAGE statement which contained Japanese characters, would not have displayed correctly on a Linux machine running in a Japanese environment. This has been fixed, the euc-jp code page is now supported.
320912 Computed columns that only consisted of "owner"."table"."column" were being truncated to just "column" in the Query Editor. This problem has been fixed.
320929 An internal error would have been reported if:

- dbisql was running on a Windows operating system which was configured to use a multi-byte character set (MBCS), such as Japanese or Chinese, and

- an OUTPUT TO ... FORMAT EXCEL statement was executed, and

- an exported string, which was less than 255 characters, had a MBCS encoding which was greater than 255 bytes.

This problem has been fixed.

320943 DBISQL was was unable to correctly read Japanese characters in script files when it was run from a command line (i.e. in batch mode). This problem has been fixed.
320960 It was not possible to open the Expression Editor to edit an ON condition using the keyboard, it required double-clicking the cell with the right mouse button. It was possible to TAB to the cell, but the keystrokes for editing (F2 or space) were being ignored. This is now fixed.
320974 When using the Erase Database wizard to erase a Write file, the Write file would not have been displayed when browsing for it, unless the file filter was changed to display all files. This has been fixed, the file filter now includes Write files.
320976 When connecting to a database, the plug-in made a second superfluous connection. When disconnecting, this second connections was not closed. This has been fixed, the second connect is no longer made.
321012 If a stored procedure consisting of a single select statement was called in the FROM clause of a query and one of the result columns was of type bigint, the server may have crashed. This has been fixed.
321019 After creating a service using the Service wizard, the new service's status would be displayed as "(unknown)" until the tab page was refreshed . Now, the service's status is displayed immediately.
321036 When using the Object Debugger and trying to step into a procedure where the source could not be found, a message was displayed twice that the source was not found. This has been fixed, the error is now only displayed once.
321047 When connected to a database using jConnect, running the "Create Database" wizard would not have displayed the status messages (e.g. "Creating system tables", "Creating system views", etc). This would only have happened when connected using jConnect, and only if the "Create a database on the following server computer" option was checked in he "Create Database" wizard (which is the default). This problem has been fixed.
321052 When attempting to translate a trigger or procedure from one dialect, (ie Watcom-SQL or Transact-SQL), to the other then back again, would not have resulted in the original text. For 9.0.0, the translate operations were changed to translate the SQL in the editor, rather than the SQL in the database, leading the the problem. The original 8.0 behaviour has now been restored.
321132 The java.util.TimeZone.getTimeZone returns an java.lang.ExceptionInInitializerError: java.lang.NullPointerException(TimeZone.java:342) error.

The same loaded class file works fine on Windows. The database hwas created with jdk 1.3.

and the java file has been compiled with target 1.1.

321146 When performing an edit using Table Editor, the changes would have been discarded when refreshing the folder or refreshing all. This has been fixed.
321160 The error, "-189 - Unable to find in index '{index name}' for table '{table name}', would have been reported whenever INSERT ... ON EXISTING UPDATE was used on a table having computed columns and the computed column expressions referenced an indexed column.

For example:

create table T1(pk int not null primary key ,csc int null compute (pk+0));

insert into T1 (pk) Values(3);

commit;

insert into T1 (pk) on existing update values(3);

This has now been fixed.

321289 If an integrated login attempt failed because of a communications error, the client application could have crashed. This would only have happened if the connection string, (or data source if the DSN parameter was used), contained all of Integrated=YES, Userid and Password. This has been fixed.
321344 Trying to generate an Ultralite plan for a query containing an EXISTS or NOT IN subquery may have failed with SQLCODE -727: "The optimizer was unable to construct a valid access plan." This has been fixed.
321355 When executing a command to update numeric fields with parameters, the AsaClient needs to convert .Net numeric values to ASA numeric values. If the scale of a numeric value was incorrect, the command would have failed and an exception thrown. This has been fixed.
321429 The 32-bit Windows support on Win64 for Itanium does not include Address Windowing Extensions (AWE) and scattered reads. Attempting to create an AWE cache in this environment would have failed with "Insufficient memory". Similarly, if a scattered read were attempted in this environment, the IO would have failed with the server reporting an assertion failure. Now, AWE caches are not allowed in this environment and a conventional cache is used instead. Scattered reads are simulated using a large contiguous buffer (as done on other platforms).

Win64 for AMD64 supports both AWE and scattered reads for 32-bit executables.

Running the 32-bit engine on Win64 is not recommended. Running the native 64-bit executable is preferred.

321464 If you perform the following steps, a stack trace will occur.

1. Connect to database in Sybase Central 4.2

2. Create a new table

3. Add a column and define its datatype

4. Select the table name in the table tree view (left pane)

5. Right mouse click Delete

6. Verify the Save changes request

If using "fast launcher", the stack trace remains until the "fast launcher" is restarted or stopped.

321541 The messages installed for the Windows Performance Monitor for ASA Database, Server and Connection counters were in English only, even if a localized version of SAS was installed. This problem is now fixed.
321585 If the same database file was specified twice on the server command line, the server would have reported a meaningless error on startup: "Unknown error(x)", where x was a large number. This has been fixed.
321594 The list of tables in the Synchronization Properties were not being sorted. Now they are
321610 The way Java handled focus changed between JRE 1.3 and 1.4. This caused navigating around the objects in a window, using the mouse or the tab key, to not always work correctly. This has been fixed.
321611 If when using the QueryEditor to create a derived table, a column was aliased with a reserved word (eg "from"), the generated SQL did not quote the alias in the list of columns for the derived table. This has been fixed so that now it does.
321664 The Monitor was sorting the worker threads as strings. Now they are sorted numerically by the stream number, then numerically by the thread number.
321665 Attempting to run the server with AWE support enabled (ie the -cw commandline option) would have caused the server to crash. This is now fixed.
321666 Sequential table scans at isolation levels 1 and 2 did not block on uncommitted deletes from other transactions, but skipped the rows. READ_PAST_DELETED has now been added which changes this behaviour. When ON, (the default), sequential scans at isolation 1 and 2 will skip uncommitted deleted rows as before, but when OFF, sequential scans will block on uncommitted deleted rows at isolation levels 1 and 2, until the deleting transaction commits or rolls back.
321682 Attempting to run ulinit or ulgen against an ASA reference database with a Turkish collation, eg 1254TRK, would have caused the error 揟able 憇ysarticle� not found�. This has been fixed.
321729 When running the Win32 server or client software on a Win64 platform, the SPX port would not have been started. The SPX port is now disabled for 32-bit software running on 64-bit platforms.
321743 If a database or transaction log file was NTFS-compressed, the file fragment count could have been incorrect. NTFS-compressed file are now handled correctly.

Note, the file fragment count is available through the system functions db_property('DBFileFragments') and db_property( 'LogFileFragments' ), and can be displayed in a warning at startup if the fragment count is high.

321775 A database that had been the remote in a Mobilink synchronization, may have caused a server crash if it required recovery from the transaction log. The problem has now been fixed.
321799 When saving the command history, DBISQL now obfuscates the following statements if they contain password information:

GRANT CONNECT TO ... IDENTIFIED BY ...

GRANT REMOTE DBA TO ... IDENTIFIED BY ...

CONNECT ... IDENTIFIED BY ...

CONNECT USING ... (where a password is given)

CREATE EXTERNLOGIN ... IDENTIFIED BY ...

The password is replaced by an ellipsis. The rest of the statement is left as-is, though comments are removed and white space is coalesced. If the statement does not contain a password, it is not obfuscated in any way; any comments it contains are left as-is.

321812 A new server-level property, "NativeProcessorArchitecture", has been added. On platforms where a processor can be emulated (such as X86 on Win64), this property returns a string that identifies the native processor type. In all other cases, property( 'NativeProcessorArchitecture' ) will be equal to property( 'ProcessorArchitecture' ).

For example, the following values are returned:

For the 32-bit (X86) Windows NT engine running on Win64 for Itanium

Property( 'NativeProcessorArchitecture' ) returns 'IA64'

Property( 'ProcessorArchitecture' ) returns 'X86'

For the 32-bit (X86) Windows NT engine running on Win64 for AMD64

Property( 'NativeProcessorArchitecture' ) returns 'AMD64'

Property( 'ProcessorArchitecture' ) returns 'X86'

In all other cases, property( 'NativeProcessorArchitecture' ) returns the same value as property( 'ProcessorArchitecture' )

321813 The Cut, Copy and Paste menu items and toolbar buttons only supported cutting, copying and pasting text within a text field in the Table Editor. Now, the Cut, Copy and Paste menu items and toolbar buttons support the cutting, copying and pasting of database

columns. The Ctrl-X, Ctrl-C and Ctrl-V accelerators can still be used while editing within a text field in the Table Editor to cut, copy and paste text. Since the Delete menu item and toolbar button can now be used to delete columns, the Delete Column menu item (in the File menu) and toolbar button (on the plug-in's toolbar) have been removed.

321834 When a START ENGINE statement was executed in dbisql, the quotation marks from the engine name parameter was not stripped off. For example, the following statement would start an engine called 'Test' rather than Test.

START ENGINE AS 'Test'

Now, the quotation marks do not appear as part of the started engine's name.

321844 The list of columns in the table did not reverse the sort order if the header was clicked more than once, as is standard. Now when a column header is clicked more than once, the sort order alternates between ascending and descending.
321859 The MobiLink Monitor was failing to recognize some MobiLink events. The events that were unrecognized are currently for internal use only, and are now ignored by the Monitor.
321929 If the value specified for a Global Autoincrement partition size in the Column property sheet or the Domain wizard, was larger than 2^31-1, then the value would have been ignored. Now, the arbitrarily large values are respected.
321934 In the Create Database, Restore Database, Compress Database, Uncompress Database, Create Write File and Erase Database wizards, if the option to have the wizards start a new local server automatically was selected, and for some reason the server could not be started or the connection could not be established, then the wizards would have displayed an internal error. This has been fixed.
321970 When a query made use of an index on a column that allowed NULLs, it was possible that the UltraLite analyzer would have generated code that referenced the identifier ULConstantNull_ANY. Since this constant was not defined, the application would consequently not compile. This has been fixed.
322005 After installing Service Pack 6 for NetWare 5.1, or Service Pack 3 for NetWare 6.0, the server would no longer detect if other servers are running with the same name. If -z was specified, messages would have appeared in the console saying "Could not enable broadcasting" and "Broadcast send failed". This was due to a bug in BSDSOCK.NLM shipped with these two service packs. The ASA server will now detect this bug and work around it, and will display a message on the ASA console to that effect. We recommend that a newer version of BSDSOCK.NLM be downloaded from Novell when it is available.
322076 When connecting to the Synchronization Server with Version 9.0 client software, the server's worker thread could possibly have hung. This has been corrected, but as a work around, the worker thread can be recovered by killing the client process.
322102 Each time that a server starts a database that has been initialized with 8.0.x software (or later), it allocates a number of memory buffers that are used to improve I/O performance. The size of these buffers is dependent on the page size of the database, so the larger the page size, the larger the piece of contiguous memory that is required.

If the server were to start a large number of databases that have been initialized with a large page size, the server's address space may have been exhausted or become fragmented and therefore fail to allocated one or more of these buffers. In this situation, the server would have failed with assertion 101413.

The server will now attempt to reduce its memory usage (i.e. to not allocate as many buffers) when a database is started read-only.

322115 The Index Consultant, when used from either dbisql or Sybase Central, would have reported various errors during operation when used with a database using the 1254TRK (Turkish) collation. The most common errors were 'Table not found' or 'Column not found'. This has now been corrected.
322116 On the Limit Index Sizes page, the number of current index pages is displayed as a percentage of current table pages. The percentage was usually appearing as 0. Occasionally, if the indexes were large, it may have appeared as 1, 2 or 3 percent. This has now been fixed to display the percentage correctly.
322117 If a syntax error was detected in a query being analyzed by the Index Consultant, the ix_consultant_log table (which is displayed inside the Log pane of the Index Consultant) would have contained the (non-localized) message "Syntax error near ???". The engine now reports the exact syntax error in the correct language.
322118 When used from dbisql, the Index Consultant would not have analyzed a query of the form INSERT from SELECT. It would have reported that "A SELECT, UPDATE, or DELETE statement could not be detected." This has been fixed so that statements of the form INSERT from SELECT can be analyzed.
322119 Regardless of whether the option 'Keep existing secondary indexes' was checked, the script generated by the Index Consultant would have contained DROP INDEX statements for unused indexes. This has been fixed so that when run with the 'Keep existing secondary indexes' option, no DROP INDEX statements appear in the script.

However, if a saved analysis is revisited at a later time from within Sybase Central, the context under which the original analysis was run is not saved; hence, the Index Consultant will still recommend dropping unused indexes at this time. The user can remove these lines before they run the script if they wish.

322120 Host variables of either string or date datatypes, and procedure variables of date datatypes, would have been inserted as constants into the text of captured queries without their surrounding quote characters. The index consultant would then ignore these queries during analysis, logging the associated syntax errors to the ix_consultant_log table. This has been fixed.

A workaround for customers is to manually edit captured queries of these types to add the quote characters.

322122 When using the Index Consultant, if an error occurred during analysis, a message box would have appeared stating that a problem had occurred during workload capturing. This has been replaced with a dialog stating that "An error occurred.".
322123 The Index Consultant would have occasionally crashed with the exception error java.lang.OutOfMemory. This has been fixed.
322165 When the MobiLink server was run with the command line option -sl Java, it may have hung on shut down. This would have been more likely to have happened when AWT support was invoked. This problem is now fixed.

Another problem was that the server may have failed to report the list of non-daemon threads being stopped due to a shutdown. Now the complete list is reported as an error so that user may implement their shutdown code correctly.

322199 The Synchronization Server may not have responded to tcpip requests by default. This has been fixed, but a workaround is to specify tcpip explicitly using the option -x tcpip( ... )
322265 TDS connections (ie jConnect) to Turkish databases (for example, using collation 1254TRK) would have failed with the error,

ASA error -200: Invalid option 'AUTOMATIC_TIMESTAMP' -- no PUBLIC setting exists

This has been fixed.

322270 When using ROLLUP in a GROUP BY clause, the list of expressions associated with the ROLLUP must now be enclosed in parentheses:

GROUP BY [ group-by-list | ROLLUP ( group-by-list ) ]

Queries such as:

SELECT COUNT(*)

FROM department

GROUP BY ROLLUP dept_name, dept_head_id

are now rejected with "syntax error near 'rollup' on line 3" (these queries were accepted in the beta software)

The following query gives the desired answer:

SELECT COUNT(*)

FROM department

GROUP BY ROLLUP (dept_name, dept_head_id)

322326 When connected to a database which used the Turkish (1254TRK) collation, DBISQL exhibited a number of problems. These have been fixed, and are listed below:

- If the server was started with the "-z" option, and the connection was via jConnect, debugging information from DBISQL was displayed in the server window. (It shouldn't be.)

- Connecting to an authenticated 1254TRK database was not possible.

- If connecting via jConnect, DATE, TIME, and TIMESTAMP column types were all displayed as TIMESTAMP and were not in the appropriate format.

- The list of options listed by the SET command was incomplete

322340 Disabling the ActiveSync provider after a synchronization would have caused ActiveSync to hang.
322348 A procedure containing a comparison of a variable with a subquery involving proxy tables would have resulted in the error:

OMNI cannot handle expressions involving remote tables inside stored procedures

An example of this situation is:

create procedure p()

begin

declare myvar int;

set myvar = 1;

if myvar = (select col from remote_table where pk = 45) then

message 'found'

else

message 'not found'

end if;

end

This statement will now execute correctly.

322363 Lists of objects were not being sorted according to the rules for the current locale. Now they are.

The affected lists were:

- The list of tables in the "Lookup Table Name" dialog

- The list of columns in the "Select Column" dialog

- The list of procedures in the "Lookup Procedure Name" dialog.

- The list of options displayed by the SET command

- The combo box which contained the list of columns in the Import wizard

- The list of database servers in the "Find Servers" window (opened from the "Connect" dialog)

- The list of ODBC data sources in "Data Source Names" window (opened from the "Connect" dialog)

322431 When creating a view, the server must store the CREATE VIEW statement with all the referenced tables qualified with the owners. If a table appeared multiple times in the view definition, the second and subsequent references were not being quailified.

For example, when created by USER1

create view V1 as select * from A join B,

A join C

this view was stored as

create view V1 as select * from USER1.A join USER1.B,

A join USER1.C

As a result other users could not execute the view and a database rebuild would have failed because table "A" could not be found. This has been fixed.

322435 Running dbisqlc in quiet mode, (ie with -q option), could have caused it to crash when it was attempting to generate an error dialog. This has been fixed.
322436 The datatype of CURRENT PUBLISHER, as reported by

select exprtype('select current publisher',1)

would have been different depending on whether or not a Publisher was defined. The data type will now be varchar(128) consistently.

322442 After a system reboot, user login or Explorer restart, the system tray icon of the database engine did not appear immediately. The first checkpoint or message to the server window would have caused the system tray icon to be displayed. This has been fixed, now the system tray icon is visible immediately.
322449 When dbisql was run in console mode, (ie -nogui), the option Truncation_length was being ignored. This has been fixed.
322453 When a server with the Quiet Mode command line option (-q) was started as a Windows service that was allowed to interact with the desktop, any MESSAGE statemnts executed by the server caused the server window to be enabled.
322474 If a loop in a procedure contained a "select ... into #tmp ..." to create a temporary table as well as "drop table #tmp" and the loop iterated many times, the server would eventually have failed with assertion 101506 - allocation size too large when reallocating memory. This has been fixed.
322549 A complex query involving selects on blob columns could have caused the server to generate "unknown device error". The failure occurred when particular execution plans were used by the server. This problem has now been fixed.
322562 The server could have crashed, or assert, if the use of Address Windowing Extensions was enabled, (ie -cw). This is more likely to appear on multi-processor systems. It has now been fixed.
322569 A query with a derived table, such as the following:

select * from (select c from employee) dt(c)

that referenced one of its own columns would have caused a crash. A crash would also have occurred if a procedure call was inlined as a derived table that referenced one of its own columns. For example:

CREATE PROCEDURE p()

RESULT ( c1 int )

BEGIN

SELECT c1 FROM customer

END;

SELECT * FROM p();

This problem has been fixed.

322580 With this change, the AsaCommand.Cancel method is now supported. An application can now execute some command in one thread and cancel the command in another thread.
322583 Dbremote would have reported an error if the FTP server returned the error code '450' in response to the NLST command on an empty directory. Dbremote now treats this as an empty directory.
322598 The upload_cursor for table returns for an INSERT:

Restricted data type attribute violation: Cannot convert ? to a numeric(1,0)

(ODBC State = 07006, Native error code = -157)

Error: Unable to insert into table "obztable" using upload_cursor

The data showed in the mobilink verbose output look corrupted. For the failing the failing columns it shows "*** cannot display ***"

322602 On all Unix platforms except Solaris and Linux, a semaphore is created to test if semaphore sets are allowed on the current platform. Only on AIX, this semaphore was not being deleted. This is now fixed..
322619 Connection parameters requiring character set conversion could have been followed by garbage characters. Depending on the parameters affected (for example userid or password), this could have caused the connection to fail. This has been fixed.
322620 In a successful synchronization through ECC, RSA, or HTTPS, the stream error STREAM_ERROR_WOULD_BLOCK would have been reported, even though the sqlcode was SQLE_NOERROR. The secure streams no longer report this error.
322632 A crash could have occurred if a table was scanned sequentially, fetching more than eight string columns with no comparison predicates and at least one 'IS NULL' predicate referencing a column after the string columns.

For example, the following would have caused the problem:

create table T(

pk int primary key,

c1 char(20) not null default 'charfield',

c2 char(20) not null default 'charfield',

c3 char(20) not null default 'charfield',

c4 char(20) not null default 'charfield',

c5 char(20) not null default 'charfield',

c6 char(20) not null default 'charfield',

c7 char(20) not null default 'charfield',

c8 char(20) not null default 'charfield',

c9 char(20) not null default 'charfield',

c10 char(20) not null default 'charfield',

c11 char(20) not null default 'charfield',

c12 char(20) not null default 'charfield',

c13 char(20) not null default 'charfield',

c14 char(20) not null default 'charfield',

c15 char(20) not null default 'charfield',

c16 char(20) not null default 'charfield',

i1 int null,

)

select * from test_row_buffer where i1 is null

This possible crash has been fixed.

322634 Fetching the last row of a query using an ESQL widefetch or ODBC fetch with a rowset size greater than 1, could have been slow. Fetching the last row in this case could have taken as long as fetching all previous rows. Fetching rows one at a time could fetch the last row more quickly than when using a widefetch.

This has been fixed so that the last fetch of a widefetch is now as quick as the last row of a single row fetch.

Note if the cursor type is ESQL SENSITIVE or ODBC DYNAMIC, and isolation level 1 is used, the widefetch of the last row may still be slower than a single row fetch, due to the cursor stability requirement.

322641 Workloads of more than a few hundred unique queries would take an excessively long time to complete. The Java client processing time would increase from about 5-10% of the total runtime for a workload of 100-200 queries, to over 80% of the runtime for more than a few thousand queries. The client would display the messages 'Folding indexes', 'Subsuming indexes' and 'Writing report' during the extra processing time. This has been fixed so that the client consumes a small percentage of the total runtime, and the total runtime is substantially decreased. For the test case of 2600 queries, the folding and subsumption phases went from several hours to less than five minutes.
322644 In some circumstances, reading tinyint or smallint values from a table could have given the wrong results on big-endian platforms. This has been corrected.
322770 Some single-byte to single-byte translations would have done an incorrect substitution of the character 0x1A. For example, if a client using the cp1252 character set connected to a server using the ISO_1 collation and character set, extended chars common to ISO_1 and cp1252 would have been mapped to 0x1A. This problem is now fixed.
322772 When dbisql read the data files generated by dbunload with an external reload (ie -ix or -xx), the resulting table's may have contained invalid data, if the original table's contained non-ASCII (typically multi-byte) values. This has now been fixed.
322776 The error "System.ArgumentException: Cannot change DataType of a column once it has data" would have been thrown if a DataSet was reused by resetting the DataTables of the DataSet and refilling. This problem has been fixed.
322779 If an item in the GROUP BY clause was a reference to an alias in the select list, and was surrounded by parentheses, an infinite loop would have occurred.

For example:

select 1 a group by (a)

This is now fixed.

322864 Sybase Central could have reported an internal error if the focus was moved while a context menu was open. This has now been fixed.
322867 When executing a batch that returned multiple result sets with differing schema and connected via the iAnywhere JDBC Driver, fetching the second or subsequent result set could have resulted in conversion or truncation errors. For example, the following batch would have failed to return the second result set correctly.

drop table test;

create table test( c long varchar );

insert into test values ('test');

BEGIN

select 123;

SELECT c from test;

END

This problem has now been fixed.

A second problem with multiple result sets was also fixed. If the previous result set was closed, then the call to determine if there were additional result sets would have failed, making it seem like there were no more result sets for the statement. This problem has also been fixed.

322888 The dbbackup utility (dbbackup -x) could have hung (even if there were no outstanding transactions), until any connection did a commit, rollback or disconnect. In order for this to occur, the backup had to take (or be blocked) for longer than half of the checkpoint time. This has been fixed.
322897 If the starting log offset X (the minimum value of the log_sent column in the sysremoteuser table for dbremote and the minimum value of the progress column in the syssync table for dbmlsync) in the current replication/synchronization was greater than the redo_begin of the on-line transaction log, any log operations with log offsets less than X in transactions that started in the offline transaction logs and committed at the offsets greater than X could have been skipped by dbremote and/or dbmlsync. This problem has been fixed.
322910 If the MDSR encryption option was not installed, then running dbinit, (or using 'CREATE DATABASE') and specifying MDSR encryption would have resulted in the error "Database creation failed: ". The message now reads "Database creation failed: MDSR is not available".
322912 If the server was started without a -n command line option to name it, but the filename or alias of the first database listed was longer than 40 characters, the server would have used that full filename or alias as the server name, rather than truncating it to 40 characters. If dblocate or the Find Servers feature of dbisql or Sybase Central was used and found this server, the server could have crashed. This has been fixed.
323019 When running a query with a prepared command, the ASA Provider created an internal rowset which was never freed, causing a memory leak. This was fixed by deleting the internal rowset when the owning command object is released.
323062 If a database was autostarted by a connection request, the engine should have returned an "Unable to start database" error if there were already 255 databases started. The engine however did not return any error, even though the connection was not established and the database was not started. This problem has now been fixed.
323070 If a user made a Remote Procedure Call that involved numeric parameters, then the call may have failed (if connected to ASE or any other Data Direct ODBC datasource) or the parameters would not have been passed correctly. The precision and scale would also not have been passed correctly to the ODBC driver. This problem has now been fixed.
323109 If the debugger in Sybase Central was used to debug some database object, the server would have crashed when Sybase Central disconnected. This has been fixed.
323132 If dbisqlc cannot finds it's component dlls in the current directory or by searching the path, it will access the registry to find the ASA installation directory. It was accessing the registry with KEY_ALL_ACCESS permission, which may have caused access errors. Now KEY_QUERY_VALUE is used.
323179 A SELECT statement containing a CASE expression would have failed on big endian platforms whenever the WHEN clause specified a constant expression within the range -32768 to 32767 inclusive. This is now fixed.
323180 A query with a large number of UNIONs or one that referenced a large number of distinct tables could have crashed the server. These types of queries will now return -890 "Statement size or complexity exceeds server limits".
323194 Normally an application using the ADO.NET provider will create an AsaCommand object (representing the query to be executed), obtain an AsaReader (representing the cursor for that statement), fetch the rows, call AsaReader.Close() and then delete the AsaCommand object. If the AsaCommand object was deleted before calling AsaReader.Close(), it was possible that the provider would have attempted to send an invalid statement handle to the server when trying to drop the statement. If done repeatedly, this could have resulted in the resource governor for prepared statements being exceeded, as well as wasted resources on the server. The statement is now dropped correctly.
323200 If two cursors were pointing to the same row and they both did a positioned delete, the second delete would have undone the first, and the row would have remained unchanged. If the second cursor did an update instead, the original deleted row would have come back and the new version of the row would have been added to the table as an entirely new row.

Now, if the second cursor does a delete or update on a row that another cursor has just deleted, the operation will fail and SQLE_NOTFOUND will be returned.

323203 Executing a DELETE WHERE CURRENT OF cursor statement could have caused a future FETCH RELATIVE 0 to actually move the cursor ahead one row. This has been fixed.
323206 When an off-line transaction log directory was not specified, log scanning tools on CE would have failed to find the off-line logs if they were in the root directory. This problem has been fixed.
323271 With Ultralite Dynamic SQL, rows could have been omitted when an index containing null values was being used. This is now fixed.
323275 When connected to a database with the Japanese collation 932JPN, executing a CREATE PROCEDURE, FUNCTION or TRIGGER statement, which had Japanese characters with the second byte as \x7d, would have caused a syntax error (ASA error -131). This problem has been fixed.
323291 If a cursor had both bound columns and used getdata statements, and the first column was not bound but accessed using a getdata, then the fetch may have returned no error or warning when it should have returned SQL_NOTFOUND or SQL_NO_DATA. This problem was more likely when the DisableMultiRowFetch parameter was used. Attempting to do a getdata when past the end of the result set would have failed with a "No current row of cursor" error.

Also, if a cursor had both bound columns and used getdata statements, and the DisableMultiRowFetch connection parameter is used, poor performance could have occurred.

Both of these problems have been fixed.

323298 THe ASA Provider held locks and kept cursors open after they were closed, if it was called from OLEDB.NET provider. The internal ODBC cursor is now closed when the OLEDB rowset is closed.
323407 The server's cache page replacement scheme could have behaved poorly. It was unlikely that this issue would have caused any noticable problems, but it could have manifest itself as a general engine slowdown, or could possibly have caused an unexpected out of memory situation.
323519 If the definition of a procedure, trigger, view or event exceeded 512 characters and the definition contained a right brace ("}"), the preserved-format source would have been truncated without warning or error by the dbunload utility. The complete definition will now be output.
323576 The analyzer would fail to generate C++ accessor methods for queries that used the CAST function in the select list.

For example:

SELECT id, CAST(id AS CHAR(10)) AS charId FROM T

This should generate a GetId() method and a GetCharId() method. However, the latter was not being generated. This is now fixed.

Also note that the SQL type reported for a CAST expression will be the SQL type of the column, not the CAST type. (In the example above, if id was of type integer, the type for the 揷harId� column will be reported as SQL_S_LONG ).

323652 If an update affected the primary key columns for a table, more than one row was modified, and an AFTER row-level trigger was defined on the table, the update could have caused the server to crash. Whether or not a crash would have occurred depended on additional factors, such as the number of rows in the table, the access plan used to perform the updates, and the actions within the trigger. This has been fixed.
323655 If a table was renamed to a name longer than 128 characters, the table would have become inaccessible. Attempting to rename a table to a name longer than 128 characters will now generate an "identifier 'xxx...' too long" error.
323662 Three separate problems were causing the Index Consultant to report table not found errors.

After the first phase of analysis (the task bar had already reached 100% at least once), the Index Consultant could have displayed an error dialog reporting that 'Table %1 not found' if the user currently running the Index Consultant did not own the table. Subsequent phases of the analysis would not have contained any indexes over the table on which the error was reported. This has been fixed.

As well, when a user was examining the results of a completed analysis, displaying the 'With Virtual Indexes' plan, would have caused the error 'Table %1 not found', if the user did not own the table on which the virtual index was created. The plans could not be viewed if the user did not own all tables over which the query ranges AND the tables in the original query were not fully qualified (can happen for statements captured inside procedures). This has been fixed.

A third issue was that the script generated by the Index Consultant did not have fully qualified table names. This has been fixed. The work around is to add the creator to the table names in the script edit window.

None of these problems would have appeared when the user running the Index Consultant was also the creator of all the tables on which indexes had been recommended.

323683 On Windows CE devices, the exception, TypeLoadException, would have been thrown if dbdata8/9.dll was not found in the directory containing iAnywhere.Data.AsaClient.dll. This is now fixed.
323706 Specifying 'PCTFREE 0' on the CREATE TABLE statement had no effect and the PCTFREE specification was left as the default value. With this change CREATE TABLE will work as intended.

Note that specifying 'PCTFREE 0' on the ALTER TABLE statement works correctly and can be used after CREATE TABLE to achieve the desired specification.

323739 Opening the property sheet for a user with a password, unchecking the "Allowed to Connect" check box, and then clicking Apply or OK, under some circumstances, would not have executed any SQL statement. Thus, the password would not have been removed from the user. Now, the password is correctly removed.
323830 When selecting an external login with a remote password and copying it to the clipboard, the SQL script in the clipboard would have contained an IDENTIFIED BY '<remote-password>' clause, where the remote password string was invalid. Now, the SQL script contains an IDENTIFIED BY ENCRYPTED '<remote-password>' clause, where the remote password string is of the form '\xhh\xhh...', where h is a hexadecimal digit.
323844 Synchronizations would have failed reporting an error like the following:

SQL statement failed: (-194) No primary key value for foreign key '<role name>' in table '<fk table name>'

if the remote database was blank padded and the download stream contained one or more rows that violated foreign key constraints on tables in the publication being synchronized. Now dbmlsync will go through its normal RI cleanup procedures in this case. These procedures generally result in the rows that violate the foreign key constraints being deleted.

323846 The locale for the Notifier, JDBC Bridge and Java virtual machine were all based on the host machines default language. The ASLANG variable and language registry setting did not override the machine setting. These settings now work as they should.
323893 If a SELECT statement inside a procedure was of the type "SELECT * from derived_table", the server may have crashed when trying to reuse the cursor for the statement. This has been fixed.

Example:

create procedure GetTest1( ) as

begin

select c0 from ( select testA0 as c0 from TEST_A

union

select testA0 as c0 from TEST_A ) as ALLTEST( c0 )

end

call GetTest1() ;

323925 Calling SQLGetInfo( ..., SQL_DATABASE_NAME, ... ) could have caused the application to crash if the database name being retrieved was more than 127 bytes long. This has been fixed.
323954 Attempting to start a database in read-only mode would have crashed the runtime engine if the database had an associated transaction log. The runtime engine will now start successfully. A workaround is to disable the transaction log using "dblog -n ...".
323955 If a query that required the use of a temp table was executed during synchronization, it could have failed and returned an empty result set. This has been fixed.
323966 If a user with a password was selected and copied to the clipboard, the SQL script in the clipboard would not have contained the user's password. Now, the SQL script contains an IDENTIFIED BY ENCRYPTED '<password>' clause, where the password string is of the form

'\xhh\xhh...', where h is a hexadecimal digit.

323973 A server crash at an inopportune moment could have resulted in a corrupt database. This was more likely to have occurred with 9.x servers, and with 8.x servers running 8.x databases. It was unlikely to have occurred with 8.x and earlier servers when running against 7.x or earlier databases. This has been fixed.
323981 Unloading a database with the -ar or -an command line options on dbunload could have resulted in a new database being created containing mangled data and object names. For this to have occurred, the operating system character set must be different from the database character set on the machine where the unload was being performed. These dbunload options are used to simply make a new database with all of the same options as the original database. As a result, the fix is to no longer do character set translation when these switches are used.
323982 When a user was selected and copied to the clipboard, the SQL script in the clipboard would have contained a GRANT MEMBERSHIP IN GROUP <group-list> TO <user-name> statement, where the group list included the "PUBLIC" group. Any attempt to execute the SQL script would have resulted in a "User '<user-name>' already has membership in group 'PUBLIC'" error, since the GRANT CONNECT statement in the SQL script automatically adds the user to the PUBLIC group. Now, the group list in the GRANT MEMBERSHIP IN GROUP statement always excludes the PUBLIC group.
324035 A CREATE VIEW statement executed inside a stored procedure could have failed after the first execution. The statement will now execute correctly. A workaround is to create the view using EXECUTE IMMEDIATE.
324201 Using ALT-F-S or CTRL-S to save in the Code Editor window was causing the focus to be lost. This has now been fixed.
324227 An uninitialized buffer caused fetching more than 100 bytes from a varchar column in a database with a UTF8 collation, to return garbage characters. This problem is now fixed.
324235 If a database which had no user DBA (i.e. a REVOKE CONNECT FROM DBA had been done) was unloaded and reloaded using dbunload with the -ar or -an command line option, or the Sybase Central Unload wizard with a new database file specified, then the new database would have had a user DBA and the user that had been used to do the unload would have had the password SQL. This is now fixed.
324240 A checkpoint might not have flushed all pages to disk. If the server shut down or crashed after such a checkpoint, the database would have been left corrupted. This is likely only possible if more than one database is running on the server. It has now been fixed.
324248 In the User Options dialog, the Set Temporary Now button was enabled whenever an option was selected in the list, regardless of whether the option could actually be changed via a SET TEMPORARY OPTION statement. Now, the button is only enabled when displaying options for the PUBLIC group or the current user.
324330 ASA 8.0.2.4272: A simple query crashes the server with an error: "The instruction at '0x005a40ab' referenced memory at '0x0000003c'. The memory could not be 'written'"

Repro:

run BUG4272.sql

-> gpf

Select causing gpf:

SELECT

ps.jahrnummer,

ps.perinummer

FROM

op, fvp,

fvs,

ps

WHERE ps.Perinummer=fvs.perinummer

and ps.Jahrnummer=fvs.Jahrnummer

and fvp.FiBuV_Id=op.FiBuV_Id

and fvp.FiBuV_PosZaehler=op.FiBuV_PosZaehler

AND fvs.FiBuV_Id=op.FiBuV_Id

and

(

( ps.JahrNummer = 2000

and ps.PeriNummer >= 1

or ps.JahrNummer > 2000 and ps.JahrNummer < 2002

or ps.JahrNummer = 2002 and ps.PeriNummer <= 12

)

or

(

ps.Jahrnummer >= 2000 and ps.JahrNummer <= 2002)

)

324334 Queries that contained a nested block join with a Work Table operator above, could have caused the server to crash if the nested block join returned a string column. For example, this type of plan can be selected if a hash join is used below a nested block join. This is now fixed.
324348 If a stored procedure contained remote queries, and the server encountered an error while building a cursor on those remote queries, then the server would have leaked memory. This has now been fixed.
324400 The server could have crashed when optimizing a query that contained the same table with two correlation names in the FROM clause with the primary keys of the two correlations equated and a full outer join also present. This problem has been fixed.

For example, the following query showed the problem.

SELECT 1

FROM ((tab1 T7 , tab1 T9)

FULL OUTER JOIN tab2 T10 ON T9.col3 = T10.col2)

LEFT JOIN tab2 T11 ON T10.col2 = T11.col3

WHERE T7.col1 = T9.col1

324489 With recent changes made to improve semantic checking for GROUP BY queries, and to ensure consistent results for very complex queries, it was possible though unlikely that rewrite optimizations that were performed on such queries may have lead to a server crash. This problem has been corrected.

For example, the following query

SELECT T4.col3 a1,T1.col2 a2,avg(DISTINCT T3.col2) a3,max(T4.col2) a4,

min(T2.col3) a5,count(T4.col2) a6,list(T2.col2) a7,

sum(T4.col3) a8,sum(T2.col1) a9,sum(T3.col3) a10,max(T4.col3) a11,

count(T2.col3) a12

FROM tab5 T1

JOIN tab4 T2 ON T1.col1 = T2.col2

RIGHT OUTER JOIN tab5 T3 ON T2.col3 = T3.col3

JOIN view5 T4 ON T3.col2 = T4.col3

WHERE ( T4.col1 + T3.col1 >= ALL

( SELECT T3.col3 - T1.col3 - T2.col2 - T3.col3 + T1.col2

+ T3.col3 + T2.col2 + 0 FROM tab5 T1

JOIN view4 T2 ON T1.col3 = T2.col3

JOIN tab3 T3 ON T2.col1 = T3.col2 WHERE T3.col2 <= 398 ))

OR (T1.col2 + 0 >= ALL

( SELECT T2.col3 - T1.col2 * 0 FROM tab3 T1

JOIN view5 T2 ON T1.col2 = T2.col3 WHERE ( T2.col3 - T1.col3

+ 1 = ANY

( SELECT T1.col2 * 0 FROM tab5 T1

JOIN tab1 T2 ON T1.col1 = T2.col3 ))

OR (T2.col3 <= 350 ) ) )

GROUP BY T4.col3, T1.col2

HAVING T4.col3 >= T4.col3

INTERSECT

SELECT T2.col2 + T1.col2 * 0 a1, T3.col2 + T1.col2 + 0 a2, T2.col2 * 0

a3, T1.col3 - T3.col1 a4, T1.col3 * T2.col3 a5, T1.col3 + T2.col3 -

T3.col3 - T1.col3 + 1 a6, T3.col1 + T1.col1 + T2.col1 * T3.col3 a7,

T2.col2 + T3.col1 a8, T1.col2 + 1 a9, T3.col2 + T1.col2 + 1 a10,

T2.col3 + 1 a11, T1.col3 - T2.col1 - T3.col3 + T2.col1 + T3.col2

+ T1.col3 + T2.col3 * 0 a12

FROM view3 T1

JOIN tab1 T2 ON T1.col2 = T2.col2

JOIN view3 T3 ON T2.col3 = T3.col2

WHERE T1.col2 <> 240

could have crashed the server; the rewrite optimization is the transformation of the HAVING predicate T4.col3 >= T4.col3 into T4.col3 IS NOT NULL.

324622 Queries with outer joins, where there were predicates involving IN() or ALL() conditions, may have been incorrectly rewritten as inner joins, producing incomplete or incorrect results. This may have happened to IN() conditions if there were multiple terms, at least one of which was not null-rejecting and may have happened to ALL() conditions if the subquery returned no rows (in this case, the predicate was automatically true).

Two examples:

SELECT T2.col3 a2

FROM qts324622 T2

RIGHT OUTER JOIN qts324622 T3 ON T2.col3 = T3.col3

WHERE T2.col2 = ALL

( SELECT col4 from qts324622 where col1 > col2 and col2 > col1 )

SELECT *

FROM qts324622 T1

LEFT OUTER JOIN qts324622 T2 ON T1.col1 = T2.col2

WHERE T1.col1 IN ( T1.col1, T2.col1 )

In both cases, the outer joins were rewritten as regular joins, causing some rows to be missed.

The IN() problem has been fixed in versions 8.0.2 and up, while the ALL() problem has been fixed in versions 9.0.0 and up.

324627 When a server with the -qi command line option (quiet - no window and no icon)) was started as a Windows servicep, any MESSAGE statemnts executed by the server caused the System Tray icon to be displayed. This has been fixed.
324675 The first call to an external stored procedure on a multiprocessor Windows NT, 2000, XP or 2003 machine could have caused the server to crash. Subsequent calls were safe. This has now been fixed.
324683 If the Unicode translation library was missung (dbunic9.dll for 9.x, libunic.dll otherwise) then calling the COMPARE() or SORTKEY() functions would have caused the server to crash. Now the functions fail with an Invalid Parameter error, without crashing the server.
324766 Predicates of the form "expr LIKE '%'" are now transformed into "expr IS NOT NULL", if and only if 'expr' may be NULL. If 'expr' cannot be NULL, the predicate is replaced with 'TRUE'.
324770 This change fixes a problem where the QueryEditor was throwing an exception) if the query was terminated with a semicolon.
324771 Unloading the ASA plug-in would have caused Sybase Central to crash. This is now fixed.
324774 The QueryEditor was not correctly adding parenthesis around the GROUP BY list for the ROLLUP operator. The parenthesis are now added.
324840 If SQL Anywhere for Windows was installed and the program folder was changed to be to be something other than the default, then the 'Deploy SQL Anywhere for CE' entry would still have been created in the default group. This has been fixed so that it is now created in the correct program folder
324841 When a procedure returns multiple result sets, the SQLMoreResults() function is used in ODBC to move to the next result set. If that next statement returned a warning, SQLMoreResults would have completed without opening the result set. The problem is now fixed, and SQLMoreResults will return SQL_SUCCESS_WITH_INFO indicating that the result set is open, but that a warning was returned.
324845 The connection between the ISAPI redirector and MobiLink could have timed out during data synchronization, resulting in the data synchronization failing. This was fixed by keeping the connection open. A work around is to increase the system timeout interval, (default is 4 minutes), by setting the following registry key (value is in seconds):

\\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\TcpTimedWaitDelay

324846 Trivial contradictions in a CHECK constraint that could have caused a server crash when an INSERT or UPDATE of any row in the table was done has now been fixed.

For example, given a table T with not-null column X, a CHECK constraint of the form

CHECK( T.x is NULL)

would have caused a server on the insertion or update of any row in table T.

324897 If a DELETE TRIGGER statement failed, a subsequent DELETE of a row from the table would have caused a server hang. For this to have occurred, the trigger must have failed due to an attempt to delete a row that still had foreign keys referencing it, The Wait_for_commit option must have been off, and the table being deleted from must have had a trie-based index as the index with lowest index id [e.g. the pk index if a pk exists]. This has now been fixed.
324914 When running dbisql on a Chinese Windows XP machine, typing Chinese characters in any text field would have displayed as boxes if support for the GB18030 font had not been installed. This affected Sybase Central and DBConsole as well. This has now been fixed.
324927 Starting the server with the communications protocol SPX on a multi-processor NetWare machine, would have caused the server to abend. This has been fixed.
324931 The Escape key would only have closed the Find/Replace dialog when the Find field had focus. This has been fixed.
324932 Dropping tables or adding foreign keys could have resulted in an invalid schema. Also the Schema Painter was not properly detecting foreign key cycles, which could have caused problems during synchronizations. MobiLink requires that parent tables be synchronized before child tables and this condition wasn't being guaranteed by the schema created in the Schema Painter. Both of these problems have now been fixed.

In order to fix an invalid schema, use the (fixed) ulxml tool or Schema Painter to write the schema out to as an XML file, then reload it back in. The process of reloading it will correct the table order.

324972 A Visual Basic application using the OLEDB driver could have failed with the error "Run-time error '-2147467259 (80004005)': Unspecified error" if the function DoEvents was called. The dboledbax.dll is a COM object, thus has an entry point DLLCanUnloadNow(), which is called infrequently by Visual Basic, whenever DoEvents is called. Each time it was called though, the routine would have returned TRUE (meaning "it is OK to be unloaded"). Eventually, Visual Basic would have unloaded the DLL, even though it was still in use. This has now been fixed. Calls to DLLCanUnloadNow() will now only return TRUE when the DLL can safely be unloaded.
324988 For queries with more than one table and equijoins predicates (e.g., 'key joins'), the error "Dynamic Memory Exhausted" may have been generated if the server ran with a very small cache. This issue has been fixed.

An Example:

select * from systable T key join syscolumn C key join sysuserperm U

324989 Starting dbisqlc on a Windows machine with a connection string that specified a character set different from the OS character set (e.g. "cs=cp1251"), would have caused it to crash on shutdown. This is now fixed.

Note, any executable that used the Unicode translation library, (dbunic9.dll on 9.0.0 or libunic.dll otherwise), and which also loaded and unloaded the DBLIB or ODBC client libraries could have encountered this problem.

324993 The HTTP service would have returned an internal HTTP server error (500), when the socket buffer became full. The service should have continued sending in blocking mode. This is now fixed.
325000 If a query's WHERE clause satisfied the conditions given below, the server would have crashed during optimization. This problem has now been fixed.

(1) the WHERE clause must have contained a tautology (found in the original WHERE clause or generated by a rewrite optimization)

(2) there were at least two equijoin predicates referring to the same column. (ie, there were at least two predicates of the form "T.col1 = R.col1 AND T.col1 = S.col1").

For example:

T.col1 = R.col1

and

T.col1 = S.col1

and

( (T.col2 >=100000

and T.col2 < 2000000

and expr1 >= 1000)

or (T.col2 >=2000000

and expr1 >= 10000)

)

In this case a tautology was generated by one of the rewrite optimizations, namely "T.col2 < 2000000 OR T.col2 >= 2000000".

325020 An UPDATE statement that modified multiple tables, could have caused the server to crash or to generate bad column statistics. This problem has been resolved.
325022 While updating column statistics in response to queries involving BETWEEN predicates, the server could have crashed. Whether the crash occured or not, depended upon the particular query plan chosen for execution. This has now been fixed.
325023 In some cases, the server could have computed invalid selectivity estimates which were displayed as negative numbers in the query plans generated by the server. This problem has been resolved.
325024 If a stored procedure contained code for creating another database object, (such as another stored procedure) and a SET USER command was executed while the stored procedure was running, it was possible for the object to have been created with an incorrect user in the transaction log. This problem has been resolved.
325029 When run on AIX machines with the Power4 processor, shared memory applications could have been disconnected from the server unexpectedly. The Power4 chip has a weak-memory ordering architecture. This fix puts the required memory barrier instructions at proper places in the shared memory communication protocol.

Workaround: The bindprocessor command can be used to bind both the client and the server to the same CPU.

325032 When run on Windows machines, certain graphical objects could have been inadvertently displayed underneath the Windows task bar. Note that this problem was also present in Sybase Central, the Database Object Debugger, and DBConsole.

These objects included:

- The splash window

- Context menus

- Property sheets, dialogs, wizards

- the editor window for stored procedures and dialogs opened from the editor

The problem was especially noticeable if the taskbar was docked to the left or top edge of the screen. This has been fixed.

325034 Install on a device running Windows CE 4.1 would have failed. This was due to the INF file used by CE Application manager only supported versions up to 4.0. Version 4.1 did not exist when 8.0.2 originally shipped. This has now been fixed.

There are two work around options:

1)

Install ASA 8.0.2 for Windows CE on the desktop machine, but choose _NOT_ to

deploy to the device.

Then install an EBF for ASA for Windows CE, build 4122 or later, which will allow the install to the device toc work correctly.

2)

Edit <ASA_DIR>\ce\asa_ce.inf with a text editor

In each of the following sections, change "VersionMax" to something larger than

4.1 ( for example, 5.0 )

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

[CEDevice.MIPS.30] ; for MIPS processor

ProcessorType = 4000 ; processor value for MIPS R3900

VersionMin = 3.0

VersionMax = 4.0 <-- change this to 5.0

[CEDevice.ARM.30] ; for StrongARM processor

ProcessorType = %ArmProcessor% ; processor value for ARM

VersionMin = 3.0

VersionMax = 4.0 <-- change this to 5.0

[CEDevice.X86.30] ; for X86 processor

ProcessorType = x86 ;

VersionMin = 3.0

VersionMax = 4.0 <-- change this to 5.0

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

325039 Certain Unicode characters would have incorrectly compared as equal, possibly resulting in a corrupt index, if they differed only in the high byte. For example, an index containing a string column with these characters could have failed to find rows previously inserted, resulting in invalid index entries after deleting rows. This has been fixed.
325093 If the server was started with the -qs command line option, and a usage error occurred, a usage dialog would have appeared on Windows platforms. The usage dialog is now suppressed if -qs is on the command line. Note that including -qs within @filename or @environment variable command line expansion will not suppress the usage dialog.

Also, if a usage error now occurs, a message is appended to the -oe error log file on all platforms.

325174 With UltraLite, LONG VARCHAR and LONG BINARY values cannot be compared. Since comparisons are required to implement GROUP-BY and ORDER-BY, columns with LONG VARCHAR and LONG BINARY data types cannot be specified in either ORDER-BY or GROUP-BY. This situation will now be signaled as an error.
325231 Cancelling an HTTP request could have caused the server to crash. This has been fixed.
325292 The sample program simplece, may have crashed with a Fatal Application Error, when run on a Windows CE .NET 4.1 device. This has been fixed.
325396 The "Time_format", "Date_format", and "Timestamp_format" options were being ignored when displaying table data with the "Data" tab. This is fixed and these options are now respected.
325403 Calling a proxy stored procedure (e.g. dbo.sp_remote_tables) would have resulted in a heap page being left locked in the server's cache. If the procedure was called many times, this could have exhausted the cache as well as cause the temporary file to grow. This is now fixed.
325415 Some error messages related to debugging Java in the database would have been displayed as "null" rather than their correct text. This has been fixed.
325421 When inserting or updating table data via the table's "Data" tab, if the server was shutdown or the connection was dropped before the insert or update was completed, any attempt to change the selected item in the tree or close Sybase Central would have resulted in an infinite number of error dialogs being displayed. This has been fixed.
325437 Queries with many nested 'ANY (subquery)' predicates may have had a large OPEN time, due to rewrite optimizations applied while flattening subqueries. For this to have occurred, all the subqueries had to have been flattenable and many equality predicates were part of the original query or could have be inferred for some of the subqueries.

For example:

select * from t0 where t0.c2 in (select t1.c2 from t1 where t1.c2 in (select t2.c2 from t2 where t2.c2 in

(select t3.c2 from t3 where t3.c2 in (select t4.c2 from t4 where t4.c2 in (select t5.c2 from t5 where t5.c2 in

(select t6.c2 from t6 where t6.c2 in (select t7.c2 from t7 where t7.c2 in (select t8.c2 from t8 where t8.c2 in

(select t9.c2 from t9 where t9.c2 in (select t10.c2 from t10 where t10.c2 in (select t11.c2 from t11 where t11.c2 in

(select t12.c2 from t12 where t12.c2 in (select t13.c2 from t13 where t13.c2 in (select t14.c2 from t14 where t14.c2 in

(select t15.c2 from t15 where t15.c2 in (select t16.c2 from t16 where t16.c2 = 30))))))))))))))))

325453 It was possible for the round() function to have returned an incorrect result. The number returned may have been truncated, instead of rounded, if the digit to be rounded was a 5. For example, 69.345 may have been 'rounded' to 69.34. This has been fixed.
325533 When SQLPP was supplied with a user-specified collation sequence, with a name that differed from an ASA standard collation sequence, when an Ultralite database was being generated, nothing would have been generated and the error message:

Cannot generate UltraLite collation sequence for <name of collation>

would be displayed. This was corrected.

325545 When in the "Results Table" pane, clicking the "Copy Cell" context menu item for a BINARY column would not have copied the column data. Instead, a string of the form "[B@xxxxxx" would have been copied (with the x's being random hex digits.)

Note that this bug affected the table "Data" tab in the ASA plug-in for Sybase Central as well. Both are now fixed.

325668 The dbunload utility was not adding the CLUSTERED keyword to the CREATE INDEX statement in the reload.sql file for clustered indexes, clustered primary keys, and clustered foreign keys. This has been fixed.
325674 When adding or editing column properties on the "Columns" tab for a Table object, it was possible to select invalid values. This would have caused an error message that the values were invalid, but now the software is better at filtering out invalid values. Specifically, the following changes have been made:

1. The default size for a CHAR field is now 1. It was zero, which was not valid.

2. The up/down buttons for the spin boxes used to edit the size, scale, and precision fields are now enabled properly. Previously, clicking on a disabled button would still have done something.

3. Typing or pasting an invalid value into a spin box, then saving the table, would have saved a value which was loosely based on the invalid value. Now the last valid value for the spin box is saved.

325694 Connections could have been dropped if the client was using TLS encryption and was running on Windows 95, 98, or ME. This has been fixed.
325713 When running on Windows CE, the AsaClient would have failed with an unhandled exception on opening a database connection, if the code-page of the database was not supported by the device. Now the AsaClient will check the code page of the database and if it is not installed on the device, the AsaClient will throw an exception to inform the application.
325731 When running the Index Consultant and capturing a large number of queries, the server could have reported that it was out of memory. Even if this did not occur, the server's memory usage would have been substantially increased every time capturing was run on a large number of queries. The memory loss could also have caused performance problems. This has been fixed.

A workaround for this problem is to restart the server after running the capturing phase of the Index Consultant.

325734 The QueryEditor keeps a statement open so that sample results can be displayed. As the query is changed the statement is closed, recreated, and executed. The statement was being left open, leaving the table locked. Now, when the QueryEditor's dialog has been closed the statement is also closed.
325741 When the server was running on NetWare, if a string containing the '%' character was displayed on the server console (through the MESSAGE statement or request-level logging), the server could have displayed garbage or crashed. This has been fixed.
325782 When SQLPP was supplied with a user-specified collation sequence file that did not exist, the SQLPP utility would have crashed. This is now fixed.
325853 When exporting a table to an Excel spreadsheet using the OUTPUT statement, all the column values were being written out as labels (strings). Now, the following data conversions are used instead:

SQL Type Excel Type

TINYINT, SMALLINT Integer

INTEGER, BIGINT Numeric

FLOAT, REAL, DOUBLE, DECIMAL, NUMERIC Numeric

BIT BoolErr

(everything else) Label

325861 In some rare situations a 64-bit server could have failed to correctly read column statistics that were created in the database by a 32-bit server. The failure could also have lead to the 64-bit server crashing. This has been fixed.
325868 Starting the evaluation version of the MobiLink server would have showed the 60-day evaluation notice and waited for user input. Pressing 'Enter' would have caused the notice to have been re-displayed again. The evaluation screen message that asks the user to hit 'Y' or 'Yes' to accept the license agreement, was not being displayed. This is now fixed, but a work around is to enter 'Y' or 'YES' to confirm acceptance of the evaluation license agreement.
325869 A NullReferenceException could have been thrown when AsaDataReader was finalized by .NET CLR. This problem has been fixed.
325911 With Appforge MobileVB, if a persistent_name was specified upon opening, a table could later be reopened to it's current position as long as it was not closed. If a table was closed, then the table should not be reopen to it's current position. It was always reopening to the current position, wether or not the table was closed. This is now fixed.
326018 Fetching an ESQL DT_STRING, DT_DATE, DT_TIME, or DT_TIMESTAMP host variable (or type array of char) where the length of the char array was one, did not add the null character. This has been fixed so that the null character is set (note no data is actually copied into the host variable's character array other than the null character, since there is only space for the null character).

Fetching an ESQL DT_STRING with length zero on a blank padded database could have caused dblib to crash. This case was only possible when using an SQLDA, and has been fixed so that no data is copied (not even the null character).

326025 Attempting to convert a string like 'May 1999' to a date or timestamp, would have failed with a conversion error when the Date_order option was set to 'DMY'. The value will now be converted using a default day of 1.
326072 If a database which had no user DBA (i.e. a REVOKE CONNECT FROM DBA had been done) was unloaded and reloaded on Unix using:

- dbunload -ar or -an or

- the Sybase Central Unload wizard and a new database file was specified

then the new database would have had a user DBA and the userid used to do the unload would have had the password SQL.

With builds 7.0.4.3469, 8.0.1.3121 or 8.0.2.4279 higher, the error "Invalid user ID or password" would be displayed. Earlier builds did not display any error.

This has now been fixed.

326078 The Upgrade, Backup, Restore, Validate, Compress, Uncompress and Create Backup Images database wizards could not have been cancelled. In addition, they did not display any status information when their operations completed. Now, a messages dialog, similar to the one used by the Create Database wizard, is displayed. The dialog always indicates whether the operation succeeded or failed, and whether the operation can be cancelled before it completes.
326083 If a database was initialized with a collation other than UTF8, non-English characters may have appeared to have been handled incorrectly by the stored procedure debugger. For example, adding a variable with an accented character to a watch window could have caused a syntax error. The "locals" window worked correctly though. The server was not converting the strings coming from the debugger, (which are UTF8), to the database character set. This is now fixed.
326118 UltraLite Dynamic SQL did not support "+" as a concatenation operator. Thus, SELECT 'A' + 'B' did not produce the intended result 'AB'. This support has now been added.
326148 DBRemote and DBMLSync can now specify the location of old mirror logs. This is helpful in situations where the offline mirror logs are located in directory other than where the mirror transaction log resides, or if dbremote/dbmlsync connects via a client-server connection. For dbremote, a new command line option "-ml" was added, and for dbmlsync, a new extended option MirrorLogDirectory (MLD) was created. Transaction logs in this

directory will only be affected if the "delete_old_logs" database option is set to 'ON' or 'DELAY'.

326150 The MobiLink server may have crashed when using cursored uploads. This is now fixed, but a workaround is to disable the statement cache (-hwC+) in versions 8.0.0 and later. No workaround is available for earlier versions.
326164 The server could have crashed when sampling trie-based indexes. For this to have occurred, there must have been no entries in the index being sampled, while there were rows in the underlying table. This could only have occurred if another transaction had concurrently deleted the last row in the table, while the sampling was in progress. This has now been fixed.
326172 When connected to a MobiLink server, and displaying the chart in By User view, synchronizations could have been shown in the wrong rows when new rows were added (unless they happened to be added in alphabetical order). A workaround to fix the chart is to change to By Worker Thread then back to By User. This problem has been fixed.
326176 If a batch statement was prepared and then executed more than once, the server could have crashed if a checkpoint occurred between executions of the batch. This has been fixed.
326219 Some pages that were allocated then freed by the database server, may not have been reused after the next checkpoint. This problem could have resulted in the server growing the database file unnecessarily, as the file would have been grown to create new free pages rather than using existing free pages within the database file. However, all of the free pages would have been recognized and reused if the server was shut down and restarted (until the first checkpoint occurred afterwards). This problem only affected databases created with 8.0.0 or later and which had a page size of at least 2K. It has now been fixed.
326227 The AsaClient dynamically loads the dbdatax.dll at runtime. The LoadLibrary call was failing on Windows ME. This is now fixed.
326236 The data in one or more tables can now be unloaded from within Sybase Central, without stepping through the Unload Database wizard. By selecting the desired tables in the right pane, and then choosing the File -> Unload Data... menu item, an Unload Data dialog will be displayed. This dialog allows specifying the same relevant options as available in the Unload Database wizard, but with all the options on a single page for quicker access.
326320 When a NULL constant is converted to a NUMERIC, a precision and scale of (1,0) is now used instead of the default set by the options Precision and Scale. This is particularly important for UNION queries such as the following:

select unit_price from product

union all

select NULL from dummy

Previously, the data type of the result would have been desribed as a NUMERIC(30,6) (with default precision and scale settings). Now, it is described as NUMERIC(15,2), the data type of the unit_price column. Explicit conversions to NUMERIC will use (1,0), if the conversion does not provide a precision and scale.

For example:

SELECT cast( NULL as numeric ) A, cast( NULL as numeric(15,2) ) B

will be described as:

A NUMERIC(1,0)

B NUMERIC(15,2)

Now, the behaviour of NULL constants is more consistent with that of other constants, where the precision and scale is selected to be as small as possible.

326342 If a batch or procedure returned multiple result sets and one of the result sets generated a warning, then the JDBC driver would have failed to return the remainder of the result sets. This problem has now been fixed.
326369 Starting the server on Windows 95 would have resulted in the server crashing, if Winsock 2 was not installed. This has been fixed so that the server no longer crashes, but in order to use TCP/IP, SPX or HTTP/HTTPS on Windows 95, Winsock 2 must be installed.
326377 When accessed via the VIM message link, messages were not always deleted from a ccMail mailbox after being processed. Messages are now deleted after being processed.
326388 If the command delimiter option was set to something other than the default, and the delimiter appeared in a quoted filename, the filename would have been truncated. Quoted filenames are used in the following statements: INPUT, OUTPUT, READ, START DATABASE, START LOGGING, and STOP DATABASE. This has been fixed.

The workaround for this problem is to not change the command delimiter option.

326406 Rebuilding a 5.x database, using either dbunload or Sybase Central, could have failed with a syntax error, if the option Non_keywords was set. This has been fixed.
326454 Creating a proxy table that referenced an ASE remote server, using server class aseodbc, would have failed if the remote table name contained a '$' character. If the server class was asejdbc, then creating the proxy table would have succeeded, but the proxy table would have been unusable. Both problems have now been fixed.
326460 When using ODBC and fetching multi-byte characters from a UTF8 database, a truncation error could have occurred, even though the correct target buffer length and type were set in SQLBindCol. The ODBC driver used the length of the user's buffer as the length of its own internal buffer. Since one UTF8 character can occupy 1, 2, 3, 4 or more bytes, a larger internal buffer is required. This has been fixed.
326462 SQLGetDescField and SQLColAttribute were returning SQL_FALSE for the SQL_DESC_UNSIGNED attribute for non-numeric types such as SQL_CHAR, implying that these were signed types. The ODBC standard states that: "This read-only SQLSMALLINT record field is set to SQL_TRUE if the column type is unsigned or non-numeric, or SQL_FALSE if the column type is signed." Also, SQL_TINYINT was treated as signed when ASA does not support a signed tinyint.

This has been corrected. The following types are now considered signed.

SQL_C_NUMERIC or SQL_NUMERIC

SQL_DECIMAL

SQL_C_FLOAT or SQL_REAL

SQL_C_DOUBLE or SQL_DOUBLE

SQL_BIGINT

SQL_C_SBIGINT

SQL_C_LONG or SQL_INTEGER

SQL_C_SLONG

SQL_C_SHORT or SQL_SMALLINT

SQL_C_SSHORT

The rest are unsigned types including SQL_C_TINYINT or SQL_TINYINT and SQL_C_STINYINT since ASA does not support a signed tinyint.

326505 A client application could have crashed when preparing and executing an oledb command object to open a rowset. This is now fixed.
326614 The embedded SQl call db_start_engine, was returning a non-zero value and setting the SQLCODE to SQLE_ENGINE_ALREADY_RUNNING (-96) if a server was already running. The SQLCODE is now set to 0 since this is a successful condition.

The call db_start_database was returning 0 and setting the SQLCODE to SQLE_ALIAS_CLASH (-77) if the database was already running. Non-zero is now returned and the SQLCODE is now set to 0 since this also is a successful condition.

326616 Executing an unsupported statements when connected to the utility_db could have reduced the cache memory available. Executing many unsupported statements could have caused performance degradation or even caused the server to run out of memory. When connected to the utility_db database, statements such as CREATE DATABASE, START DATABASE, etc are supported. Unsupported statements give the error "Permission denied: you do not have permission to execute a statement of this type" (-121).

This has been fixed so that available cache memory is not reduced by unsupported utility_db statements.

326619 An application using the ASA provider was not able to get DBPROPSET_DATASOURCEINFO when using DataLinks. This problem has been fixed.
326656 If ASA was installed in a directory which contained non-ASCII characters, the Unicode translation library, (a component of ASA), would not have been able to locate its data files. Certain character set translations would also not have been available and other problems could also have arisen.
326658 When using the Debugger in Sybase Central, switching from debug mode to design mode could have caused it to appear to hang. It was the server that was actually hung, which also prevented any new connections from being established. This is now fixed.
326720 Calling the system procedure xp_startsmtp, with smtp_sender=null, could have resulted in the server crashing. This has been fixed.
326733 The functions xp_startmail, xp_startsmtp, xp_sendmail, xp_cmdshell, xp_read_file, and xp_write_file would have failed on Windows CE if character set conversion was required between the database character set and the OS character set. This has now been fixed.
326745 If a stored procedure, which opened a cursor on another stored procedure call, was called many, many times, by an application usin jConnect or Open Client, the result set for the second stored procedure may have been described to the client even though no data would ever have been returned for that result set. This problem has now been fixed.
326758 If an ADO application attempted to fetch and display columns that contained unsigned, tinyint, or bigint (64 bit) values, an error could have occurred or an incorrect value could have been displayed.

These included the following types and sample values:

tinyint 255

bigint 9223372036854775807

unsigned bigint 18446744073709551615

unsigned int 4294967295

unsigned smallint 65535

A tinyint type was treated as a signed value when it is not. A bigint type was treated as a 32-bit value when it is not. An unsigned bigint type was treated as a signed, 32-bit value when it is not. An unsigned int type was treated as a signed value when it is not.

An unsigned smallint type was treated as a signed value when it is not. These datatypes are now handled correctly.

326785 The BACKUP DATABASE statement would have overwritten existing files when performing image backups. A new clause, ON EXISTING ERROR, has now been added to the statement. An error will now be given if any of the files to be created by the backup already exist. This new clause applies only to image backups.

The syntax for image backups is now:

BACKUP燚ATABASE

DIRECTORY燽ackup-directory

[燱AIT燘EFORE燬TART燷

[燱AIT燗FTER燛ND燷

[燚BFILE燨NLY燷

[燭RANSACTION燣OG燨NLY燷

[燭RANSACTION燣OG燫ENAME燵燤ATCH燷燷

[燭RANSACTION燣OG燭RUNCATE燷

[ ON EXISTING ERROR ]

If the -s command line option for DBBACKUP is used to cause a BACKUP DATABASE statement to be executed, the ON EXISTING ERROR clause will be included by default. If the -y option is specified for DBBACKUP, this clause is not added. When -y is not specified, any attempt to overwrite an existing file will cause an error to be returned. No prompting to replace files will be done when -s is specified.

326799 The MobiLink server may have generated an ODBC error, "function sequence error", when uploading a table with blob columns.

This would only have occurred if:

- the table had a nullable column before the blob column

- an index column followed the blob column

- the data for the column before the blob column was NULL

This has been fixed, but a workaround is to make sure there are no index columns following any blob columns.

326962 Connecting to the utility database using the iAnywhere JDBC Driver, when running in a Japanese environment, and then attempting to execute a CREATE DATABASE command with Japanese characters in the database name, would have failed with an error that the database '??' could not be created. A similar error would have occurred when using Sybase Central connnected via the iAnywhere JDBC Driver. This problem has now been corrected.
326980 Now, when the server detects a deadlock situation, if there is a transaction with a blocking_timeout specified, the one with the earliest deadline will be chosen as the victim to be cancelled.
327019 When an application using the OLEDB driver was connected to a database with the Turkish collation, (1254TRK), some calls to get metadata would have failed. This problem has now been fixed.
327068  
327081 The error 'Count field incorrect' could have occurred when executing an UPDATE statement command and setting a binary column to the value of a variable. This is nowfixed.
327184 A 'Fatal Error: (some error message)' could have been generated sporadically by the server when a database was started in read-only mode. This has been fixed.
327225 A query containing a UNION with a very large number of branches would have caused an assertion failure: "101505 - Memory allocation size too large". Now, the server no longer asserts, but instead the statement fails with an error indicating that a syntactic limit has been reached.
327231 After entering a query and moving to the second screen of the Index Consultant, the shortcuts Alt+m, Alt+p did not switch between the two radio buttons as expected. As well, on the third screen, when selecting the Plan Viewer, Esc did not cause it to exit. These problems have now been fixed.
327291 Calling a stored procedure that called another stored procedure, with the following conditions:

- the called procedure was called in a FROM clause

- the called procedure used a WITH clause to specify the schema

- the calling procedure was called more than once with no intervening event that would have caused the procedure definition to be unloaded

would have caused a server crash. This has been fixed.

327298 A VersionNotFoundException would have been thrown when updating a deleted row with the DataAdapter without first setting the DataRowVersion property of DeleteCommand's parameters to 'Original'. This problem is now fixed.
327304 If a user's password was changed to something containing a semi-colon (';'), connecting as that user was no longer possible, except from a another connection by a user with dba authority and not specifying a password. This has been fixed - the GRANT statement will now fail if the password contains a semi-colon.
327306 A NullReferenceException would have occurred when calling ExecuteScalar if the command did not return a resultset. This problem has been fixed.
327312 When using the AsaDataAdapter to fill a DataTable that included a varbinary column with a value of empty string, an ArgumentNullException was thrown. The AsaClient was failing to convert the binary column to a byte array for empty strings. This has been fixed by returning a zero-length byte array for empty binary values.
327432 For very complex WHERE clauses in disjunctive form, new IN predicates are now generated that can be used as sargable predicates. For an IN predicate of the form "T.X IN ( constant_1, constant_2, ...)" to be generated, it is necessary to have in each term of the disjunction a predicate of the form "T.X = constant_i". In the example below, query Q1 is now transformed into query Q2, where two new sargable IN predicates are generated.

Example:

Q1:

select *

from T

where (T.X = c1 and T.Y = c2) or

(T.X =c3 and T.Y = c4) or

(T.X = c5 and T.Y = c6) or

(T.X =c7 and T.Y = c8) or

(T.X = c9 and T.Y = c10) or

(T.X =c11 and T.Y = c12)

Q2:

select *

from T

where T.X IN ( c1, c3, c5, c7, c9, c11) and T.Y IN (c2, c4, c6, c8, c10, c12)

and T.X IN ( (c1, c2), (c3, c4), (c5, c6), (c7,c8), (c9,c10), (c11,c12) )

327567 When calling AsaDataAdapter.Fill( DataTable ), a NullReferenceException would have been thrown if MissingSchemaAction was AddWithKey and the table already had a primary key. This has been fixed.
327642 User functions that had a procedure id (proc_id in SYSPROCEDURE) that was greater that 32k would have always returned NULL. This has been fixed, these functions now return the correct return value.
327668 Attempting to delete all rows matching a certain criteria, assuming there was an appropriate index, may have missed some rows or deleted the wrong rows.

For example:

t.findBegin();

<specify search criteria using t.set*(...)>

t.findFirst();

t.delete();

while( t.findNext() ) {

t.delete();

}

would have skipped some rows because delete() modified the search criteria. If there were an odd number of rows matching the search criteria, this approach would have deleted rows that did not match the search criteria.

Table.delete(), Table.truncate(), and Table.deleteAllRows() have now been changed so as to cancel all edit and search modes.

327704 A connection over namedpipes, which used a communication buffer size greater than the default 1460 bytes, could have failed with a communication error, if a request or response was larger than the default packet size. The communication buffer size is specified with the -p server option or the CommBufferSize (CBSIZE) connection parameter.

This has now been fixed so that communication errors no longer occur.

327708 Attempting to delete all rows matching a certain criteria, assuming there was an appropriate index, may have missed some rows or deleted the wrong rows.

For example:

t.findBegin();

<specify search criteria using t.set*(...)>

t.findFirst();

t.delete();

while( t.findNext() ) {

t.delete();

}

would have skipped some rows because delete() modified the search criteria. If there were an odd number of rows matching the search criteria, this approach would have deleted rows that did not match the search criteria.

Table.delete(), Table.truncate(), and Table.deleteAllRows() have now been changed so as to cancel all edit and search modes.

327728 Attempting to delete all rows matching a certain criteria, assuming there was an appropriate index, may have missed some rows or deleted the wrong rows.

For example:

t.findBegin();

<specify search criteria using t.set*(...)>

t.findFirst();

t.delete();

while( t.findNext() ) {

t.delete();

}

would have skipped some rows because delete() modified the search criteria. If there were an odd number of rows matching the search criteria, this approach would have deleted rows that did not match the search criteria.

Table.delete(), Table.truncate(), and Table.deleteAllRows() have now been changed so as to cancel all edit and search modes.

327823 It was possible for an autoincrement (or global autoincrement) default on a numeric column to overflow and cause other values in the row to have been corrupted. This hasnow been fixed.
327840 When updating data with a data adapter, DBConcurrency was not thrown if an attempt to execute a DELETE, INSERT or UPDATE statement resulted in no rows being affected. This problem has now been fixed.
327932 ASA Windows applications including the server, dbremote, dbmlsync and dbmlsrv would fail to find quoted UNC style filenames specified on the command line. For example, passing the database file as "\\server\share\dir\my.db" would have failed with the error "Could not open/read database file: \server\share\dir\my.db"

Attempting to use connection strings such as "...;dbf=\\server\share\dir\my.db;..." would have succeeded only if the server myengine was already running (even if the database my.db wasn't running), but would have failed if myengine was not running, due to this problem.

This has been fixed so that quoted command line arguments of the form "\\server\share\etc" no longer removes the first back slash.

Note that running a database from a file server can corrupt the database and is generally not recommended.

327943 Before the Conjunctive Normal Form (CNF) algorithm is applied to a WHERE clause, disjunctions of the form "X = 10 OR X = 20 OR X IN (40, 50)" are now transformed into IN lists (i.e., X IN (10, 20, 40, 50)). Also, disjunctions of the form "X = 10 OR X = 20 OR X=30" are also transformed into IN lists (i.e., X IN (10, 20, 30)). These transformations reduce the number of predicates in a WHERE clause, hence some of the rewrite optimizations (such as CNF) that are done for WHERE clauses, may not have been done prior to this change, and the query may now perform much better.
328051 Complex SELECT INTO statements executed inside a stored procedure may have failed after the first call to the procedure. This has now been fixed, Work arounds are:

(1) rewrite SELECT .. INTO statement as an EXECUTE IMMEDIATE statement

(2) rewrite SELECT .. INTO statement as an INSERT statement (the table inserted into must be created first in this case)

328084 Predicates referring to undeclared host variables and string columns, were not considered sargable. Hence, the predicates wouldn't have been used for an index scan if an appropriate index existed.

For example:

create table T (c varchar(100) NOT NULL,

b int NOT NULL,

PRIMARY KEY (c, b) );

select ulplan( 'SELECT * from T WHERE T.c = ? and T.b = ? ');

The plan for the above query wouldn't contained an index scan, when in fact the primary key index would have been appropriate to be used here. This is now fixed.

328174 After entering a query, the shortcuts on the third screen of the Index Consultant, Ctrl+PageUp and Ctrl+PageDown were not wrking correctly. They did not switch tabs as expected. This is now fixed.
328178 If the dbdsn utility was run with -w command-line option to write out the data source definition, and the DSN already existed, the user was prompted as to whether or not to overwrite the existing DSN. However, the DSN would have been overwritten regardless of the user's response. This has now been fixed.
328180 Some of the download scripts take an optional timestamp parameter (last_download_timestamp). This timestamp can be modified by creating a modify_last_download_timestamp script which is called before the download scripts. The unmodified timestamp was being passed to the connection scripts, now the modified timestamp is used. Table scripts were not affected.
328181 When running the Index Consultant from Sybase Central, the 'Review a saved analysis' radio button on the third dialog could have been selected, even when the corresponding list was empty. Now this radio button is not selectable if the list is empty.
328222 When displaying the current log file settings in the Change Log File Settings wizard, the initial focus was being set to the Back button, so that hitting Enter would have moved to the previous page. Now, the initial focus is set to the Next button, so that hitting Enter moves to the next page.
328353 If a Monitor session had enough users to cause a vertical scrollbar to be shown in the chart in the 'By User' view, then the overview outline would not have been the correct height when the view was changed to 'By Sync'. This has now beed corrected.
328354 Prior to this fix, if the server added an index entry to an upgraded version 4 database, the index could have become corrupted. For this corruption to occur, the value being inserted must not have been fully hashed (i.e. was longer than ~9 bytes). The symptom of the corruption was that querying the index for entries with a particular value returned an incorrect (usually fewer) number of rows. Range searches would have produced the expected number of rows. While the server has been fixed and the database will no longer be corrupted, Validate Table/Index will not catch any existing corruption. A work around would be to unload/reload to a later format database.
328376 DBISQL could have reported an internal error if there was more than one DBISQL window open, and one of the windows was closed by clicking its close icon in the title bar, while DBISQL was executing a statement, but was blocked. This is now fixed.
328387 A query with a WHERE clause containing duplicate IN lists may have returned incorrect results if the following conditions were true:

(1) the duplicate IN list must have been on a base or view column (e.g., T.X IN (2,3))

(2) the duplicate IN list must have appeared in a disjunct with another IN list on the same column (e.g., "(T.X IN (4, 5) OR T.X IN (2,3))" )

(3) the WHERE clause was in Conjuctive Normal Form

This is now fixed.

328444 Queries that contained an outer reference from a subquery to a grouped query block would have failed with the error "Function or column reference to 'x' must also appear in a GROUP BY".

This was not a requirement if the subquery appeared inside an argument to an aggregate function as in the following:

select manager_id, max( (select emp_id from employee where salary=e.salary) ) from employee e

group by manager_id

This has now been fixed.

328462 Running version 9.0.0 of the MobiLink server, on a consolidated database that had not been upgraded to version 9.0, would have shown the error "Column 'last_download_time' not found". Now, the MobiLink server will verify that all the expected tables and their columns exist and if they don't, an error will be displayed message and the MobiLink server shutdown. The only workaround is to run the upgrade script for the appropriate consolidated database.
328466 When attempting to save data to an mlm file, if there was insufficient disk space, an error message would have been displayed, and a zero lemgth file would have been created. If an existing file was being overwritten, the existing file would be replaced by a zero length file. Now, if there is insufficient space to write an mlm file, the error message is displayed and nothing is written to disk.
328482 If a table had a self-referencing foreign key and a LOAD TABLE operation on the table failed, the server would have failed with assertion 104002. This has been fixed
328661 The query details pane of the Index Consultant displays virtual indexes recommended for each query. The user can view details about these indexes by clicking the appropriate button. If there were multiple virtual indexes with similar column signatures recommended on a single table, the details for the wrong index would sometimes have been displayed. This has been fixed.
328664 The Index consultant would have used inconsistent index ids in displayed plans. When viewing plans with virtual indexes, the index names (which include a numeric identifier) would not have matched the identifiers assigned in the generated script. This has been fixed.
328669 The Serializable attribute was not supported for AsaException, AsaError and AsaErrorCollection. The Serializable attribute has now been added.
328678 Executing a SELECT INTO statement that used a procedure call in the FROM clause and specified the schema of the procedure call using a WITH clause, would have crashed the server. This has been fixed.
328695 For ADO applications using client-side cursors, when adding a record to a table containing a char or varchar column, using an ADO recordset, the value in the ADO recordset was padded with blank spaces up to the maximum length of the column. This padding behavior occurred as soon as the assignment took place (well before the new record was transmitted to the database). This has been fixed. Previously, the DBCOLUMNFLAGS field of the DBCOLUMNINFO structure for char and varchar columns included DBCOLUMNFLAGS_ISFIXEDLENGTH. This was incorrect. This flag is no longer set for char and varchar columns.
328699 Attempting to use a connection string with curly braces:

driver=Adaptive Server Anywhere ...;links=tcpip{port=...;host=...}

would have succeeded, but attempting to use a connection string with round braces:

driver=Adaptive Server Anywhere ...;links=tcpip(port=...;host=...)

would have failed. The problem has now been corrected

328702 The Create, Unload and Extract Database wizards allowed choosing the MDSR encryption algorithm when creating a database on any version 8 or later server. However, this would result in the error "Database creation failed: MDSR is not available" unless the server was a version 8 Windows server. Now, the MDSR option can only be chosen in the wizards if the server is a version 8 Windows server.
328847 If an application fetched character columns using the OLEDB driver and the length of the data was more than 200 bytes, then the data returned could have been truncated. This problem has been fixed.
328881 If a DTC transaction was unenlisted while another DTC action was running, the server may have crashed. This would have been seen if an application ran concurrent DTC actions from multiple threads against the same connection. This problem has been fixed.
328939 An incorrect input parameter length or value could have been passed when calling a remote procedure on an ODBC class remote server. This problem could also have caused a server crash in rare situations. It is now fixed.
328946 If an ASA database contained MobiLink Client setup data, upgrading to 9.0.0 would have failed with the following message .

Error in file upgrad60.sql at line 3134 with sqlcode -116

SQL error (-116) -- Table must be empty

Upgrade failed

The upgrade fails on attempting to add a NOT NULL column with a default value to a non-empty table in a single alter table statement. The fix was to make the column NOT NULL later using a second alter statement.

A work around is to synchronize all publications, delete all subscriptions and synchronization users, upgrade to 9.0.0 and then recreate the users and subscriptions.

328956 If the minimum log_sent value in the SYSREMOTEUSER table pointed to the middle of an operation in the transaction log, then dbremote would still have sent data starting at the beginning of the transaction pointed to by the bad offset. Now, dbremote will return an error (No log operation at offset X) in this situation.
328984 When entering dates on the "Data" tab of a database table, all dates were assumed to be in "YMD" order, even if the "Date_order" option was set differently. Now, the setting of "Date_order" is respected.
329001 An embedded SQL application may have crashed with SIGBUS on 64-bit UNIX platforms or received the error "SQL ERROR (-758) SQLDA data type invalid". The SQL preprocessor was generating the sqldabc field in the SQLDA structure incorrectly for 64-bit platforms. This has now been fixed.

Workaround: use the flag -DLONG_IS_64BITS when compiling 64-bit embedded SQL application.

329009 If ASA shared software was installed on a path containing space, step2 of the SIS_CarDealer example would have failed to start the Beeper java application. This problem is now fixed.
329090 If a user attempted to insert a long binary value into a proxy table using a

host variable, there was a chance the server would have crashed. This problem

has been fixed.

329124 Inserting a long binary constant into a proxy table, would have caused the inserted value to have been corrupted. This problem has now been fixed.
329234 When issuing virtual index manipulation statements and specifying a table creator, the creator was being ignored for the CREATE and DROP statements. For example, the following two statements are legal and should create two separate virtual indexes:

CREATE VIRTUAL INDEX testidx ON USER1.tab1(col1)

CREATE VIRTUAL INDEX testidx ON USER2.tab1(col1)

However, they were incorrectly both resolving to the same table and hence the second statement failed with an error that the index already exists. This has now been fixed.

329267 AsaDataAdapter Update method would have fail if the UpdateCommand was generated by AsaCommandBuilder and the query was upper case. The GetSchema method compared strings case-sensetively and failed to identify the key columns. This has now been fixed by changing the string comparison to case-insensitive when setting the key columns and unique columns in GetSchema method.
329294 When converting a NULL constant to a string type (ie CHAR, VARCHAR, LONG VARCHAR, BINARY, VARBINARY, LONG BINARY), the size would be initialized to 32767 if no length was provided. Now, the size is initialized to 0.

For example, the following queries would have returned a column described as length 32767:

SELECT CAST( NULL AS CHAR )

--> now CHAR(0)

SELECT 'abc' UNION ALL SELECT NULL

--> now CHAR(3)

SELECT '' UNION ALL SELECT NULL

--> now CHAR(0)

SELECT IF 1=1 THEN 'abc' ELSE NULL ENDIF

--> now CHAR(3)

329322 When deleting a table with an index, a trigger, or a foreign key with update and/or delete actions, the Indexes, Triggers and System Triggers folders would not be updated accordingly. In addition, when creating or deleting a foreign key, the System Triggers folder would not be updated. Now, these folders are refreshed automatically when these

operations occur.

329326 SyncProgressDialog would not return control to the calling form once synchronization completed. This has been fixed. The CustDB sample (SyncProgressDialog was disabled in the 9.0.0ga version of CustDB) has also been updated.
329327 If a server running on a Unix platform, was started as a daemon (i.e. with -ud), then making remote ODBC connections would have failed with error -656. This problem has been fixed.
329337 If the contents of the Utilities tab page was sorted by clicking on the Name or Description column heading, there was no way to return to the default ordering (other than editing or deleting the .scUserPreferences42 file). Now, the contents of the tab page always retain the default ordering, with the exception that the order may be

reversed; that is, the utilities are always sorted by similar functionality.

329432 A query containing a UNION with a large number of branches would have caused an assertion failure: "101505 - Memory allocation size too large". Previously, at most:

N = (page_size - 112) / 8

union branches were permitted with 32-bit engines, and at most:

N = (page_size - 112) / 16

were allowed with 64-bit engines.

For 2K pages and 32-bit engine, this was about 242 branches of a union. This assertion failure no longer occurs for unions with a large number of branches.

329434 When creating a new object using a wizard, or duplicating an object using the clipboard, if the owner of the new object could have been specified, then the PUBLIC group was included in the owner list. However, choosing PUBLIC as the owner for the new object would always have resulted in a permission error. Now, PUBLIC is always excluded from the

list of owners.

329517 Shrinking or growing the cache could have caused the server to crash or stop with an assertion failure, or for the database to become corrupt. If a cursor was sitting on a page that was removed from the cache, the server would have crashed the next time the page was referenced. If the cache was to have grown before the cursor was referenced again, the cursor would have been referencing the wrong page. Cache shrinking could also have resulted in server crashes, if the cache page size was greater than 4k. This has now been fixed. A work around would be to disable cache resizing.
329521 Attempting to insert a NULL value into a NUMERIC or DECIMAL column with "default autoincrement" could have led to a server crash. The NULL value must have been cast to NUMERIC. The following statement would have caused the crash:

INSERT INTO T( x ) SELECT CAST( NULL AS NUMERIC )

For other column types, there was a possibility that the value returned from @@identity would be incorrect after inserting a NULL value. The correct value should be 0. This problem is now fixed.

329528 Joins on more than one attribute, executed with merge join, would have incorrectly returned rows where a join attribute was NULL in both tables, provided that it was not the first attribute containing NULL. Rows with NULL join attributes will now be rejected as NULL = NULL is Unknown, not True.
329570 If a database's collation was 1254TRK , built-in functions could not be referenced if the function name was in upper case. This has been fixed.
329604 The new feature 'SELECT TOP <integer1> START AT <integer2>' could have caused the server to crash if integer2 was 0 and integer1 was <= 1024, and an ORDER BY clause was specified for the query that was not satisfied by an index.

The START AT clause does not accept 0 as a valid value, and should have given an error message. After this change, the following error message is given:

INVALID_CURSOR_RANGE 09W07 -674L

"statement's size limit is invalid."

329736 A keyset-driven cursor (ESQL scroll) could have caused the server to crash if the query contained a derived table with a TOP n or ORDER BY clause.

For example:

select R.x, R.y, DT.y dty

from R,

( select top 20 y from T order by 1 ) dt

This crash has now been fixed.

329774 The First, Last, Next, and Previous menu items were enabled, but had no effect if the table was disabled. They are now disabled if the table is disabled.
329788 The MIN/MAX optimization (documented in "ASA SQL User's Guide/Optimization for minimum or maximum functions") was not being applied for queries containing predicates with host variables (in Ultralite), or database variables (if plan caching was used).

For example, a query of the form:

SELECT min( R.y )

FROM R

WHERE R.x = ?

should be converted to:

SELECT MIN( R.y)

FROM ( SELECT FIRST R.y

FROM R

WHERE R.x = ? and R.y IS NOT NULL

ORDER BY R.x ASC, R.y ASC ) as R(y)

(assuming that an index exists on R(x,y) ).

Further, a query in a stored procedure that used SQL variables (CREATE VARIABLE or DECLARE) or procedure/function parameters, would not have allowed the optimization when a query was optimized for plan caching. A symptom of this is that a stored procedure would execute more slowly after a few initial iterations, and a query in the procedure met the conditions for this optimization. A work-around would be to set MAX_PLANS_CACHED=0 to prevent plan caching.

Both these problems have now been fixed.

329901 As of 8.0.2, pipelined versions of hash and sort operators were introduced. This allowed the materialization of result rows from the operator to be deferred instead of occuring immediately in the operator. For UNION based queries, some branches of the union may require materialization while others do not. Previously, all rows were materialized in a work table. Now, a work table will be placed at the top of each branch that requires materialization, unless all branches require materialization. This reduces the overhead of unnecessarily materialized rows.
329903 A query with a large WHERE clause, containing a large number of conjunctive and disjunctive predicates of literals, could have caused the server to hang with 100% cpu usage and eventually run out of memory. This has been fixed.
329924 When a second file or session was opened, the chart pane would have remained scrolled at the same position it was at for the first file or session. Similarly, when the Monitor was started, the chart pane did have a scrollbar, but when a session was closed, the scrollbar remained visible. Now, when a second session is opened the chart pane is scrolled to the beginning, and when a session is closed, the scrollbar disappears.
329994 The optimizer was not estimating the selectivity of predicates that involved special values such as CURRENT TIMESTAMP. Now, the selectivity of these predicates is estimated using the values of the expression at optimization time. This may lead to slightly inaccurate estimates if the query is executed a significant period after optimization, but is still likely to yield a better estimate than the guessed selectivity.
330075 A multi-threaded client application, which had multiple connections concurrently using the same debug logfile (using the LogFile connection parameter) on multiple connections, could have been missing debug messages, or possibly have crashed. Problems were more likely on a multiprocessor machine. This has been fixed.
330127 If a TDS (jConnect or Open Client) application made a request which returned a large amount of data (several Kb or more), and then sent a cancel request, the server could have gone to 100% CPU usage, attempting to send the cancel response. While the server was attempting to send the cancel response, checkpoints or DDL would have caused all connections to hang. Fetching a large result set with older versions of jConnect, could hang after running out of memory and sending a cancel request, causing the engine to hang indefinitely. (Current JConnect EBFs may get an java.lang.ArrayIndexOutOfBoundsException instead of hanging.)

Now the server will no longer go to 100% CPU usage or cause all connections to hang when processing a TDS cancel. If the server is unable to send the TDS cancel response for 60 seconds, it will drop the connection.

330140 Entering a table name in the Import Wizard, qualified by owner name, Would have caused an exception reporting that the table did not exist, even if it did or if the wizard was to create the table. This has been fixed.
330234 The TIMESTAMP_FORMAT used when one connection queried another connection's last request time (i.e. connection_property('LastReqTime',some_other_conn_id)) would have been the other connection's format, not the current connection. This has been fixed.

This change also fixes the case where the server could have crashed if a connection queried another connection's last request time at the instant that the other connection was being created.

330282 Whether the server cached and reused an access plan for a query embedded in a stored procedure or function, was based on any variance of the estimated execution cost of the access plans generated in two ways:

- plans generated during the so-called "training period", when the values of any variables are evaluated prior to optimization (and can be considered known constants), and

- a plan generated without knowledge of the values of those variables, hence representing a "generic" plan.

Unfortunately, estimated costs from the optimizer alone were insufficient criteria with which to base this decision. Now, strict plan equivalence is necessary prior to marking a plan as reuseable for subsequent invocations of the procedure.

As a workaround, users may turn plan caching off entirely by setting the option MAX_PLANS_CACHED to 0.

330286 The File Open/Save dialog was not consistently setting its initial directory to the directory that was used last. Now, the initial directory is set correctly.

Note: The file ".isqlSettings9" should be deleted after applying this fix (this is the file in which the initial file dialog directories are saved). The location of this file varies, depending on the operating system used.

330380 Sending an HTTP header broken into two lines would have resulted in a 400 Bad Request error. Multi-line headers are now supported.
330407 It was possible for the server to crash if two or more connections were dropping and reloading procedures concurrently. This has now been fixed.
330437 The DriveType database property has now been added for servers running on the various Unix platforms, (previously it was only available on Windows). This property gives information about the drive on which the database file is located. Possible values include: "CD", "FIXED", "RAMDISK", "REMOTE", "REMOVABLE", and "UNKNOWN".

Note, unlike Windows, this type of drive information may not be readily available on some Unix versions Therefore, depending on the flavour of Unix and the type of drive, it may not be possible to determine the drive type and "UNKNOWN" will be returned.

330440 Under certain circumstances, dbisqlc could have crashed when run on HP-UX on Itanium. For example: if the ESC key was pressed while in the Connection dialog box. This has been fixed.
330441 The -zt command line option for dbmlsrv was mistakenly shown in the usage displayed on Unix platforms. This switch is only available on Windows and now is only shown when usage is displayed when running on Windows.
330481 For a query where IN-list merging took place, followed by CNF to DNF conversion, the result of the conversion may have been incorrect. This could only have happened if a literal altered by the IN-list merging appeared in more than one conjunct.

For example, in the following, the predicate N1.N_NAME = 'GERMANY' appears in two conjuncts and the second appearance is changed to N1.N_NAME IN ('GERMANY', 'FRANCE') by IN-list merging.

(N1.N_NAME = 'GERMANY' or N2.N_NAME = 'GERMANY')

and (N1.N_NAME = 'FRANCE' or N2.N_NAME = 'FRANCE')

and (N1.N_NAME = 'GERMANY' or N1.N_NAME = 'FRANCE')

and (N2.N_NAME = 'FRANCE' or N2.N_NAME = 'GERMANY')

This has been fixed. Note that this is the same problem that was partially fixed for 328387.

330623 The HTTPS synchronization stream defaulted to port 80 when connecting to a MobiLink server via a proxy server. It now correctly defaults to port 443.
330648 Sybase Central could have crashed when unloading a database directly into a new database if an error occurred while reloading the data. The dbunload utility with the -an parameter would have reported an error at the point that Sybase Central crashed.

This has been fixed so that Sybase Central now reports the error and no longer crashes.

330991 Running 7.x versions of UltraLite-based clients against 9.x MobiLink server would have failed with the server reporting that the download failed with error -85. This has been fixed.
331020 If a client application made more than one TLS connection, some memory would have been leaked for each connection after the first. This has been fixed.
331112 Forgetting to specify the sync stream type would have resulted in a null dereferencing when synchronizing. This has now been fixed.
331147 If a table had a computed column with an expression that referenced a user defined function, and had a foreign key defined, then an unload/reload operation would have failed. The failure would have occurred during the reload phase, creating the foreign key. This was due to the values of the computed column being recalculated during the creation of the foreign key, but at this stage of the reload, the user defined function had not yet been defined. This has been fixed by not recalculating computer column values when creating foreign keys.
331278 The cost of querying an xml column using the Openxml() function, in a lateral derived table, would have exhibited nonlinear slowdown as the size of the table increased. This would have become quite noticeable starting at a few thousand documents. The problem has been fixed.
331323 A foreign key's settings for Check on commit, Allow nulls, as well as its Update and Delete actions, are now modifiable from the property sheet. Note that in order to change these settings, the Foreign Key is actually dropped and re-created with the new settings.
331328 If a stored procedure contained a statement like

ALTER TABLE t1 RENAME t2

the statement would fail the second time the procedure was called, with the error:

Table 't2' not found

This has been fixed.

A workaround is to execute the statement using EXECUTE IMMEDIATE.

331392 The Remote Server wizard has been extended to allow for the creation of an external login to the remote server for the current user. This support has been added to allow an immediately connection to a remote server created from within the Migrate Database wizard, even when an external login is required.
331462 Attempting to insert a long string in a multi-byte character set into a proxy table, could have resulted in the data being corrupted. This problem has been fixed.
331508 Attempting to access a remote server from a local server running on a 64-bit platform, where the local database had a page size of 1024, would have caused the server to fail with assertion 101508 "Reference to heap memory is not in first page of heap". This problem has been fixed.
331547 The connection-dropped callback function was not being called for TCPIP or SPX connections. This has been fixed.
331554 After changing one or more column widths in the Table Editor, the new column width settings would be lost and the original settings restored, when you saved or reverted the changes to the table or selected another item in the left pane. Now, the column widths

are retained in the .scUserPreferences42 file, in the same way that column widths are retained for other items.

331652 Output and variant type parameters were not supported by the OLEDB driver. The following C++ example contains both variant type parameters and output parameters.

class CInP1OutP2Accessor

{

public:

CComVariant m_varP1;

CComVariant m_varP2;

BEGIN_PARAM_MAP(CInP1OutP2Accessor)

// SET_PARAM_TYPE( DBPARAMIO_INPUT ) // Default

COLUMN_ENTRY_TYPE(1, DBTYPE_VARIANT, m_varP1)

SET_PARAM_TYPE( DBPARAMIO_OUTPUT )

COLUMN_ENTRY_TYPE(2, DBTYPE_VARIANT, m_varP2)

END_PARAM_MAP()

};

When variant type parameters were used, the OLEDB driver would have failed with an assertion error. The OLEDB driver would not have returned the proper value for an output parameter. These problems have now been fixed.

331657 An application connected via TDS (ie using jConnect, and using Dynamic Prepared Statements, may have crashed when the statement was deleted. This problem has been fixed.
331682 The MobiLink server would have shutdown immediately, after succesfully starting up, if it used the tcpip, http or https communications link and no HOST parameter was specified (which defaults to localhost), and localhost could not be resolved. This has been corrected.
331789 After a multi-threaded windows application called db_fini, SQLFreeEnv, etc to finalize the client database interface (dblib, ODBC, etc), there could have been unfreed thread handles remaining. This has been fixed so that all thread handles created by the client database interface are now freed.

Note the client database interface library will only free all resources after it has been finalized the same number of times it has been initialized.

331826 Attempting to execute an INPUT statement with a "FORMAT SQL" clause, without having previously executed a statement which returned a result set, would have caused dbisql to have reported an internal error. This has been fixed to now report an error message.

In a related problem, if an INPUT statement did not include a table name, and the file format was not "SQL", an error message should have been displayed but was not. Now, the error message is properly displayed.

331845 If a server using Web Services was shut down, the server process may not have completely shut down, (on Win32 platforms the server icon would have been left displayed). When this happened, the database files would have been closed and the communications links shut down sufficiently to allow another server to start with the same name, and on the same files, so it could have appeared as if there were two servers running with the same name. This has been fixed.
331994 Attempting to start a server on RedHat Linux 9.0, could have caused the server to hang (or possibly crash), due to the new Native POSIX Thread Library (NPTL) included in RedHat 9.0. This library is incompatible with the threading model used in previous Linux versions.

Setting the environment variable LD_ASSUME_KERNEL:

export LD_ASSUME_KERNEL=2.4.1

can be used as a work around to resolve the hanging problem. Please see the RedHat 9.0 RELEASE-NOTES for further details.

Servers from version 8.0.2 and above, do not experience this issue and therefore the setting of LD_ASSUME_KERNEL should not be necessary to run these servers on RedHat 9.0.

332134 If the Compute clause for a column contained a subquery, with an unresolved reference to a column name that matched one of the columns in the table, then the server could have crashed while creating the computed value.

For example:

create table t (c1 int);

alter table t add c2 int compute( (select c1+1) )

This problem has now been resolved.

332139 The INPUT statement would have failed to import any data if the FORMAT ASCII clause was specified, the input file did not contain values for all of the columns listed in the INPUT statement, and one of the omitted columns was of type BINARY, VARBINARY, or LONG BINARY. This has been fixed.
332163 After a successful load of a large table, the server creates a histogram for each column in the table to represent the data distribution for the column values. The histogram is subsequently refined in response to queries executed by the server. Over time it was possible for the histogram quality to degrade, causing the server to incorrectly assume zero selectivity for some equality predicates. This problem has been corrected.
332181 When doing a sequential scan of a large table, the server could have crashed. The crash occurred when attempting to free memory used for doing scatter reads at IO completion time. This has been fixed by deferring the free until the next scatter read or until the file is no longer in use.
332213 The executeUpdate() method of the PreparedStatement clase would sometimes have returned the wrong update counter. The counter kept growing after each call to executeUpdate(), even though there was no actual rows updated. This is now fixed.
332306 Using the dbdsn utility to create or delete data sources on UNIX would not have updated the [ODBC Data Sources] section of the .odbc.ini file. This feature has now been added.

A work-around is to edit the .odbc.ini file directly and add the appropriate information into the [ODBC Data Sources] section, or to use a third party driver manager tool for maintaining the file.

332316 Attempting to do a silent install would have displayed the License Agreement dialog. This dialog is now fixed and is no displayed during a silent install. In order to get this fix, copy the new setup.inx file to the install image.
332354 It was not possible to set a non-primary index column for Lookup or Find. For example, the following statements would have result in the error SQLE_METHOD_CANNOT_BE_CALLED

Set table = Connection.Open("MultiIndex_Table")

table.Open("Non_Primary_Index")

table.Columns("non_primary_index_column").Value = value

This error was caused by only checking the primary index for allowable column sets. This has now been fixed to check the index that was used to open the table.

332364 A successfully executed ALTER PROCEDURE (or FUNCTION) statement could have been written to the transaction log with an incorrect owner name if the owner name was not specified in the ALTER statement and the procedure or function was owned by a user other than the one executing the ALTER statement. This error would have resulted in failure during recovery if the logged statement needed to be replayed.

As an example, assume that a procedure USER1.TEST already existed in the database and the procedure USER2.TEST did not exist. Further, assume that USER2 was able to see and modify the procedure owned by USER1. Now, if USER2 executed an "ALTER PROCEDURE TEST" statement, then the server would have resolved the procedure name as "USER1.TEST" and correctly modified that procedure. However, the statement put in the transaction log would have incorrectly referred to procedure "USER2.TEST".

This problem has now been fixed. Note that the problem has an impact only when the logged statement needs to be replayed for any reason.

332475 The START DATABASE statement would have failed with a syntax error if the database name was in quotation marks and started with a hyphen, e.g.:

START DATABASE 'mydb.db' AS "-myName"

This was a specific instance of the way quoted identifiers were handled by dbisql in general. Dbisql had required that all characters in any quoted identifier had to be alphabetic or numeric. This was an incorrect requirement (any character should valid) and has been fixed.

In a related issue, the STOP DATABASE statement did not work if the database name contained a hyphen. This has also been fixed.

332544 An incorrect result set might have been returned for a query inside a stored procedure, if a cached cursor plan was being used, and the statement contained expressions for which expression caching was being used. An example of such statement is a SELECT statement with NOT EXISTS predicates:

select * from Table_1 where

not exists(select * from Table_2 where

Table_2.X = Table_1.X )

The cached expression had to satisfy one of the following conditions:

- the expression referenced tables which changed from one call of the procedure to another (e.g., new rows are being added to those tables)

(2) the expression referenced the stored procedure's parameters, which changed from one call of the procedure to another. This is now fixed.

332636 Personal Servers on Windows were not detecting that another Personal Server was running with the same name if one of the servers was not using shared memory (for example if -ec ecc_tls was used).Network servers on Windows and NetWare were not giving a startup error if a network server with the same name was found on one of TCP/IP or SPX, while the other link (TCP/IP or SPX) started successfully. This only occurred if -x was not specified. This has been fixed so that servers correctly detect these cases and display an error.
332684 In the Design Details pane, when saving the contents of a SQL statement log to a file, if the file specified already existed,the dialog asking whether to overwrite the file, append to the file, or cancel the operation, would have displayed ampersands in the

buttons' text. Now, no ampersands are displayed in the buttons' text and the Alt key can be used to make a selection by typing the desired button's keyboard shortcut.

332685 A SELECT statement which referenced a procedure in the FROM clause, would have failed with a syntax error when used inside a Transact-SQL procedure. Procedure arguments were unparsed without surrounding brackets inside a Transact-SQL procedure. This is now fixed.
332692 A FOR statement in a stored procedure would have crashed the server if the statement tried to use a dynamic query. This has been fixed. A workaround is to declare the cursor and variables explicitly and use a LOOP statement with FETCH statements.
332693 The server could have become deadlocked when dropping tables, users or groups. This was most likely to occur on multiprocessor Unix machines. For the server to have become deadlocked, another transaction must have been concurrently accessing some database object (such as a table, procedure, view) for the first time. This has now been fixed.
332698 When creating a proxy table using the Proxy Table wizard, there was no way to determine which columns belonged to the remote table's primary key. Now, with databases created as of version 9.0.0, the columns in the primary key are displayed using the same icon that is used throughout the Plug-in to denote primary key columns.
332794 Attempting to prepare a statement with an empty column alias (ex. SELECT 1 "") would have caused the ODBC driver to crash. This problem has been fixed.
332836 If a connect event name or table event name was unrecognized, the Mobilink Server would have put the error message "unrecognized connection/table event name" in the Mobilink Server's log. This was confusing, as errors should cause the synchronization to be aborted, but in this situation, we want the synchronization to continue. So the message has been changed from an error to a warning.
332861 Attempting to upgrade a database having a page size of 32K would fail with the error "Value 32768 out of range for destination". This has been fixed.
332960 UltraLite.NET was failing with a System.MissingResourceManifestException when the resources for the "current" language are not available. This has been fixed so that now CurrentUICulture then CurrentCulture then English are searched for resources. If none are found, the SQL error strings revert to the name of the SQL Code.

As a workaround, use Regional Settings control panel to select English as the current language or in the application set the culture to any english-based (en-??) country specific culture: Thread.CurrentThread.CurrentUICulture = new CultureInfo( "en-US" )

332963 When backing up a database using the BACKUP DATABASE statement with the TRANSACTION LOG TRUNCATE option, both the database and log file are backed up and then the current log file is truncated. If there were transactions occurring at the time of the backup, then these transactions can begin in the backed up log and then continue into the current log file once it has been truncated and the backup is complete, as transactions can span log files when using a database created with version 8.0.0 or higher. The proper way to recover from this backup is to start with the backup database and then apply the backup log file followed by the current log file. However, this would not have succeeded, when applying the logs in this way the error "Cannot open transaction log file -- Can't use log file 'log file name' since it has been used more recently than the database" would always have been displayed when applying the current log file. This occurred because the starting offset of the current log was not updated correctly when the backup finished.

Unfortunately, applying the logs incorrectly might have actually worked. For example, if instead of applying the backup log to the backup database first, the current log file was applied to the backup database, it would have applied successfully. Again this is because the log offsets were not correctly updated. This was unfortunate, since all of the transactions that were in the backup log at the time the backup would have been lost.

This has now been fixed, the log offset of the current log file is now updated properly when using the BACKUP DATABASE statement with the TRANSACTION LOG TRUNCATE option. This problem would not have occurred when using dbbackup.exe.

332974 Unix applications, attempting to connect via TCPIP, may have failed to connect with the error message: "Unable to initialize requested communication links". This problem only occurred when connecting via streams, (ie ODBC, dblib or iAnywhere JDBC), not TDS, (ie jConnect or Open Client). Also, the problem required many iterations of:

- Creating an environment

- Connecting through TCP/IP

- Disconnecting

- Destroying the environment

THis problem is now fixed.

333003 When run on Windows, Java code running in the server's VM, could have thrown the Datagram socket exception: "Datagram packet too large." when receiving a single byte from an incoming datagram. . This has been fixed.
333007 Using UltraLite on PalmOS, it is possible to suspend the state of a result set. This behaviour is achieved by not calling the Close method on a result set. When a result set is reopened after it has been explicitly closed (the ULResultSet.Close method has been called) the cursor should be positioned before the first row. However, it was positioned on the row it was on before Close was called. This behaviour has been fixed.

State information (the current row in the result set) is maintained if a persistent name is provided for the ULConnection.PrepareStatement call, and Close is not called on the ULResultSet, or if it is called after the ULPreparedStatement.Close method has been called.

333024 The server could have failed with the error "Fatal error: Unknown device error", or corrupted a table, when updating a large row with a page size larger than 4K. This would only have occurred if the update statement was making the row larger than 4K. As a result of the corruption, rows could have gone missing. This has been fixed.

Note, this fix does not recover lost or corrupted rows.

333033 The ULResultSet.MoveLast method was behaving like MoveFirst, moving the cursor to the first row of the result set rather than the last. This has been fixed.
333108 It was possible for the disconnect of a shared memory connection to the NetWare server to cause the server to crash. This has been fixed.
333111 When optimizing a query that referenced proxy tables, the server unnecessarily calculated

the cost of disk I/O for the proxy tables. This has been fixed.

333142 If a statement encountered an error (e.g. row locked, foreign key violation) while running with the Chained option set to 'OFF' (i.e. INSERTs, UPDATEs and DELETEs are automatically commited), then any locks acquired by that statement would not have been released when the statement completed. This could result in other connections being blocked unnecessarily. This has been fixed.
333248 If an EXECUTE IMMEDIATE statement was used to execute a MESSAGE statement, an "invalid prepared statement type" error would have been issued. This has now been fixed. A workaround is to execute the MESSAGE statement directly, without using EXECUTE IMMEDIATE.
333256 Lithuanian is now supported as a deployment language. The database server, client libraries, MobiLink and client, SQL Remote client, the stand-alone tools and dbisqlc can now run in Lithuanian. None of the Java admin tools support Lithuanian and the documentation was not been translated. The two-letter language code for Lithuanian is LT. "dblang lt" will set the registry so that Lithuanian deployment resources will be used.
333271 When attempting to update a base table joined with a proxy table, the columns being updated were getting set to NULL instead. Such operations are not supported and should have caused an error. The problem has now been resolved and a proper error is now raised.
333275 The server collects and maintains column data distribution statistics during normal operation and uses these statistics for estimating the size of query result sets, which in turn determine the access plan used. Under certain circumstances (see example below), the statistics for character columns, with a declared size greater than 7 bytes, could have caused poor plans to have been chosen. In particular, the same query could have run efficiently on the first execution and slowly on subsequent runs. To illustrate the circumstances consider the following example:

create table stats(c1 int, c2 char(10))

create index stats on stats(c1, c2 )

insert into stats select row_num, 'Bogus' from rowgenerator

create statistics stats

The important things to note are:

1. Column c2 is a character column with size greater than 7 bytes

2. The database is case insensitive

3. There is an index with c2 as a trailing column

4. The relative number of rows that have the same value for C2 is quite large ( 100% for 'Bogus')

5. Statistics have been explicitly generated, so they are presumably in a good state

6. The number of rows in the table that have the same value for C2 for any single value of C1 is relatively small (1 row for each value of C1).

Now, consider a predicate "c2 = 'bogus'" which will return 100% of the rows. Note that the value used in the predicate has a capitalization that is different from the actual values in the table. The statement

select first estimate( c2, 'bogus' ) est from stats

will return 100 which is the correct selectivity of the predicate and the optimizer will likely be able to come up with an efficient plan for executing a query with that predicate. Now assume that a query is executed that looks for rows with specified values for C1 and C2. An example of such a query is:

select count(*) from stats where c1 = 5 and c2 = 'bogus'

Since the number of rows returned is very small (1 row mentioned in (6) above), the server will likely use an index on C1, C2. If that happens, then after executing the above query, the server will update the statistics for C2 in such a manner that the resulting selectivity of C2 = 'bogus' will now be grossly inaccurate. In our example

select first estimate( c2, 'bogus' ) est from stats

will now return 0.39% instead of the correct value of 100%. This degradation in the statistics for C2 can now result in poor plans for queries involving the predicate.

This problem has now been fixed.

333296 If an owner name was specified in a DECLARE LOCAL TEMPORARY TABLE statement, and the owner was not the same as the current user, it was possible to create more than one temporary table with the same name. A syntax error will now be given if an owner name is specified.
333438 The ASA provider would not have written the correct binary value to a column when the type of the column was a binary type (e.g., BINARY(10), UNIQUEIDENTIFIER, etc.) and the column length was less than 100 bytes. This is now fixed.
333477 Any transactions applied with a connection, say X, may not be replicated by SQL Remote in the next replication, if the message receiving thread (or phase) of SQL Remote had received, applied, and committed all the incoming messages on connection X and the online transaction log was renamed before connection X was terminated. This has now been fixed.
333483 In rare cases, an application could have crashed or hung in the client libraries if it did a repeated number of operations that involved initializing the environment, connecting to a database server, disconnecting, and finally destroying the environment. This was more likely to occur with TCPIP connections. It has been fixed. A workaround is to keep at least one user environment active.
333484 If UltraLite on Palm attempted to recover a database on an SD card, and the recovery included truncating the file (because it had been extended without a successful checkpoint), subsequent use of the file could have possibly caused a memory error. This has been fixed.
333503 If the ORDER BY list of a query referred to a constant select list item (ie SELECT 1 as C1, C2 ... ... ORDER BY 1,2) and that same select list item was also used in a GROUP BY clause, then the server may have crashed instead of ignoring the constant order by item. This problem has now been resolved.
333510 The Query Editor was not allowing more than one parameter in the LIST function. This has been fixed.
333600 If there are active connections to a server, the server can not be shutdown, unless dbstop -y or STOP ENGINE UNCONDITIONALLY is used. However, if the only connections to the server were HTTP connections, the server would have ignored them and shutdown anyway. This has been fixed.
333634 The QueryEditor was incorrectly treating an unquoted table alias as different from a quoted alias (ie FOO and "FOO"). This is now fixed.
333822 The MobiLink server would not start when run against a database using the Turkish (1254trk) collation, but would have failed with the error "Invalid option 'CHAINED' -- no PUBLIC setting exists". MobiLink was using the wrong case for the Chained option. This is now fixed.
333863 If a view, trigger, user defined function, event, or procedure contained a select statement with a Lateral Derived Table, then any execution of this object would have returned the error "Illegal reference to correlation name '<corr-name>'". If the database was unloaded the keyword LATERAL would have been missing for all the objects in the reload.sql script. This problem has been fixed.

Note, existing database objects with the LATERAL keyword must be recreated.

333869 Running dbunload -ar could have failed to replace user dbspaces when creating the replacement database. This would only have occurred if the path stored in the SYSFILE table for the location of the dbspace was not hard-coded, (ie 'dbspace1.db' instead of 'c:\database\dbspace1.db') and dbunload was started in a directory other than the one where the database was located. This isnow fixed and dbunload -ar can be run from any directory on the local machine when using dbspaces.
333898 Occasionally, when deleting a version 8.0.x Ultralite Database from a VFS card when using ULUtil, the file will be properly deleted but the error:

"Ultralite Database deletion attempt on ul_udb_xxxx.pdb generated error code 10509"

would still have been displayed. This is now fixed.

333903 If while connected, the server was shut down, attempting to open the Query Editor would have caused an exception to be thrown thrown. This is now fixed.
333908 Dropping blob columns in the Schema Painter would have resulted in corrupt udb files. This would have caused a crash at the end of synchronization. This has been fixed, but a work around is to take the corrupt usm file, convert it to xml, then convert it back to a usm file again using the ulxml tool.
333924 Beginning with version 8.0.2, unique identifier support was added to Adaptive Server Anywhere. A column can be typed as a "uniqueidentifier", which is a 16-byte binary value. A uniqueidentifier column was being typed as SQL_BINARY, but now that support specifically for uniqueidentifier columns has been added, (in conformance with the ODBC 3.5 specification), a uniqueidentifier column will now be identified as SQL_GUID and columns can now be bound as SQL_GUID.

Many ODBC functions, such as SQLDescribeCol, SQLGetTypeInfo, and SQLBindCol, are affected by this change. Uniqueidentifier columns can be bound as SQL_C_CHAR or SQL_C_WCHAR. When this is done, binary uniqueidentiers (SQL_C_GUID) are converted from binary to the uniqueidentifier string form with hyphens. For example, the 16-byte binary value 0x41dfe9efdb9111d28c43006008d26a6f is converted to and from the 36-byte character string "41dfe9ef-db91-11d2-8c43-006008d26a6f". If the bind type is SQL_C_WCHAR, the resulting string is 72 bytes in length.

Also, SQLGetInfo() with SQL_CONVERT_GUID is now supported, and SQLGetInfo() with SQL_CONVERT_xxx now reports all the conversions permissable with the CONVERT function. Previously, only a small subset of the permissable conversions was reported.

333954 Empty connections were producing errors when the MobiLink server command line option, -vf wasn't used. Load balancers, with multiple MobiLink servers all running against the same consolidated database, tend to frequently open empty connections (ie. with no data flow) to the MobiLink server. The sheer number of these empty connections could have caused the MobiLink server log to fill with errors. These error messages are no longer displayed when -vf isn't used.
334035 This change fixes the following three problems that occurred when exporting data to dBASE III, and Foxpro files:

DATE columns were written as character records rather than date records. This would typically have prevented importing data from a .DBF file into an existing table, if the table contained any DATE columns and the .DBF file had been created by DBISQL.

Importing .DBF file into a database, and having DBISQL create the table automatically, would have created a TIMESTAMP column for DATE fields, rather than a DATE column.

When attempting to import a NULL value for a DATE, DBISQL would report that it "Cannot convert to a timestamp" SQLCODE=-157, SQLState="07006".

These problem are now fixed when connecting using the iAnywhere JDBC Driver.

The second and third problems are fixed for connections using jConnect.

334097 When calling ULGetSynchResult( result ) after synchronizing, without using the Synchronization Observer, result->status.state would have been incorrect. The state could also have been incorrect, when calling ULGetSynchResult after restarting the database, when the UltraLite application had previously crashed or hung after a synchronization with or without the Observer. This has been fixed.
334231 In a very rare timing dependent situation, a server with multiple connections could have crashed when disconnecting a TCP/IP or SPX connection. This has been fixed.
334353 The sqlpp parser supported only one of the two ways that table hints can be specified. The following syntax would have worked:

SELECT *

FROM T WITH table-hint

while the following syntax with brackets would have caused a syntax error:

SELECT *

FROM T WITH ( table-hint )

Both syntaxes are now supported.

334380 When creating a connection profile where one, but not both, of the userid and password were specified, then both would have been ignored when editing the connection profile or restoring the connection. This has been fixed.

In addition, if both the userid and password were specified, but either contained a semicolon, then the userid and password would also both have been ignored. This has also been fixed.

334396 It was not possible to use the User, Group or Remote User wizards to create users, groups or remote users with empty passwords; that is, there was no way to get the wizards to execute a GRANT CONNECT ... IDENTIFIED BY '' statement. This has been fixed. Now, the "Allowed to connect" check box can be checked and you can click "Next" to move to the next page, even when no password has been specified. In addition, the password can now be set to be empty for an existing user, group or remote user from the appropriate property sheet.
334407 Calling AsaDataReader.Read, opened with a stored procedure which declared a result set, would have failed with a 'Cursor not open' error, if the stored procedure did not return a result set. This problem has been fixed.
334412 Attempting to apply a Patch or an EBF to an 8.x NetWare install, would have failed to upgrade the server executable if the filesystem was on a NetWare server mounted using the Novell Client for Windows. This was due to a fault in the Novell Client software. A work around is to perform the Patch or EBF on a Windows machine and copy the updated software to the Novell server.

Attempting to apply a second EBF to an 8.x NetWare install, would also have failed to upgrade the server executable if the filesystem was on a NetWare server mounted using the Windows Client for NetWare. This was due to a problem in the install script, and has been fixed.

334421 Support has now been added which allows the use of SELECT list expression names in the ORDER BY clause of UNION, INTERSECT or EXCEPT query expressions.

For example, the following query expression:

Select quantity from product

Union

Select quantity from product

Order by 1

can now be written as:

Select quantity from product

Union

Select quantity from product

Order by quantity

The first query specification of the UNION is used to determine the names to be matched with the ORDER BY clause:

Select quantity as qq from product

Union

Select quantity from product

Order by qq

334469 When attempting to import a FOXPRO formatted file, which used a memo file (.FPT), dbisql would either have failed with an "OutOfMemoryError" exception or would have used incorrect data. The file would have been processed correctly only if the internal block size used by the memo file was 64. This has been fixed.
334492 The name of a user-defined type (or domain) was not being returned in its original case by a DESCRIBE USER TYPES Embedded-SQL statement. This has been fixed.
334537 HTTP connections to databases built with certain collations would not have done character set conversion, and the character set returned in the Content-Type header would have been "none", which is not a legal value. This has been fixed.

The collations affected were:

856HEB

932JPN

936ZHO

949KOR

950TWN

EUC_CHINA

EUC_KOREA

334570 ASA has long supported user-defined options (options whose names are unknown to both DBISQL or server); these are stored in the SYSOPTION catalog table like any other, and may have both public and individual user settings. However, setting these options temporarily for a given connection has never been supported. Unfortunately, any attempt to do so would have failed to cause an error. This oversight has been corrected.

For example:

SET OPTION PUBLIC.USER_DEFINED_OPTION = 'ON'

SET OPTION "DBA".USER_DEFINED_OPTION = 'OFF';

SET TEMPORARY OPTION "DBA".USER_DEFINED_OPTION = 'ON'; <- this would have failed silently

An attempt to temporarily set a user-defined option now results in SQLSTATE 42W45 (TEMPORARY_NOT_ALLOWED).

334574 With UltraLite dynamic SQL, an application could have crashed when the GROUP BY clause listed only columns from a single table and there existed an index that contained a proper subset of those columns. This is now fixed.
334650 Attempting to run a silent install recorded with the 9.0.0 GA install would have displayed the License Agreement dialog. This has been fixed and requires that the GA setup.inx be replaced with the corrected version. Please see Technical Document 1027656 for further details to resolve this issue.
334762 When synchronizing in an application that used the UltraLite engine, the SQLCA would never have been updated when UltraLite called the application's synchronization observer callback. If an error occurred during synchronization, the sqlcode would have remained SQLE_NOERROR until the Synchronize call returned. This had been fixed.
334763 In rare and timing dependent cases, the client or server could have crashed when a TCPIP, Named Pipes or SPX disconnect was done and at least one other connection was active. The problem affected Windows ASA clients using TCP/IP, Named Pipes or SPX; Windows ASA servers using Named Pipes; and Windows CE and Unix servers using TCP/IP. These problems are now fixed.
334802 The QueryEditor would have failed to parse a query if it had table or column names that contained characters that fell into the Unicode private use category (General category "Co" in the Unicode specification), as Java does not consider these characters to be part of an identifier. This has been fix, the QueryEditor's parser will now accept these characters as valid.
334807 If a stored procedure contained an EXECUTE IMMEDIATE statement, but no RESULT clause, it would have been defined as having a result set by adding a row to the SYSPROCPARM table. This could have caused problems for PowerBuilder applications, if the procedure also had OUT parameters. The extra row in SYSPROCPARM is no longer added, if the procedure contains any OUT parameters.
334823 TLS connections to servers running on Windows 95, 98 or ME could have been dropped if a large amount of data was being sent or received. This has been fixed.
334875 After system reboot, user login or Explorer restart, the system tray icon of the MobiLink server did not appear. This problem also affected dbmlsync.exe, dbremote.exe, and

dbltm.exe and has been fixed.

334893 ISQL and Sybase Central could not display Turkish characters properly. This has been fixed. A work-around is to edit the JRE font.properties file and change the exclusion ranges starting values from 0100 to 0500.

This problem could also occur for characters from other languages. Affected characters include those from Greek and Coptic, Cyrillic, Latin Extended A and B, and IPA extensions (characters in the Unicode range U+100 through U+4FF.)

334914 If the user name 'DBA' had been removed from the database, and the database option "Quoted_Identifier" was set to 'OFF', then the dbunload, dbxtract or mlxtract utilities used to generate a reload.sql file would have failed. This is now fixed.
334948 Attempting to start the server with a compressed database, would have caused the server to crash. This has been fixed.
334960 The "preview" table in the Import Wizard would not have shown any data, and no data would have been imported at all, if:

- an ASCII file was being imported. and

- the wizard was to create a new table for the data, and

- the file started with an empty line.

This has been fixed.

335056 Connections using the iAnywhere JDBC Driver would have failed, if the DSN or FDSN parameter contained leading blanks.

For example:

CONNECT USING "dsn = ASA 9.0 Sample"

would not have succeeded because of the spaces around the equals sign. This problem is now fixed.

335069 Adding a column to a table, and specifying that the column should allow nulls, may have created a column that did not allow nulls. In particular, the column would not allow nulls if the Allow_nulls_by_default setting was set to Off (its default is On) or if the column's data type was a domain with a NOT NULL default. Now, the table editor always respects the user's allow nulls setting when creating a column.
335092 Under forced conflict mode, uploaded deletes would have been applied in the wrong order. Consider the following sequence uploaded into tables Parent and Child, where table Child has a foreign key to table Parent:

(At the remote)

DELETE FROM Child WHERE foreign_key = 1;

DELETE FROM Parent WHERE primary_key = 1;

COMMIT;

(synchronize)

The second delete from the remote (ie. from Parent) would have been applied before the first delete, causing a referential integrity violation in the consolidated during upload. Prior to this change, the behaviour was to generally delete from Parent before deleting from Child. Now, the behaviour is to delete from Child before deleting from Parent.

335093 The clauses FOR READ ONLY and WITH TRUNCATE AT CHECKPOINT were added to the START DATABASE statement in version 8.0.2, but they were not being handled properly. Support for these clauses has now been added to dbisql, (and dbisqlc).

Note that these clauses cannont be used if the ON ENGINE clause is also specified.

335095 When right clicking in the Design Details panel, the popup menus would have been displayed with a "&" instead of mnemonics. Note, this problem also occurred in dbconsole. This has been fixed.
335100 Specifying an account of the form domain\user, in the Service wizard or property sheet, was not possible because the "Other account" drop-down list was not editable and only contained the local machine's accounts. Now, the list is editable so any user can be specified, with or without a domain.
335155 Using the server's builtin HTML or XML Service Types to retrieve a result set that contained 32 or more columns, would have resulted in some column data being displayed incorrectly. This has been fixed.

For example, the HTML output from the service:

CREATE SERVICE qts335115demo TYPE 'HTML' AUTHORIZATION OFF USER DBA

AS SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32;

would have been incorrect.

335254 For HTTP services created with URL ELEMENTS, the arguments may have contained HTTP encodings for special characters. For example, the first element in the URL <http://hostname/database/service/first element> would have been "first%20element". This has been fixed.
335745 The Import wizard would not have imported all of the columns of a file, if:

- an ASCII file was being imported. and

- the wizard was to create a new table for the data, and

- the data on the first line of the file ended with a NULL value.

The symptoms of this problem were that the "Preview" table in the Import wizard did not display all of the columns in the file, and after clicking the "Finish" button, the new table would contain all but the last column. This is now fixed.

335787 The download_statistics event has the number of downloaded bytes as a parameter. This parameter was always zero for table scripts and a very small value for connection scripts. This problem would only have occurred if the client had download acknowledgements disabled. This has been fixed.
335790 The server could have failed with assertion 101518, "Memory allocation size too large", when executing a DISTINCT query with a large number of select expressions. The assertion would have failed if the Indexed Distinct query execution algorithm was selected by the optimizer, because the number of input rows was estimated to be small for example. The number of expressions required to cause the failure was approximately (page_size - 80)/8. This problem is now fixed
335802 When fetching column data greater than 255 bytes in chunks, using GET DATA (ESQL GET DATA or ODBC SQLGetData), one or two extra bytes after the column data could have been retrieved. Whether or not this would have happened depended on the size of the column data, the chunk size used to GET DATA each chunk of the column, and the page size. For example, a data size of 258 bytes and a chunk size which was 256 bytes, would have caused this problem, as would a data size of 2278 bytes and a chunk size of 455 bytes. This problem was less likely with chunk sizes greater than 1K. This has been fixed so that no extra bytes are now retrieved with GET DATA.
335803 The INPUT statement was not able to add data to temporary tables. This has been fixed so that now it can.
335977 When having the Import wizard create a new table, if any of the columns specified were of the types BIGINT, SMALLINT, TINYINT, NUMERIC or REAL, the columns would have been created as a type of VARCHAR instead. This problem has been fixed.
335979 After running for some time on Windows 2000, the server could have stopped accepting new connections over TCP/IP, although existing connections would have continued to work. If the -z switch was used on the server, a message would have appeared in the server window saying "TCP Listener shutting down (x)" where x is a number. This has been fixed.
335992 On sequential scans of a large table, a page read could have returned an incorrect, or possibly a partial page. This problem is now fixed. Note that only Unix (non-Linux) servers were affected by this.
336013 A predicate of the form:

<column> LIKE <pattern>

where <pattern> is a constant that contains no wild-cards is equivalent to:

CAST( <column> AS LONG VARCHAR) = CAST( <pattern> AS LONG VARCHAR )

In the case that <column> has a character domain, this comparison permits an index to be used. It is also possible to use an index if <column> is an exact numeric domain if we infer an additional predicate:

<column> = CAST( CAST( <pattern> AS LONG VARCHAR ) AS <column domain> )

Previous to this change, the ASA optimizer did not infer this new predicate, and an index could not be used for a query such as the following:

SELECT *

FROM SYS.SYSTABLE

WHERE table_id LIKE '1'

After this change, the additional sargable predicate is inferred, and an index can be used. Note that the original string-comparison predicate must be retained. The following query returns 0 rows:

SELECT *

FROM SYS.SYSTABLE

WHERE table_id LIKE '1.0'

while the related query:

SELECT *

FROM SYS.SYSTABLE

WHERE table_id = '1.0'

does return a row. Because of this, the predicate " table_id LIKE '1.0' " is treated as:

table_id = CAST( '1.0' AS INT ) AND CAST( table_id AS LONG VARCHAR ) = '1.0'

336061 An application could have failed with a communication error when doing a describe, if the client's character set was a multi-byte character set that was different from the server's character set, and a described column name had extended characters. This problem would have shown up when the column name in the client's charset contained more bytes than the column name in the server's character set. Note that ODBC, OLEDB and ADO.NET client libraries often internally describe result sets even when the application has not requested result set types or names. This is now fixed.
336097 Vertically resizing the Chart while it was paused, would have caused the vertical ruler to have been rescaled, but the synchronization bars in the Chart would not have been scaled. This would have resulted in the row labels and rows being misaligned. This has been fixed by changing what pausing does. Now pausing simply stops automatic scrolling of the Chart, while new data continues to be added (offscreen) to the Chart and the Overview continues to be updated. Also, the view of the Chart will now be maintained on disconnect whether paused or not. The Monitor menu item has been renamed to "Pause Chart Scrolling" from "Pause Charting" and the autoscroll option (called "Scroll chart automatically when connected") now controls whether the Monitor is initially paused or not when a connection to MobiLink server is started. Now all three panes are updated with new data when connected, whereas before only the Table was updated when the Monitor was paused.
336171 Reloading into a database with a smaller pagesize could have failed while loading statistics. The error that was returned was also misleading, as it indicated that the pagesize was too big. Statistics are now loaded only if the pagesize of the new database is equal to or greater than the pagesize of the original database.
336214 The database option Max_recursive_iterations, would have limited the total number of recursive iterations in a query, rather than the total number for each invocation of the recursive common table expression. Therefore, if the recursive common table expression was invoked many times in a single query (from within a subquery, for example), then an incorrect error could have been returned. This has beed corrected.
336319 If the server was started with the HTTP listener on port x, and connections were made to the HTTP server, then restarting the server on the same HTTP port (x) would have given the error:

"Can't start HTTP listener on address 0.0.0.0:x"

This has been fixed.

336336 An attempt to create a view that referenced a procedure in the FROM clause, would have crashed the server if the procedure used a WITH clause.

For example:

CREATE PROCEDURE p ()

BEGIN

CREATE VARIABLE i INT;

SET i = 1;

SELECT i;

END

CREATE VIEW v AS SELECT * FROM p() WITH (c1 INT);

This has now been fixed.

336352 Hebrew characters in a UTF8 database would have been translated into the wrong characters, if the charset connection parameter was not set to 'utf8'. The AsaClient was using the connection charset for character translation, now the AsaClient will use the database charset, if the charset is not specified in the connection string.
336367 The Index Consultant was storing the cache size in terms of bytes, but then interpreting the stored value in terms of kilobytes. Thus, the wrong cache size was being used during the tuning phase. This was likely to have a small impact on the quality of the recommended indexes because the cache population is not stored for individual tables, thus making the recommendations largely independent of cache statistics.

On Unix, this resulted in a crash, as the overflow caused the cache size to be set to zero.

Now the cache size is both stored and interpreted in terms of kilobytes only.

336376 A sequential scan using 'buffer fetch' (visible in the graphical plan as "Use buffer fetch: yes") could cause the server to crash with specific predicates. In order for the failure to occur, a column that was in a comparison predicate must have been NULL, and the ordering of the predicates had to match a specific pattern. This problem has been fixed.
336502 When profiling triggers and events, the statistics may not have lined up with the source. This has now been fixed.
336506 Running dbunload with the -ar command line option, ('rebuild and replace database'), would have caused the server to fail with Assertion 303000: 'Stopping JVM while forbidding and there are active java threads', if the database was Java enabled. Dbunload issues a "stop database" request, which attempts to drop all connections. The assertion occurred as to the JavaVM was not stopped prior to dropping the connection it was running on. This is now fixed, the VM is stopped prior to dropping the connection.
336507 The XML output from the built-in HTTP server could have been missing rows, if those rows

only contained null values. The has been fixed.

336531 When attempting to replicate using the FTP message link, if the FTP server was ProFTP, dbremote would have failed with a socket timeout error. A work around has been implemented for a difference in behaviour in the way a ProFTP server responds to an NLST command when the directory is empty.
336563 If the parameters DBF, DBN, DBS or ENG were set in the SQLCONNECT environment variable, dbspawn could have failed unexpectedly to start the server. These parameters were added to the command line of the spawned server. For example, if SQLCONNECT was set to DBF=asademo.db and "dbspawn dbeng8 asademo.db" was run, an error would occur.

This has been fixed so that the SQLCONNECT environment variable no longer affects dbspawn.

336566 The value returned by the function property('CommandLine') is a string containing the command line parameters used to start the database server. Previously this could have included the encryption key for a database specified with the -ek parameter. Now this value will be replaced with a constant string of asterisks in the result. In some situations, a workaround is to start the server with the -ep switch instead, which will cause the server to prompt for the key. If the database can be auto-started, the key could be provided in the DBKEY connection parameter. The START DATABASE statement could also be used to start the database and provide the key.
336573 The dbunload utility was checking the validity of dbmlsync extended option names and option values, while the server was not. This made it problematic when unloading a database that contained invalid options names or option values. The fix was to relax the unload process to not check for valid option name and values.
336655 A syntax error in a statement containing a WITH or WITH RECURSIVE clause could have caused the server to crash. This problem has been fixed.
336660 When using the ODBC driver, statements with unmatched apostrophes or quotation marks, even in a comment, would have failed with the error "Syntax error or access violation".

For example:

create procedure test_proc()

begin

-- Binky's simple test procedure

select * from customer;

end

This has been fixed. A workaround for this problem is to turn off scanning statements:

SQLSetStmtAttr( stmt, SQL_NOSCAN, SQL_NOSCAN_ON );

336681 The datatype conversion code for expressions was causing the cast of NULL as a long varchar to be a type equivalent to varchar(1). For example, if the following query was used to create a temporary table:

SELECT cast(null as long varchar) as c1 INTO #temp

then attempting to insert a string longer than 1 byte would have caused the string to be truncated. This has been fixed.

336728 A call to the table->Delete() function would have cleared the FIND mode and moved the cursor to the row after the row just deleted. Code written to implement the equivalent of the SQL DELETE statement would not have worked as expected. For example, the following code implements the statement DELETE FROM X WHERE c1 = 2:

table = conn->OpenTableWithIndex( "X", "c1_index" );

table->FindBegin();

table->Set( "c1", 2 );

if( table->Find() ){

table->Delete();

while( table->FindNext() ) {

table->Delete();

}

}

The incorrect behaviour of the table->Delete() function would have caused the table->Find() call to have failed. This problem has been fixed by changing the behaviour of the table->Delete() function so that the cursor remains pointing at the deleted row until the next fetch. So the above code now behaves as expected.

336843 If a Publication was created with a WHERE clause for a table, rows would have been incorrectly replicated if the where-condition was UNKNOWN. For example, WHERE emp_id = 1, would have caused rows to replicate where emp_id was 1 and where emp_id was NULL. This has been fixed. Now only rows that evaluate to TRUE are replicated.

A workaround is to change the WHERE condition to explicitly rule out the unwanted rows. In the example above, it would involve changing the WHERE condition to be as follows:

WHERE emp_id = 1 AND emp_id IS NOT NULL

336853 When the server's Java VM caught a "class not found" exception and put up an error message box, the class name was not included. Also when the VM caught an "UnsatisfiedLinkError", the name of the class and the missing native method were not included. This has been fixed, the exception's message text is now displayed.
336855 When there was no configuration database, or the configuration database had no records, the Listener running on Palm devices, would have crashed on selecting the Edit Handler menu option. This is now fixed.
336883 The Developer Edition server would have failed to start on a tablet PC. This has been fixed.
336902 In rare instances, NetWare or Unix client applications, using ecc_tls or rsa_tls encryption, would have had connection attempts fail. The debug log would have shown a message that the Certicom handshake had failed. This has been fixed.
336903 The synchronization server may have crashed if more streams were specified than worker threads. The workaround is to explicitly specify more threads with the -w command line option. Now an error is reported.
336924 For some invalid HTTP requests, the built-in HTTP server could have returned the status

code "200 OK" rather than "400 bad request". This has been corrected.

337025 The Adaptive Server Anywhere server allows updates to be carried out through joins. When this happens, it is possible for the same row to be modified several times as part of the same UPDATE statement. The value in any given column in a row at the end of the update, is determined by the last modification to the column. As part of executing the UPDATE statement, column statistics for the columns being updated are modified to reflect the new values. The process being used for statistics maintenance was not properly taking into account the possibility of the same row being updated multiple times. This problem has now been resolved by implementing a new algorithm that attempts to maintain statistics in the presence of updates through joins.
337085 On a PocketPC 2003 device, if the database server was using a database file located on a Secure Digital (SD) card and the card was ejected while the server was running, an assertion failure would have been reported. The problem was fixed by attempting to close and reopen the database file, rather than just retrying the I/O operation. If a different card, with another database by the same name, is inserted, the server will display a message dialog instructing the user to insert the original card. Otherwise, the old I/O error message dialog is displayed.
337216 Queries containing grouped subqueries may have returned incorrect results if the grouped subquery return only one row and all aggregate functions evaluated to NULL, (or 0 if the aggregate function was COUNT). Also, the subqueries had to have been decorrelated and transformed into derived tables during optimization and the aggregate functions were used in expressions that handle NULL arguments (such as COALESCE).

For example:

select

R.row_num,

( select coalesce( sum( D.dummy_col ), 999 )

from sys.dummy D

where D.dummy_col = R.row_num

) as subselect

from rowgenerator R

where R.row_num < subselect

This has been fixed. Subquery optimization is now not applied in cases where the aggregates are used in expressions handling NULL arguments.

337263 If a publication was defined with a subset of columns and a WHERE clause, and the columns in the WHERE clause were not in the subset of columns, then updates to the columns referenced in the WHERE clause, that would cause the row to enter or leave the publication, would not have been synchronized. This has now been fixed and an INSERT or DELETE is now synchronized if the row enters or leaves the publication.
337266 Scheduled events may have executed at the wrong time after a Daylight Savings Time change. For example, if an event was defined to fire daily at 12:05am, it would fire at 11:05pm on the evening of the change from DST to regular time and would fire at 1:05am on the evening after the change from regular time to DST. This has been fixed.
337275 When the database option, RETURN_DATE_TIME_AS_STRING was set to ON, and a procedure with a date, time or timestamp result column was called, the returned result column was not always returned as a string. THis is now fixed.
337287 A FULL OUTER JOIN query with an ON clause containing a local predicate referencing the left table of the join, may have returned an incorrect result set.

For example:

SELECT *

FROM R FULL OUTER JOIN T

ON R.X = T.X and R.Y = 10

This has been fixed.

337407 The server properties 'LicenseType' and 'LicenseCount' would have returned incorrect values if the server was using CPU-based licensing. This has been fixed.
337411 Synchronizations may have failed without an error, when all of the following conditions were true:

- The -n or -u options were specified on the dbmlsync commandline.

- The remote database was running on CE.

- Either the database collation or the operating system code page was not CP1252. Not all operating system code pages or database collations were affected by this problem, but most multibyte character sets and some single byte character sets were affected.

When the synchronization failed, the dbmlysnc log would have look like the following:

I. 12/18 16:05:34. Connecting to remote database

I. 12/18 16:05:34. Loading synchronization information

I. 12/18 16:06:00. Disconnecting from remote database

In most cases, this problem occurred when the function csconvert() was unable to convert strings between the operating system charset and the database charset.

Now, when the csconvert function fails dbmlsync will try several other methods to convert strings between the operating system and database charsets. If all these methods fail, a warning message will be issued and dbmlsync will attempt to continue with the synchronization based on the assumption that the publication name and user name specified on the commandline are specified in the database charset. In some cases this will be true, otherwise the synchronization will fail later, when dbmlsync is unable to find the MobiLink user, publication or subscription in the database.

This problem cannot be entirely resolved, but the above changes should reduce its frequency. If synchronizations do fails with the new warning, there are some work arounds that can be tried:

- Choose publication and user names so that they consist only of 7-bit ASCII characters (ASCII values 0-127)

- Have the database and operating system use the same charset. The synchronization is unlikely to fail, although the warning may be issued.

- In some cases the problem can be resolved by using UTF8 as the collation for the remote database.

337445 Each line in the request-level log file (created with the -zo server command line option), ended in a CR-CR-LF sequence, rather than the standard CR-LF. This could have caused problems with some text editors. This has been fixed by removing the extra CR.
337570 If the database server was started with the command line option -ti set to a value of 32768 or greater, any TCPIP connections to the server would have failed. The application would have received error -308, Connection was terminated and the server console, would have had the message: Disconnecting Client - No activity for -32768 minutes

This has been corrected. The maximum permissable value for -ti is 32767 (which is approximately 22 3/4 days). If any larger value is specified, an error message is displayed (Error in command near "ti") along with the usage message.

337583 Running dbunload, and specifying an external unload, (ie with command line options -xi or -xx), would have caused a value of 0x to be written to the data file for empty not null binary columns. This has been fixed by writing two quotes, like for char columns.
337597 On Windows, dbisql.exe can be made the default editor for .SQL files. This association would have been ignored if Explorer was explicitly told to use a given program to edit .SQL files. (This is done by right-clicking on a .SQL file in an Explorer window, clicking the "Open With/Choose Program" menu item, selecting a program other than ISQL, then clicking the "Always use the selected program" check box.) Explorer's per-user file association was not being set, now it is.
337623 If dbisql, connected via the iAnywhere JDBC driver, executed a query that returned multiple result sets, then attempting to edit one of the results could have caused dbisql to crash. This problem has now been fixed.
337624 The AppInfo string, returned by calling connection_property('AppInfo'), would have incorrectly returned ODBC for the OLEDB and ADO.NET providers. They have been fixed to correctly return OLEDB and ADO.NET respectively.
337626 The Proxy Table and Migrate Database wizards would have listed all tables for the selected remote server, including system tables, system views, non-system tables, non-system views and global temporary tables. Now, these wizards will only list non-system tables, since proxy tables can be created only for non-system tables, and the migration

process will only migrate non-system tables.

An additional fix was made to the Migrate Database wizard, so that the drop-down list of users on the Tables page, now contains only users which have at least one non-system table.

337627 When using the OLEDB driver to fetch data from char columns with 200 or more characters, the last character would have beentruncated. This has been fixed.
337632 The "Copy" action on the context menu for results tables did not treat Unicode "private use" characters properly; they were converted to a Unicode escape sequence of the form "\uXXXX" where XXXX was a 4 digit hex number. Now private use characters are copied as-is.
337661 After editing a procedure, trigger, view or event in a new window, by selecting the item in the left or right pane and then selecting File -> Edit in New Window, the item could only have been saved once from the new window. That is, by clicking the Save toolbar button or selecting the File -> Save menu item, would only have saved the item the first time. Now, the item is saved each time the toolbar button is clicked or the menu item is selected.
337732 When the -z ("Display debugging information") command line option is used, the server will now displays a message on the server console when an HTTP connection connects to, or disconnects from, with the format:

Connection ID <num>: "<user>" connected to database "<db name>" over <protocol>

where protocol can be "HTTP" or "HTTPS". Another message is also displayed containing the character set conversion status, which will be one of the two formats:

Connection ID <num>: Server character translation is enabled, but not required

using client character set "<client charset>"

or

Connection ID <num>: Server character translation will occur

database character set is "<db charset>"

using client character set "<client charset>"

337753 Pressing the help key (F1) on any page of the ODBC configuration dialog would not have worked, although help was still available by pressing the Help button. Pressing the Help button on the Certicom encryption options dialog, would have caused a crash. These issues have been fixed.
337764 When running dbunload, if the client's charset on the unloading connection did not match the code page of the machine, the unload may have generated invalid SQL for the dbmlsync extended options. THis hasnow been fixed.
337778 When editing table data, if the Edit button was clicked, and a new row was then selected without making a change, the buttons would still have displayed that the dialog was in edit mode, even though the edit had been cancelled. THe mode is now reset properly in this situation.
337807 Calling a stored procedure that returned an implicit result set, or contained an EXECUTE IMMEDIATE statement, could have resulted in the error "Cursor has not been declared", if one of the statements in the procedure caused a "not found" warning to be issued. Generation of the error was also dependent on how the procedure was called. For example, the error would have occurred if the procedure was called from DBISQL, but not if it was called from DBISQLC. This has been fixed.
337913 When attempting to export data to an HTML file, any character which could not be displayed in the operating system's code page, would been written as a question mark. This has now been fixed.
337916 In some cases, rows could have been returned from a grouped query in an order that was not consistent with the ORDER BY clause. For the incorrect ordering, either ROLLUP was specified, and an ordered rollup group by was selected as the execution method; or the query contained two or more DISTINCT aggregates. Further, the ORDER BY clause must have matched the GROUP BY clause.

This ordering problem has been corrected.

337943 In ODBC 2.x, the standard syntax of the escape sequence was:

--(*vendor(vendor-name), product(product-name) extension *)--

In addition to this syntax, there was a shorthand syntax of the form:

{extension}

For example:

select --(*vendor(iAnywhere), product(SQL Anywhere) d 1999-11-04 *)-- from dummy;

or

select {d 1999-11-04} from dummy;

The standard syntax, now deprecated in ODBC 3.x, was to allow for keyboards that do not support the curly braces characters, (such as the IBM 029 keypunch).

The extension syntax was supported, but the standard syntax was not supported correctly. This has been fixed.

338071 The implementation of java.io.File.listFiles() on Windows, would always have returned an array of length 1, no matter how many entries are in the file system directory. This has been corrected.
338081 Changes have been made to the cost model that the optimizer uses, in order to improve query performance for some situations. In particular, improvements have been made for queries the involve wide tables, where most of the data is in server cache and the number of rows returned is relatively small.
338095 If a consolidated database had Proxy Tables or Remote Procedure Calls defined to a remote server, and an error occured when executing a script that referenced the Proxy Table or Remote Procedure Call, then the MobiLink Server could have gone into an infinite loop re-trying the same script indefinitely. Now the handle_error procedure is called after these errors occur.
338104 When the TYPE clause of MobiLink Synchronization statements was entered as 'tcpip', (in lower case), and the database collation was 1254TRK (Turkish), MobiLink synchronizations would have failed. This has been fixed.
338114 Attempting to create a proxy table to a SQL Server remote server, would have failed with a "cannot obtain column information" error, if the database on the remote server had a space in it's name. This problem has now been fixed, but to make use of existing remote servers, the capability list must be rebuilt. The easiest method of rebuilding the capability list is to change the remote server class, then change it back. The following two statements will rebuild the capability list for this situation:

ALTER SERVER "name of mss remote server" CLASS 'ODBC';

ALTER SERVER "name of mss remote server" CLASS 'MSSODBC';

338122 Threaded client applications on Unix, may have crashed when connected to a server started with the LDAP=YES communication parameter. Even if no crashes occurred, client applications that connected and disconnected numerous times may have been slow. This has been fixed.
338251 Autoincrement columns were being added to the list of values for INSERT statements generated by AsaCommandBuilder. AsaCommandBuilder now ignores autoincrement columns when generating INSERT statements.
338292 If a Java application connected via the iAnywhere JDBC Driver and positioned a cursor beyond the end of a result set, then a previous() call would have failed, rather than return the last row in the result set. This has now been fixed.
338298 The unparsed version of a FOR XML query, or a SQLX function with a named argument, could have been in an unexpected form. An example of the unparsed version can be seen by using the rewrite() function, or by creating a view and examining the definition in the sysviews table.

For example, the unparsing of:

select emp_id from employee for xml raw

would have been:

select forxml(1,'emp_id',employee_1.emp_id) from employee as employee_1

and the unparsing of:

select xmlforest( 1 as x )

would have been:

select xmlforest( 'x', 1 )

This has been fixed.

338300 If there were more concurrent requests than the number of concurrent server requests allowed (as specified by -gn), and all of the requests took longer than five seconds to execute, and web services were running (i.e. -xs was used), any requests received during

the delay may have been dropped, causing clients to hang. The server would also have hung on shutdown. This has now been fixed.

338304 If an application connected via the iAnywhere JDBC Driver and attempted to create a statement, or a prepared statement, of type INSENSITIVE, the JDBC driver would have actually openned a sensitive cursor instead. This problem has now been fixed.
338343 When using a wizard or duplicate dialog to create or duplicate a table, view, procedure or publication, the new object's owner could be specified as a user whose objects were currently filtered out (via the Filter Objects by Owner dialog). When the wizard or

duplicate dialog completed, and the object was created, a "Not on row" error dialog would have appeared, or an item that should be filtered out would have appeared in the details list. Now, only objects belonging to users who are not filtered out can be created.

338398 When using the VIM message type, the dbremote icon would not always disappear from the system tray after dbremote completed. This has now been fixed.
338425 When determining an optimal cache size, the size chosen never exceeded the sum of the sizes of all open database and temporary files. Now, it will not exceed the sum of the sizes of all open database and temporary files, plus the size of the main heap.
338454 The UltraLite analyzer generates example MobiLink scripts. It was still generating examples for the upload_cursor script, even though this script had been deprecated. It no longer does this.
338455 The character set conversion done by HTTP services within the server was incorrect. The HTTP headers, and the data returned from the database were converted, but the HTML and XML headers were not. This has been fixed, now the headers are no longer converted, and the entire entity body of the response is converted.

Note that in most cases, HTTP clients would not notice a difference.

338456 If an initial cache size is set (with "-c"), but no minimum cache size was set (with "-cl"), then the minimum cache size will now be set equal to the initial cache size.
338480 If an application using the UltraLite engine called Synchronize(), and the synchronization failed, the call would have returned false, but no sqlcode would have been set. This has been fixed.
338662 If a database was created with the CREATE DATABASE statement and the "PASSWORD CASE" clause was not present, passwords would have been case insensitive; however, password case sensitivity should have defaulted to being the same as the sensitivity of the database. This has been corrected.

Note that Sybase Central as shipped with 9.0.0 uses the CREATE DATABASE statement without a PASSWORD CASE clause. Password case sensitivity for databases created with dbinit, without explicitly setting password sensitivity with the -cp option, correctly defaults to the same sensitivity as the database itself.

338704 If the Compression option in the database was set to "-1", it was possible for dbremote to discard a valid message and report the error "Incoming message was created by a different version of the software". This has now been fixed.
338726 The usage text for the database creation utility dbinit, listed 'mdsr' as a valid option for the -ea command line option, but using it would have given the error message 'MDSR is not available.' Since MDSR encryption is not available, and the only other valid argument for this switch is 'aes', the -ea switch has been removed from the usage text. It is still accepted by dbinit, but is ignored. If the options -ek or -ep are specified, the AES algorithm is used.
338733 Calling a procedure in the FROM clause of a query, where the procedure was owned by a different user; and the procedure body was a single select statement and nothing else; and the select in the procedure body used tables that were not visible to, or that were resolved differently for, the currently connected, would have failed. This has been fixed.

Note: there was no way this could have been exploited as a security hole.

338843 Using a unary minus operator in the select list of a derived table, on the null supplying side of an outer join, would have crashed the server. The following query demonstrates the problem:

select * from employee left outer join (select -1) dt(x) on 1=1

A workaround is to remove the unary operator:

select * from employee left outer join (select 0-1) dt(x) on 1=1

This has been fixed.

338853 It was not possible to choose express validation in the Validate Database wizard, if the selected database was case-sensitive. Now, express validation can be chosen for all databases which support express validation, (ie databases created with version 8.0.0 and later).
338866 In the Create Database and Create Custom Collation wizards, the list of available collations was not sorted. They are now sorted in ascending order by collation name.
338905 In the Create Database and Create Custom Collation wizards, the list of available collations included all collations, even those that were deprecated. Now, only those which have not been deprecated are listed.

Note that in the Create Database wizard, a deprecated collation can still be choosen, by specifying the collation label.

338914 It was possible for a progress offset mismatch between an MobiLink client

running dbmlsync and the MobiLink Server to fail to resolve itself if all of the

following were true:

- Two publications existed on the remote database.

- One publication was in synch.

- The second publication had a progress value on the consolidated that was

LESS than the progress value on the remote.

- Only the second publication was being synchronized.

- The -ra option was specified on the dbmlsync command line.

although this has now been fixed, a workaround is to synchronize both publications together.

338965 If an UPDATE statement contained an ORDER BY clause that utilized ordinal values, the statement would be accepted by the server even if the ANSI_UPDATE_CONSTRAINTS connection option was set to STRICT. This has been corrected; such statements will now receive a syntax error (SQLSTATE 42W37, SQLCODE -814). If the ANSI_UPDATE_CONSTRAINTS connection option is set to OFF or CURSORS, the error will not be generated.
339030 If an ESCAPE character was specified for a LIKE operator, and the pattern was invalid, a message with random characters would have been displayed. This was due to the string being passed to the message routine not being null terminated. . Note, for the pattern to be invalid, the specified escape character must not have preceded a percent sign, an underscore, a left square bracket, or another escape character in the pattern. This is now fixed.
339037 The calls DeleteCommand and UpdateCommand, automatically generated by AsaCommandBuilder, did not handle optimistic locking correctly. This has been fixed.
339043 The popup menu for an existing table or connection script, limited the scripting language to either Java or SQL. Now, .NET has been added. As well, the names are now shown consistently as "SQL", "Java" and ".NET" within the Details view, and in the new script wizard.
339141 The columns of any SELECT statement, other than the top level select of a query, were always treated as nullable. For example, this applies to the branches of query expressions (union, intersect, except) and to derived tables. This has been fixed
339153 A FETCH INTO statement in a stored procedure, did not place fetched values into procedure variables if the ROW_UPDATED warning was returned, (this warning is returned for SCROLL cursors). This has now been corrected.

Note, in 8.0.0 and above, some cursors are automatically converted to SCROLL cursors. For example because an updatable cursor is opened over a query with a sort.

339163 Support for ODBC GUID escape sequences has now been added to the ASA ODBC driver. Supplied values of the form "{ guid 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' }" will be converted to binary GUID values and are equivalent to the following SQL statement, cast('41dfe9ef-db91-11d2-8c43-006008d26a6f' as UNIQUEIDENTIFIERSTR ). GUID escape sequences may also be used as input parameters for bound GUID data types. This is how the ODBC specification describes the GUID escape syntax.
339208 ULIsSynchronizeMessage was not defined in the UltraLite Engine client runtimes. This meant that a CE application that used the UltraLite Engine, could not have done an automated ActiveSync synchronization, unless it called RegisterWindowMessage( UL_AS_SYNCHRONIZE ). This function has now been defined.
339335 The Installer missed adding the "win32" directory in the Default value for the AppPath registry entry when installing the Personal Server. This has been corrected.
339342 When given a workload containing hundreds of thousands of queries, the Index Consultant could have caused Sybase Central to exit, leaving a log file reporting that memory had been exhausted. A simple governor has been added to avoid this problem; it limits the number of queries analyzed by the consultant to 25,000. As of version 9.0.2, the Index Consultant will be able to handle arbitrarily large query sets.

A workaround for instances involving evenly distributed duplicate queries (which will be the normal case for this number of captured queries) is to reduce the time spent capturing queries. By using the PAUSE/RESUME feature of the consultant, representative samples of different phases of an application can be captured, without overloading the consultant.

339348 If an application's object destructor made an ODBC call after exit() had been called (or the application's main() routine had returned), then the application may have crashed, (i.e. a call was made to the ODBC driver after the runtime had called the library's fini routine).

Also, if the application was using ODBC driver on Unix as a driver manager, and made an ODBC call after it has destroyed the ODBC environment (i.e. SQLFreeEnv had been called), then the application may have crashed.

This has been fixed, now an error will be returned.

339349 Running the dbmlsync executable from the 8.0.2 GA release, with a dbtools library (ie dbtool8.dll on Windows) from an 8.0.2 EBF, may have caused a crash. This is now fixed.
339354 Calling the xp_sprintf system procedure could have caused a server crash. This is now fixed.
339362 The Index Consultant was improperly interpreting the option Optimization_goal for captured queries. This could have lead to sub-optimal query plans being generated, and thus possibly affecting which indexes were recommended. This is now fixed.
339363 Using the Index Consultant on a query which contained identifiers with non-ascii letters, could have caused the error, "Index Consultant Error: The query could not be analyzed ..." This would have happened if the case of the letters did not match the letter case of the corresponding object. As a result, the query would not be analyzed and the Index Consultant would close. This has been fixed.
339364 If a ResultSet object was closed (either explicitly or implicitly), the iAnywhere JDBC Driver would have leaked memory. This problem was most noticeable if a prepared statement was executed many times. The problem has been fixed.
339377 When dbisql was installed via its MergeModule, it would not have run due to the files xerces.jar and xml4j.jar not having been installed.

The NetworkServer MergeModule was attempting to create registry entries in the root of HKey_Local_Machine.

Many of the MergeModules were creating unnecessary Default values.

These MergeModule problems have now been fixed.

339440 If a Java class running in the server's VM, sent a packet to an uninitialized port, any ports the class had initialized could have become disabled from receiving further messages.

For example:

- "java.net.DatagramSocket" is called to initialise a socket on port 3374

- "java.net.DatagramPacket" is called, sending a packet to this socket. This is received correctly

- "java.net.DatagramPacket" is called again, sending a packet an uninitialized socket at 3370

- attempting to receive this packet fails as expected, with a "SocketException: Connection reset by peer"

- "java.net.DatagramPacket" is called again to send a packet to the initialized socket at 3374

- attempting to receive this packet would have failed unexpectedly, with a "SocketException: Connection reset by peer"

- all further attempts to receive packets sent to this socket will fail.

This has now been fixed. Calls to receive packets sent to an uninitialized port will still fail, but these packets will no longer disable the socket from receiving packets on the initialized port.

339588 If a column default was an expression that contained the NEWID(*) function, the default value was calculated only once per statement. For example:

create table T2 ( col1 int );

insert into T2 ( col1 ) values ( 1 );

insert into T2 ( col1 ) values ( 2 );

create table T1 ( id char(36) not null default uuidtostr(newid(*) primary key);

insert into T1 ( col1 ) select col1 from T2;

The last insert statement selects the two rows from table T2 and inserts them into table T1. The default value for column "id" would have been the same for both rows. Since column "id" is the primary key, a primary key violation would have been raised. This has been fixed. If the default expression is "uuidtostr(newid(*))", the default value is now calculated for every row separately.

339598 The server does not need to expand constraints and fetch columns referenced in the constraint (and not elsewhere) when optimizing a query for read only access. The unnecessary columns were not being fetched when the cursor was declared as 'FOR READ ONLY'. However, they were fetched when the cursor was declare 'FOR UPDATE', but the statement was explicitly declared 'FOR READ ONLY'. The fetching of the extra columns could have caused table scans to take more time in some situations, especially for wide tables. This problem has been resolved.
339599 The server maintains the number of distinct key values for each non-unique index, among other things, this number is used by the optimizer for computing join selectivities. It was possible for the number of distinct values for an index to become inaccurate with the potential of generating poor access plans. This problem has been fixed.

It should be noted that the impact of this inaccuracy is not expected to be significant and that no action should be required. Although, recreating any given index will correct the inaccuracy.

339600 On Solaris, if a multi-CPU machine was configured such that all the processor ID's were assigned numbers that were greater than the number of processors, the server would have failed to start. This has been fixed.
339617 Calling DatabaseManager.SetActiveSyncListener() on some devices, would have resulted in a native exception. This has been fixed.
339659 The plug-in may have inadvertently created one or more shared locks that were not released until a disconnect. The locks were created when connected to the database via jConnect and the Procedures and Functions or UltraLite Projects folders were opened. These

shared locks could have caused operations on other connection to fail, such as attempting to unload the database from within Sybase Central (which uses a separate connection to perform the unload). Shared locks are now released as soon as possible.

339759 When connnecting to a database which had a custom login procedure that set temporary user settings for the following options:

Allow_nulls_by_default

Ansi_blanks

Ansinull

Automatic_timestamp

Chained

Close_on_endtrans

Date_format

Date_order

Escape_character

Float_as_double

Isolation_level

On_tsql_error

Time_format

Timestamp_format

Tsql_variables

the values for these options would have been temporarily reset to their defaults setting in DBISQL. Now, temporary settings for these options are not reset if a custom login procedure is enabled.

339768 Queries that use the MIN or MAX aggregate functions can have an optimization applied, if they satisfy certain conditions. In version 8.0.0 and later, these conditions were more restrictive than they were in previous versions. With this change, the set of conditions that queries must satisfy befor the MIN/MAX optimization will be applied has ben relaxed.

Queries for which the MIN?MAX optimization is applied, must satisfy the following conditions:

(1) the query block is of the form:

select MIN(/MAX) (T.X)

from T

where some_condition

- T is a base table and T.X is one of its columns

- some_condition can be any type of predicate. This

(2) the query block does not contain an ORDER BY clause, any DISTINCT aggregates, or a GROUP BY clause.

(3) one of the following types of indexes must exist:

- an index having the column T.X as a first column; or

- an index having the column T.X as the n'th column, and for each i'th column with 0 < i < n , an equality predicate of the form "i'th column = constant" exists in the WHERE clause

An example of some_condition would be: "T.A = 10 and T.B = 20 and ...". Then an index on columns T.A and T.B would qualify to be used for the MIN/MAX optimization.

The MIN/MAX optimization tries to choose an index <idx> that returns rows ordered by T.X. During execution, only a limited number of rows are retrieved from the index until a qualifying row is found. The execution stops when this first qualifying row is retrieved.

339783 An ADO application would not have fetched columns with type UNIQUEIDENTIFIER. This was due to IColumnsInfo::GetColumnInfo returning DBTYPE_EMPTY rather than DBTYPE_GUID for UNIQUEIDENTIFIER columns. This has been fixed.
339792 If the errormsg() function was executeded after a RAISERROR statement in a procedure, but before the procedure completed, the result of the function would have been null. This has been fixed.
339798 If a stored procedure has output parameters, it cannot also return a result set to an application. If the procedure itself did not return a result set, but called another procedure which contained an EXECUTE IMMEDIATE statement, the server would define both procedures as possibly returning result sets. Calling the outer procedure in PowerBuilder would then have failed. The CREATE/ALTER PROCEDURE and EXECUTE IMMEDIATE statements have been changed to make it possible to declare that no result set will be returned.

For EXECUTE IMMEDIATE, the new syntax is:

EXECUTE營MMEDIATE燵爀xecute-option燷爏tring-expression

execute-option:

牋WITH燪UOTES燵燨N爘燨FF燷

|燱ITH燛SCAPES爗燨N爘燨FF爙

| WITH RESULT SET { ON | OFF }

The WITH RESULT SET clause has no effect on the execution of the EXECUTE IMMEDIATE statement, but allows the server to define correctly the procedure containing it. This new clause can only be used with the Watcom-SQL style of EXECUTE IMMEDIATE; it is not permitted with the Transact-SQL form:

EXECUTE ( string-expression )

For CREATE PROCEDURE, a new clause can be specified immediately following the list of parameters for the procedure:

CREATE燩ROCEDURE燵爋wner.]procedure-name (燵爌arameter, ...燷 )

NO RESULT SET

...

The NO RESULT SET clause can be used with either Watcom-SQL or Transact-SQL procedures. It cannot be used together with the RESULT clause.

339903 When calling a procedure with a output parameter bound as a NUMERIC or DECIMAL, 0 may have been returned to the application rather than its actual value. This problem would have manifested itself in the ODBC driver as well. This problem has been fixed.
339919 The server could have become deadlocked, causing it to appear hung, if a checkpoint or DDL statement occurred concurently with an update of the idle statistic, and the server was attempting to load a procedure. This is now fixed.
339931 If an ALTER PUBLICATION statement failed, e.g. a table being added was already part of the publication, then trigger definitions for any tables referenced since the database was started would have been disabled. The triggers would be restored by restarting the database or by executing a successful ALTER PUBLICATION. This has been fixed.
339938 When using Windows XP with the XP-style desktop and JDK 1.4.2, time unit drop down lists in the Go To dialog and the New/Edit Watch dialogs would have shown an ellipsis (three dots) instead of "ms" for the default time unit. This is a Java issue (Sun bug number 4867054), for which a work around has been implemented.
339940 The MobiLink ASA Client DBMLSync, and SQL Remote may have deleted old transaction log files that were needed for synchronization. Now, instead of deleting the old transaction log files, a warning will be issued if the database truncation offset is greater than the minimum value of progress offsets from SYSSYNC or the confirm_sent from SYSREMOTEUSER. This warning message will have a prefix of "I." for 802 and "W." for all other versions.
339955 The editor would have thrown an exception when moving the cursor to the next word or previous word when using control + arrow keys, if there was a special punctuation character. Examples of special punctuation characters are: /u2018, /u2019, and /u201d, (open single quote, closing single quote, and double quote). These characters are used by Mocrosoft Word and the problem could have occurred when pasting text from Word into the editor. This problem is now fixed.

Note, this problem also affected the editor in Sybase Central.

340046 An exception could have occurred when moving through a result set that contained rows with column lengths 200 bytes or greater.

For example, (assume the following table contains entries with the NOTES column containing 400 characters):

create table TBLVARCHAR

(

ID unsigned bigint not null,

NOTES long varchar,

primary key (ID)

);

The following is a VB example that selects from this table:

rs.Open "SELECT * FROM tblVARCHAR", conn, adOpenStatic, adLockReadOnly

' loop through all recordsets

Do While Not rs.EOF

For i = 0 To 1

Debug.Print rs.Fields(i).Name, TypeName(rs.Fields(i).Value), rs.Fields(i).Value

Next

rs.MoveNext

Loop

rs.Close

This problem has been fixed. The GetRowsAt() method now handles long columns.

340047 When the SQLCONNECT environment variable was set, its parameters would have overridden parameters in the connection string (specified using -c). This has been fixed, the parameters in the connection string now have precedence.
340071 Updating a Runtime installation with an EBF, would not have updated the runtime engine, but would have installed the Personal Server. This has now been fixed.
340196 When starting the MobiLink server as a service from Sybase Central, Sybase Central would have indicated that it had successfully started, even if it really had failed to start for some reason. This has been corrected, Sybase Central will now indicate a successful start only if the MobiLink server really does start
340235 If a ROLLBACK TRANSACTION specified a name which did not match an existing savepoint, no error was given; instead, a full ROLLBACK was performed. An error will now be given if the name does not match one specified in a SAVE TRANSACTION statement or the name on the outermost BEGIN TRANSACTION statement.
340244 When using the QueryEditor, closing and reopening the database connection would have caused the QueryEditor to have been changed to All. This problem has been fixed.
340293 The request level log may have shown "unknown" for some requests. This has been fixed
340371 If the ASA installation location was anything other than the default location and the HKey_Local_Machine\Software\Adaptive Server Anywhere\x.0\Location registry key was empty or incorrect, an EBF install would not have detected the presence of an existing install and would have failed. This has been fixed.
340384 When running dbisql, (or Sybase Central), it could have failed with a SecurityException saying that it could not open a registry node or preferences file, when logged on as a non-privileged user. This problem has been fixed.
340386 When the MobiLink server encountered error -10050 (Expecting ? columns in cursor, but found ?) no error was written to logfiles or displayed on the screen. This has been fixed.
340410 If an application was started from a very long directory specification (about 80 characters), connected to a database and then crashed or was killed, the server may also have crashed. This has been fixed.
340419 It was possible to create userids, passwords and database encryption keys that could not be specified in a connection string. As well, it was possible to start servers with server and database names that could not be specified in a connection string.

This has been fixed so that attempting to create a userid, password or database encryption key that is invalid, or attempting to start a server with an invalid server or database name, will fail with an error.

Valid userids, passwords, database encryption keys, engine names and database aliases must NOT:

- start with whitespace or single or double quotes

- end with whitespace

- contain semicolons

340421 When using the syntax highlighting editor and changing any of the format values (ie colour, font size etc), the change would not have taken effect immediately. When changing the font size, the cursor would have moved according to the new font size, but the characters were still displayed at the old font size. Format values are changed by opening the Options panel, selecting Editor, and then the Format tab. These problems have been fixed.

Note, these problem existed, and have been fixed, in Sybase Central as well.

340488 An UltraLite dynamic SQL application, running on a PALM device, could have crashed when executing a query involving the COUNT() aggregate function. An odd-address reference to a LONG integer could have been referenced, as the Count() expression was being invoked using an invalid prototype. This has been corrected.
340496 If a stored procedure contained a query which referenced a user-defined function, calling the procedure many times could result in reduced performance or a "dynamic memory exhausted" error. This has been fixed. A workaround is to set the Max_plans_cached option to 0 to disable query caching.
340537 It was possible for an application using dblib to have crashed, if a parse error occurred on a connection string that was longer than about 50 characters. This has been fixed.
340542 When recovering a database that has been created before version 8.0.0, and the recovery failed with the error "Database cannot be started -- {log name} not expecting any operations in transaction log", the server would then have crashed. This has been fixed.
340561 Queries embedded within stored procedures, or queries involving proxy tables, that contained an ORDER BY clause may have failed with an erroneous syntax error (typically -152 'Invalid ORDER BY specification') or may have returned the data sorted in the opposite order to that desired. This may have occurred for any ORDER BY clause, whether in a SELECT, UPDATE, UNION, or LIST() aggregate function. This erroneous behavior has been corrected.
340562 On CE, when a removable media card containing the UltraLite database was ejected while the application is running, the runtime would have reported the error SQLE_MEMORY_ERROR. If the device was turned off and turned back on again (for example, when it enters and leaves power saving mode), it essentially ejects and reinserts all removable media cards, which would have caused this error.

This problem has now been fixed, the runtime silently reattempts to access the database file for a few seconds. If it fails after this time, then the card must have been manually ejected and it will return SQL error SQLE_DEVICE_IO_FAILED. If an error callback has been registered, the callback can prompt the user to reinsert the media card and return UL_ERROR_ACTION_TRY_AGAIN to have the runtime retry the operation. If the runtime detects that a different card with another database with the same name is inserted, it will set SQL error SQLE_INCORRECT_VOLUME_ID. Again, the error callback will have the opportunity to prompt the user to reinsert the original card.

340594 Attempting to load a non-usm file, or a ulxml file as if it was a usm file, would have resulted in a crash. This has been fixed and an error is now reported.
340672 If a CREATE PROCEDURE statement was executed, and the length of the user name and procedure name together exceed 150 bytes, the server would have crashed. This has been fixed.
340674 If a complex expression could not have been handled by the server, due to some internal

limitation, the request would have failed with the error "Invalid expression near '%1'".

Now the server will return a more informative error. If a function or procedure call has too many arguments, error -994 - "Too many arguments for function or procedure '%'" is returned. If an IF expression has too many conditional expressions in its condition, or there are too many outer references in a SQL statment, error -890 - "Statement size or complexity exceeds server limits" is returned.

340693 If focus was not in the SQL Statements window, then after using the "Go To" dialog, the focus would appear to be in the SQL Statements field, but characters typed would not be displayed in the field until it was clicked. This has been fixed, focus will now be in the SQL Statements window after using "Go To".
340721 If a BACKUP DATABASE statement attempted to create an archive backup using a name longer than 255 bytes, the server would have crashed. This has now been fixed.
340731 From a column's property sheet, it was not possible to specify the empty string as the default value for a character type column.

This has been fixed. Now, selecting the "User-defined" radio button and leaving the text field empty sets the default value to the empty string. Selecting the "No default or computed value" radio button continues to set the default value to null. Note that either selection sets the default value to null for non-character type columns.

340733 From the Domain wizard, it was not possible to create a domain based on a character type with the empty string as the default value.

Now, selecting the "This domain has a default value" check box and the "User-defined" radio button, and leaving the text field empty sets the default value to the empty string. Clearing the "This domain has a default value" check box continues to set the default value to null. Note that either selection sets the default value to null for domains based on non-character types.

340736 A subquery predicate can be deferred past a Sort operation if a TOP N clause is present. This allows the predicate to be evaluated only for enough rows to satisfy the TOP N clause instead of for every row in the sort.

For example, the following query could defer predicate evaluation until after a sort operation (if the User_estimates option is set to 'On'):

select TOP 4

D.dept_id, D.dept_head_id, E.emp_id, E.emp_fname, E.dept_id

from department D, employee E

where D.dept_id = E.dept_id

and E.emp_fname = (

select min(E2.emp_fname)

from employee E2

where (D.dept_head_id = E2.emp_id,100)

)

order by D.dept_id, E.emp_id

Prior to 9.0.1, a "Sort Top N" would not be constructed if a predicate was being deferred in this way. In 9.0.1, this was inadvertently changed, leading to a correctness problem: only N rows are returned from the "Sort Top N", and the deferred predicate eliminates some of these.

Now, the predicate is associated with the Sort Top N itself. This gives correct results with better performance than 9.0.0: the predicate is only evaluated for the rows that are lower than one of the N previously fetched rows, and the more efficient Sort Top N is used.

340741 With UltraLite dynamic SQL, it was possible to crash when a GROUP BY clause had several expressions. This has been corrected.
340742 On some platforms, when using UltraLite dynamic SQL, the LOCATE function may have returned an incorrect result. This has been fixed.
340743 If a LOAD TABLE statement was executed on a global temporary table, an exclusive lock was left on the table until a COMMIT was executed. Other connections attempting to reference the table for the first time would have been blocked until the lock was released. Now, executing a LOAD TABLE statement will cause a COMMIT to be executed at the end of the statement, releasing the lock. If a global temporary table was created with ON COMMIT DELETE ROWS, an error will be given on an attempt to use LOAD TABLE with that table.
340788 Dropping a named column CHECK constraint by executing an ALTER TABLE statement with a CHECK NULL clause, would have caused a server crash.

For example:

ALTER TABLE t1 MODIFY c1 CONSTRAINT check1 CHECK NULL

This has been fixed.

340797 Some connection parameter values from the dbisqlc connection dialog were being missed, including the CommLinks parameter. This would have caused connections to a remote server initiated via the connection dialog to fail. No -c command line option connection parameter were ignored, nor were those from the CONNECT USING statement.

Connection parameters other than the following were ignored by the connection dialog: UID, PWD, CON, DBN, DBF, DBS, ENG, START, AUTOSTOP, INTEGRATED, DSN.

This problem has been fixed.

340808 If a SQL Remote, DBMLSync or LTM truncation point exists, dblog will no longer remove the transaction log, unless the corresponding ignore command-line option (-ir, -is and -il respectively) is also supplied. This behaviour is also true of calls made to DBChangeLogName through the DBTools interface.
340813 If a table or column name contained the percent character "%", the LOAD TABLE statement in the reload.sql may have been incorrect. There was also a chance that the dbunload utility could have crashed. This has been fixed.
340815 Remote Data Access could have caused a server crash, if a large data value was provided. This has been fixed.
340818 If the optimizer chose a Group-By-Hash join, (shown as GrByH in the graphical plan), to compute a GROUP BY containing a distinct aggregate, and the input contained no rows, the server could have leaked memory, although the leaked memory would have been no more than one page. This memory is now released.
340835 If an application attempted to set a parameter to be an empty binary array (eg. setObject( 1, new byte[0] )), the subsequent executeQuery or executeUpdate call would have resulted in a Java exception. This problem has been fixed.
340844 Calling the soundex() function could have crashed the server. This would have occurred when passing a string larger than the pagesize of the database. An error is now returned indicating that the string parameter is too long.
340902 An UltraLite application, running on Palm devices, would have failed to synchronize new or updated rows after the following sequence:

- PalmExit

- drop database

- PalmLaunch

Switching to another applcation, or a reset at any point after the PalmExit, would avoid (or recover from) this condition. This has been fixed.

340911 When a problem is encountered during self-registration, by the performance monitoring DLLs (dbctrs9.dll and dbmlctrs9.dll), either during installation or by running regsvr32, a message box will now be displayed showing what failed. Previously there was only a single generic error message.
340912 The domain types, datetime, image, money, oldbit, smalldatetime, smallmoney, sysname, text, uniqueidentifierstr and real were not supported by the AsaClient. The AsaDbType enum has now been modified to add these domain types.
340915 For read only queries, the server did not examine the definition of computed columns, which could have caused the server to omit some possible optimizations. For example:

CREATE TABLE T(x int, y int compute(F(x))) -- F(x) is a User Defined Function

SELECT x, F(x) from T for read only

The above query can be executed as 'SELECT x, y from T' because y is a computed column whose value is pre-computed as F(x). The transformed query eliminates the need to compute F(x) for each value of x in T and, is therefore more efficient. The server now makes this transformation for read only queries.

340916 Dynamic cache resizing did not work on AIX 5.x platforms. This has been corrected.
340919 After disconnecting, clicking the Connect menu item to bring up the Connect dialog would have had the fields populated with all of the connection information used by the previous connection, including the password. Now, the password field is left blank.
340921 Trying to save to a file with an incorrect or unspecified extension, either with the -o command line option or with the File Save dialog, would have resulted in an error message, but a zero length file would also have been created. With an unspecified extension, the error message would have been incorrect. When using the -o option, the error reporting an incorrect name would not have been displayed until the monitoring session ended. The MobiLink Monitor would then have closed, without giving the option to save the session. These problems have now been fixed.
340942 From the Column property sheet, it was not possible to specify a default value, other than a literal string, for a character column. For example, it was not possible to use a built-in function with a constant expression, such as sqrt(2) as the default value if the column's type was character, varchar or long varchar, since the expression would always have been single-quoted and thus, would have been treated as a literal string. Similarly, it was not possible to specify a non-literal string value default for a domain with a character base type, from the Domain wizard . Both of these problems have now been corrected.

A literal string check box has been added to the Column property sheet and the Domain wizard, so whether or not the default value should be treated as a literal string can be specified. The check box is selected by default for character columns and domains with a

character base type.

When selecting the check box, enclosing the default value text in single-quotes is not required, nor is it required to double-up embedded single quotes and backslashes within the text, since this will be done, (this is the historical behaviour). By clearing the check box, the automatic quoting and escaping behaviour will be turned off and the

specified default value text will be passed as is to the server.

340958 An InvalidCastException would have been thrown when passing a guid string to an Uniqueidentifier parameter. This is now fixed.
340959 When running the Console utility, (ie dbconsole) on Unix platforms, clicking the Help button on the Options dialog, (File->Options), would have done nothing. This has been fixed.
340960 The graphical plan was displaying some non-ASCII characters as '.'. This has been fixed, all characters are now displayed as is except those less than 0x20, which are displayed escaped as '\xNN'.
340961 In a case where an expression was used both in the select list and in a local predicate on a procedure call, and was not exactly a procedure column, the value of the expression in the result could have been incorrect.

For example, the following query demostrates the problem:

select cast(value as varchar(25)) as pvalue from sa_eng_properties()

where pvalue ='1'

This has been fixed by materializing the expression along with the procedure columns.

340963 Creating a database with an eight character mirror log name that was specified without an extension, such as 'dbinit foo.db -m foo45678', could have caused a server crash. This has been fixed.
340964 When saving the graphical plan for a statement which contained one or more backslash characters, the plan details (in the right pane on the "Plan" tab), did not show the correct SQL -- double backslashes in the original SQL were shown collapsed into a single backslash.

For example, the plan for: SELECT '\\'

was shown in the plan as: SELECT '\'

This has been fixed.

340966 An error in common code dealing with string parameters to built-in functions could have caused a server crash. This has now been corrected.
340989 An internal exception would have been reported if a property sheet for a Domain, Ultralite Statement, or Web Service was opened, and the ESCAPE key was pressed, while one of the tabs had focus. This has been fixed.
340992 When running on an OS with a German locale, the source dialog in the debugger had the buttons truncated when the display size was 800x600. This has been fixed.
341002 Queries with more than one equijoin, for which not all of the equijoin predicates were inferred, might have returned an incorrect result set. This has been fixed.

A simple example is a query with the WHERE clause containing two equijoins "T1.X = T2.X" and "T2.X = T3.X" , for which we cannot infer the third equijoin "T1.X = T3.X" due to the domains of T1.X and T3.X being incompatible.

341015 Creating a new breakpoint in the Debugger's Breakpoints dialog, without a connection, would have caused an uncaught exception. The New button is now disabled until a connection is made, so that this exception can no longer occur.
341082 Creating a proxy table may have caused a server crash, if the server name in the location clause was very long. This has now been corrected.
341085 It was not possible to connect to an ASE or SQL Server database with a userid that did not require a password. This has been fixed so that connections can now be made with userids that have no password.
341100 If a FORWARD TO statement was executed, and the server name specified in the statement was very long, there was a possibility it would have caused a server crash. This is now fixed.
341102 In the Breakpoints dialog, the mnemonic 'E' was used for both the Edit and Enable buttons. This has been fixed so that the mnemonic for the Enable button is now 'b'.
341104 An Exception would have been thrown when fetching zero-length long binary column. This is now fixed.
341105 Compressing an encrypted database now removes any encryption, and marks the (resulting) database as unencrypted. Expanding the compressed database will result in an unencrypted database. A warning is now returned if an encrypted database is compressed through

the CREATE COMPRESSED DATABASE statement, or through dbshrink; the warning states that the compressed database is not encrypted.

341106 If Sybase Central was shutdown, or the plug-in was unloaded, and there was more than one connection open, then not all connections would have been closed. This has been fixed.
341107 When in Debug mode, putting the cursor before, or at, the current execution line and clicking the "Run To Cursor" toolbar button, would have caused the toolbar "Step Into", "Step Over" and "Step Out" buttons to be disabled. This has been fixed.
341109 The behaviour of an empty connection parameter was changed inadvertently by engineering change 336563. This fix restores the behaviour to be the same as before the change.
341121 Queries with a subquery, where the right-hand side expression needed to be converted to the domain of the left-hand side expression, (rather than the other way around), may have returned an incorrect result if the conversion resulted in a loss of precision.

For example:

SELECT *

FROM employee

WHERE emp_id+0.1 > ALL ( SELECT 1751 from dummy)

The problem was that "emp_id+0.1" is a float and "1751" is a smallint, and the conversion from float to smallint loses precision.

The fix is to convert the right-hand side expression to the common domain, rather than converting the left-hand side expression to the domain of the right-hand side expression.

341123 Attempting to update or delete rows from a table, when another user had locked the table, would have caused dbisql to hang. Now, an error dialog is displayed that shows which user has the lock.
341221 The ALTER DATABASE statement is documented, and the server correctly parses an ALTER DATABASE statement, but this feature was not implemented until 9.0.0.

Now, an ALTER DATABASE statement will return the error "ALTER DATABASE NOT IMPLEMENTED", SQLSTATE 0A000 (SQLCODE -134).

341242 When using SQLProcedureColumns to determine the type and position of a procedure's parameters, the ORDINAL_POSITION of an OUT parameter was always reported as 0, for any and all OUT parameters.

For the following procedure:

create procedure testargs( in arg1 integer, inout arg2 integer, out arg3 integer )

begin

set arg2 = arg1 * arg2;

set arg3 = 999;

end

the ordinal positions for arg1, arg2, and arg3 would have been reported as 1, 2, and 0.

This has been corrected and the ordinal positions for arg1, arg2, and arg3 are now reported as 1, 2, and 3.

341244 If request-level logging was invoked with the option 'SQL+hostvars', either by calling sa_server_option or via the -zr command line option, the calling property('requestlogging') would incorrectly have returned 'NONE'. This has been fixed.
341274 In the Event wizard, the Event property sheet, and the Translate Log File wizard, when specifying the date, using the up or down arrow keys or clicking the up or down arrow buttons in the year spin box to change the year, the date value would not have been updated. This has been fixed.
341354 Extraneous debugging messages may have been displayed in the console output by dbmlsrv and dbmlsync, such as:

error reading: <number>

timeout reading

These have been removed.

Note that these messages were in addition to normal error messages.

341377 Depending on the platform, the Pause button on the MobiLink Monitor's toolbar could be slightly larger or smaller than the other toolbar buttons. This has been fixed.
341379 Creating a table with a unique constraint could have crashed the server, if the default constaint name was long.
341446 A call to SQLNativeSql would have resulted in a truncated string, when the output buffer length was less than twice the length of the input string. This has now been corrected

The following C example shows the problem:

char sql_stmt_out[24];

strcpy( sql_stmt_in, "select * from customer" );

rc = SQLNativeSql( dbc, sql_stmt_in, SQL_NTS,

sql_stmt_out, sizeof( sql_stmt_out ), &len );

The output buffer would have contained only 12 characters (ie 24/2).

341450 If only Sybase Central was selected for installation, it was not possible to connect to a server using the iAnywhere JDBC driver, as the required ODBC files were not installed. Selecting Sybase Central alone, will now install the required ODBC files as well.
341458 If an ADO application fetched a binary column into a variable of type VARIANT, only 16 bytes would have been stored. Also, for a non-variant DBTYPE_ARRAY variable, the length was incorrectly set to zero, which meant that no data would have been copied. These problems have now been fixed.
341464 When modifying a procedure, view, trigger or event in the right-pane of the main window, after saving the changes the caret position and text selection would have been lost and the editor's scroll positions would have been reset to the top and left. This has been fixed. Now, the caret position, text selection and scroll positions are retained after the changes are saved.
341469 When analysing queries containing inequality predicates, where a column involved in the predicate was the ninth or greater column of a table, the Index Consultant (both Sybase Central and ISQL) could have caused a server crash. It may also have caused server assert failures to occur during tuning; assertion 101412 has been observed, and others may have been possible, depending on cache contents when the consultant was run. This has been fixed.

A workaround is to remove queries from the workload containing inequality predicates over the 9th or greater columns of the table.

341484 When using the AsaDataAdapter, the Fill method would not have returned when the SelectCommand.Cancel method was called. This problem has been fixed.
341501 When viewing an Index Consultant analysis in Sybase Central, the Query Details pane for a query would have had the With Virtual Indexes button disabled, even if a virtual index existed. When clicking the Without Virtual Indexes button, the Plan Viewer would have disabled the button to Add Virtual Indexes to the plan. Both of these buttons are now enabled properly.
341508 When viewing an Index Consultant analysis in Sybase Central, the Query Details pane for a query would have had incorrect information in the 'Virtual Indexes used for query' table. The columns of this table have headers that indicate that each row should contain Table/Columns/Type, however the data inserted into the table consisted of Creator/Table/Clustered. This has been fixed and the table now contains the correct data.
341512 After installation, if Sybase Central was opened and closed without going into debug mode, invalid splitter bar positions for the panes in the debugger details panel would have been saved. The next time Sybase Central was started and put into debug mode, the splitter bar position would have been immediately to the left instead of the proper default position. This has now been fixed.
341528 When in the Editor, moving the cursor to the end of a document and searching up, would have finished without error, but would not have found the texted being searched for. This is now fixed.
341616 If the server ran out of memory, it could have crashed instead of reporting an error. On Windows CE, the server would have started without errors, but would not have accepted any connections if the system was low on memory. This has been fixed so that the server reports out of memory errors.
341633 Using a writefile could have lead to a corrupted database. That is the virtual database represented by the writefile plus original database would be corrupt, not the original database or the writefile itself. To cause the corruption, the server must have been started on the writefile, a virtual dbspace expanded, the server shutdown and restarted, then the virtual dbspace expanded again. The underlying original database must also have been created with 8.0.0 or later. This problem has now been fixed.
341648 Extracting into a new database would have resulted in a crash (if using dbxtract -an) or have caused Sybase Central to exit immediately without error, if there were no tables to be extracted. This has been fixed.
341655 The graphical plans for queries containing temporary tables were being constructed incorrectly; any subtree containing a scan node over a temporary table would have been terminated at that point, with the scan node (sequential or index) for the temporary table also missing. This has been fixed.
341661 When selecting the Data tab of a table, in order to view the data, not all the rows would have been shown. This has been fixed.
341718 If the INPUT INTO statement is run with a FORMAT clause and the table does not exist, for some formats a table is created prior to loading the date. When executed via DBISQLC, the CREATE TABLE statement generated would have failed with a syntax error, if the language setting for ASA was anything other than EN (english). This has been fixed.

Note, this problem did not happen with DBISQL.

341737 When the JDBC driver translated UTF8 data to Unicode, it made the appropriate Java call, but instaed of asking for translation from UTF8 to Unicode, it asked for ASCII to Unicode. Most of the time this did not cause a problem, but when the MobiLink server was started with the -vt switch, (which displays the SQL statements that are being executed by the ODBC driver), these statements could have been displayed incorrectly. This has been corrected.

Note that the problem was only a display problem and only occurred on Unix platforms. The correct SQL statements were executed by the ODBC driver.

341757 Synch stream errors are reported by the MobiLink server when detected during a synchronization. If an error was detected and reported, that same error would have been reported for all subsequent synchronizations that had a stream error, until the MobiLink server was restarted.

Note, the fact that an error was being reported was legitimate, it was the reason for the error that may have been erroneous.

341760 When running the Index Consultant, potential recommended indexes could have been improperly enabled/disabled during tuning. This was especially likely in Sybase Central where several tuning phases were performed. It appears that the only consequence was poorer quality of index recommendations. This is now fixed.
341761 If an application that connected to a server via shared memory, did not disconnect before closing, the message "Disconnecting shared memory client, process id not found" could have been displayed multiple times for a single connection in the server console. This problem was more likely to have occurred if all the server tasks were busy processing requests. This has been fixed so the message is only displayed once per connection.
341762 Rerunning the install, or applying an EBF or Maintenance Patch, would have re-enabled the Sybase Central and ISQL fast launchers, even if they had previously been disabled. This has been fixed, the installer will preserve the state of the fast launcher.
341764 Shutting down dbisqlc, could have caused it to crash, in situations where character set translation was being done on the client, rather than the server. This is now fixed.

--EOF--

  • 本文链接地址:http://www.sybrepair.com/sap-asa-cr-number-1.htm
  • 本文为dbainfo个人原创,请在尊重作者劳动成果的前提下进行转载;
  • 转载务必注明原始出处 : Sybase数据库技术,数据库恢复专家
  • 对《SAP SQL Anywhere的所有已知BUG列表(1)》有何疑问或见解,请在本文下方发表;
  • 对网站还有其他问题或建议,请提交在留言板,谢谢!
  • 目前还没有任何评论.
    :wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)