On Tue, Jun 7, 2022 at 08:28:55AM +0000, [email protected] 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 <[email protected]> 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>