On Tue, Jun 7, 2022 at 08:28:55AM +0000, ideriha.take...@fujitsu.com wrote: > Hi. > (CCing Michael Meskes) > > One of my customers asked me about what oracle compatibility mode in ecpg > means, > and I noticed current documentation does not explain ecpg ORACLE compatible > mode (ecpg -C ORACLE) in detail. > I myself learned the feature of "-C ORACLE" from regression test > (src/interfaces/ecpg/test/compat_oracle) and source code. > > Is lacking documentation intentional or do commit 3b7ab4380 and 3b9b7516f > just forget adding the explanation? > > As for as I know, "ecpg -C ORACLE" is written briefly in ecpg command > reference and PostgreSQL 11 release note, > but they are not enougn information for users to understand feature of "ecpg > -C ORACLE". > > https://www.postgresql.org/docs/current/app-ecpg.html > > ------------------------------- > -C mode > Set a compatibility mode. mode can be INFORMIX, INFORMIX_SE, or ORACLE. > ------------------------------- > > https://www.postgresql.org/docs/11/release-11.html#id-1.11.6.21.5.9 > ------------------------------- > Add an ecpg mode to enable Oracle Pro*C-style handling of char arrays. > > This mode is enabled with -C. > ------------------------------- > > On the other hand, informix compatible mode is written in detail. > https://www.postgresql.org/docs/current/ecpg-informix-compat.html
This is a very good point. I have studied the issue and created the attached patch to document Oracle-compatibility mode. -- Bruce Momjian <br...@momjian.us> https://momjian.us EDB https://enterprisedb.com Indecision is a decision. Inaction is an action. Mark Batterson
diff --git a/doc/src/sgml/ecpg.sgml b/doc/src/sgml/ecpg.sgml index 7f8b4dd5c0..999b7ca0ae 100644 --- a/doc/src/sgml/ecpg.sgml +++ b/doc/src/sgml/ecpg.sgml @@ -1890,7 +1890,8 @@ EXEC SQL SELECT b INTO :val :val_ind FROM test1; </programlisting> The indicator variable <varname>val_ind</varname> will be zero if the value was not null, and it will be negative if the value was - null. + null. (See <xref linkend="ecpg-oracle-compat"/> to enable + Oracle-specific behavior.) </para> <para> @@ -9799,6 +9800,42 @@ risnull(CINTTYPE, (char *) &i); </sect2> </sect1> + <sect1 id="ecpg-oracle-compat"> + <title><productname>Oracle</productname> Compatibility Mode</title> + <para> + <command>ecpg</command> can be run in a so-called <firstterm>Oracle + compatibility mode</firstterm>. If this mode is active, it tries to + behave as if it were Oracle <productname>Pro*C</productname>. + </para> + + <para> + Specifically, this mode changes <command>ecpg</command> in three ways: + + <itemizedlist> + <listitem> + <para> + Pad character arrays receiving character string types with + trailing spaces to the specified length + </para> + </listitem> + + <listitem> + <para> + Zero byte terminate these character arrays, and set the indicator + variable if truncation occurs + </para> + </listitem> + + <listitem> + <para> + Set the null indicator to <literal>-1</literal> when character + arrays receive empty character string types + </para> + </listitem> + </itemizedlist> + </para> + </sect1> + <sect1 id="ecpg-develop"> <title>Internals</title>