IBM Informix emulation parameters in FGLPROFILE

To simplify the migration process to other database servers as IBM® Informix®, the database drivers can emulate some IBM Informix-specific features like SERIAL columns and temporary tables; the drivers can also do some SQL syntax translation.

Avoid using IBM Informix emulations; write portable SQL code instead. IBM Informix emulations are only provided to help you in the migration process. Disabling IBM Informix emulations improves performance, because SQL statements do not have to be parsed to search for IBM Informix-specific syntax.

Emulations can be controlled with FGLPROFILE parameters. You can disable all possible switches step-by-step, in order to test your programs for SQL compatibility.

Global switch to enable or disable IBM Informix emulations:

dbi.database.dbname.ifxemul = { true | false }

Feature specific switches:

The 'ifxemul.datatype' switches define whether the specified data type must be converted to a native type (for example, when creating a table):

dbi.database.dbname.ifxemul.datatype.type = { true | false }

Here, type can be one of char, varchar, datetime, decimal, money, float, real, integer, smallint, serial, text, byte, bigint, bigserial, int8, serial8, boolean.

To control SERIAL generation type, you can use the following switch:

dbi.database.dbname.ifxemul.datatype.serial.emulation =
 { "native" | "regtable" | "trigseq" }

The 'temptables' switch can be used to control temporary table emulation:

dbi.database.dbname.ifxemul.temptables = { true | false }

The 'temptables.emulation' switch can be used to specify what type of tables must be used to emulate temporary tables:

dbi.database.dbname.ifxemul.temptables.emulation = { "default" | "global" }

The 'dblquotes' switch can be used to define whether double quoted strings must be converted to single quoted strings:

dbi.database.dbname.ifxemul.dblquotes = { true | false }

If this emulation is enabled, all double quoted strings are converted, including database object names.

The 'outers' switch can be used to control IBM Informix OUTER specification:

dbi.database.dbname.ifxemul.outers = { true | false }

It is better to use standard ISO outer joins in your SQL statements.

The 'today' switch can be used to convert the TODAY keyword to a native expression returning the current date:

dbi.database.dbname.ifxemul.today = { true | false }

The 'current' switch can be used to convert the CURRENT X TO Y expressions to a native expression returning the current time:

dbi.database.dbname.ifxemul.current = { true | false }

The 'selectunique' switch can be used to convert the SELECT UNIQUE to SELECT DISTINCT:

dbi.database.dbname.ifxemul.selectunique = { true | false }

It is better to replace all UNIQUE keywords by DISTINCT.

The 'colsubs' switch can be used to control column substrings expressions (col[x,y]) to native substring expressions:

dbi.database.dbname.ifxemul.colsubs = { true | false }

The 'matches' switch can be used to define whether MATCHES expressions must be converted to LIKE expressions:

dbi.database.dbname.ifxemul.matches = { true | false }

It is better to use the LIKE operator in your SQL statements.

The 'length' switch can be used to define whether LENGTH() function names have to be converted to the native equivalent:

dbi.database.dbname.ifxemul.length = { true | false }

The 'rowid' switch can be used to define whether ROWID keywords have to be converted to native equivalent (for example, OID in PostgreSQL):

dbi.database.dbname.ifxemul.rowid = { true | false }

It is better to use primary keys instead.

The 'listupdate' switch can be used to convert the UPDATE statements using non-ANSI syntax:

dbi.database.dbname.ifxemul.listupdate = { true | false }
The 'extend' switch can be used to convert simple EXTEND() expressions to native date/time expressions:
dbi.database.dbname.ifxemul.extend = { true | false }