This page describes product changes you must be aware of when upgrading from version 2.2x to version 2.3x 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:
Some 2.3x 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.3x version, we strongly recommend that you upgrade your workstations with the latest front-end version 2.3x 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.30.01 to 2.30.02.
See also Installation and Setup.
Before version 2.30, the runtime system was trying to connect to localhost:0 when FGLSERVER was not set, even if gui.server.autostart FGLPROFILE entries are defined. This behavior has been identified as a bug (#17266) and has been fixed, changing the way fglrun proceeds with the GUI connection when autostart settings are defined; with 2.30, the wsmap workstation mappings are now taken into account, so that FGLSERVER defaults to locahost:n, where n is the GUI server number found from the wsmap settings.
See Automatic Front-End Startup for more details.
In version 2.30, the internals of fglform have been reviewed to simplify the extension of the form syntax with new item types and attributes. This code review has removed some inconsistencies in the grammar parser; as a result, the form compiler is more strict regarding invalid syntaxes. Thus, you may experience compilation errors with forms that compiled with prior versions. Simply fix the invalid syntax in your forms and re-compile.
This migration note is related to the correction of bug 16341, fixed in 2.30.00 build 1566.
Before this fix, negative (and only negative) INTERVAL values were inserted incorrectly.
For example, it was not possible to compare an INTERVAL value inserted by a BDL program with an INTERVAL literal...
SELECT .. FROM table WHERE interval_col = INTERVAL '-55555-11' YEAR(9) TO MONTH
You must correct the values in your tables if you are using:
INTERVAL YEAR(p) TO MONTH
or
INTERVAL DAY(p) TO FRACTION(n)
(Other INTERVAL types are stored in a CHAR(50)...)
A simple interval => char => interval conversion will fix the values:
UPDATE table SET interval_col = TO_CHAR(interval_col)
Before version 2.30, the DIALOG.setCurrentRow method was not modifying the row selection flags. Starting with 2.30, the method resets row selection flags to false and marks the new current row as selected. See also Multi-Range Selection usage.
Starting with version 2.30, the fgldbsch schema extractor will always use a table owner / schema to select tables from databases where several schemas can hold tables with the same name (bug #16598).
The table owner can be specified with the -ow option, and defaults to the user name passed with the -un option, or to the current database user if no -up option was given. The last case can occur when the database connection information is taken from the FGLPROFILE configuration file, or when the OS user authentication is used.
Starting with version 2.30, the Windows installer forces you to install the product for all users.
Before version 2.30, a MenuAction close was created by default for MENU dialogs. This action node is no longer created, except if you have a COMMAND KEY(INTERRUPT) in the MENU, or if you have your own user action handler ON ACTION close, of course. You must take this change into account if you are manipulating the AUI tree with om classes in MENUs.
On UNIX platforms, starting with 2.30, the temporary files for emulated scrollable cursors will be created in the directory defined by the DBTEMP environment variable when defined, otherwise TMPDIR, TEMP or TMP will be used. Using DBTEMP for database files conforms to DBTEMP usage for temporary files of TEXT and BYTE data storage.
Before version 2.30, it was possible to use the insertRow() / appendRow() / deleteRow() / deleteAllRows() dialog methods to modify the tree array during the dialog execution. But these methods were not prepared to handle tree data properly. You could use program array methods instead, but when modifying the program array directly, secondary data such as multi-range selection flags or cell attributes were not synchronized. Starting with 2.30.02, you can now use the insertNode(), appendNode() and deleteNode() methods of the ui.Dialog class. You can still directly fill the program array before the dialog execution, but you should use dialog methods during the dialog execution.
Starting with version 2.32, the FGLPROFILE entry gui.chartable is no longer supported. This entry could be used to make the runtime system convert GUI data to the character set of the front-end.
The built-in charset conversion is not needed if you are using the correct locale corresponding to the character set used by your application and database. For more details about application character set configuration, see Localization.
To simplify the upgrade process to 2.32, the feature is still available, but it will be removed in a future version.
Until version 2.32.00, front-end protocol compression was enabled by default, to speed GUI communication on slow networks. However, on regular networks, compression is useless and can be disabled to save processing resources. With version 2.32.00, the compression is now disabled by default. If needed, compression can be enabled with this FGLPROFILE entry:
gui.protocol.format = "zlib"
Note also that compression needs the zlib library to be present on the computer where fglrun executes. Starting with 2.32.00, the product package does no longer include the fallback zlib library ($FGLDIR/lib/libzfgl.so or %FGLDIR%\bin\libzfgl.dll). Thus, if no standard zlib is installed on your system, compression will not be possible.
Up to version 2.30, the fpi tool was provided to print version information of the different components of Genero BDL. Starting with 2.32.00, this tool is no longer distributed. To print version information, you must use the -V option of fglrun.
Starting with version 2.32, the SQLite driver (dbmsqt3xx) does no longer need the LIBICONV.DLL library on Windows platforms to do charset conversion when the application locale is not UTF-8.
This upgrade note is important when using C Extensions or ESQL/C Extensions. If your application does not use such extensions, you can ignore this note.
To compile C or ESQL/C extensions manipulating data types like DECIMAL, you need IBM Informix data type structure definitions such as dec_t, dtime_t, intrvl_t, as well as macros like DECLEN() or TU_ENCODE(). Before version 2.32, these C structure and macros where provided in the files of the FGLDIR/include/f2c directory.
Genero BDL version 2.32 does no longer provide the IBM Informix ESQL/C structure definitions in FGLDIR/include/f2c files, because we have identified that some of the definitions are platform specific. However, to compile your C extensions, you need these definitions if your extensions use complex data types such as DECIMAL, DATETIME/INTERVAL, BYTE/TEXT. The definitions are not required if you use standard C types such as int or char[].
Starting with version 2.32, you need to install an IBM Informix CSDK on your development machine in order to get the structure and macro definitions to compile your C extensions. Understand that the IBM Informix CSDK is only required on the development platform. It is not required to install the CSDK on the production machines, except of course if you want to connect to an IBM Informix database server.
For more details about C Extension creation, see the Implementing C Extensions chapter in this documentation.
Starting with version 2.32, the fesqlc compiler and linker is no longer part of the Genero BDL package. Contact you support channel for more details.