Version 2.5.15

09040040: Fix problem with constant reduction and timestamps

Version 2.5.14

08060260: Fix problem with zero length longvarchar

Version 2.5,13

07100007: fix problem with NOT LIKE evaluation

Version 2.5.12

07020723: Fix problem in numeric/bigint comparison

Version 2.5.11

07010566: Fix memory leak in groupby evaluation

Version 2.5.10

Fix 64 bit problem in paramdata.c

BZ 2033

Remove repeated registry reads when sorting queries

BZ 2004

Top in a select statement was being overridden by rowset size

BZ 1911 

Avoid referencing the wrong column names when joining sub queries

Version 2.5.9

BZ 1852

Checking for column use could become exponentially long

Version 2.5.8

Pass any precision and scale specified by the app, to the driver when 
converting bound numerics.

Version 2.5.7

BZ 1785

Optimisation improvement for multi table joins involving non IN clauses
not on index columns

Version 2.5.6

BZ 1792

Alignment issue caused a bus error on solaris when ordering dates

Version 2.5.5

BZ 1701

Add workaround to avoid a bug in MS Query, that prevents the list of 
tables from being displayed.

BZ 1790

Fix lib included with Solaris build to link to -lm

Version 2.5.4

BZ 1751

Calling SQLMoreResults after a SQLFreeStmt( SQL_CLOSE ) causes a failure

Version 2.5.3

BZ 1736

Alter the calculation of precion and scale for operations

Version 2.5.2

BZ 1731

Outer join was failing to return rows

BZ 1526

SQLGetInfo( SQL_CONVERT_WLONGVARCHAR ) was not supported

Version 2.5.1

BZ 1654

Engine returns "No Licence slots available" when in fact there is no license
at all.

Version 2.5.0

Add support for Solaris 10 (sparc)

BZ 1606

SQLGetDescField was returning a random value from SQL_DESC_NULLABLE

Version 2.4.11

BZ 1279

A statement containing a aggregate function, that has no matching rows, lost the single row output
when a GROUPBY was employed.

BZ 1489

With the large file builds, a missing return statement could cause a error
whilst sorting. "OSFile err 110"

BZ 1519

Failed when SQLForeignKeys was called with more than one linked table, and LINK names
were used, and the call to SQLForeignKeys used the second set of names (i.e.
FKCatalogName etc).

Version 2.4.10

BZ 1401

SUM on NUMERIC columns was leaking memory.

BZ 1335

Doing a "SELECT TOP 1 ...." returns 2 rows.

Version 2.4.9

BZ 1323

SQLGetTypeInfo was missing a ' from the date prefix for a ODBC 3 return result
set

BZ 1331

Arrays of columns bound as SQL_DEFAULT are not correctly mapped to SQL_CHAR if
the type is SQL_NUMERIC, SQL_DECIMAL and SQL_BIGINT

Version 2.4.8

BZ 1276

Unexpected and incorrect divide by zero return removed

BZ 1275

Remove possibility of divide by zero error

BZ 661

Now supports Windows 2003

BZ 997

CASE statements in subquery's could cause memory corruption.

BZ 1181

SQLGetInfo(SQL_ACTIVE_ENVIRONMENTS) returns a 4 byte value instead of
a 2 byte value possibly causing a bus error on sparcs and in any case
corruption.

Version 2.4.7

BZ 798

Occasional incorrect indicator values could be produced

BZ 996

Order by on sub query with expression could cause seg fault

Version 2.4.6 Apr 02 2004

BZ 703

Alter filtration value for LIKE clause in optimiser

Version 2.4.5 Mar 19 2004

BZ 334

If the SQI driver failed to load, disconnecting could cause a seg fault.

BZ 465 

If a outer join is used, the SQI interface always get called with all the
col_used flags set in the dci structure.

BZ 515 

When a query of three or more tables is done, using the OUTER/INNER JOIN syntax,
there is a possibility of some of the joining conditions not being marked as used
when passed to the SQI layer.

BZ 295

If you do a date insert {d '2001/01/01'} (incorrect sql 92) instead of using - 
then the date is returned as 2001-11-30, Now flags and reports invalid literals

BZ 302

Views that use missing tables in a select return an SQLSuccess on SQLExecDirect

BZ 359

Engine license entry is different from product name.

BZ 437

SQLColumns call against a view fails.

BZ 483

Like clause not using indexes

BZ 520

DELETE and UPDATE not working

BZ 555

CURRENT_DATE - value returns incorrect results

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

10 June 2003

Version: 02.03.0017

JB 2366

	Inserting into a numeric via a integer could insert incorrect values.

JB 2368

	Web admin could crash server due to a uninitialised buffer.

1 June 2003

Version: 02.03.0016

JB 2367

	Rexecuting a query with a aggregate function failed

20th May 2003
Version: 02.03.0015

JB 2204

	creating a table with a char (without specifying a length) returns a 
	length of 0 instead of 1.

	Fixed in 2.1.29 of libparser.

JB 2228

	Incorrect rowcount value coming back from update and delete when more
	than one row was changed.

	Fixed in libexec 2.1.40.

JB: 2231

	FIPS: 0418 AVG, SUM, COUNT on Cartesian product with NULL, the NULL row
	was contributing towards the total.

	Fixed in libeval 2.1.35

JB: 2238

	Not fixed, involves a big change, there is a SQL workaround.

JB: 2240

	FIPS TEST:0564 Segfaults.

	SELECT EMPNUM, GRADE*1000 FROM HU.STAFF WHERE GRADE * 1000 > ANY (SELECT
	SUM(BUDGET) FROM HU.PROJ GROUP BY CITY, PTYPE HAVING HU.PROJ.CITY =
	HU.STAFF.CITY)

	Fixed in libvalidate 2.1.14

JB: 2246
	
	Fips 0462 fails, searched update/delete should return SQL_NO_DATA if
	search returns no rows.

	Fixed in libexec 2.1.41

JB: 2249

	Fips: 0490 seg faults.

	SELECT COUNT(*) FROM HU.STAFF WHERE GRADE = (SELECT 16/GRADE FROM HU.STAFF WHERE
	EMPNUM = 'E6')

	Fixed in libsupport 2.1.58 and libeval 2.1.36.

JB: 2251

	Duplicate of JB: 2249.

JB: 2253

	FIPS Test 0508 fails, Permissions on views

	Now returns a error message describing the restriction.

JB: 2256

	Fips: 0473 Priv.violation: GRANT all on view but not table, The test in the 
	subject dumps core on a 

	SELECT COUNT(*) FROM FLATER.VS1

	Fixec in 2.1.42 of libexecute.

JB: 2258

	TEST:0200 Priv. violation: GRANT INSERT, No SELECT, SEG fault

	Fixed in fix for JB: 2256


JB: 2263

	Cant default to a neg number.

	Fixed in libexecute 2.1.43 and libparse 2.1.31.

JB: 2265

	SQLGetData after last column causes a seg fault.

	Fixed in libdataio 2.1.15

JB: 2268:

	Doesn't support SQL_C_WCHAR:

	Fixed in dataio 2.1.16 support 2.1.61 

JB: 2131

	Problem with QUARTER()

	Fixed.

JB: 2140

	TIMESTAMPADD promotes return values to timestamps even though it doesn't have
	to.

	Fixed.

JB: 2163

	Create view causes EDA-ISAM to crash.

	Fixed in libvalidate 2.1.14.

JB: 2173

	TIMESTAMPDIFF() returns incorrect values

	Fixed in libsupp 2.1.59

JB: 2174

	Problem with WEEK() returning incorrect values

	Fixed in libessupp 2.1.59

JB: 2175

	Problem describing parameters.

	Fixed with SQI change, and libessupp 2.1.60

JB: 2177

	Nullable state of return column from SQLGetTypeInfo

	Fixed in libexecute 2.1.44

JB: 2178

	Datatype wrong in result set from SQLGetTypeInfo

	Fixed in 2.3.14 of the interface lib

JB: 2201

	SQLGetTypeInfo min scale value

	Fixed in libvalidate 2.1.15

JB: 2213

	Permission error and no return code

	Fixed in 2.3.14 of esdb32v20 lib, it was trying, but failing to return
	SQL_NO_DATA

JB: 2214

	UNION and UNION ALL

	As in JB 2238, its doing the union in the wrong direction.

JB: 2217

	Update problem.

	Its trying to update a view, flagged now in libparser 2.1.32.

JB: 2281

	DISTINCT counting NULLS

	Fixed in libevaluate 2.1.37

26-03-2003

	The function QUARTER() was only accepting a SQL_DATE arg, no a SQL_TIMESTAMP.
	Fixed now.

25-03-2003

	MONTHNAME( {d '2004-02-07' } ) returns "Febuary"

	Spelling fixed now.

24-03-2003

	if you do this 

	CREATE TABLE CHAR_LENGTH_FUNC_TEST ( CHAR_LENGTH_FIELD CHARACTER( 16 ) );
	INSERT INTO CHAR_LENGTH_FUNC_TEST VALUES( '0' );
	SELECT {fn CHAR_LENGTH( CHAR_LENGTH_FIELD )} FROM CHAR_LENGTH_FUNC_TEST;

	You get a unknown function name CHAR_LENGTH near '}'

	even though it reported that it supports

	SQL_STRING_FUNCTIONS=SQL_FN_STR_CHAR_LENGTH

	Fixed now.

24-03-2003

	If you do this

	DROP TABLE CHARACTER_LENGTH_FUNC_TEST;
	CREATE TABLE CHARACTER_LENGTH_FUNC_TEST( CHARACTER_LENGTH_FIELD CHAR( 16 ))
	INSERT INTO CHARACTER_LENGTH_FUNC_TEST VALUES( '0' );
	SELECT {fn CHARACTER_LENGTH( CHARACTER_LENGTH_FIELD )} FROM
	CHARACTER_LENGTH_FUNC_TEST

	You get a seg fault

	Fixed now.

24-03-2003

	If you do

	DROP TABLE CONCAT_FUNC_TEST;
	CREATE TABLE CONCAT_FUNC_TEST ( CONCAT_FIELD_1 CHARACTER( 10 ),  CONCAT_FIELD_2
	LONG VARCHAR,  ORDER_FIELD INTEGER );
	INSERT INTO CONCAT_FUNC_TEST VALUES( '123', '456', 0 );
	SELECT {fn CONCAT( CONCAT_FIELD_1, CONCAT_FIELD_2 )}, ORDER_FIELD FROM
	CONCAT_FUNC_TEST ORDER BY ORDER_FIELD ASC;

	You get [unixODBC][Easysoft ODBC]Memory allocation error

	Fixed now.

24-03-2003

	if you do this

	CREATE TABLE INSERT_FUNC_TEST ( INSERT_FIELD_1 CHARACTER( 10 ),  INSERT_FIELD_2
	REAL,  INSERT_FIELD_3 REAL,  INSERT_FIELD_4 CHARACTER( 10 ),  ORDER_FIELD
	INTEGER );
	INSERT INTO INSERT_FUNC_TEST VALUES( 'ABCDEFG', 4, 2, 'XYZ', 0 );
	SELECT {fn INSERT( INSERT_FIELD_1, INSERT_FIELD_2, INSERT_FIELD_3,
	INSERT_FIELD_4 )}, ORDER_FIELD FROM INSERT_FUNC_TEST ORDER BY ORDER_FIELD ASC

	You get this

	ABCDXYZ

	The G has disappeared, I would have expected

	ABCDXYZG

	Fixed now.

24-03-2003

	If you do this

	DROP TABLE LOCATE_FUNC_TEST;
	CREATE TABLE LOCATE_FUNC_TEST ( LOCATE_FIELD CHARACTER( 255 ),  ORDER_FIELD
	INTEGER );
	INSERT INTO LOCATE_FUNC_TEST VALUES( 'Mary had a little lamb, its fleece was
	white as snow', 2 );
	SELECT {fn LOCATE( 'lamb', LOCATE_FIELD, 1 )} FROM LOCATE_FUNC_TEST ORDER BY
	ORDER_FIELD ASC;

	You get the result 18, it should (AFAIK) be 19

	Fixed now.

21-03-2003

	If you do the following, you get a empty result column, not correct.

	DROP TABLE TRIM_FUNC_TEST;
	CREATE TABLE TRIM_FUNC_TEST ( TRIM_FIELD CHARACTER( 26 ) );
	INSERT INTO TRIM_FUNC_TEST VALUES( '     ABCDEF     ' );
	SELECT TRIM( TRAILING TRIM_FIELD ) FROM TRIM_FUNC_TEST;

	Fixed now.

21-03-2003

	The DEGREES() and RADIANS() functions were swapped around. Fixed now.

21-03-2003

	Doing the following returns the wrong result

	CREATE TABLE EXTRACT_FUNC_TEST ( EXTRACT_T_FIELD TIME,  EXTRACT_D_FIELD DATE, 
	EXTRACT_TS_FIELD TIMESTAMP );
	INSERT INTO EXTRACT_FUNC_TEST VALUES( {t '01:02:03' }, {d '2004-05-06' }, 
			{ts '2004-05-06 07:08:09' } );
	SELECT EXTRACT( HOUR FROM EXTRACT_T_FIELD ) FROM EXTRACT_FUNC_TEST;

	+------------+
	|            |
	+------------+
	| 0          |
	+------------+

	Fixed now.

21-03-2003

	Doing the following, produces the incorrect result

	DROP TABLE POSITION_FUNC_TEST;
	CREATE TABLE POSITION_FUNC_TEST ( POSITION_FIELD_1 CHARACTER( 64 ), 
	POSITION_FIELD_2 CHARACTER( 64 ),  ORDER_FIELD INTEGER );
	INSERT INTO POSITION_FUNC_TEST VALUES( 'a', 'abcdefghijklmnopqrstuvwxyz', 0 );
	INSERT INTO POSITION_FUNC_TEST VALUES( 'b', 'abcdefghijklmnopqrstuvwxyz', 1 );
	SELECT POSITION( POSITION_FIELD_1 IN POSITION_FIELD_2 ), ORDER_FIELD FROM
	POSITION_FUNC_TEST ORDER BY ORDER_FIELD ASC;

	+------------+------------+
	|            | ORDER_FIELD|
	+------------+------------+
	| 0          | 0          |
	| 0          | 1          |
	+------------+------------+

	Fixed now.

20-03-2003

	The following causes a seg fault on Linux to the sample_isam DSN

	CREATE TABLE SUBSTRING_FUNC_TEST 
		( 
			SUBSTRING_FIELD_1 CHARACTER VARYING( 255 ), 
			SUBSTRING_FIELD_2 INTEGER,  
			SUBSTRING_FIELD_3 INTEGER,  
			ORDER_FIELD INTEGER 
		);
	INSERT INTO SUBSTRING_FUNC_TEST VALUES( 'abcdefghijklmnopqrstuvwxyz', 5, 10, 1 );
	INSERT INTO SUBSTRING_FUNC_TEST VALUES( 'abcdefghijklmnopqrstuvwxyz', 2, 5, 2 );
	INSERT INTO SUBSTRING_FUNC_TEST VALUES( 'abcdefghijklmnopqrstuvwxyz', 10, 100, 3 );
	SELECT 
		{fn SUBSTRING( SUBSTRING_FIELD_1, SUBSTRING_FIELD_2, SUBSTRING_FIELD_3 ) }, 
		ORDER_FIELD 
	FROM 
		SUBSTRING_FUNC_TEST 
	ORDER BY ORDER_FIELD ASC;

	Fixed now.

20-03-2003

	The following generated a "Memory allocation error"

	CREATE TABLE UCASE_FUNC_TEST ( UCASE_FIELD LONG VARCHAR );
	INSERT INTO UCASE_FUNC_TEST VALUES( 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl' );
	SELECT UCASE( UCASE_FIELD ) FROM UCASE_FUNC_TEST;

	Fixed now.

20-03-2003

	Doing the following causes a seg fault

	CREATE TABLE TRIM_FUNC_TEST ( TRIM_FIELD LONG VARCHAR );
	INSERT INTO TRIM_FUNC_TEST VALUES( '     ABCDEF     ' );
	SELECT TRIM( TRIM_FIELD ) FROM TRIM_FUNC_TEST;

	Fixed now.

20-03-2003

	Doing the following causes a seg fault

	CREATE TABLE REPEAT_FUNC_TEST 
		( 
			REPEAT_FIELD_1 CHARACTER( 50 ),  
			REPEAT_FIELD_2 INTEGER,  
			ORDER_FIELD INTEGER 
		);
	INSERT INTO REPEAT_FUNC_TEST VALUES( 'a', 1, 0 );
	INSERT INTO REPEAT_FUNC_TEST VALUES( 'b', 10, 1 );
	INSERT INTO REPEAT_FUNC_TEST VALUES( 'c', 20, 2 );
	INSERT INTO REPEAT_FUNC_TEST VALUES( 'd', 30, 3 );
	SELECT REPEAT( REPEAT_FIELD_1, REPEAT_FIELD_2 ), ORDER_FIELD 
		FROM REPEAT_FUNC_TEST ORDER BY ORDER_FIELD ASC;

	Fixed now.

20-03-2003

	do the following, and you get a a seg fault

	CREATE TABLE REPLACE_FUNC_TEST 
		( 
			REPLACE_FIELD_1 CHARACTER( 255 ), 
			REPLACE_FIELD_2 CHARACTER VARYING( 255 ),  
			REPLACE_FIELD_3 CHARACTER( 255 ), 
			ORDER_FIELD INTEGER 
		);
	INSERT INTO REPLACE_FUNC_TEST VALUES( 
		'Once upon a time in a land far away',
		'in', 'from', 1 );
	INSERT INTO REPLACE_FUNC_TEST VALUES( 
		'Mary had a little lamb, its fleece was white as snow', 
		'it', 'wibble', 2 );
	SELECT REPLACE( REPLACE_FIELD_1, REPLACE_FIELD_2, REPLACE_FIELD_3 ), ORDER_FIELD
	FROM REPLACE_FUNC_TEST ORDER BY ORDER_FIELD ASC;

20-03-2003

	if you do the following

	CREATE TABLE ABS_FUNC_TEST ( ABS_FIELD DECIMAL,  ORDER_FIELD INTEGER );
	INSERT INTO ABS_FUNC_TEST VALUES( 1, 0 );
	INSERT INTO ABS_FUNC_TEST VALUES( -6, 5 );
	SELECT ABS( ABS_FIELD ), ABS_FIELD, ORDER_FIELD FROM ABS_FUNC_TEST ORDER BY
	ORDER_FIELD ASC;

	You get this, which is wrong

	+-----------------------+---------------------+------------+
	|                       | ABS_FIELD           | ORDER_FIELD|
	+-----------------------+---------------------+------------+
	| 2028240960365167042603| 1                   | 0          |
	| 2028240960365167042603| -6                  | 5          |
	+-----------------------+---------------------+------------+

	Fixed now.

17-03-2003

	Various tests on uninitialised values and writes to free memory. Fixed now.

14-03-2003

	When passing in an empty uid and pwd (dsn "" "")in isql from unix through ODBC-ODBC Bridge
	to an isam datasource on a windwos box you get 'broken pipe'. Fixed now.

12-03-2003

	There was a bug in the way a file descriptor was duplicated, This broke
	SQL_LONGVARCHAR support.

18-01-2003

	SQL_LONGVARBINARY operations could cause a seg fault.

	DROP TABLE "tblLONG VARBINARY";
	CREATE TABLE "tblLONG VARBINARY" ( KEYFIELD VARCHAR(50) UNIQUE, MINVALUE LONG VARBINARY);
	INSERT INTO "tblLONG VARBINARY"( KEYFIELD, MINVALUE) values ( 0, 0 );

21-01-2003

	Character varying types and varbinary types 254 in length. Changed to 255 now.

14-01-2003

	If a union returned a query with no rows, the union was terminated at that query.
	Now fixed

10-01-2003

	When you try and sort a file > 2GB with a column descending you get a seg fault. Fixed
	now.

08-01-2003

	System errors during sorting didn't give any indication of the cause of the fault. 
	This is now included in the error message.

03-12-2002

	select 
 		a."ProductCode" as "PackageCode",
  		a."ProductRelease" as "PackageRelease",
   		a."DistributionCode" as "PackageDistributionCode",
    	a."DistributionRelease" as "PackageDistributionRelease",
	 	a."ProductLicense" as "PackageLicense",
	  	a."ProductCategory" as "PackageCategory",
	   	a."ProductTransaction" as "PackageTransaction",
	    c."LineNumber",
		b."ProductCode",
		b."ProductRelease",
		b."DistributionCode",
		b."DistributionRelease",
		b."ProductLicense",
		b."ProductCategory",
		b."ProductTransaction"
	from
		"PackageRule" c,
		"ItemCode" a,
		"ItemCode" b
	where
		c."PackageCode" = a."ProductCode" and
		c."PackageRelease" = a."ProductRelease" and
		c."DistributionCode" = a."DistributionCode" and
		c."ProductCode" = b."ProductCode" and
		c."ProductRelease" = b."ProductRelease" and
		c."DistributionCode" = b."DistributionCode" and
		a."DistributionRelease" = b."DistributionRelease" and
		a."ProductLicense" = b."ProductLicense" and
		a."ProductCategory" = b."ProductCategory" and
		a."ProductTransaction" = b."ProductTransaction";

	returns error HY000:1:0:[Easysoft ODBC]General error column 'PackageCode' not unique in 
	specified tables. This has been fixed

03-12-2002

	create the following view

	create view "FullProductList" as
		select
 			"ItemCode"."ProductCode",
  			"ItemCode"."ProductRelease",
   			"ItemCode"."DistributionCode",
    		"ItemCode"."DistributionRelease",
	 		"ItemCode"."ProductLicense",
	  		"ItemCode"."ProductCategory",
	   		"ItemCode"."ProductTransaction",
	    	"Product"."Description",
		 	"ProductReleaseDescription"."Description",
		  	"Distribution"."Description",
		   	"DistributionReleaseDescription"."Description",
		    "ProductLicense"."Description",
			"ProductCategory"."Description",
			"ProductTransaction"."Description"
		from
			"ItemCode"
				inner join "Product" on "ItemCode"."ProductCode" = "Product"."ProductCode"
					inner join "ProductReleaseDescription" on "ItemCode"."ProductCode" =
						"ProductReleaseDescription"."ProductCode" and "ItemCode"."ProductRelease" =
							"ProductReleaseDescription"."ProductRelease"
					inner join "Distribution" on "ItemCode"."DistributionCode" =
						"Distribution"."DistributionCode"
					inner join "DistributionReleaseDescription" on "ItemCode"."DistributionCode"
						= "DistributionReleaseDescription"."DistributionCode" and
						"ItemCode"."DistributionRelease" =
						"DistributionReleaseDescription"."DistributionRelease"
					inner join "ProductLicense" on "ItemCode"."ProductLicense" =
						"ProductLicense"."ProductLicense"
					inner join "ProductCategory" on "ItemCode"."ProductCategory" =
						"ProductCategory"."ProductCategory"
					inner join "ProductTransaction" on "ItemCode"."ProductTransaction" =
						"ProductTransaction"."ProductTransaction";

		then try and drop it, 

		error 42S02:1:0:[Easysoft ODBC]Base table or view not found

		This has been fixed

07-11-2002
	The following SQL caused a seg faults

	SELECT 
		CUSTOMER.C_CUSTKEY 
	FROM 
		(CUSTOMER INNER JOIN ORDERS ON CUSTOMER.C_CUSTKEY = ORDERS.O_CUSTKEY ) 
			INNER JOIN LINEITEM ON ORDERS.O_ORDERKEY = LINEITEM.L_ORDERKEY;

	SELECT 
		CUSTOMER.C_CUSTKEY 
	FROM 
		(CUSTOMER RIGHT JOIN ORDERS ON CUSTOMER.C_CUSTKEY = ORDERS.O_CUSTKEY) 
			RIGHT JOIN LINEITEM ON ORDERS.O_ORDERKEY = LINEITEM.L_ORDERKEY;

28-10-2002

	Perl DBD::ODBC make tests work direct to ISAM.  When passed through 
	ODBC-ODBC Bridge  an SQLExecute fails but EDA-ISAM does not appear to add an 
	ODBC diagnostic. This has been fixed.

23-10-2002

    Fix bug in SQLSetConnectAttr/SQLSetConnectOption that caused a seg 
	fault when ValuePtr=NULL and string value.

18-10-2002
	
	SQLColumns call seemed very slow on large schema. This has been fixed.


