Sybase Adaptive Server Anywhere EBF 
***********************************

Introduction
============

This patch to ASA fixes some problems that were deemed
serious enough to warrant an emergency bug fix (EBF). As such, it only
affects a subset of the components of ASA.

EBF bug fixes
=============

The following is a list of bugs fixed in this maintenance version of the 
software, as compared to the last patch release.



                 *****************************************                 
                 ** ASA C++ Provider for Sybase Central **                 
                 *****************************************                 

The user could not create a trigger, stored procedure or view via Sybase 
Central.  A message would be displayed stating that the statement was 
not a valid CREATE TRIGGER [or PROCEDURE or VIEW] statement.  This has 
been fixed.

(Build #2510  - Engineering Case #207546)
===========================================================================



                           ********************                           
                           ** Backup Utility **                           
                           ********************                           

Running the backup utility, dbbackup, with the -r, (rename and restart 
the transaction log), and the -n, (rename local backup of transaction 
log to match server), switches would cause it to crash.

(Build #2717  - Engineering Case #209838)
===========================================================================



                               ************                               
                               ** Client **                               
                               ************                               

dbclient would crash on Solaris and SGI if no engine name was specified 
on the command line.

(Build #2713  - Engineering Case #208493)
===========================================================================

With a particular version of Japanese Windows 95 (Win95B or Win 95 OSR2) 
and a particular Office 2000 component (IME) installed, the 32-bit dbclient 
will crash during startup. The crash will only occur if the DDE link 
is started (which is the default).

It is likely that the IME is interfering with our DDE link. The link 
is not required anyway, since it can only be used to connect to our 
32-bit server on the same machine, and the direct connection between 
an application and the server does not require the client at all. So, 
the DDE link will no longer be started automatically. It can be started 
manually, however we don't support the above configuration.

(Build #2717  - Engineering Case #206884)
===========================================================================

The DOS client could hang on an update request to the database server. 
The problem would potentially occur in DOS or Win3x clients or servers, 
although it has not been observed anywhere other than the DOS client.

The DOS client uses a small internal stack while processing interrupts 
for the IPX link. Other interrupts are supposed to be disabled. However, 
when using the Novell 32-bit network drivers, it appears that an interrupt 
can occur during our interrupt. If such an interrupt occurs, it is likely 
that our small stack will overflow, damaging nearby data structures 
and leading to a hang or crash. The observed problem has a hang in the 
client.

A customer can work around this problem by ensuring that they switch 
to their own stack for their interrupt processing. Alternatively, they 
can use a new feature added to the client and server IPX link.

An option on the IPX link, called IntStack, can now be specified. For 
example, "-x ipx{IntStack=8000}" will cause the client or server to 
use a 8000-byte stack, instead of the default stack (4000 on Win3x, 
200 elsewhere). If -z is specified, the stack size will be reported 
during startup, and the amount of the stack used will be reported during 
shutdown. If the stack overflows, a message will be dumped (regardless 
of the -z switch) and the client or server will exit.

(Build #2717  - Engineering Case #209396)
===========================================================================



                         ************************                         
                         ** Database Interface **                         
                         ************************                         

If an Embedded SQL application was using an indicator variable and truncation 
occured, the value of the indicator variable was supposed to be the 
length of the actual value (i.e. the length that the variable needs 
to be for truncation not to occur). For DT_STRING, DT_DATE, DT_TIME, 
and DT_TIMESTAMP types, the value returned was one too short. This was 
not an issue for ODBC clients.

(Build #2717  - Engineering Case #209497)
===========================================================================



                      ******************************                      
                      ** Database Tools Interface **                      
                      ******************************                      

If the consolidated database picks up messages from a remote that contains 
messages with the expected rereceive count and the previous rereceive 
count, then it will successfully apply the proper messages, not apply 
the old messages, complaining of old resend counts, and when it's done, 
increase its rereceive count by one.  

This can lead to an infinite resend loop in a situation where the remotes 
run dbremote in the following manner :

dbremote -s
dial-in to upload/download files
dbremote -r

dbremote will now avoid the unnecessary rereceives.

(Build #2702  - Engineering Case #202029)
===========================================================================

Dbremote would sometime issue a resend request when it was not needed. 
This would cause dbremote to take more message exchanges than usual 
to resync after a message was lost.

(Build #2705  - Engineering Case #204050)
===========================================================================

Given a table with a subscribe by column. If an update only changed 
the subscribe by column and other non-blob columns in the table, and 
the update to the subscribe by column caused an insert to go to a remote, 
and the blob was larger that 256 bytes, and another blob was scanned 
in the same transaction. Then the blob that was scanned earlier in the 
transaction could be sent in the insert.


(Build #2709  - Engineering Case #206488)
===========================================================================

When extracting an image column from a consolidated ASE database, ssxtract 
could crash if the length of the image was equal to or greater than 
65468 bytes long.


(Build #2712  - Engineering Case #207961)
===========================================================================

SSRemote could hang on Sun Solaris with OS 2.5.

(Build #2712  - Engineering Case #208250)
===========================================================================

SQL Remote for ASE could not replicate data from ASA to ASE with multi-bytes 
table names, specifically when back slashes are embedded in table names.

(Build #2713  - Engineering Case #207492)
===========================================================================

When an update is sent from a remote to an ASE consolidated and that 
update sets a numeric column to a negative value the value could get 
set to the absolute value.

(Build #2715  - Engineering Case #209338)
===========================================================================

Operations with empty subscribe by values that originate at a remote 
database could be replicated to extra remote databases. The conditions 
under which this problem occured were:
1) The subscribe by remote option was on.
2) The remote user had a subscription on the table with the operation 
that had a subscribe by value.
3) The users subscription start operation had been moved to the offline 
log.
4) There were no subscriptions started/stopped/synced in the live log 
before the data op involved.
5) The oldest log_sent offset for any user was before the start subscription.

(Build #2719  - Engineering Case #209356)
===========================================================================

The ssremote log scanning thread (-i option) would cause deadlocks repeatedly 
with the sending thread (-s option).


(Build #2719  - Engineering Case #209603)
===========================================================================

If there is heavy replication traffic between ASE and ASA, ssremote 
would send to, and receive from,
the ASE server large amounts of data across the network.  To improve 
the performance, the user can
configure the ASE server with a large network packet size.  The default 
packet size is 512 bytes, it
could be changed to 1024 bytes or 1536 bytes.  SSRemote would ask the 
server for the packet size, through
the ERROR connection, in order to it for all other connections.  But 
SSRemote was not able to get
the packet size from the ASE server and it may be slower than it used 
to be, if there is heavy
replication traffic between ASE and ASA.

(Build #2720  - Engineering Case #210614)
===========================================================================

The actions performed by a triggers should not be replicated unless 
the replicate triggers, ( -t ) flag, is specified. In Passthrough mode, 
procedure calls in triggers were replicated when they should not have 
been.


(Build #2725  - Engineering Case #211574)
===========================================================================

The utilities dbremote, dbtran, and dbltm may crash, if transaction 
log files were corrupted.  More specifically,
if a REDO_CONNECT operation was missing from a transaction log file, 
these applications would crash.

(Build #2726  - Engineering Case #211860)
===========================================================================

Prior to this fix, ssremote would fail on Replication_error procedure 
calls, if the error message was longer than 255 bytes.

(Build #2726  - Engineering Case #211989)
===========================================================================

SQL Remote may have crashed if an incoming message was missing a closing 
single quote. SQL Remote was trying to find the closing quote, even 
it has already reached the end of the message.  SQL Remote will now 
scan the incoming message up to the end, and then report an error if 
it can not find the closing quote.

(Build #2738  - Engineering Case #214642)
===========================================================================

DBRemote, DBLTM and DBTran could not handle offline transaction log 
files that were greater than 2GB. These components would give error 
"corrupted transaction log file at offset...".

(Build #2739  - Engineering Case #215187)
===========================================================================



                       *****************************                       
                       ** Database Unload Utility **                       
                       *****************************                       

If a user has removed the DBA user id from the database for security 
purposes, an unload & reload will leave the DBA,SQL user in the new 
db.

(Release Build  - Engineering Case #184689)
===========================================================================

If a dbspace was created with a backslash character (filename separator 
on Win32), it would not be unloaded correctly. The backslashes are supposed 
to be escaped (doubled), but they were not. This could cause DBISQL 
to fail to rebuild the database correctly.

(Build #2727  - Engineering Case #212255)
===========================================================================



                               ************                               
                               ** Engine **                               
                               ************                               

If a table has a 2 or more column index and that index
is larger than 8 bytes one can get an assertion 51702 or
an "unable to find in index" error when an update trigger
updates part of the index that is not othwerwise updated
as part of the update statement itself.

(Release Build  - Engineering Case #168758)
===========================================================================

If dbsrv50 ever went down dirty (ie. crash, system shutdown, power failure), 
the old temporary files would be left behind. If another dbsrv50 ever 
tried to run with the same process id as the server that left the temp 
files behind, the new server would be unable to create its temp files 
since they would have the same name. Fixed by ensuring that the server 
always got unique names for the temp files. A work-around was available 
to erase old temp files before running the server again.

(Release Build  - Engineering Case #169377)
===========================================================================

The engine will assert with assertion 102806 in 6.0 and 50512 in 5.5 
if you attempt to revoke connect priveleges from a user that owns tables 
that are a part of a publication in a replication environment

(Release Build  - Engineering Case #172643)
===========================================================================

Drop dbspace could cause assertion 50226. Prior to the introduction 
of assertion 50226, recovery after a drop dbspace statment could fail 
with an error such as "No such file or directory".

(Release Build  - Engineering Case #195366)
===========================================================================

 ORDER BY queries on UNION ALL views could return NULL for  expressions 
not in the ORDER BY clause  if they are computed using select list items 
from the UNION ALL views.
In the example below, in the query Q the column V.X  coming from a 
UNION ALL view, is NOT in the ORDER BY clause. Some of the rows in the 
result set of 
the query Q will have NULL for this column.

create view V(X, Y) as 
	 select T.A, T.B
	    from T
	    UNION ALL
	    select R.C, R.D
	     from R

Q: select V.X,  P.E
      from V, P
      order by P.E

(Build #2509  - Engineering Case #201858)
===========================================================================

Executing the round function, requesting more precision than there were 
digits in the value to be rounded, would result in invalid data being 
returned.
eg.  Executing round( 5, 2 ) would give a result of '?' in the DBISQL 
datawindow.

(Build #2510  - Engineering Case #199841)
===========================================================================

Attempting to autostart an engine with invalid parameters would give 
the error message "Unable to start database server" with no indication 
of why not.


(Build #2510  - Engineering Case #203043)
===========================================================================

If the engine needed to build an index on a temporary table to satisfy 
an order by constraint on an insensitive cursor, in many cases this 
index would not be maintained properly when deleting through the cursor.  
This would manifest itself as subsequent incorrect cursor behaviour 
or gpfs.

(Build #2510  - Engineering Case #206695)
===========================================================================

If a CREATE INDEX on a declared global temporary table failed because 
an index with the same name already existed, database corruption would 
occur. While any number of assertions are possible (as is a GPF), the 
most likely is 50203 (5.5), 201112 (6.0): A page number appears twice 
on a free list.

(Build #2510  - Engineering Case #206717)
===========================================================================

Select repeat( 'aa', -2 ) was causes the engine to create an enormous 
temp file.  It will now just return an empty string.

(Build #2702  - Engineering Case #202021)
===========================================================================

    The Open Server Gateway could report spurious error messages such 
as the ones listed below. On SMP machines (but only observed on NT SMP 
machines), the OSG could cause spurious disconnects, OSG hangs, client 
hangs and other signs of general instability.
    The problems actually exist within the Open Server libraries. To 
work around these problems, some error messages are now suppressed and 
a new option, (-gt), to set the maximum concurrency in the OSG, has 
been introduced. The default is "-gt 1" so that only one CPU will be 
used. Once the Open Server libraries have been corrected, the default 
will change.
    To help diagnose these problems the "-am" switch will enable the 
display of all information messages and all error messages that are 
normally suppressed.
    The spurious error messages include but are not limited to the 
following:

Error Code #16269, Severity 15 CS error : Final DONE not sent by event 
handler
Error Code #16236, Severity 10 CS error : srv_senddone():  State error 
(0x142024)
Error Code #16227, Severity 15 CS error : Unknown token TDS stream 
received by spid 60
16331 - Recursive Calls to srv__seterr().

(Build #2709  - Engineering Case #205986)
===========================================================================

Previously, ASA allowed applications to create views that reference 
local temporary tables. This causes a recovery problem, since during 
recovery local temporary tables are not restored, while views are. This 
caused the recovery of the view to fail. Now, an attempt to create a 
view that refers to a local temporary table is prevented and a new syntax 
error is returned:

"View references '%1', which is a temporary object. Views can only 
refer to permanent objects." [-766] ['42U00']


(Build #2711  - Engineering Case #204048)
===========================================================================

If a query was constructed with a TSQL outer join, IS NULL predicates 
in the HAVING clause of the query were treated as part of the ON condition 
of the outer join. For example, the query:

Select R.y, S.y
From R, S
Where R.x *= S.x
Group by R.y, S.y
Having S.y IS NULL

was processed as if it were:

Select R.y, S.y
From R LEFT OUTER JOIN S ON R.x = S.x AND S.y IS NULL
Where R.x *= S.x
Group by R.y, S.y
Having S.y IS NULL

Since this restricted the ON condition more than desired, some rows 
(where S.y was not NULL) did not pass the ON condition, thus leading 
to extra rows in the result set.


(Build #2711  - Engineering Case #205107)
===========================================================================

The engine/server would hang trying to read a second database if Asynchronous 
I/O was set to 'available' on an AIX machine.  The workaround is to 
use 'smit' to set Asynchronous I/O to 'defined' (i.e.:  not available).


(Build #2713  - Engineering Case #206854)
===========================================================================

Using "dbeng6 -f x.db" would fail to release a semaphore on HP, AIX 
and SGI systems.  This could result in the machine running out of semaphores.

(Build #2713  - Engineering Case #207069)
===========================================================================

If the TSQL_VARIABLES option was set to ON before referencing a table 
for the first time since the database was started or before calling 
a procedure for the first time, and the trigger or procedure definition 
used variables preceded by @, the server would not be able to parse 
the definition correctly. This would result in "syntax error near 'procedure 
no longer valid'".

(Build #2714  - Engineering Case #209073)
===========================================================================

When recovering an operation that requires Remote DBA or DBA privileges 
and the operation had been executed by dbremote on behalf of a user 
with Remote DBA privileges but without DBA privileges, the operation 
would fail permission checks when reapplying it. Assertion 52003 would 
be reported.

(Build #2715  - Engineering Case #209415)
===========================================================================

The following sequence of statements would result in a corrupt index 
on a database created with blank padding.
	create table t(a char(10),b char(10));
	create index ix1 on t(a);
	create index ix2 on t(b);

	insert into t values(null,'');
	commit;

	update t set a=' ',b=' ';
	commit;

	validate table t;
The following conditions must be met for this to occur:
	- blank padding selected when database was created
	- two string columns being updated to the same value
	- the old value of one of the columns is different from its new value
	- the old value of the other column differs from its new value only 
in
	   the number of trailing blanks contained in the string
	- an index exists on the column whose new value is completely different

(Build #2717  - Engineering Case #209832)
===========================================================================

SQL Remote for ASA may generate core files on 64-bit Sun runs.  These 
would happen when we stopped the
server with "dbstop -y" while dbremote was running in continuous mode.  
Since they happened after the server shut down, they were not harming 
anything, but the core files were appearing in the database directory.

(Build #2717  - Engineering Case #210121)
===========================================================================

It was possible to insert nan and inf values into a double column in 
the database via a wide insert if the values were not contained in the 
first row.  These values could not be selected using DBISQL because 
they could not be converted to strings.  The only way to get rid of 
the rows is to delete them (updates do not work).  The following where 
clause, adapted to a particular table, will find rows with invalid double 
values:
where NOT( columnX < 1.79769313486231e+308 OR columnX > -1.79769313486231e+308 
OR (columnX < -2.22507385850721e-308 and columnX > 2.22507385850721e-308 
))

(Build #2721  - Engineering Case #208626)
===========================================================================

For some queries with multiple inequality predicates that match a single 
indexed column, SA combines these predicates in order to use an index. 
For example, in the query:

SELECT 	*
FROM 	  	R
WHERE	EXISTS 
		( SELECT *  FROM T
		WHERE T.x > R.x AND T.x > R.y AND T.x > R.z )

SA calculates M = GREATER( R.x, R.y, R.z ) in order to search T via 
an index on column T.x. The internal GREATER function computes the maximum 
value of its arguments. If any of R.x, R.y, or R.z is NULL, then M is 
computed to be NULL.  A bug existed in expression evaluation such that 
if M ever evaluated to NULL, then it would subsequently always evaluate 
to NULL.  In order for this bug to appear, the following conditions 
must hold:
1.  Three or more inequality predicates are used on an indexed column 
to do indexed retrieval
2.  One of the arguments of the predicates evaluates to NULL for one 
of the rows.

The result of this bug is incorrect results; attempts to look up values 
in the index will fail.  The results provided by such a query will differ 
depending on the access plan.

(Build #2721  - Engineering Case #210734)
===========================================================================

On Unix platforms, a server would run significantly slower as a daemon.  
This problem was introduced by a previous fix, ( server is inaccessible 
with -o and -ud switches in use).

(Build #2725  - Engineering Case #194178)
===========================================================================

DBSpaces might not get flushed to disk properly on unix engines.

(Build #2726  - Engineering Case #211890)
===========================================================================

If an update statement contained a 'publication' clause, and the corresponding 
publication article contained no 'subscribe by' clause or 'where' clause 
then if the 'update' statement's target table had an update trigger 
the update trigger would be fired.  The trigger was not supposed to 
fire, however, because no row updates occur in an 'update..pub' statement.  
The work-around is to avoid doing 'update..pub' on an article having 
no 'subscribe by' or 'where' clause.


(Build #2727  - Engineering Case #211976)
===========================================================================

SET DESCRIPTOR sqlda COUNT = c would fail if c equaled sqlda->sqln (number 
of sqlvars the sqlda was allocated for).

SET DESCRIPTOR sqlda VALUE n DATA = :host_var would overrun memory 
if the type was FIXCHAR and sqlda->sqlvar[n-1].sqllen was larger than 
host_var's length.


(Build #2730  - Engineering Case #212932)
===========================================================================

A FOR statement in a procedure, trigger or batch could cause memory 
corruption. The problem would be more likely to happen if the server's 
cache size was small. One symptom of the problem would be an error message:
	variable 'ABCxxxx' not found
where "ABC" is the name of a column in the SELECT list of the FOR statement 
and "xxxx" contains garbage characters.

(Build #2733  - Engineering Case #212818)
===========================================================================

If the 5.5 server is allowed to broadcast during startup to ensure its 
name is unique (the default behaviour), it will fail to start on Windows 
2000.  The error is "unable to initialize requested communications links".  
A workaround to the problem is to use DoBroadcast=no when specifying 
the tcpip parameter on the server start line.


(Build #2733  - Engineering Case #213817)
===========================================================================

Using the 'LIKE' operator to search an indexed column on a blank padded 
database could miss rows if the search pattern had a constant prefix.

(Build #2738  - Engineering Case #212395)
===========================================================================

For queries of the form:
SELECT DISTINCT 	A.x
FROM			A, B, C, D
WHERE		A.y = B.y and B.w = C.w and C.z = D.z
SA could choose a bad access plan, for example A,B,D,C.  The important 
elements of the queries that are affected by this issue are the following:
- the query must have DISTINCT, or must contain a subquery predicate
- a subset of the tables contribute to the select list

(Build #2739  - Engineering Case #215211)
===========================================================================



             *************************************************             
             ** File Messaging for Adaptive Server Anywhere **             
             *************************************************             

When truncating or renaming a transaction log and starting a new one, 
operations performed after the old log file was closed and before the 
new log was started, would have been lost.


(Build #2739  - Engineering Case #213471)
===========================================================================



            ***************************************************            
            ** File Messaging for Adaptive Server Enterprise **            
            ***************************************************            

SQL Remote for ASE would report "Message is not available.  You may 
have an old language on your path", if the publisher address is missing 
for the given message link and ssremote language DLL is not in the language 
DLL search path.

(Build #2709  - Engineering Case #206325)
===========================================================================



             ************************************************             
             ** Ftp Messaging for Adaptive Server Anywhere **             
             ************************************************             

A path such as \user1 should not be given as a user address for the 
ftp link. If it was dbremote would gpf.

(Build #2377  - Engineering Case #184358)
===========================================================================



                                **********                                
                                ** ISQL **                                
                                **********                                

Running 
ISQL.exe -c "uid=dba;pwd=sql;eng=temp" read \\machine\share\temp\temp.sql
returned the error message 'Unable to open command file "\machine\share\temp\temp.sql" 
-- No such file.'

The UNC path is now correctly parsed.


(Build #2708  - Engineering Case #204638)
===========================================================================

With large result sets, when you are near the beginning ( or end ), 
the data may not scroll up ( or down ) when you try to scroll one row 
at a time using the scroll bar or the arrow keys.

(Build #2713  - Engineering Case #206880)
===========================================================================



                       *****************************                       
                       ** Log Translation Utility **                       
                       *****************************                       

If the page size of an online transaction log was smaller than the page 
size of an offline transaction log, DBLTM would crash in its recovery 
mode (command line switch -M).


(Build #2738  - Engineering Case #214370)
===========================================================================



                             *****************                             
                             ** ODBC Driver **                             
                             *****************                             

If a user bound a blob column to a buffer > 32k in size, filled it and 
then tried to insert a new row into the database using SQLSetPos(...), 
the row would be inserted, but the blob field would not be populated.  
The problem occurred when attempting to insert a blob greater than 32K 
using ADO.



(Build #2702  - Engineering Case #200549)
===========================================================================

Binding columns for a select statement using SQLBindCol(...) would fail 
for any column after the 743rd.


(Build #2702  - Engineering Case #201642)
===========================================================================

If a connection is lost due to some sort of communications error (eg.  
the engine shuts down),  a call to SQLDisconnect on that connection 
will return a SQL_ERROR saying the connection has been terminated.  
This prevents SQLFreeHandle() from successfully freeing the connection 
memory.  The return from SQLDisconnect() should be ( and was in 5.5 
) a SQL_SUCCESS_WITH_INFO.

(Build #2704  - Engineering Case #203943)
===========================================================================

Using SQLSetPos(...) and SQLPutData(...) to add/update blob data on 
more than one row could fail with a "General Error:  SQL Statement Error".


(Build #2713  - Engineering Case #208486)
===========================================================================

A 5.5 UNIX application, using ODBC, would crash if any of ODBCINI, ODBC_INI, 
ODBCHOME or HOME
was not set to point to the directory where .odbc.ini was located.

(Build #2714  - Engineering Case #197498)
===========================================================================

Using SQLSetPos(...) to add a row to an empty result set would silently 
fail.


(Build #2715  - Engineering Case #208720)
===========================================================================



                         *************************                         
                         ** Open Server Gateway **                         
                         *************************                         

The Open Server Gateway could hang when a client application was trying 
to connect.


(Build #2706  - Engineering Case #204315)
===========================================================================

The Open Server Gateway could hang on Solaris, if a local engine went 
down while the Gateway was sending requests to it. The problem was most 
easily reproduced on SMP machines.

(Build #2730  - Engineering Case #212463)
===========================================================================

The Open Server Gateway could not handle BLOB columns with a length 
of column names greater than 29 bytes.

(Build #2731  - Engineering Case #213254)
===========================================================================



                          ***********************                          
                          ** Replication Agent **                          
                          ***********************                          

The Replication Agent for ASA, dbltm.exe, would display year 20xx as 
year 1xx on the screen and print year 1xx to its output file.


(Build #2715  - Engineering Case #209211)
===========================================================================

SSqueue would lose transactions or put duplicate transactions in the 
stable queue of SQL Remote, if ssqueue
was killed or shutdown or it crashed when it was busy processing incoming 
transactions from Rep Server.

(Build #2730  - Engineering Case #212906)
===========================================================================



               *********************************************               
               ** SQL Remote for Adaptive Server Anywhere **               
               *********************************************               

DBRemote could crash on UNIX platforms or report error messages, such 
as, "SQL statement failed: (-140) userid '' does not exist"
on NT in the following circumstances: a remote user has been dropped 
from the consolidated database, but there are still some
old messages left over in the message boxes for this remote user.


(Build #2510  - Engineering Case #199956)
===========================================================================

A memory leak was occuring in SQL Remote, which includes dbremote, ssremote, 
dbxtract, and ssxtract. The memory leaking was not very bad in dbremote, 
dbxtract, and ssxtract, but it could have been very bad in ssremote, 
especially for users who had lots of replication tables, that had columns 
with a data type of datetime.

(Build #2724  - Engineering Case #210950)
===========================================================================

SQL Remote would generate bad SQL statements for stored procedure calls 
in the passthrough mode, if some of the parameters were NULL.  The bad 
SQL would be
	CALL procedure_name ( parameter1_name = , parameter2_name = value2, 
... )
if the first parameter was NULL.

(Build #2724  - Engineering Case #211011)
===========================================================================

The text output area of the dbremote window was sized improperly (very 
narrow), so it was not possible to read any messages in it. This has 
been fixed.

(Build #2728  - Engineering Case #212651)
===========================================================================



              ***********************************************              
              ** SQL Remote for Adaptive Server Enterprise **              
              ***********************************************              

While scanning the log and populating the stable queue ssremote could 
gpf.


(Build #1980  - Engineering Case #203306)
===========================================================================

DBRemote and SSRemote would complain, "Unable to load libdbfile.so" 
and "Unable to load libssfile.so" respectively, on AIX 4.3.  


(Build #2717  - Engineering Case #208996)
===========================================================================

SSRemote may have generated error messages like "the connection has 
been marked dead".  If the UID, SQL Remoteis running with, does not 
have permissions on the SQL Remote system tables or stored procedures.

(Build #2720  - Engineering Case #210547)
===========================================================================

If an ASE transaction log was corrupted, SSRemote could create a huge 
temporary file (up to 24GB) with an internal operation and then dump 
these internal operations to sr_transaction.  If there was not enough 
free disk space or if the ASE stable queue database was not big enough, 
ssremote would give an error message and exit.

(Build #2739  - Engineering Case #213740)
===========================================================================

Ssremote would give a wrong error message, "Not applying operations 
with old resend count", if a remote user
was dropped from the consolidated database and this remote user still 
ran ssremote. The correct error, "User_name is not a remote user of 
this database", is now issued.



(Build #2739  - Engineering Case #214946)
===========================================================================

SSQueue may have crashed or put bad SQL statements into sr_transaction, 
if two or more threads, (Rep Server and Rep Server Manager), were connected 
to ssqueue at the same time.

(Build #2739  - Engineering Case #215289)
===========================================================================



                               ************                               
                               ** Server **                               
                               ************                               

With a statement such as 'select * from table where a = ?'
where the parameter was a blob larger than 32K, the database engine 
would assert, when
trying to fetch a row from the resulting cursor.

(Build #2510  - Engineering Case #200348)
===========================================================================

If during a wide insert an invalid double or decimal value is encountered 
anywhere but in the first row to be inserted the engine/server would 
crash.

(Build #2510  - Engineering Case #207300)
===========================================================================

Triggers could be loaded twice (and fire twice as often than they should.)  
For this to affect a trigger on a table T, an ADD/DROP/ALTER VIEW statement 
[or REVOKE statement if running in C2 mode]  must be executed before 
the first use of T, but after the use of a table that is in a key relationship 
with T. This has been fixed so that the triggers fire only once.

(Build #2735  - Engineering Case #214283)
===========================================================================



                           *********************                           
                           ** Service Manager **                           
                           *********************                           

When running on Windows 2000, it is not possible to connect over shared 
memory to dbeng50, dbsrv50 or dbclient running as a service that is 
not allowed to interact with the current users' desktop.

(Build #2734  - Engineering Case #213237)
===========================================================================



                            ******************                            
                            ** Stop Utility **                            
                            ******************                            

If dbstop was run without any command line parameters, and no other 
connection information was available (SQLCONNECT environment variable), 
dbstop would not report any error or other message. Previous versions 
would report "Database engine not running". This behavior has been restored.

(Build #2719  - Engineering Case #210608)
===========================================================================
