# CHAPTER 3: Compatibility

Version 8.62 is not compatible with previous Empress versions.

When upgrading to Version 8.62, all applications need to be recompiled, relinked. Furthermore, all Persistent Stored Modules that use any Empress routines, if present in the database, would have to be recompiled, relinked.

To upgrade V6.2 and newer databases, Empress users can use Empress utility `empcnvt`.

> The upgrade involves data dictionary conversions which include adding new system tables into the data dictionary and updating some files and directories. Once database is fully upgraded, it will support all new features provided by the Version 8.62.

To upgrade V8.20 and V8.60 databases, Empress users can also use Empress utility `empupgrd`.

Once database is upgraded, only Version 8.62 applications can access the database.

The utilities `empcnvt` and `empupgrd` are documented in Volume A2: Manual Pages.

Empress has introduced the variable MSSELEXTFETCH which solves backward comatibility issues related to the usage of Empress mr and mx routine calls mrprev and mxprev. If mrprev and mxprev are not used, MSSELEXTFETCH should be set to nothing (i.e. MSSELEXTFETCH=) in order to gain performance in Empress C-API mr/mx applications. MSSELEXTFETCH is set to nothing by default. Other Empress interfaces (e.g. ODBC, JDBC) are not affected by this variable setting.

When working with Dynamic SQL Prepare statements, its now necessary to call EXEC SQL DEALLOCATE PREPARE when you are finished with the statement. If you do not do so, resources associated with the statement will be orphaned. This could lead to unpredictable behavior.

Empress has enhanced the retrieval performance of the GROUP BY clause. In the process, Empress introduced the following limitation: the maximum number of attributes in the list used for grouping is 10.

## 3.1. Syntax Compatibility

The following syntax changes could raise compatibility issues in applications written for the older Empress versions.

1) The old Empress outer join syntax becomes obsolete. The user has to use the new Empress ANSI compatible syntax.

For example:

        select * from t1, outer t2 where t1.id = t2.id

is not supported. The correct syntax is:

        select * from t1 right join t2 on t1.id = t2.id

2) In Empress Version 8.62, if an alias is assigned to a table, all explicit references to the table in the SQL statement must use the alias, not the table name.

For example:

        select t1.id from t1 t where t.id > 5

is not allowed. The correct syntax is:

        select t.id from t1 t where t.id > 5

3) In Empress Version 8.62, a statement cannot have a HAVING clause and an ORDER BY clause without a GROUP BY clause.

For example:

        select sum(a) from t having sum(t.a) = 10 order by c

is not allowed. The correct syntax is:

        select sum(a), c from t group by c having sum(t.a) = 10 order by c

4) In Empress Version 8.62, WHERE clause cannot be used after an INNER JOIN or a CROSS JOIN clause without an ON clause.

For example:

        select * from t1 INNER JOIN t2 where t1.id = t2.id

is not allowed. The correct syntax is:

        select * from t1 INNER JOIN t2 on t1.id = t2.id

5) In Empress Version 8.62, An aggregate function is not allowed to appear in the WHERE clause.

For example:

        select * from t where avg(id) > 10

is not supported.

6) In Empress Version 8.62, a list of new reserved keywords was introduced (see this Version Notes: Reserved Keywords).