Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qQRvU-00Dwmh-3d for pgsql-odbc@arkaria.postgresql.org; Mon, 31 Jul 2023 12:23:04 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qQRvS-00E4gw-9V for pgsql-odbc@arkaria.postgresql.org; Mon, 31 Jul 2023 12:23:02 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qQRvR-00E4go-Q8 for pgsql-odbc@lists.postgresql.org; Mon, 31 Jul 2023 12:23:02 +0000 Received: from pgintl.fastcrypt.com ([149.56.129.164]) by makus.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qQRvO-002Zv5-Uk for pgsql-odbc@postgresql.org; Mon, 31 Jul 2023 12:23:00 +0000 Received: from mail-ed1-f52.google.com (mail-ed1-f52.google.com [209.85.208.52]) by pgintl.fastcrypt.com (Postfix) with ESMTPSA id 9F8F22072E for ; Mon, 31 Jul 2023 08:22:56 -0400 (EDT) Received: by mail-ed1-f52.google.com with SMTP id 4fb4d7f45d1cf-51cff235226so9337498a12.0 for ; Mon, 31 Jul 2023 05:22:56 -0700 (PDT) X-Gm-Message-State: ABy/qLYAHJ15YzjAlStvUPsmiPyzis6no/rzwhcByz6b33AkxMHuBQ88 tRJNMBz20D2ab0KloHQpkAsCjkvAFZROfzLCvVs= X-Google-Smtp-Source: APBJJlHtt4bmCt9Hgft72nZDxBTjPYCJiAQx7oWDS2UKHu+FoDBDraYQrKmdKOLTZpf0AWPvfevSOsTU6fyzEN39RS4= X-Received: by 2002:a05:6402:34c5:b0:51e:4218:b91b with SMTP id w5-20020a05640234c500b0051e4218b91bmr13173600edc.1.1690806175441; Mon, 31 Jul 2023 05:22:55 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Dave Cramer Date: Mon, 31 Jul 2023 06:22:38 -0600 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: psqlODBC suggestions To: Robert Willis Cc: "pgsql-odbc@postgresql.org" Content-Type: multipart/alternative; boundary="00000000000078aa600601c77d16" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000078aa600601c77d16 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Seems to make sense. Someone should respond to this. Dave Cramer www.postgres.rocks On Mon, 31 Jul 2023 at 03:37, Robert Willis wrote: > Several weeks ago, I sent a message to this list (included below). > > > > I would appreciate it if someone on this list would acknowledge > > that the message was received. > > > > Thank you, > > > > Robert Willis > > > > *From:* Robert Willis > *Sent:* Monday, July 03, 2023 1:20 PM > *To:* pgsql-odbc@postgresql.org > *Subject:* ODBC driver changes > > > > To Whom It May Concern: > > > > Please consider making the following changes to the psqlODBC driver. > > Items 1 through 3 (the VARBIT and JSON-related changes) should be > > non-controversial =E2=80=93 I just think someone forgot to put them in th= e code. > > > > 1. In pgtypes.h, please add these definitions: > > #define PG_TYPE_JSON 114 > > #define PG_TYPE_VARBIT 1562 > > > > You might also consider adding this if it is correct: > > #define PG_TYPE_JSONB 3802 > > > > 1. In info.c, add this line immediately after the line containing > the > > only occurrence of PG_TYPE_BIT and right before the =E2=80=9Cbreak=E2=80= =9D line in the > file: > > case PG_TYPE_VARBIT: > > > > 1. In columninfo.c, add these lines immediately after the line > containing the > > only occurrence of PG_TYPE_TIME_WITH_TMZONE and right before the =E2=80= =9Cbreak=E2=80=9D > > line in the file: > > case PG_TYPE_BIT: > > case PG_TYPE_VARBIT: > > > > > > 1. In info.c, in the function PGAPI_ProcedureColumns() at line 5121 > (in the version > > 15.00 sources) the following code is added to the query to restrict the > answer > > to executable items: > > appendPQExpBuffer(&proc_query, > > " > has_function_privilege(p.oid, 'EXECUTE')"); > > I suggest changing this to the following In order to truly make the > function return info about actual procedures: > > appendPQExpBuffer(&proc_query, > > " > p.prokind =3D 'p' and" > > " > has_function_privilege(p.oid, 'EXECUTE')"); > > > > 1. In configure, line 5016 (in the version 15.00 sources) has this: > > CPPFLAGS=3D"$CPPFLAGS -I$with_libpq/inclu= de > - I$with_libpq/include/postgresql/internal" > > I think that really ought to be this: > > CPPFLAGS=3D"$CPPFLAGS -I$with_libpq/inclu= de > -I$with_libpq/include/internal" > > > > 1. In connection.c, I think you should make this change. The > comment explains my reasoning. > > Change these lines from: > > appendPQExpBufferStr(&query_buf, query); > > if (appendq) > > { > > appendPQExpBuffer(&query_buf, ";%s", > appendq); > > } > > if (query_rollback) > > { > > appendPQExpBuffer(&query_buf, ";%s %s", > rlscmd, per_query_svp); > > } > > to: > > appendPQExpBufferStr(&query_buf, query); > > /* prepend newline too, in case user SQL ends in a */ > > /* dash-dash comment without a final newline character. > Otherwise, */ > > /* the appended SQL statement gets treated as part of the > comment. */ > > if (appendq) > > { > > appendPQExpBuffer(&query_buf, "\n;%s", > appendq); > > } > > if (query_rollback) > > { > > appendPQExpBuffer(&query_buf, "\n;%s %s", > rlscmd, per_query_svp); > > } > > > > 1. In odbcapi30.c, in SQLEndTran(), I think it should return > SQL_ERROR if the connection is NOT in auto-commit mode. > > Thus, in the SQL_HANDLE_DBC case inside that function, these two lines: > > CC_clear_error((ConnectionClass *) Handle); > > ret =3D PGAPI_Transact(SQL_NULL_HENV, Handle, > CompletionType); > > should be: > > if (((ConnectionClass *)Handle)->__error_number =3D=3D > CONNECTION_SERVER_REPORTED_SEVERITY_FATAL > > && > (CC_loves_visible_trans( (ConnectionClass *)Handle )) ) > > ret =3D SQL_ERROR; > > else > > { > > CC_clear_error((ConnectionClass *) Handle); > > ret =3D PGAPI_Transact(SQL_NULL_HENV, Handle, > CompletionType); > > } > > > > > > I would be interested in getting your opinion on my suggestions, and hop= e > the changes merit inclusion in the next release. > > > > Sincerely, > > > > Robert Willis > > > > > *NOTICE from Ab Initio: This email (including any attachments) may contai= n > information that is subject to confidentiality obligations or is legally > privileged, and sender does not waive confidentiality or privilege. If > received in error, please notify the sender, delete this email, and make = no > further use, disclosure, or distribution. * > --00000000000078aa600601c77d16 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Seems to make sense.=C2=A0

Someone shou= ld respond to this.
Dave Cramerwww.postgres.rocks


On Mon, 31 Jul 2023 = at 03:37, Robert Willis <rwillis= @abinitio.com> wrote:

Several weeks ago,=C2=A0 I sent a message to this li= st=C2=A0 (included below).

=C2=A0

I would appreciate it if someone on this list would = acknowledge

that the message was received.

=C2=A0

Thank you,

=C2=A0

Robert Willis

=C2=A0

From: Robert Willis
Sent: Monday, July 03, 2023 1:20 PM
To: p= gsql-odbc@postgresql.org
Subject: ODBC driver changes

=C2=A0

To Whom It May Concern:

=C2=A0

Please consider making the following changes to the = psqlODBC driver.

Items 1 through 3 (the VARBIT and JSON-related chang= es) should be

non-controversial =E2=80=93 I just think someone for= got to put them in the code.

=C2=A0

  1. In pgtypes.h,=C2=A0=C2=A0 please add these definitions:

#define PG_TYPE_JSON=C2= =A0=C2=A0 114

#define PG_TYPE_VARBIT 1= 562

=C2=A0

You might also consider = adding this if it is correct:

#define PG_TYPE_JSONB=C2= =A0 3802

=C2=A0

  1. In info.c,=C2=A0=C2=A0=C2=A0 add this line immediately after the line co= ntaining the

only occurrence of PG_TY= PE_BIT =C2=A0and right before the =E2=80=9Cbreak=E2=80=9D line in the file:=

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 case PG_= TYPE_VARBIT:

=C2=A0

  1. In columninfo.c, add these lines immediately after the line containing t= he

only occurrence of PG_TY= PE_TIME_WITH_TMZONE and right before the =E2=80=9Cbreak=E2=80=9D<= /u>

line in the file:=

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 case PG_= TYPE_BIT:

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 case PG_= TYPE_VARBIT:

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <= u>

=C2=A0

  1. In info.c,=C2=A0 in the function PGAPI_ProcedureColumns()=C2=A0 at line = 5121 (in the version

15.00 sources)=C2=A0 the= following code is added to the query to restrict the answer<= /p>

to executable items:<= /u>

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 appendPQ= ExpBuffer(&proc_query,

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 " has_function_= privilege(p.oid, 'EXECUTE')");

I suggest changing this = to the following=C2=A0 In order to truly make the function return info abou= t actual procedures:

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 appendPQ= ExpBuffer(&proc_query,

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0" p.prokind =3D &#= 39;p' and"

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 " has_function_= privilege(p.oid, 'EXECUTE')");

=C2=A0

  1. In configure, line 5016 (in the version 15.00 sources) has this:<= u>

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CPPFLAGS=3D&qu= ot;$CPPFLAGS -I$with_libpq/include -=C2=A0 I$with_libpq/include/postgresql/= internal"

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 I think that really ought to be thi= s:

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 CPPFLAGS=3D&qu= ot;$CPPFLAGS -I$with_libpq/include -I$with_libpq/include/internal"<= /u>

=C2=A0

  1. In connection.c,=C2=A0 I think you should make this change.=C2=A0=C2=A0 = The comment explains my reasoning.

Change these lines from:=

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 appendPQ= ExpBufferStr(&query_buf, query);

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (appe= ndq)

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 {=

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 appendPQExpBuffer(&query_buf, ";%s", appendq);

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }=

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (quer= y_rollback)

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 {=

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 appendPQExpBuffer(&query_buf, ";%s %s", rlscmd, = per_query_svp);

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }=

to:

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 appendPQ= ExpBufferStr(&query_buf, query);

/* prepend newline too, in case user SQL ends in a */

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* dash-dash commen= t without a final newline character.=C2=A0 Otherwise, */

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* the a= ppended SQL statement gets treated as part of the comment.=C2=A0 */<= u>

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (appe= ndq)

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 {=

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 appendPQExpBuffer(&query_buf, "\n;%s", appendq);=

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }=

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (quer= y_rollback)

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 {=

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 appendPQExpBuffer(&query_buf, "\n;%s %s", rlscmd= , per_query_svp);

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }=

=C2=A0

  1. In odbcapi30.c, in =C2=A0SQLEndTran(), =C2=A0=C2=A0I think it should ret= urn SQL_ERROR if the connection is NOT in auto-commit mode.

Thus, in the SQL_HANDLE_= DBC case inside that function, these two lines:

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0 C= C_clear_error((ConnectionClass *) Handle);

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0 r= et =3D PGAPI_Transact(SQL_NULL_HENV, Handle, CompletionType);=

should be:=

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (((Co= nnectionClass *)Handle)->__error_number =3D=3D CONNECTION_SERVER_REPORTE= D_SEVERITY_FATAL

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 && =C2=A0=C2= =A0=C2=A0 (CC_loves_visible_trans( (ConnectionClass *)Handle=C2=A0 )) )<= /u>

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0 r= et =3D SQL_ERROR;

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 else=

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0 {=

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0 = =C2=A0=C2=A0CC_clear_error((ConnectionClass *) Handle);

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0 = =C2=A0=C2=A0ret =3D PGAPI_Transact(SQL_NULL_HENV, Handle, CompletionType);<= u>

=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0 }=

=C2=A0

=C2=A0

I would be interested in getting your opinion on my = suggestions, =C2=A0and hope the changes merit inclusion in the next release= .

=C2=A0

Sincerely,

=C2=A0

Robert Willis

=C2=A0


=C2=A0
NOTICE from Ab Initio: This email (including any attachments) may contain informat= ion that is subject to confidentiality obligations or is legally privileged= , and sender does not waive confidentiality or privilege. If received in er= ror, please notify the sender, delete this email, and make no further use, disclosure, or distribution. <= /em>
--00000000000078aa600601c77d16--