Search Postgresql Archives

Re: ESQL/C no indicator variables ./. error -213

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



El día Mittwoch, Juni 17, 2020 a las 01:39:53 -0400, Tom Lane escribió:

> Matthias Apitz <guru@xxxxxxxxxxx> writes:
> > We encountered that if our ESQL/C written servers see on SELECT or FETCH
> > in a row a NULL value, it will raise correctly the error -213 as written
> > and explained in https://www.postgresql.org/docs/11/ecpg-variables.html#ECPG-INDICATORS
> > We catch this error -213 and deal with in.
> 
> > What we did not knew and discovered today is something very fatal: In
> > such a situation on a FETCH of a row of some 55 columns, the transfer of
> > the column elements into their hostvariables stops on first NULL value,
> > as here to be seen in the log:
> 
> Could you provide a self-contained test case for this?  It's hard to
> guess at what the problem might be.

Hello,

attached is a simple ESQL/C code; if it is not passing the mailing-list,
the code is also here: http://www.unixarea.de/embedded.pgc and this is
its output together with the ESQL/C error log file and SQL examples:

psql -Usisis -dsisis 
psql (11.4)
Geben Sie »help« für Hilfe ein.

sisis=# \d dbctest
                        Tabelle »public.dbctest«
  Spalte   |      Typ      | Sortierfolge | NULL erlaubt? | Vorgabewert
-----------+---------------+--------------+---------------+-------------
 tstchar25 | character(25) |              |               |
 tstint    | integer       |              |               |
Indexe:
    "i_tstint" UNIQUE, btree (tstint)

sisis=# select * from dbctest where tstint = 1;
 tstchar25 | tstint
-----------+--------
           |      1
(1 Zeile)



./embedded                                                            
hostvariable 'tstint' before SELECT tstchar25, tstint INTO :tstchar25, :tstint FROM dbctest: 99
hostvariable 'tstint' after  SELECT tstchar25, tstint INTO :tstchar25, :tstint FROM dbctest with -213: 99


cat esqlc.6485
[6485] [18.06.2020 08:26:38:433]: ECPGdebug: set to 1
[6485] [18.06.2020 08:26:38:433]: ECPGdebug: proc argv0 is embedded
[6485] [18.06.2020 08:26:38:433]: ECPGconnect: opening database sisis on localhost port 5432 with options application_name=SunRise DBCALL V7.1 (pid=6485) for user sisis
[6485] [18.06.2020 08:26:38:436]: ecpg_execute on line 36: query: select tstchar25 , tstint from dbctest where tstint = 1; with 0 parameter(s) on connection sisis
[6485] [18.06.2020 08:26:38:437]: ecpg_execute on line 36: using PQexec
[6485] [18.06.2020 08:26:38:437]: ecpg_process_output on line 36: correctly got 1 tuples with 2 fields
[6485] [18.06.2020 08:26:38:437]: ecpg_get_data on line 36: RESULT:  offset: 80; array: no
[6485] [18.06.2020 08:26:38:437]: raising sqlcode -213 on line 36: null value without indicator on line 36
[6485] [18.06.2020 08:26:38:438]: ecpg_finish: connection sisis closed


Thanks

	matthias

-- 
Matthias Apitz, ✉ guru@xxxxxxxxxxx, http://www.unixarea.de/ +49-176-38902045
Public GnuPG key: http://www.unixarea.de/key.pub
May, 9: Спаси́бо освободители! Thank you very much, Russian liberators!
#include <stdio.h>
#include <stdlib.h>

EXEC SQL INCLUDE sqlca;
EXEC SQL WHENEVER SQLERROR sqlprint;

void posSqlError() { return; }

main()
{
	FILE *fp;
	char file[80];
	sprintf(file, "esqlc.%d", getpid());
	fp = fopen(file, "w");
	ECPGdebug(1, fp);

	EXEC SQL BEGIN DECLARE SECTION;
	char connection[1024];
        char user[80];
        char pass[80];
	char tstchar25[80];
	int  tstint = 99;
	EXEC SQL END DECLARE SECTION;

	sprintf(connection, "tcp:postgresql://localhost:5432/sisis?application_name=SunRise DBCALL V7.1 (pid=%d)", getpid());
	strcpy(user, "sisis");
	strcpy(pass, "sisis123");

	EXEC SQL WHENEVER SQLERROR call posSqlError();

	EXEC SQL CONNECT TO :connection USER :user USING :pass ;

	printf("hostvariable 'tstint' before SELECT tstchar25, tstint INTO :tstchar25, :tstint FROM dbctest: %d\n", tstint);

	EXEC SQL SELECT tstchar25, tstint INTO :tstchar25, :tstint FROM dbctest WHERE tstint = 1;

	printf("hostvariable 'tstint' after  SELECT tstchar25, tstint INTO :tstchar25, :tstint FROM dbctest with -213: %d\n", tstint);


	EXEC SQL DISCONNECT;

	return 0;

}

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux