postgresql/src/interfaces/ecpg/test/expected/sql-desc.c
Michael Meskes 799728b0ba Fix descriptor output in ECPG.
While working on most platforms the old way sometimes created alignment
problems. This should fix it. Also the regresion tests were updated to test for
the reported case.

Report and fix by MauMau <maumau307@gmail.com>
2014-01-09 15:50:51 +01:00

373 lines
9 KiB
C

/* Processed by ecpg (regression mode) */
/* These include files are added by the preprocessor */
#include <ecpglib.h>
#include <ecpgerrno.h>
#include <sqlca.h>
/* End of automatic include section */
#define ECPGdebug(X,Y) ECPGdebug((X)+100,(Y))
#line 1 "desc.pgc"
#line 1 "regression.h"
#line 1 "desc.pgc"
/* exec sql whenever sqlerror sqlprint ; */
#line 2 "desc.pgc"
int
main(void)
{
/* exec sql begin declare section */
#line 8 "desc.pgc"
char * stmt1 = "INSERT INTO test1 VALUES ($1, $2)" ;
#line 9 "desc.pgc"
char * stmt2 = "SELECT * from test1 where a = $1 and b = $2" ;
#line 10 "desc.pgc"
char * stmt3 = "SELECT * from test1 where :var = a" ;
#line 12 "desc.pgc"
int val1 = 1 ;
#line 13 "desc.pgc"
char val2 [ 4 ] = "one" , val2output [] = "AAA" ;
#line 14 "desc.pgc"
int val1output = 2 , val2i = 0 ;
#line 15 "desc.pgc"
int val2null = - 1 ;
#line 16 "desc.pgc"
int ind1 , ind2 ;
/* exec sql end declare section */
#line 17 "desc.pgc"
ECPGdebug(1, stderr);
ECPGallocate_desc(__LINE__, "indesc");
#line 21 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();
#line 21 "desc.pgc"
ECPGallocate_desc(__LINE__, "outdesc");
#line 22 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();
#line 22 "desc.pgc"
{ ECPGset_desc(__LINE__, "indesc", 1,ECPGd_data,
ECPGt_int,&(val1),(long)1,(long)1,sizeof(int), ECPGd_EODT);
#line 24 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 24 "desc.pgc"
{ ECPGset_desc(__LINE__, "indesc", 2,ECPGd_data,
ECPGt_char,(val2),(long)4,(long)1,(4)*sizeof(char), ECPGd_indicator,
ECPGt_int,&(val2i),(long)1,(long)1,sizeof(int), ECPGd_EODT);
#line 25 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 25 "desc.pgc"
{ ECPGconnect(__LINE__, 0, "regress1" , NULL, NULL , NULL, 0);
#line 27 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 27 "desc.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table test1 ( a int , b text )", ECPGt_EOIT, ECPGt_EORT);
#line 29 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 29 "desc.pgc"
{ ECPGprepare(__LINE__, NULL, 0, "foo1", stmt1);
#line 30 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 30 "desc.pgc"
{ ECPGprepare(__LINE__, NULL, 0, "Foo-1", stmt1);
#line 31 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 31 "desc.pgc"
{ ECPGprepare(__LINE__, NULL, 0, "foo2", stmt2);
#line 32 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 32 "desc.pgc"
{ ECPGprepare(__LINE__, NULL, 0, "foo3", stmt3);
#line 33 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 33 "desc.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_execute, "foo1",
ECPGt_descriptor, "indesc", 1L, 1L, 1L,
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);
#line 35 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 35 "desc.pgc"
{ ECPGset_desc(__LINE__, "indesc", 1,ECPGd_data,
ECPGt_const,"2",(long)1,(long)1,strlen("2"), ECPGd_EODT);
#line 37 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 37 "desc.pgc"
{ ECPGset_desc(__LINE__, "indesc", 2,ECPGd_data,
ECPGt_char,(val2),(long)4,(long)1,(4)*sizeof(char), ECPGd_indicator,
ECPGt_int,&(val2null),(long)1,(long)1,sizeof(int), ECPGd_EODT);
#line 38 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 38 "desc.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_execute, "foo1",
ECPGt_descriptor, "indesc", 1L, 1L, 1L,
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);
#line 40 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 40 "desc.pgc"
{ ECPGset_desc(__LINE__, "indesc", 1,ECPGd_data,
ECPGt_const,"3",(long)1,(long)1,strlen("3"), ECPGd_EODT);
#line 42 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 42 "desc.pgc"
{ ECPGset_desc(__LINE__, "indesc", 2,ECPGd_data,
ECPGt_const,"this is a long test",(long)19,(long)1,strlen("this is a long test"), ECPGd_indicator,
ECPGt_int,&(val1),(long)1,(long)1,sizeof(int), ECPGd_EODT);
#line 43 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 43 "desc.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_execute, "Foo-1",
ECPGt_descriptor, "indesc", 1L, 1L, 1L,
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);
#line 45 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 45 "desc.pgc"
{ ECPGdeallocate(__LINE__, 0, NULL, "Foo-1");
#line 47 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 47 "desc.pgc"
{ ECPGset_desc(__LINE__, "indesc", 1,ECPGd_data,
ECPGt_int,&(val1),(long)1,(long)1,sizeof(int), ECPGd_EODT);
#line 49 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 49 "desc.pgc"
{ ECPGset_desc(__LINE__, "indesc", 2,ECPGd_data,
ECPGt_char,(val2),(long)4,(long)1,(4)*sizeof(char), ECPGd_indicator,
ECPGt_int,&(val2i),(long)1,(long)1,sizeof(int), ECPGd_EODT);
#line 50 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 50 "desc.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_execute, "foo2",
ECPGt_descriptor, "indesc", 1L, 1L, 1L,
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT,
ECPGt_descriptor, "outdesc", 1L, 1L, 1L,
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);
#line 52 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 52 "desc.pgc"
{ ECPGget_desc(__LINE__, "outdesc", 1,ECPGd_data,
ECPGt_char,(val2output),(long)sizeof("AAA"),(long)1,(sizeof("AAA"))*sizeof(char), ECPGd_EODT);
#line 54 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 54 "desc.pgc"
printf("output = %s\n", val2output);
/* declare c1 cursor for $1 */
#line 57 "desc.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "declare c1 cursor for $1",
ECPGt_char_variable,(ECPGprepared_statement(NULL, "foo2", __LINE__)),(long)1,(long)1,(1)*sizeof(char),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L,
ECPGt_descriptor, "indesc", 1L, 1L, 1L,
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);
#line 58 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 58 "desc.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch next from c1", ECPGt_EOIT,
ECPGt_int,&(val1output),(long)1,(long)1,sizeof(int),
ECPGt_int,&(ind1),(long)1,(long)1,sizeof(int),
ECPGt_char,(val2output),(long)sizeof("AAA"),(long)1,(sizeof("AAA"))*sizeof(char),
ECPGt_int,&(ind2),(long)1,(long)1,sizeof(int), ECPGt_EORT);
#line 60 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 60 "desc.pgc"
printf("val1=%d (ind1: %d) val2=%s (ind2: %d)\n",
val1output, ind1, val2output, ind2);
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "close c1", ECPGt_EOIT, ECPGt_EORT);
#line 64 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 64 "desc.pgc"
{ ECPGset_desc_header(__LINE__, "indesc", (int)(1));
#line 66 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 66 "desc.pgc"
{ ECPGset_desc(__LINE__, "indesc", 1,ECPGd_data,
ECPGt_const,"2",(long)1,(long)1,strlen("2"), ECPGd_EODT);
#line 67 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 67 "desc.pgc"
/* declare c2 cursor for $1 */
#line 69 "desc.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "declare c2 cursor for $1",
ECPGt_char_variable,(ECPGprepared_statement(NULL, "foo3", __LINE__)),(long)1,(long)1,(1)*sizeof(char),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L,
ECPGt_descriptor, "indesc", 1L, 1L, 1L,
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);
#line 70 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 70 "desc.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch next from c2", ECPGt_EOIT,
ECPGt_int,&(val1output),(long)1,(long)1,sizeof(int),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L,
ECPGt_char,(val2output),(long)sizeof("AAA"),(long)1,(sizeof("AAA"))*sizeof(char),
ECPGt_int,&(val2i),(long)1,(long)1,sizeof(int), ECPGt_EORT);
#line 72 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 72 "desc.pgc"
printf("val1=%d val2=%s\n", val1output, val2i ? "null" : val2output);
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "close c2", ECPGt_EOIT, ECPGt_EORT);
#line 75 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 75 "desc.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "select * from test1 where a = 3", ECPGt_EOIT,
ECPGt_int,&(val1output),(long)1,(long)1,sizeof(int),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L,
ECPGt_char,(val2output),(long)sizeof("AAA"),(long)1,(sizeof("AAA"))*sizeof(char),
ECPGt_int,&(val2i),(long)1,(long)1,sizeof(int), ECPGt_EORT);
#line 77 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 77 "desc.pgc"
printf("val1=%d val2=%c%c%c%c warn=%c truncate=%d\n", val1output, val2output[0], val2output[1], val2output[2], val2output[3], sqlca.sqlwarn[0], val2i);
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table test1", ECPGt_EOIT, ECPGt_EORT);
#line 80 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 80 "desc.pgc"
{ ECPGdeallocate_all(__LINE__, 0, NULL);
#line 81 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 81 "desc.pgc"
{ ECPGdisconnect(__LINE__, "CURRENT");
#line 82 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 82 "desc.pgc"
ECPGdeallocate_desc(__LINE__, "indesc");
#line 84 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();
#line 84 "desc.pgc"
ECPGdeallocate_desc(__LINE__, "outdesc");
#line 85 "desc.pgc"
if (sqlca.sqlcode < 0) sqlprint();
#line 85 "desc.pgc"
return 0;
}