This page describes product changes you must be aware of when upgrading from version 2.3x to version 2.4x of Genero BDL.
Warning: This is an incremental upgrade guide that covers only topics related to a specific version of Genero. Also check prior upgrade guides if you migrate from an earlier version.
Summary:
The following database drivers are no longer supported by Genero BDL 2.4x:
For information about supported database drivers, please refer to the Database Connection section of this manual.
Some 2.4x bug fixes and new features needed modifications inside the runtime system (fglrun) and front-ends (gdc, gwc). Therefore, if you upgrade the runtime system to the latest 2.4x version, we strongly recommend that you upgrade your workstations with the latest front-end version 2.4x as well.
As a general rule, when upgrading to a major or minor version like 2.20 to 2.30 or 2.33 to 2.34, you must recompile all your .4gl modules and .per form files. Re-compilation is not required when upgrading to a new maintenance release like 2.40.01 to 2.40.02.
See also Installation and Setup.
The Sybase Adaptive Server Anywhere (ASA) version 8 driver (dbmasa8x) is no longer supported in version 2.40.
Note that the dbmasa8x driver was provided for the Sybase ASA desktop database engine (renamed Sybase SQL Anywhere when writing these lines). Since version 2.30, Genero supports a Sybase Adaptive Server Enterprise (ASE) driver.
Before version 2.30 the -s option of fglrun could be used to compute the size of program elements such as global and module variables, pcode and structured data types. Starting with version 2.30, this option reported a size of zero. With version 2.40 the -s option is now fully de-supported.
The -s option was mainly implemented for internal use. Regarding the amount of memory used by a program, you should consider the memory allocated dynamically at runtime: If you fill large dynamic arrays, or leave a lot of SQL cursors open without freeing them, the memory footprint of a program can be much larger as the actual size of static elements that could be reported by the -s option.
Before version 2.40, the SQL Server drivers (SNC, MSV, ESm, FTM) were using the @@IDENTITY expression to retrieve the last generated identity column, if the native serial emulation is configured. But @@IDENTITY is not recommended, because it can return an identity value generated for another table in a trigger of the main table. Starting with 2.40, the SQL Server drivers use the SCOPE_IDENTITY() function, which returns the last number generated in the current scope (ignoring identity numbers generated in triggers).
For more details about serial emulation in SQL Server, see the ODI Adaptation Guide.
Before version 2.40 it was possible to specify a SIZEPOLICY attribute for several sort of form elements, including containers such as TABLE, GRID. The SIZEPOLICY attribute make no sense in containers and is only meaningful for leaf nodes (i.e. widgets such as EDIT, COMBOBOX). The form compiler will now report a syntax error if the SIZEPOLICY attribute is used in the definition of elements that are not widgets.
Starting with version 2.40, the database schema extractor fgldbsch converts now by default Informix LVARCHAR(N) types to VARCHAR2(N) with type code 201. Before 2.40, you had to pass -cv AAAB... option to avoid a conversion error when generating the schema file.
The static SQL syntax has been enhanced, to support the LVARCHAR type name in DDL statements such as CREATE TABLE. The non-Informix ODI drivers have been adapted to convert LVARCHAR type names to VARCHAR.
Two-Pass reports can now use VARCHAR types with a size greater as 255 bytes (the temporary table will be created with an LVARCHAR column). Note however that and index is created as well, and IBM Informix IDS (version 11 when writing these lines) has a size limitation for indexes. You may get an SQL error -517 if the VARCHAR variable used to group / order rows in the report routine exceeds ~350 bytes (see IDS SQL error -517 for details).
Since version 2.40, the SQLite database driver adds the COLLATE RTRIM keywords after the CHAR(N) and VARCHAR(N) types in CREATE TABLE statements, when Informix emulation is enabled (the default). This collation clause forces SQLite to use right-trim comparison rules instead of the default binary mode. The binary mode requires to have the same number of trailing spaces in both character values to be equal. By using COLLATE RTRIM clause, the trailing blanks are trimmed and thus ignored. Note that you should also use [VAR]CHAR(N) COLLATE RTRIM in database creation scripts.
Before version 2.40, Message Files entries could only be defined with numbers in the range -32767 to 32767 (i.e. SMALLINT). This limitation is not longer true in 2.40: Message numbers can now be in the range -2147483648 to 2147483647 (i.e. INTEGER).
This modification is related to the fix of bug #19907.
Starting with MySQL 5.5.11, the client library major version number was changed from 16 to 18. In fact the libmysqlclient.so.16 file was renamed to libmysqlclient.so.18. From a cross-5.5.x compatibility point of view, this was maybe not the best thing to do: Since the major version has changed, client applications using the C API (such as Genero ODI MySQL drivers) need to be re-compiled and re-linked in order to use le latest library.
In Genero version 2.40, the dbmmys55x ODI driver is linked with libmysqlclient.so.18 on the platforms where MySQL 5.5.11+ is available. That is: Linux, Solaris and Mac OS/X platforms, when writing these lines. On other UNIX platforms such as HP, the client library is still libmysqlclient.so.16. This may change in the future Genero versions, following the availability of MySQL 5.5.11+ versions.
Therefore, you must pay attention to the MySQL 5.5 version you have installed: You need to upgrade your MySQL 5.5 client software to match le client library that was used to build the dbmmys55x.so shared library. On Linux, you can run the ldd command to check what libmysqlclient.so version is required. If it's not possible to upgrade your MySQL client software, please contact the support channel.
The fglcomp compiler of version 2.40 will now print a warning (-8409) if a dialog block defines ON ACTION handlers at different levels with the same action name. It is not good practice to use the same action names at different levels of a dialog. For example, you can define several ON ACTION INFIELD handlers using the action name "zoom", but you should not define and ON ACTION zoom at the sub-dialog or dialog level. If the warning occurs during compilation, modify your code in order to use specific action names at each level, and do not forget to rename the actions of the corresponding action views in the forms.
For more details, see Resolving multi-level action name conflicts.
Starting with version 2.40, a START REPORT instruction raises the runtime error (-4375) when the margin sizes do not fit the page length.
The error is not returned at compile time because report dimensions can be specified at runtime with global or module variables.
For more details, see Reports.