mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
Applied patch by Boszormenyi Zoltan <zb@cybertec.at> to add DESCRIBE [OUTPUT] statement to ecpg.
This commit is contained in:
@ -17,6 +17,7 @@ TESTS = test_informix test_informix.c \
|
||||
rfmtlong rfmtlong.c \
|
||||
rnull rnull.c \
|
||||
sqlda sqlda.c \
|
||||
describe describe.c \
|
||||
charfuncs charfuncs.c
|
||||
|
||||
all: $(TESTS)
|
||||
|
199
src/interfaces/ecpg/test/compat_informix/describe.pgc
Normal file
199
src/interfaces/ecpg/test/compat_informix/describe.pgc
Normal file
@ -0,0 +1,199 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
exec sql include ../regression;
|
||||
exec sql include sqlda.h;
|
||||
|
||||
exec sql whenever sqlerror stop;
|
||||
|
||||
sqlda_t *sqlda1, *sqlda2, *sqlda3;
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
exec sql begin declare section;
|
||||
char *stmt1 = "SELECT id, t FROM descr_t1";
|
||||
char *stmt2 = "SELECT id, t FROM descr_t1 WHERE id = -1";
|
||||
int i, count1, count2;
|
||||
char field_name1[30] = "not set";
|
||||
char field_name2[30] = "not set";
|
||||
exec sql end declare section;
|
||||
|
||||
char msg[128];
|
||||
|
||||
ECPGdebug(1, stderr);
|
||||
|
||||
strcpy(msg, "connect");
|
||||
exec sql connect to REGRESSDB1;
|
||||
|
||||
strcpy(msg, "set");
|
||||
exec sql set datestyle to iso;
|
||||
|
||||
strcpy(msg, "create");
|
||||
exec sql create table descr_t1(id serial primary key, t text);
|
||||
|
||||
strcpy(msg, "insert");
|
||||
exec sql insert into descr_t1(id, t) values (default, 'a');
|
||||
exec sql insert into descr_t1(id, t) values (default, 'b');
|
||||
exec sql insert into descr_t1(id, t) values (default, 'c');
|
||||
exec sql insert into descr_t1(id, t) values (default, 'd');
|
||||
|
||||
strcpy(msg, "commit");
|
||||
exec sql commit;
|
||||
|
||||
/*
|
||||
* Test DESCRIBE with a query producing tuples.
|
||||
* DESCRIPTOR and SQL DESCRIPTOR are NOT the same in
|
||||
* Informix-compat mode.
|
||||
*/
|
||||
|
||||
strcpy(msg, "allocate");
|
||||
exec sql allocate descriptor desc1;
|
||||
exec sql allocate descriptor desc2;
|
||||
|
||||
strcpy(msg, "prepare");
|
||||
exec sql prepare st_id1 FROM :stmt1;
|
||||
|
||||
sqlda1 = sqlda2 = sqlda3 = NULL;
|
||||
|
||||
strcpy(msg, "describe");
|
||||
exec sql describe st_id1 into sql descriptor desc1;
|
||||
exec sql describe st_id1 using sql descriptor desc2;
|
||||
|
||||
exec sql describe st_id1 into descriptor sqlda1;
|
||||
exec sql describe st_id1 using descriptor sqlda2;
|
||||
exec sql describe st_id1 into sqlda3;
|
||||
|
||||
if (sqlda1 == NULL)
|
||||
{
|
||||
printf("sqlda1 NULL\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (sqlda2 == NULL)
|
||||
{
|
||||
printf("sqlda2 NULL\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (sqlda3 == NULL)
|
||||
{
|
||||
printf("sqlda3 NULL\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
strcpy(msg, "get descriptor");
|
||||
exec sql get descriptor desc1 :count1 = count;
|
||||
exec sql get descriptor desc1 :count2 = count;
|
||||
|
||||
if (count1 != count2)
|
||||
{
|
||||
printf("count1 (%d) != count2 (%d)\n", count1, count2);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (count1 != sqlda1->sqld)
|
||||
{
|
||||
printf("count1 (%d) != sqlda1->sqld (%d)\n", count1, sqlda1->sqld);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (count1 != sqlda2->sqld)
|
||||
{
|
||||
printf("count1 (%d) != sqlda2->sqld (%d)\n", count1, sqlda2->sqld);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (count1 != sqlda3->sqld)
|
||||
{
|
||||
printf("count1 (%d) != sqlda3->sqld (%d)\n", count1, sqlda3->sqld);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
for (i = 1; i <= count1; i++)
|
||||
{
|
||||
exec sql get descriptor desc1 value :i :field_name1 = name;
|
||||
exec sql get descriptor desc2 value :i :field_name2 = name;
|
||||
printf("%d\n\tfield_name1 '%s'\n\tfield_name2 '%s'\n\t"
|
||||
"sqlda1 '%s'\n\tsqlda2 '%s'\n\tsqlda3 '%s'\n",
|
||||
i, field_name1, field_name2,
|
||||
sqlda1->sqlvar[i-1].sqlname,
|
||||
sqlda2->sqlvar[i-1].sqlname,
|
||||
sqlda3->sqlvar[i-1].sqlname);
|
||||
}
|
||||
|
||||
strcpy(msg, "deallocate");
|
||||
exec sql deallocate descriptor desc1;
|
||||
exec sql deallocate descriptor desc2;
|
||||
free(sqlda1);
|
||||
free(sqlda2);
|
||||
free(sqlda3);
|
||||
|
||||
exec sql deallocate prepare st_id1;
|
||||
|
||||
/* Test DESCRIBE with a query not producing tuples */
|
||||
|
||||
strcpy(msg, "allocate");
|
||||
exec sql allocate descriptor desc1;
|
||||
exec sql allocate descriptor desc2;
|
||||
|
||||
strcpy(msg, "prepare");
|
||||
exec sql prepare st_id2 FROM :stmt2;
|
||||
|
||||
sqlda1 = sqlda2 = sqlda3 = NULL;
|
||||
|
||||
strcpy(msg, "describe");
|
||||
exec sql describe st_id2 into sql descriptor desc1;
|
||||
exec sql describe st_id2 using sql descriptor desc2;
|
||||
|
||||
exec sql describe st_id2 into descriptor sqlda1;
|
||||
exec sql describe st_id2 using descriptor sqlda2;
|
||||
exec sql describe st_id2 into sqlda3;
|
||||
|
||||
if (sqlda1 == NULL || sqlda1 == NULL || sqlda2 == NULL)
|
||||
exit(1);
|
||||
|
||||
strcpy(msg, "get descriptor");
|
||||
exec sql get descriptor desc1 :count1 = count;
|
||||
exec sql get descriptor desc1 :count2 = count;
|
||||
|
||||
if (!( count1 == count2 &&
|
||||
count1 == sqlda1->sqld &&
|
||||
count1 == sqlda2->sqld &&
|
||||
count1 == sqlda3->sqld))
|
||||
exit(1);
|
||||
|
||||
for (i = 1; i <= count1; i++)
|
||||
{
|
||||
exec sql get descriptor desc1 value :i :field_name1 = name;
|
||||
exec sql get descriptor desc2 value :i :field_name2 = name;
|
||||
printf("%d\n\tfield_name1 '%s'\n\tfield_name2 '%s'\n\t"
|
||||
"sqlda1 '%s'\n\tsqlda2 '%s'\n\tsqlda3 '%s'\n",
|
||||
i, field_name1, field_name2,
|
||||
sqlda1->sqlvar[i-1].sqlname,
|
||||
sqlda2->sqlvar[i-1].sqlname,
|
||||
sqlda3->sqlvar[i-1].sqlname);
|
||||
}
|
||||
|
||||
strcpy(msg, "deallocate");
|
||||
exec sql deallocate descriptor desc1;
|
||||
exec sql deallocate descriptor desc2;
|
||||
free(sqlda1);
|
||||
free(sqlda2);
|
||||
free(sqlda3);
|
||||
|
||||
exec sql deallocate prepare st_id2;
|
||||
|
||||
/* End test */
|
||||
|
||||
strcpy(msg, "drop");
|
||||
exec sql drop table descr_t1;
|
||||
|
||||
strcpy(msg, "commit");
|
||||
exec sql commit;
|
||||
|
||||
strcpy(msg, "disconnect");
|
||||
exec sql disconnect;
|
||||
|
||||
return (0);
|
||||
}
|
@ -4,6 +4,7 @@ test: compat_informix/rfmtdate
|
||||
test: compat_informix/rfmtlong
|
||||
test: compat_informix/rnull
|
||||
test: compat_informix/sqlda
|
||||
test: compat_informix/describe
|
||||
test: compat_informix/test_informix
|
||||
test: compat_informix/test_informix2
|
||||
test: connect/test2
|
||||
@ -31,6 +32,7 @@ test: sql/copystdout
|
||||
test: sql/define
|
||||
test: sql/desc
|
||||
test: sql/sqlda
|
||||
test: sql/describe
|
||||
test: sql/dynalloc
|
||||
test: sql/dynalloc2
|
||||
test: sql/dyntest
|
||||
|
@ -4,6 +4,7 @@ test: compat_informix/rfmtdate
|
||||
test: compat_informix/rfmtlong
|
||||
test: compat_informix/rnull
|
||||
test: compat_informix/sqlda
|
||||
test: compat_informix/describe
|
||||
test: compat_informix/test_informix
|
||||
test: compat_informix/test_informix2
|
||||
test: connect/test2
|
||||
@ -31,6 +32,7 @@ test: sql/copystdout
|
||||
test: sql/define
|
||||
test: sql/desc
|
||||
test: sql/sqlda
|
||||
test: sql/describe
|
||||
test: sql/dynalloc
|
||||
test: sql/dynalloc2
|
||||
test: sql/dyntest
|
||||
|
467
src/interfaces/ecpg/test/expected/compat_informix-describe.c
Normal file
467
src/interfaces/ecpg/test/expected/compat_informix-describe.c
Normal file
@ -0,0 +1,467 @@
|
||||
/* Processed by ecpg (regression mode) */
|
||||
/* These include files are added by the preprocessor */
|
||||
#include <ecpglib.h>
|
||||
#include <ecpgerrno.h>
|
||||
#include <sqlca.h>
|
||||
/* Needed for informix compatibility */
|
||||
#include <ecpg_informix.h>
|
||||
/* End of automatic include section */
|
||||
#define ECPGdebug(X,Y) ECPGdebug((X)+100,(Y))
|
||||
|
||||
#line 1 "describe.pgc"
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
|
||||
#line 1 "regression.h"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#line 4 "describe.pgc"
|
||||
|
||||
|
||||
#line 1 "sqlda.h"
|
||||
#ifndef ECPG_SQLDA_H
|
||||
#define ECPG_SQLDA_H
|
||||
|
||||
#ifdef _ECPG_INFORMIX_H
|
||||
|
||||
#include "sqlda-compat.h"
|
||||
typedef struct sqlvar_compat sqlvar_t;
|
||||
typedef struct sqlda_compat sqlda_t;
|
||||
|
||||
#else
|
||||
|
||||
#include "sqlda-native.h"
|
||||
typedef struct sqlvar_struct sqlvar_t;
|
||||
typedef struct sqlda_struct sqlda_t;
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* ECPG_SQLDA_H */
|
||||
|
||||
#line 5 "describe.pgc"
|
||||
|
||||
|
||||
/* exec sql whenever sqlerror stop ; */
|
||||
#line 7 "describe.pgc"
|
||||
|
||||
|
||||
sqlda_t *sqlda1, *sqlda2, *sqlda3;
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
/* exec sql begin declare section */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#line 15 "describe.pgc"
|
||||
char * stmt1 = "SELECT id, t FROM descr_t1" ;
|
||||
|
||||
#line 16 "describe.pgc"
|
||||
char * stmt2 = "SELECT id, t FROM descr_t1 WHERE id = -1" ;
|
||||
|
||||
#line 17 "describe.pgc"
|
||||
int i , count1 , count2 ;
|
||||
|
||||
#line 18 "describe.pgc"
|
||||
char field_name1 [ 30 ] = "not set" ;
|
||||
|
||||
#line 19 "describe.pgc"
|
||||
char field_name2 [ 30 ] = "not set" ;
|
||||
/* exec sql end declare section */
|
||||
#line 20 "describe.pgc"
|
||||
|
||||
|
||||
char msg[128];
|
||||
|
||||
ECPGdebug(1, stderr);
|
||||
|
||||
strcpy(msg, "connect");
|
||||
{ ECPGconnect(__LINE__, 1, "regress1" , NULL, NULL , NULL, 0);
|
||||
#line 27 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 27 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "set");
|
||||
{ ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "set datestyle to iso", ECPGt_EOIT, ECPGt_EORT);
|
||||
#line 30 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 30 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "create");
|
||||
{ ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "create table descr_t1 ( id serial primary key , t text )", ECPGt_EOIT, ECPGt_EORT);
|
||||
#line 33 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 33 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "insert");
|
||||
{ ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "insert into descr_t1 ( id , t ) values ( default , 'a' )", ECPGt_EOIT, ECPGt_EORT);
|
||||
#line 36 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 36 "describe.pgc"
|
||||
|
||||
{ ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "insert into descr_t1 ( id , t ) values ( default , 'b' )", ECPGt_EOIT, ECPGt_EORT);
|
||||
#line 37 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 37 "describe.pgc"
|
||||
|
||||
{ ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "insert into descr_t1 ( id , t ) values ( default , 'c' )", ECPGt_EOIT, ECPGt_EORT);
|
||||
#line 38 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 38 "describe.pgc"
|
||||
|
||||
{ ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "insert into descr_t1 ( id , t ) values ( default , 'd' )", ECPGt_EOIT, ECPGt_EORT);
|
||||
#line 39 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 39 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "commit");
|
||||
{ ECPGtrans(__LINE__, NULL, "commit");
|
||||
#line 42 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 42 "describe.pgc"
|
||||
|
||||
|
||||
/*
|
||||
* Test DESCRIBE with a query producing tuples.
|
||||
* DESCRIPTOR and SQL DESCRIPTOR are NOT the same in
|
||||
* Informix-compat mode.
|
||||
*/
|
||||
|
||||
strcpy(msg, "allocate");
|
||||
ECPGallocate_desc(__LINE__, "desc1");
|
||||
#line 51 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 51 "describe.pgc"
|
||||
|
||||
ECPGallocate_desc(__LINE__, "desc2");
|
||||
#line 52 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 52 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "prepare");
|
||||
{ ECPGprepare(__LINE__, NULL, 0, "st_id1", stmt1);
|
||||
#line 55 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 55 "describe.pgc"
|
||||
|
||||
|
||||
sqlda1 = sqlda2 = sqlda3 = NULL;
|
||||
|
||||
strcpy(msg, "describe");
|
||||
{ ECPGdescribe(__LINE__, 1, 0, NULL, "st_id1",
|
||||
ECPGt_descriptor, "desc1", 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 60 "describe.pgc"
|
||||
|
||||
{ ECPGdescribe(__LINE__, 1, 0, NULL, "st_id1",
|
||||
ECPGt_descriptor, "desc2", 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 61 "describe.pgc"
|
||||
|
||||
|
||||
{ ECPGdescribe(__LINE__, 1, 0, NULL, "st_id1",
|
||||
ECPGt_sqlda, &sqlda1, 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 63 "describe.pgc"
|
||||
|
||||
{ ECPGdescribe(__LINE__, 1, 0, NULL, "st_id1",
|
||||
ECPGt_sqlda, &sqlda2, 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 64 "describe.pgc"
|
||||
|
||||
{ ECPGdescribe(__LINE__, 1, 0, NULL, "st_id1",
|
||||
ECPGt_sqlda, &sqlda3, 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 65 "describe.pgc"
|
||||
|
||||
|
||||
if (sqlda1 == NULL)
|
||||
{
|
||||
printf("sqlda1 NULL\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (sqlda2 == NULL)
|
||||
{
|
||||
printf("sqlda2 NULL\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (sqlda3 == NULL)
|
||||
{
|
||||
printf("sqlda3 NULL\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
strcpy(msg, "get descriptor");
|
||||
{ ECPGget_desc_header(__LINE__, "desc1", &(count1));
|
||||
|
||||
#line 86 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 86 "describe.pgc"
|
||||
|
||||
{ ECPGget_desc_header(__LINE__, "desc1", &(count2));
|
||||
|
||||
#line 87 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 87 "describe.pgc"
|
||||
|
||||
|
||||
if (count1 != count2)
|
||||
{
|
||||
printf("count1 (%d) != count2 (%d)\n", count1, count2);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (count1 != sqlda1->sqld)
|
||||
{
|
||||
printf("count1 (%d) != sqlda1->sqld (%d)\n", count1, sqlda1->sqld);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (count1 != sqlda2->sqld)
|
||||
{
|
||||
printf("count1 (%d) != sqlda2->sqld (%d)\n", count1, sqlda2->sqld);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (count1 != sqlda3->sqld)
|
||||
{
|
||||
printf("count1 (%d) != sqlda3->sqld (%d)\n", count1, sqlda3->sqld);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
for (i = 1; i <= count1; i++)
|
||||
{
|
||||
{ ECPGget_desc(__LINE__, "desc1", i,ECPGd_name,
|
||||
ECPGt_char,(field_name1),(long)30,(long)1,(30)*sizeof(char), ECPGd_EODT);
|
||||
|
||||
#line 115 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 115 "describe.pgc"
|
||||
|
||||
{ ECPGget_desc(__LINE__, "desc2", i,ECPGd_name,
|
||||
ECPGt_char,(field_name2),(long)30,(long)1,(30)*sizeof(char), ECPGd_EODT);
|
||||
|
||||
#line 116 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 116 "describe.pgc"
|
||||
|
||||
printf("%d\n\tfield_name1 '%s'\n\tfield_name2 '%s'\n\t"
|
||||
"sqlda1 '%s'\n\tsqlda2 '%s'\n\tsqlda3 '%s'\n",
|
||||
i, field_name1, field_name2,
|
||||
sqlda1->sqlvar[i-1].sqlname,
|
||||
sqlda2->sqlvar[i-1].sqlname,
|
||||
sqlda3->sqlvar[i-1].sqlname);
|
||||
}
|
||||
|
||||
strcpy(msg, "deallocate");
|
||||
ECPGdeallocate_desc(__LINE__, "desc1");
|
||||
#line 126 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 126 "describe.pgc"
|
||||
|
||||
ECPGdeallocate_desc(__LINE__, "desc2");
|
||||
#line 127 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 127 "describe.pgc"
|
||||
|
||||
free(sqlda1);
|
||||
free(sqlda2);
|
||||
free(sqlda3);
|
||||
|
||||
{ ECPGdeallocate(__LINE__, 1, NULL, "st_id1");
|
||||
#line 132 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 132 "describe.pgc"
|
||||
|
||||
|
||||
/* Test DESCRIBE with a query not producing tuples */
|
||||
|
||||
strcpy(msg, "allocate");
|
||||
ECPGallocate_desc(__LINE__, "desc1");
|
||||
#line 137 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 137 "describe.pgc"
|
||||
|
||||
ECPGallocate_desc(__LINE__, "desc2");
|
||||
#line 138 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 138 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "prepare");
|
||||
{ ECPGprepare(__LINE__, NULL, 0, "st_id2", stmt2);
|
||||
#line 141 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 141 "describe.pgc"
|
||||
|
||||
|
||||
sqlda1 = sqlda2 = sqlda3 = NULL;
|
||||
|
||||
strcpy(msg, "describe");
|
||||
{ ECPGdescribe(__LINE__, 1, 0, NULL, "st_id2",
|
||||
ECPGt_descriptor, "desc1", 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 146 "describe.pgc"
|
||||
|
||||
{ ECPGdescribe(__LINE__, 1, 0, NULL, "st_id2",
|
||||
ECPGt_descriptor, "desc2", 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 147 "describe.pgc"
|
||||
|
||||
|
||||
{ ECPGdescribe(__LINE__, 1, 0, NULL, "st_id2",
|
||||
ECPGt_sqlda, &sqlda1, 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 149 "describe.pgc"
|
||||
|
||||
{ ECPGdescribe(__LINE__, 1, 0, NULL, "st_id2",
|
||||
ECPGt_sqlda, &sqlda2, 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 150 "describe.pgc"
|
||||
|
||||
{ ECPGdescribe(__LINE__, 1, 0, NULL, "st_id2",
|
||||
ECPGt_sqlda, &sqlda3, 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 151 "describe.pgc"
|
||||
|
||||
|
||||
if (sqlda1 == NULL || sqlda1 == NULL || sqlda2 == NULL)
|
||||
exit(1);
|
||||
|
||||
strcpy(msg, "get descriptor");
|
||||
{ ECPGget_desc_header(__LINE__, "desc1", &(count1));
|
||||
|
||||
#line 157 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 157 "describe.pgc"
|
||||
|
||||
{ ECPGget_desc_header(__LINE__, "desc1", &(count2));
|
||||
|
||||
#line 158 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 158 "describe.pgc"
|
||||
|
||||
|
||||
if (!( count1 == count2 &&
|
||||
count1 == sqlda1->sqld &&
|
||||
count1 == sqlda2->sqld &&
|
||||
count1 == sqlda3->sqld))
|
||||
exit(1);
|
||||
|
||||
for (i = 1; i <= count1; i++)
|
||||
{
|
||||
{ ECPGget_desc(__LINE__, "desc1", i,ECPGd_name,
|
||||
ECPGt_char,(field_name1),(long)30,(long)1,(30)*sizeof(char), ECPGd_EODT);
|
||||
|
||||
#line 168 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 168 "describe.pgc"
|
||||
|
||||
{ ECPGget_desc(__LINE__, "desc2", i,ECPGd_name,
|
||||
ECPGt_char,(field_name2),(long)30,(long)1,(30)*sizeof(char), ECPGd_EODT);
|
||||
|
||||
#line 169 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 169 "describe.pgc"
|
||||
|
||||
printf("%d\n\tfield_name1 '%s'\n\tfield_name2 '%s'\n\t"
|
||||
"sqlda1 '%s'\n\tsqlda2 '%s'\n\tsqlda3 '%s'\n",
|
||||
i, field_name1, field_name2,
|
||||
sqlda1->sqlvar[i-1].sqlname,
|
||||
sqlda2->sqlvar[i-1].sqlname,
|
||||
sqlda3->sqlvar[i-1].sqlname);
|
||||
}
|
||||
|
||||
strcpy(msg, "deallocate");
|
||||
ECPGdeallocate_desc(__LINE__, "desc1");
|
||||
#line 179 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 179 "describe.pgc"
|
||||
|
||||
ECPGdeallocate_desc(__LINE__, "desc2");
|
||||
#line 180 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 180 "describe.pgc"
|
||||
|
||||
free(sqlda1);
|
||||
free(sqlda2);
|
||||
free(sqlda3);
|
||||
|
||||
{ ECPGdeallocate(__LINE__, 1, NULL, "st_id2");
|
||||
#line 185 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 185 "describe.pgc"
|
||||
|
||||
|
||||
/* End test */
|
||||
|
||||
strcpy(msg, "drop");
|
||||
{ ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "drop table descr_t1", ECPGt_EOIT, ECPGt_EORT);
|
||||
#line 190 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 190 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "commit");
|
||||
{ ECPGtrans(__LINE__, NULL, "commit");
|
||||
#line 193 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 193 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "disconnect");
|
||||
{ ECPGdisconnect(__LINE__, "CURRENT");
|
||||
#line 196 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 196 "describe.pgc"
|
||||
|
||||
|
||||
return (0);
|
||||
}
|
@ -0,0 +1,112 @@
|
||||
[NO_PID]: ECPGdebug: set to 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGconnect: opening database regress1 on <DEFAULT> port <DEFAULT>
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 30: query: set datestyle to iso; with 0 parameter(s) on connection regress1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 30: using PQexec
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 30: OK: SET
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 33: query: create table descr_t1 ( id serial primary key , t text ); with 0 parameter(s) on connection regress1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 33: using PQexec
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 33: OK: CREATE TABLE
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 36: query: insert into descr_t1 ( id , t ) values ( default , 'a' ); with 0 parameter(s) on connection regress1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 36: using PQexec
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 36: OK: INSERT 0 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 37: query: insert into descr_t1 ( id , t ) values ( default , 'b' ); with 0 parameter(s) on connection regress1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 37: using PQexec
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 37: OK: INSERT 0 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 38: query: insert into descr_t1 ( id , t ) values ( default , 'c' ); with 0 parameter(s) on connection regress1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 38: using PQexec
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 38: OK: INSERT 0 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 39: query: insert into descr_t1 ( id , t ) values ( default , 'd' ); with 0 parameter(s) on connection regress1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 39: using PQexec
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 39: OK: INSERT 0 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGtrans on line 42: action "commit"; connection "regress1"
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGprepare on line 55: name st_id1; query: "SELECT id, t FROM descr_t1"
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_build_compat_sqlda on line 63 sqld = 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_build_compat_sqlda on line 64 sqld = 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_build_compat_sqlda on line 65 sqld = 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc_header: found 2 attributes
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc_header: found 2 attributes
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = id
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = id
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = t
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = t
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGdeallocate on line 132: name st_id1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGprepare on line 141: name st_id2; query: "SELECT id, t FROM descr_t1 WHERE id = -1"
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_build_compat_sqlda on line 149 sqld = 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_build_compat_sqlda on line 150 sqld = 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_build_compat_sqlda on line 151 sqld = 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc_header: found 2 attributes
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc_header: found 2 attributes
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = id
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = id
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = t
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = t
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGdeallocate on line 185: name st_id2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 190: query: drop table descr_t1; with 0 parameter(s) on connection regress1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 190: using PQexec
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 190: OK: DROP TABLE
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGtrans on line 193: action "commit"; connection "regress1"
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_finish: connection regress1 closed
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
@ -0,0 +1,24 @@
|
||||
1
|
||||
field_name1 'id'
|
||||
field_name2 'id'
|
||||
sqlda1 'id'
|
||||
sqlda2 'id'
|
||||
sqlda3 'id'
|
||||
2
|
||||
field_name1 't'
|
||||
field_name2 't'
|
||||
sqlda1 't'
|
||||
sqlda2 't'
|
||||
sqlda3 't'
|
||||
1
|
||||
field_name1 'id'
|
||||
field_name2 'id'
|
||||
sqlda1 'id'
|
||||
sqlda2 'id'
|
||||
sqlda3 'id'
|
||||
2
|
||||
field_name1 't'
|
||||
field_name2 't'
|
||||
sqlda1 't'
|
||||
sqlda2 't'
|
||||
sqlda3 't'
|
481
src/interfaces/ecpg/test/expected/preproc-describe.c
Normal file
481
src/interfaces/ecpg/test/expected/preproc-describe.c
Normal file
@ -0,0 +1,481 @@
|
||||
/* 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 "describe.pgc"
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
|
||||
#line 1 "regression.h"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#line 4 "describe.pgc"
|
||||
|
||||
|
||||
/* exec sql whenever sqlerror stop ; */
|
||||
#line 6 "describe.pgc"
|
||||
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
/* exec sql begin declare section */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#line 12 "describe.pgc"
|
||||
char * stmt1 = "SELECT id, t FROM t1" ;
|
||||
|
||||
#line 13 "describe.pgc"
|
||||
char * stmt2 = "SELECT id, t FROM t1 WHERE id = -1" ;
|
||||
|
||||
#line 14 "describe.pgc"
|
||||
int i , count1 , count2 , count3 , count4 ;
|
||||
|
||||
#line 15 "describe.pgc"
|
||||
char field_name1 [ 30 ] = "not set" ;
|
||||
|
||||
#line 16 "describe.pgc"
|
||||
char field_name2 [ 30 ] = "not set" ;
|
||||
|
||||
#line 17 "describe.pgc"
|
||||
char field_name3 [ 30 ] = "not set" ;
|
||||
|
||||
#line 18 "describe.pgc"
|
||||
char field_name4 [ 30 ] = "not set" ;
|
||||
/* exec sql end declare section */
|
||||
#line 19 "describe.pgc"
|
||||
|
||||
|
||||
char msg[128];
|
||||
|
||||
ECPGdebug(1, stderr);
|
||||
|
||||
strcpy(msg, "connect");
|
||||
{ ECPGconnect(__LINE__, 0, "regress1" , NULL, NULL , NULL, 0);
|
||||
#line 26 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 26 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "set");
|
||||
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "set datestyle to iso", ECPGt_EOIT, ECPGt_EORT);
|
||||
#line 29 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 29 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "create");
|
||||
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table t1 ( id serial primary key , t text )", ECPGt_EOIT, ECPGt_EORT);
|
||||
#line 32 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 32 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "insert");
|
||||
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into t1 ( id , t ) values ( default , 'a' )", ECPGt_EOIT, ECPGt_EORT);
|
||||
#line 35 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 35 "describe.pgc"
|
||||
|
||||
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into t1 ( id , t ) values ( default , 'b' )", ECPGt_EOIT, ECPGt_EORT);
|
||||
#line 36 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 36 "describe.pgc"
|
||||
|
||||
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into t1 ( id , t ) values ( default , 'c' )", ECPGt_EOIT, ECPGt_EORT);
|
||||
#line 37 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 37 "describe.pgc"
|
||||
|
||||
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into t1 ( id , t ) values ( default , 'd' )", ECPGt_EOIT, ECPGt_EORT);
|
||||
#line 38 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 38 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "commit");
|
||||
{ ECPGtrans(__LINE__, NULL, "commit");
|
||||
#line 41 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 41 "describe.pgc"
|
||||
|
||||
|
||||
/*
|
||||
* Test DESCRIBE with a query producing tuples.
|
||||
* DESCRIPTOR and SQL DESCRIPTOR are the same in native mode.
|
||||
*/
|
||||
|
||||
strcpy(msg, "allocate");
|
||||
ECPGallocate_desc(__LINE__, "desc1");
|
||||
#line 49 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 49 "describe.pgc"
|
||||
|
||||
ECPGallocate_desc(__LINE__, "desc2");
|
||||
#line 50 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 50 "describe.pgc"
|
||||
|
||||
ECPGallocate_desc(__LINE__, "desc3");
|
||||
#line 51 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 51 "describe.pgc"
|
||||
|
||||
ECPGallocate_desc(__LINE__, "desc4");
|
||||
#line 52 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 52 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "prepare");
|
||||
{ ECPGprepare(__LINE__, NULL, 0, "st_id1", stmt1);
|
||||
#line 55 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 55 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "describe");
|
||||
{ ECPGdescribe(__LINE__, 0, NULL, "st_id1",
|
||||
ECPGt_descriptor, "desc1", 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 58 "describe.pgc"
|
||||
|
||||
{ ECPGdescribe(__LINE__, 0, NULL, "st_id1",
|
||||
ECPGt_descriptor, "desc2", 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 59 "describe.pgc"
|
||||
|
||||
{ ECPGdescribe(__LINE__, 0, NULL, "st_id1",
|
||||
ECPGt_descriptor, "desc3", 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 60 "describe.pgc"
|
||||
|
||||
{ ECPGdescribe(__LINE__, 0, NULL, "st_id1",
|
||||
ECPGt_descriptor, "desc4", 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 61 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "get descriptor");
|
||||
{ ECPGget_desc_header(__LINE__, "desc1", &(count1));
|
||||
|
||||
#line 64 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 64 "describe.pgc"
|
||||
|
||||
{ ECPGget_desc_header(__LINE__, "desc2", &(count2));
|
||||
|
||||
#line 65 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 65 "describe.pgc"
|
||||
|
||||
{ ECPGget_desc_header(__LINE__, "desc3", &(count3));
|
||||
|
||||
#line 66 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 66 "describe.pgc"
|
||||
|
||||
{ ECPGget_desc_header(__LINE__, "desc4", &(count4));
|
||||
|
||||
#line 67 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 67 "describe.pgc"
|
||||
|
||||
|
||||
if (!(count1 == count2 && count1 == count3 && count1 == count4))
|
||||
exit(1);
|
||||
|
||||
for (i = 1; i <= count1; i++)
|
||||
{
|
||||
{ ECPGget_desc(__LINE__, "desc1", i,ECPGd_name,
|
||||
ECPGt_char,(field_name1),(long)30,(long)1,(30)*sizeof(char), ECPGd_EODT);
|
||||
|
||||
#line 74 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 74 "describe.pgc"
|
||||
|
||||
{ ECPGget_desc(__LINE__, "desc2", i,ECPGd_name,
|
||||
ECPGt_char,(field_name2),(long)30,(long)1,(30)*sizeof(char), ECPGd_EODT);
|
||||
|
||||
#line 75 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 75 "describe.pgc"
|
||||
|
||||
{ ECPGget_desc(__LINE__, "desc3", i,ECPGd_name,
|
||||
ECPGt_char,(field_name3),(long)30,(long)1,(30)*sizeof(char), ECPGd_EODT);
|
||||
|
||||
#line 76 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 76 "describe.pgc"
|
||||
|
||||
{ ECPGget_desc(__LINE__, "desc4", i,ECPGd_name,
|
||||
ECPGt_char,(field_name4),(long)30,(long)1,(30)*sizeof(char), ECPGd_EODT);
|
||||
|
||||
#line 77 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 77 "describe.pgc"
|
||||
|
||||
printf("field_name 1 '%s' 2 '%s' 3 '%s' 4 '%s'\n",
|
||||
field_name1, field_name2, field_name3, field_name4);
|
||||
}
|
||||
|
||||
strcpy(msg, "deallocate");
|
||||
ECPGdeallocate_desc(__LINE__, "desc1");
|
||||
#line 83 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 83 "describe.pgc"
|
||||
|
||||
ECPGdeallocate_desc(__LINE__, "desc2");
|
||||
#line 84 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 84 "describe.pgc"
|
||||
|
||||
ECPGdeallocate_desc(__LINE__, "desc3");
|
||||
#line 85 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 85 "describe.pgc"
|
||||
|
||||
ECPGdeallocate_desc(__LINE__, "desc4");
|
||||
#line 86 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 86 "describe.pgc"
|
||||
|
||||
|
||||
{ ECPGdeallocate(__LINE__, 0, NULL, "st_id1");
|
||||
#line 88 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 88 "describe.pgc"
|
||||
|
||||
|
||||
/* Test DESCRIBE with a query not producing tuples */
|
||||
|
||||
strcpy(msg, "allocate");
|
||||
ECPGallocate_desc(__LINE__, "desc1");
|
||||
#line 93 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 93 "describe.pgc"
|
||||
|
||||
ECPGallocate_desc(__LINE__, "desc2");
|
||||
#line 94 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 94 "describe.pgc"
|
||||
|
||||
ECPGallocate_desc(__LINE__, "desc3");
|
||||
#line 95 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 95 "describe.pgc"
|
||||
|
||||
ECPGallocate_desc(__LINE__, "desc4");
|
||||
#line 96 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 96 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "prepare");
|
||||
{ ECPGprepare(__LINE__, NULL, 0, "st_id2", stmt2);
|
||||
#line 99 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 99 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "describe");
|
||||
{ ECPGdescribe(__LINE__, 0, NULL, "st_id2",
|
||||
ECPGt_descriptor, "desc1", 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 102 "describe.pgc"
|
||||
|
||||
{ ECPGdescribe(__LINE__, 0, NULL, "st_id2",
|
||||
ECPGt_descriptor, "desc2", 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 103 "describe.pgc"
|
||||
|
||||
{ ECPGdescribe(__LINE__, 0, NULL, "st_id2",
|
||||
ECPGt_descriptor, "desc3", 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 104 "describe.pgc"
|
||||
|
||||
{ ECPGdescribe(__LINE__, 0, NULL, "st_id2",
|
||||
ECPGt_descriptor, "desc4", 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 105 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "get descriptor");
|
||||
{ ECPGget_desc_header(__LINE__, "desc1", &(count1));
|
||||
|
||||
#line 108 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 108 "describe.pgc"
|
||||
|
||||
{ ECPGget_desc_header(__LINE__, "desc2", &(count2));
|
||||
|
||||
#line 109 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 109 "describe.pgc"
|
||||
|
||||
{ ECPGget_desc_header(__LINE__, "desc3", &(count3));
|
||||
|
||||
#line 110 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 110 "describe.pgc"
|
||||
|
||||
{ ECPGget_desc_header(__LINE__, "desc4", &(count4));
|
||||
|
||||
#line 111 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 111 "describe.pgc"
|
||||
|
||||
|
||||
if (!(count1 == count2 && count1 == count3 && count1 == count4))
|
||||
exit(1);
|
||||
|
||||
for (i = 1; i <= count1; i++)
|
||||
{
|
||||
{ ECPGget_desc(__LINE__, "desc1", i,ECPGd_name,
|
||||
ECPGt_char,(field_name1),(long)30,(long)1,(30)*sizeof(char), ECPGd_EODT);
|
||||
|
||||
#line 118 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 118 "describe.pgc"
|
||||
|
||||
{ ECPGget_desc(__LINE__, "desc2", i,ECPGd_name,
|
||||
ECPGt_char,(field_name2),(long)30,(long)1,(30)*sizeof(char), ECPGd_EODT);
|
||||
|
||||
#line 119 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 119 "describe.pgc"
|
||||
|
||||
{ ECPGget_desc(__LINE__, "desc3", i,ECPGd_name,
|
||||
ECPGt_char,(field_name3),(long)30,(long)1,(30)*sizeof(char), ECPGd_EODT);
|
||||
|
||||
#line 120 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 120 "describe.pgc"
|
||||
|
||||
{ ECPGget_desc(__LINE__, "desc4", i,ECPGd_name,
|
||||
ECPGt_char,(field_name4),(long)30,(long)1,(30)*sizeof(char), ECPGd_EODT);
|
||||
|
||||
#line 121 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 121 "describe.pgc"
|
||||
|
||||
printf("field_name 1 '%s' 2 '%s' 3 '%s' 4 '%s'\n",
|
||||
field_name1, field_name2, field_name3, field_name4);
|
||||
}
|
||||
|
||||
strcpy(msg, "deallocate");
|
||||
ECPGdeallocate_desc(__LINE__, "desc1");
|
||||
#line 127 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 127 "describe.pgc"
|
||||
|
||||
ECPGdeallocate_desc(__LINE__, "desc2");
|
||||
#line 128 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 128 "describe.pgc"
|
||||
|
||||
ECPGdeallocate_desc(__LINE__, "desc3");
|
||||
#line 129 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 129 "describe.pgc"
|
||||
|
||||
ECPGdeallocate_desc(__LINE__, "desc4");
|
||||
#line 130 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 130 "describe.pgc"
|
||||
|
||||
|
||||
{ ECPGdeallocate(__LINE__, 0, NULL, "st_id2");
|
||||
#line 132 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 132 "describe.pgc"
|
||||
|
||||
|
||||
|
||||
/* End test */
|
||||
|
||||
strcpy(msg, "drop");
|
||||
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table t1", ECPGt_EOIT, ECPGt_EORT);
|
||||
#line 138 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 138 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "commit");
|
||||
{ ECPGtrans(__LINE__, NULL, "commit");
|
||||
#line 141 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 141 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "disconnect");
|
||||
{ ECPGdisconnect(__LINE__, "CURRENT");
|
||||
#line 144 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 144 "describe.pgc"
|
||||
|
||||
|
||||
return (0);
|
||||
}
|
140
src/interfaces/ecpg/test/expected/preproc-describe.stderr
Normal file
140
src/interfaces/ecpg/test/expected/preproc-describe.stderr
Normal file
@ -0,0 +1,140 @@
|
||||
[NO_PID]: ECPGdebug: set to 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGconnect: opening database regress1 on <DEFAULT> port <DEFAULT>
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 29: query: set datestyle to iso; with 0 parameter(s) on connection regress1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 29: using PQexec
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 29: OK: SET
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 32: query: create table t1 ( id serial primary key , t text ); with 0 parameter(s) on connection regress1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 32: using PQexec
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 32: OK: CREATE TABLE
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 35: query: insert into t1 ( id , t ) values ( default , 'a' ); with 0 parameter(s) on connection regress1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 35: using PQexec
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 35: OK: INSERT 0 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 36: query: insert into t1 ( id , t ) values ( default , 'b' ); with 0 parameter(s) on connection regress1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 36: using PQexec
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 36: OK: INSERT 0 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 37: query: insert into t1 ( id , t ) values ( default , 'c' ); with 0 parameter(s) on connection regress1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 37: using PQexec
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 37: OK: INSERT 0 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 38: query: insert into t1 ( id , t ) values ( default , 'd' ); with 0 parameter(s) on connection regress1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 38: using PQexec
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 38: OK: INSERT 0 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGtrans on line 41: action "commit"; connection "regress1"
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGprepare on line 55: name st_id1; query: "SELECT id, t FROM t1"
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc_header: found 2 attributes
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc_header: found 2 attributes
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc_header: found 2 attributes
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc_header: found 2 attributes
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = id
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = id
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = id
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = id
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = t
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = t
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = t
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = t
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGdeallocate on line 88: name st_id1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGprepare on line 99: name st_id2; query: "SELECT id, t FROM t1 WHERE id = -1"
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc_header: found 2 attributes
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc_header: found 2 attributes
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc_header: found 2 attributes
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc_header: found 2 attributes
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = id
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = id
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = id
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = id
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = t
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = t
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = t
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = t
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGdeallocate on line 132: name st_id2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 138: query: drop table t1; with 0 parameter(s) on connection regress1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 138: using PQexec
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 138: OK: DROP TABLE
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGtrans on line 141: action "commit"; connection "regress1"
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_finish: connection regress1 closed
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
@ -0,0 +1,4 @@
|
||||
field_name 1 'id' 2 'id' 3 'id' 4 'id'
|
||||
field_name 1 't' 2 't' 3 't' 4 't'
|
||||
field_name 1 'id' 2 'id' 3 'id' 4 'id'
|
||||
field_name 1 't' 2 't' 3 't' 4 't'
|
465
src/interfaces/ecpg/test/expected/sql-describe.c
Normal file
465
src/interfaces/ecpg/test/expected/sql-describe.c
Normal file
@ -0,0 +1,465 @@
|
||||
/* 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 "describe.pgc"
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
|
||||
#line 1 "regression.h"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#line 4 "describe.pgc"
|
||||
|
||||
|
||||
#line 1 "sqlda.h"
|
||||
#ifndef ECPG_SQLDA_H
|
||||
#define ECPG_SQLDA_H
|
||||
|
||||
#ifdef _ECPG_INFORMIX_H
|
||||
|
||||
#include "sqlda-compat.h"
|
||||
typedef struct sqlvar_compat sqlvar_t;
|
||||
typedef struct sqlda_compat sqlda_t;
|
||||
|
||||
#else
|
||||
|
||||
#include "sqlda-native.h"
|
||||
typedef struct sqlvar_struct sqlvar_t;
|
||||
typedef struct sqlda_struct sqlda_t;
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* ECPG_SQLDA_H */
|
||||
|
||||
#line 5 "describe.pgc"
|
||||
|
||||
|
||||
/* exec sql whenever sqlerror stop ; */
|
||||
#line 7 "describe.pgc"
|
||||
|
||||
|
||||
sqlda_t *sqlda1, *sqlda2, *sqlda3;
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
/* exec sql begin declare section */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#line 15 "describe.pgc"
|
||||
char * stmt1 = "SELECT id, t FROM descr_t2" ;
|
||||
|
||||
#line 16 "describe.pgc"
|
||||
char * stmt2 = "SELECT id, t FROM descr_t2 WHERE id = -1" ;
|
||||
|
||||
#line 17 "describe.pgc"
|
||||
int i , count1 , count2 ;
|
||||
|
||||
#line 18 "describe.pgc"
|
||||
char field_name1 [ 30 ] = "not set" ;
|
||||
|
||||
#line 19 "describe.pgc"
|
||||
char field_name2 [ 30 ] = "not set" ;
|
||||
/* exec sql end declare section */
|
||||
#line 20 "describe.pgc"
|
||||
|
||||
|
||||
char msg[128];
|
||||
|
||||
ECPGdebug(1, stderr);
|
||||
|
||||
strcpy(msg, "connect");
|
||||
{ ECPGconnect(__LINE__, 0, "regress1" , NULL, NULL , NULL, 0);
|
||||
#line 27 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 27 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "set");
|
||||
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "set datestyle to iso", ECPGt_EOIT, ECPGt_EORT);
|
||||
#line 30 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 30 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "create");
|
||||
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table descr_t2 ( id serial primary key , t text )", ECPGt_EOIT, ECPGt_EORT);
|
||||
#line 33 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 33 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "insert");
|
||||
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into descr_t2 ( id , t ) values ( default , 'a' )", ECPGt_EOIT, ECPGt_EORT);
|
||||
#line 36 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 36 "describe.pgc"
|
||||
|
||||
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into descr_t2 ( id , t ) values ( default , 'b' )", ECPGt_EOIT, ECPGt_EORT);
|
||||
#line 37 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 37 "describe.pgc"
|
||||
|
||||
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into descr_t2 ( id , t ) values ( default , 'c' )", ECPGt_EOIT, ECPGt_EORT);
|
||||
#line 38 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 38 "describe.pgc"
|
||||
|
||||
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into descr_t2 ( id , t ) values ( default , 'd' )", ECPGt_EOIT, ECPGt_EORT);
|
||||
#line 39 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 39 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "commit");
|
||||
{ ECPGtrans(__LINE__, NULL, "commit");
|
||||
#line 42 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 42 "describe.pgc"
|
||||
|
||||
|
||||
/*
|
||||
* Test DESCRIBE with a query producing tuples.
|
||||
* DESCRIPTOR and SQL DESCRIPTOR are NOT the same in
|
||||
* Informix-compat mode.
|
||||
*/
|
||||
|
||||
strcpy(msg, "allocate");
|
||||
ECPGallocate_desc(__LINE__, "desc1");
|
||||
#line 51 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 51 "describe.pgc"
|
||||
|
||||
ECPGallocate_desc(__LINE__, "desc2");
|
||||
#line 52 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 52 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "prepare");
|
||||
{ ECPGprepare(__LINE__, NULL, 0, "st_id1", stmt1);
|
||||
#line 55 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 55 "describe.pgc"
|
||||
|
||||
|
||||
sqlda1 = sqlda2 = sqlda3 = NULL;
|
||||
|
||||
strcpy(msg, "describe");
|
||||
{ ECPGdescribe(__LINE__, 0, 0, NULL, "st_id1",
|
||||
ECPGt_descriptor, "desc1", 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 60 "describe.pgc"
|
||||
|
||||
{ ECPGdescribe(__LINE__, 0, 0, NULL, "st_id1",
|
||||
ECPGt_descriptor, "desc2", 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 61 "describe.pgc"
|
||||
|
||||
|
||||
{ ECPGdescribe(__LINE__, 0, 0, NULL, "st_id1",
|
||||
ECPGt_sqlda, &sqlda1, 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 63 "describe.pgc"
|
||||
|
||||
{ ECPGdescribe(__LINE__, 0, 0, NULL, "st_id1",
|
||||
ECPGt_sqlda, &sqlda2, 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 64 "describe.pgc"
|
||||
|
||||
{ ECPGdescribe(__LINE__, 0, 0, NULL, "st_id1",
|
||||
ECPGt_sqlda, &sqlda3, 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 65 "describe.pgc"
|
||||
|
||||
|
||||
if (sqlda1 == NULL)
|
||||
{
|
||||
printf("sqlda1 NULL\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (sqlda2 == NULL)
|
||||
{
|
||||
printf("sqlda2 NULL\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (sqlda3 == NULL)
|
||||
{
|
||||
printf("sqlda3 NULL\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
strcpy(msg, "get descriptor");
|
||||
{ ECPGget_desc_header(__LINE__, "desc1", &(count1));
|
||||
|
||||
#line 86 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 86 "describe.pgc"
|
||||
|
||||
{ ECPGget_desc_header(__LINE__, "desc1", &(count2));
|
||||
|
||||
#line 87 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 87 "describe.pgc"
|
||||
|
||||
|
||||
if (count1 != count2)
|
||||
{
|
||||
printf("count1 (%d) != count2 (%d)\n", count1, count2);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (count1 != sqlda1->sqld)
|
||||
{
|
||||
printf("count1 (%d) != sqlda1->sqld (%d)\n", count1, sqlda1->sqld);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (count1 != sqlda2->sqld)
|
||||
{
|
||||
printf("count1 (%d) != sqlda2->sqld (%d)\n", count1, sqlda2->sqld);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (count1 != sqlda3->sqld)
|
||||
{
|
||||
printf("count1 (%d) != sqlda3->sqld (%d)\n", count1, sqlda3->sqld);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
for (i = 1; i <= count1; i++)
|
||||
{
|
||||
{ ECPGget_desc(__LINE__, "desc1", i,ECPGd_name,
|
||||
ECPGt_char,(field_name1),(long)30,(long)1,(30)*sizeof(char), ECPGd_EODT);
|
||||
|
||||
#line 115 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 115 "describe.pgc"
|
||||
|
||||
{ ECPGget_desc(__LINE__, "desc2", i,ECPGd_name,
|
||||
ECPGt_char,(field_name2),(long)30,(long)1,(30)*sizeof(char), ECPGd_EODT);
|
||||
|
||||
#line 116 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 116 "describe.pgc"
|
||||
|
||||
printf("%d\n\tfield_name1 '%s'\n\tfield_name2 '%s'\n\t"
|
||||
"sqlda1 '%s'\n\tsqlda2 '%s'\n\tsqlda3 '%s'\n",
|
||||
i, field_name1, field_name2,
|
||||
sqlda1->sqlvar[i-1].sqlname.data,
|
||||
sqlda2->sqlvar[i-1].sqlname.data,
|
||||
sqlda3->sqlvar[i-1].sqlname.data);
|
||||
}
|
||||
|
||||
strcpy(msg, "deallocate");
|
||||
ECPGdeallocate_desc(__LINE__, "desc1");
|
||||
#line 126 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 126 "describe.pgc"
|
||||
|
||||
ECPGdeallocate_desc(__LINE__, "desc2");
|
||||
#line 127 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 127 "describe.pgc"
|
||||
|
||||
free(sqlda1);
|
||||
free(sqlda2);
|
||||
free(sqlda3);
|
||||
|
||||
{ ECPGdeallocate(__LINE__, 0, NULL, "st_id1");
|
||||
#line 132 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 132 "describe.pgc"
|
||||
|
||||
|
||||
/* Test DESCRIBE with a query not producing tuples */
|
||||
|
||||
strcpy(msg, "allocate");
|
||||
ECPGallocate_desc(__LINE__, "desc1");
|
||||
#line 137 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 137 "describe.pgc"
|
||||
|
||||
ECPGallocate_desc(__LINE__, "desc2");
|
||||
#line 138 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 138 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "prepare");
|
||||
{ ECPGprepare(__LINE__, NULL, 0, "st_id2", stmt2);
|
||||
#line 141 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 141 "describe.pgc"
|
||||
|
||||
|
||||
sqlda1 = sqlda2 = sqlda3 = NULL;
|
||||
|
||||
strcpy(msg, "describe");
|
||||
{ ECPGdescribe(__LINE__, 0, 0, NULL, "st_id2",
|
||||
ECPGt_descriptor, "desc1", 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 146 "describe.pgc"
|
||||
|
||||
{ ECPGdescribe(__LINE__, 0, 0, NULL, "st_id2",
|
||||
ECPGt_descriptor, "desc2", 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 147 "describe.pgc"
|
||||
|
||||
|
||||
{ ECPGdescribe(__LINE__, 0, 0, NULL, "st_id2",
|
||||
ECPGt_sqlda, &sqlda1, 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 149 "describe.pgc"
|
||||
|
||||
{ ECPGdescribe(__LINE__, 0, 0, NULL, "st_id2",
|
||||
ECPGt_sqlda, &sqlda2, 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 150 "describe.pgc"
|
||||
|
||||
{ ECPGdescribe(__LINE__, 0, 0, NULL, "st_id2",
|
||||
ECPGt_sqlda, &sqlda3, 0L, 0L, 0L,
|
||||
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
|
||||
#line 151 "describe.pgc"
|
||||
|
||||
|
||||
if (sqlda1 == NULL || sqlda1 == NULL || sqlda2 == NULL)
|
||||
exit(1);
|
||||
|
||||
strcpy(msg, "get descriptor");
|
||||
{ ECPGget_desc_header(__LINE__, "desc1", &(count1));
|
||||
|
||||
#line 157 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 157 "describe.pgc"
|
||||
|
||||
{ ECPGget_desc_header(__LINE__, "desc1", &(count2));
|
||||
|
||||
#line 158 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 158 "describe.pgc"
|
||||
|
||||
|
||||
if (!( count1 == count2 &&
|
||||
count1 == sqlda1->sqld &&
|
||||
count1 == sqlda2->sqld &&
|
||||
count1 == sqlda3->sqld))
|
||||
exit(1);
|
||||
|
||||
for (i = 1; i <= count1; i++)
|
||||
{
|
||||
{ ECPGget_desc(__LINE__, "desc1", i,ECPGd_name,
|
||||
ECPGt_char,(field_name1),(long)30,(long)1,(30)*sizeof(char), ECPGd_EODT);
|
||||
|
||||
#line 168 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 168 "describe.pgc"
|
||||
|
||||
{ ECPGget_desc(__LINE__, "desc2", i,ECPGd_name,
|
||||
ECPGt_char,(field_name2),(long)30,(long)1,(30)*sizeof(char), ECPGd_EODT);
|
||||
|
||||
#line 169 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 169 "describe.pgc"
|
||||
|
||||
printf("%d\n\tfield_name1 '%s'\n\tfield_name2 '%s'\n\t"
|
||||
"sqlda1 '%s'\n\tsqlda2 '%s'\n\tsqlda3 '%s'\n",
|
||||
i, field_name1, field_name2,
|
||||
sqlda1->sqlvar[i-1].sqlname.data,
|
||||
sqlda2->sqlvar[i-1].sqlname.data,
|
||||
sqlda3->sqlvar[i-1].sqlname.data);
|
||||
}
|
||||
|
||||
strcpy(msg, "deallocate");
|
||||
ECPGdeallocate_desc(__LINE__, "desc1");
|
||||
#line 179 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 179 "describe.pgc"
|
||||
|
||||
ECPGdeallocate_desc(__LINE__, "desc2");
|
||||
#line 180 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);
|
||||
#line 180 "describe.pgc"
|
||||
|
||||
free(sqlda1);
|
||||
free(sqlda2);
|
||||
free(sqlda3);
|
||||
|
||||
{ ECPGdeallocate(__LINE__, 0, NULL, "st_id2");
|
||||
#line 185 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 185 "describe.pgc"
|
||||
|
||||
|
||||
/* End test */
|
||||
|
||||
strcpy(msg, "drop");
|
||||
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table descr_t2", ECPGt_EOIT, ECPGt_EORT);
|
||||
#line 190 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 190 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "commit");
|
||||
{ ECPGtrans(__LINE__, NULL, "commit");
|
||||
#line 193 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 193 "describe.pgc"
|
||||
|
||||
|
||||
strcpy(msg, "disconnect");
|
||||
{ ECPGdisconnect(__LINE__, "CURRENT");
|
||||
#line 196 "describe.pgc"
|
||||
|
||||
if (sqlca.sqlcode < 0) exit (1);}
|
||||
#line 196 "describe.pgc"
|
||||
|
||||
|
||||
return (0);
|
||||
}
|
112
src/interfaces/ecpg/test/expected/sql-describe.stderr
Normal file
112
src/interfaces/ecpg/test/expected/sql-describe.stderr
Normal file
@ -0,0 +1,112 @@
|
||||
[NO_PID]: ECPGdebug: set to 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGconnect: opening database regress1 on <DEFAULT> port <DEFAULT>
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 30: query: set datestyle to iso; with 0 parameter(s) on connection regress1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 30: using PQexec
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 30: OK: SET
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 33: query: create table descr_t2 ( id serial primary key , t text ); with 0 parameter(s) on connection regress1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 33: using PQexec
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 33: OK: CREATE TABLE
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 36: query: insert into descr_t2 ( id , t ) values ( default , 'a' ); with 0 parameter(s) on connection regress1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 36: using PQexec
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 36: OK: INSERT 0 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 37: query: insert into descr_t2 ( id , t ) values ( default , 'b' ); with 0 parameter(s) on connection regress1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 37: using PQexec
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 37: OK: INSERT 0 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 38: query: insert into descr_t2 ( id , t ) values ( default , 'c' ); with 0 parameter(s) on connection regress1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 38: using PQexec
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 38: OK: INSERT 0 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 39: query: insert into descr_t2 ( id , t ) values ( default , 'd' ); with 0 parameter(s) on connection regress1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 39: using PQexec
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 39: OK: INSERT 0 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGtrans on line 42: action "commit"; connection "regress1"
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGprepare on line 55: name st_id1; query: "SELECT id, t FROM descr_t2"
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_build_native_sqlda on line 63 sqld = 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_build_native_sqlda on line 64 sqld = 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_build_native_sqlda on line 65 sqld = 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc_header: found 2 attributes
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc_header: found 2 attributes
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = id
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = id
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = t
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = t
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGdeallocate on line 132: name st_id1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGprepare on line 141: name st_id2; query: "SELECT id, t FROM descr_t2 WHERE id = -1"
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_build_native_sqlda on line 149 sqld = 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_build_native_sqlda on line 150 sqld = 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_build_native_sqlda on line 151 sqld = 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc_header: found 2 attributes
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc_header: found 2 attributes
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = id
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = id
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = t
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: reading items for tuple 2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGget_desc: NAME = t
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGdeallocate on line 185: name st_id2
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 190: query: drop table descr_t2; with 0 parameter(s) on connection regress1
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 190: using PQexec
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_execute on line 190: OK: DROP TABLE
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ECPGtrans on line 193: action "commit"; connection "regress1"
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: ecpg_finish: connection regress1 closed
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
24
src/interfaces/ecpg/test/expected/sql-describe.stdout
Normal file
24
src/interfaces/ecpg/test/expected/sql-describe.stdout
Normal file
@ -0,0 +1,24 @@
|
||||
1
|
||||
field_name1 'id'
|
||||
field_name2 'id'
|
||||
sqlda1 'id'
|
||||
sqlda2 'id'
|
||||
sqlda3 'id'
|
||||
2
|
||||
field_name1 't'
|
||||
field_name2 't'
|
||||
sqlda1 't'
|
||||
sqlda2 't'
|
||||
sqlda3 't'
|
||||
1
|
||||
field_name1 'id'
|
||||
field_name2 'id'
|
||||
sqlda1 'id'
|
||||
sqlda2 'id'
|
||||
sqlda3 'id'
|
||||
2
|
||||
field_name1 't'
|
||||
field_name2 't'
|
||||
sqlda1 't'
|
||||
sqlda2 't'
|
||||
sqlda3 't'
|
@ -9,6 +9,8 @@ TESTS = array array.c \
|
||||
copystdout copystdout.c \
|
||||
define define.c \
|
||||
desc desc.c \
|
||||
sqlda sqlda.c \
|
||||
describe describe.c \
|
||||
dyntest dyntest.c \
|
||||
dynalloc dynalloc.c \
|
||||
dynalloc2 dynalloc2.c \
|
||||
@ -20,7 +22,6 @@ TESTS = array array.c \
|
||||
parser parser.c \
|
||||
quote quote.c \
|
||||
show show.c \
|
||||
sqlda sqlda.c \
|
||||
insupd insupd.c
|
||||
|
||||
all: $(TESTS)
|
||||
|
199
src/interfaces/ecpg/test/sql/describe.pgc
Normal file
199
src/interfaces/ecpg/test/sql/describe.pgc
Normal file
@ -0,0 +1,199 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
exec sql include ../regression;
|
||||
exec sql include sqlda.h;
|
||||
|
||||
exec sql whenever sqlerror stop;
|
||||
|
||||
sqlda_t *sqlda1, *sqlda2, *sqlda3;
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
exec sql begin declare section;
|
||||
char *stmt1 = "SELECT id, t FROM descr_t2";
|
||||
char *stmt2 = "SELECT id, t FROM descr_t2 WHERE id = -1";
|
||||
int i, count1, count2;
|
||||
char field_name1[30] = "not set";
|
||||
char field_name2[30] = "not set";
|
||||
exec sql end declare section;
|
||||
|
||||
char msg[128];
|
||||
|
||||
ECPGdebug(1, stderr);
|
||||
|
||||
strcpy(msg, "connect");
|
||||
exec sql connect to REGRESSDB1;
|
||||
|
||||
strcpy(msg, "set");
|
||||
exec sql set datestyle to iso;
|
||||
|
||||
strcpy(msg, "create");
|
||||
exec sql create table descr_t2(id serial primary key, t text);
|
||||
|
||||
strcpy(msg, "insert");
|
||||
exec sql insert into descr_t2(id, t) values (default, 'a');
|
||||
exec sql insert into descr_t2(id, t) values (default, 'b');
|
||||
exec sql insert into descr_t2(id, t) values (default, 'c');
|
||||
exec sql insert into descr_t2(id, t) values (default, 'd');
|
||||
|
||||
strcpy(msg, "commit");
|
||||
exec sql commit;
|
||||
|
||||
/*
|
||||
* Test DESCRIBE with a query producing tuples.
|
||||
* DESCRIPTOR and SQL DESCRIPTOR are NOT the same in
|
||||
* Informix-compat mode.
|
||||
*/
|
||||
|
||||
strcpy(msg, "allocate");
|
||||
exec sql allocate descriptor desc1;
|
||||
exec sql allocate descriptor desc2;
|
||||
|
||||
strcpy(msg, "prepare");
|
||||
exec sql prepare st_id1 FROM :stmt1;
|
||||
|
||||
sqlda1 = sqlda2 = sqlda3 = NULL;
|
||||
|
||||
strcpy(msg, "describe");
|
||||
exec sql describe st_id1 into sql descriptor desc1;
|
||||
exec sql describe st_id1 using sql descriptor desc2;
|
||||
|
||||
exec sql describe st_id1 into descriptor sqlda1;
|
||||
exec sql describe st_id1 using descriptor sqlda2;
|
||||
exec sql describe st_id1 into sqlda3;
|
||||
|
||||
if (sqlda1 == NULL)
|
||||
{
|
||||
printf("sqlda1 NULL\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (sqlda2 == NULL)
|
||||
{
|
||||
printf("sqlda2 NULL\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (sqlda3 == NULL)
|
||||
{
|
||||
printf("sqlda3 NULL\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
strcpy(msg, "get descriptor");
|
||||
exec sql get descriptor desc1 :count1 = count;
|
||||
exec sql get descriptor desc1 :count2 = count;
|
||||
|
||||
if (count1 != count2)
|
||||
{
|
||||
printf("count1 (%d) != count2 (%d)\n", count1, count2);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (count1 != sqlda1->sqld)
|
||||
{
|
||||
printf("count1 (%d) != sqlda1->sqld (%d)\n", count1, sqlda1->sqld);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (count1 != sqlda2->sqld)
|
||||
{
|
||||
printf("count1 (%d) != sqlda2->sqld (%d)\n", count1, sqlda2->sqld);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (count1 != sqlda3->sqld)
|
||||
{
|
||||
printf("count1 (%d) != sqlda3->sqld (%d)\n", count1, sqlda3->sqld);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
for (i = 1; i <= count1; i++)
|
||||
{
|
||||
exec sql get descriptor desc1 value :i :field_name1 = name;
|
||||
exec sql get descriptor desc2 value :i :field_name2 = name;
|
||||
printf("%d\n\tfield_name1 '%s'\n\tfield_name2 '%s'\n\t"
|
||||
"sqlda1 '%s'\n\tsqlda2 '%s'\n\tsqlda3 '%s'\n",
|
||||
i, field_name1, field_name2,
|
||||
sqlda1->sqlvar[i-1].sqlname.data,
|
||||
sqlda2->sqlvar[i-1].sqlname.data,
|
||||
sqlda3->sqlvar[i-1].sqlname.data);
|
||||
}
|
||||
|
||||
strcpy(msg, "deallocate");
|
||||
exec sql deallocate descriptor desc1;
|
||||
exec sql deallocate descriptor desc2;
|
||||
free(sqlda1);
|
||||
free(sqlda2);
|
||||
free(sqlda3);
|
||||
|
||||
exec sql deallocate prepare st_id1;
|
||||
|
||||
/* Test DESCRIBE with a query not producing tuples */
|
||||
|
||||
strcpy(msg, "allocate");
|
||||
exec sql allocate descriptor desc1;
|
||||
exec sql allocate descriptor desc2;
|
||||
|
||||
strcpy(msg, "prepare");
|
||||
exec sql prepare st_id2 FROM :stmt2;
|
||||
|
||||
sqlda1 = sqlda2 = sqlda3 = NULL;
|
||||
|
||||
strcpy(msg, "describe");
|
||||
exec sql describe st_id2 into sql descriptor desc1;
|
||||
exec sql describe st_id2 using sql descriptor desc2;
|
||||
|
||||
exec sql describe st_id2 into descriptor sqlda1;
|
||||
exec sql describe st_id2 using descriptor sqlda2;
|
||||
exec sql describe st_id2 into sqlda3;
|
||||
|
||||
if (sqlda1 == NULL || sqlda1 == NULL || sqlda2 == NULL)
|
||||
exit(1);
|
||||
|
||||
strcpy(msg, "get descriptor");
|
||||
exec sql get descriptor desc1 :count1 = count;
|
||||
exec sql get descriptor desc1 :count2 = count;
|
||||
|
||||
if (!( count1 == count2 &&
|
||||
count1 == sqlda1->sqld &&
|
||||
count1 == sqlda2->sqld &&
|
||||
count1 == sqlda3->sqld))
|
||||
exit(1);
|
||||
|
||||
for (i = 1; i <= count1; i++)
|
||||
{
|
||||
exec sql get descriptor desc1 value :i :field_name1 = name;
|
||||
exec sql get descriptor desc2 value :i :field_name2 = name;
|
||||
printf("%d\n\tfield_name1 '%s'\n\tfield_name2 '%s'\n\t"
|
||||
"sqlda1 '%s'\n\tsqlda2 '%s'\n\tsqlda3 '%s'\n",
|
||||
i, field_name1, field_name2,
|
||||
sqlda1->sqlvar[i-1].sqlname.data,
|
||||
sqlda2->sqlvar[i-1].sqlname.data,
|
||||
sqlda3->sqlvar[i-1].sqlname.data);
|
||||
}
|
||||
|
||||
strcpy(msg, "deallocate");
|
||||
exec sql deallocate descriptor desc1;
|
||||
exec sql deallocate descriptor desc2;
|
||||
free(sqlda1);
|
||||
free(sqlda2);
|
||||
free(sqlda3);
|
||||
|
||||
exec sql deallocate prepare st_id2;
|
||||
|
||||
/* End test */
|
||||
|
||||
strcpy(msg, "drop");
|
||||
exec sql drop table descr_t2;
|
||||
|
||||
strcpy(msg, "commit");
|
||||
exec sql commit;
|
||||
|
||||
strcpy(msg, "disconnect");
|
||||
exec sql disconnect;
|
||||
|
||||
return (0);
|
||||
}
|
Reference in New Issue
Block a user