Thread: BUG #1164: Informix compatibility ecpg

BUG #1164: Informix compatibility ecpg

From
"PostgreSQL Bugs List"
Date:
The following bug has been logged online:

Bug reference:      1164
Logged by:          John Smith

Email address:      john@roundel.net

PostgreSQL version: 7.4

Operating system:   Linux 2.4 [Fedora core 1]

Description:        Informix compatibility ecpg

Details:

O/S: Linux 2.4 [Fedora core 1]
PostgreSQL 7.4.2
command line:
ecpg -t prog.pgc -C INFORMIX  -o prog.c

I'm Converting a project from Informix to PostgreSQL, and intended to make
use of Informix compatibility mode to speed the process. I understand that
some core differences (error handling for example) cannot easily be
automated.

I've found some incompatibles though that seem to me could be catered for:

In Informix ESQL/C, columns can be defined using the same string that's used
to describe the field when describing the table. Hence "integer" will work
in esql, but not in ecpg.

Informix treats the single and double quote as synonyms in SELECT
statements. Thus
... WHERE countries.country_code = "UK"
is valid in Informix, but in PostgreSQL needs to be re-written as
... WHERE countries.country_code = 'UK'.
The error message for this is not obvious to a programmer brought up on
informix, as it refers to a column called "UK" that does not exist.

A SELECT from a NULL field in Informix is trapped using the Informix call
"risnull()". Although this function is provided with ecpg, null values were
not successfully trapped, and I had to resort to using the PostgreSQL
standard indicator variables. I can supply more details on this one on
request, as it's C code that probably doesn't belong here.


Generally though, I've been unable to find any documentation on the
Informix-compatibility mode.


Regards,

Re: BUG #1164: Informix compatibility ecpg

From
Michael Meskes
Date:
On Mon, Jun 14, 2004 at 08:08:37PM -0300, PostgreSQL Bugs List wrote:
> In Informix ESQL/C, columns can be defined using the same string that's used
> to describe the field when describing the table. Hence "integer" will work
> in esql, but not in ecpg.

I'm not sure I understand you correctly. You mean you cannot use
something like this:

create table test (integer integer);

in ecpg?

Well that one works for me.

> Informix treats the single and double quote as synonyms in SELECT
> statements. Thus
> ... WHERE countries.country_code = "UK"
> is valid in Informix, but in PostgreSQL needs to be re-written as
> ... WHERE countries.country_code = 'UK'.
> The error message for this is not obvious to a programmer brought up on
> informix, as it refers to a column called "UK" that does not exist.

Virtually no chance here. Changing this would mean some major work on
the lexer to not break SQL compatibility in non-compatibility mode.

> A SELECT from a NULL field in Informix is trapped using the Informix call
> "risnull()". Although this function is provided with ecpg, null values were
> not successfully trapped, and I had to resort to using the PostgreSQL
> standard indicator variables. I can supply more details on this one on
> request, as it's C code that probably doesn't belong here.

This seems to be a bug. Could you please send me a test case? I have no
Informix myself so I need to know how Informix reacts to this test case.

Also, you know that you hve to specify "-r no_indicator" for this to
work I assume.

> Generally though, I've been unable to find any documentation on the
> Informix-compatibility mode.

Unfortunately this is so very true.

Michael
--
Michael Meskes
Email: Michael at Fam-Meskes dot De
ICQ: 179140304, AIM/Yahoo: michaelmeskes, Jabber: meskes@jabber.org
Go SF 49ers! Go Rhein Fire! Use Debian GNU/Linux! Use PostgreSQL!