Header And Logo

PostgreSQL
| The world's most advanced open source database.

Defines | Typedefs | Functions | Variables

sql-describe.c File Reference

#include <ecpglib.h>
#include <ecpgerrno.h>
#include <sqlca.h>
#include <stdlib.h>
#include <string.h>
#include "sqlda-native.h"
Include dependency graph for sql-describe.c:

Go to the source code of this file.

Defines

#define ECPGdebug(X, Y)   ECPGdebug((X)+100,(Y))

Typedefs

typedef struct sqlvar_struct sqlvar_t
typedef struct sqlda_struct sqlda_t

Functions

int main (void)

Variables

sqlda_tsqlda1
sqlda_tsqlda2
sqlda_tsqlda3

Define Documentation

#define ECPGdebug (   X,
  Y 
)    ECPGdebug((X)+100,(Y))

Definition at line 7 of file sql-describe.c.


Typedef Documentation

typedef struct sqlda_struct sqlda_t

Definition at line 38 of file sql-describe.c.

typedef struct sqlvar_struct sqlvar_t

Definition at line 37 of file sql-describe.c.


Function Documentation

int main ( void   ) 

Definition at line 54 of file sql-describe.c.

References sqlname::data, ECPGallocate_desc(), ECPGconnect(), ECPGd_EODT, ECPGd_name, ECPGdeallocate(), ECPGdeallocate_desc(), ECPGdebug, ECPGdescribe(), ECPGdisconnect(), ECPGdo(), ECPGget_desc(), ECPGget_desc_header(), ECPGprepare(), ECPGst_normal, ECPGt_char, ECPGt_descriptor, ECPGt_EOIT, ECPGt_EORT, ECPGt_NO_INDICATOR, ECPGt_sqlda, ECPGtrans(), free, i, NULL, sqlca, sqlda_struct::sqld, sqlvar_struct::sqlname, and sqlda_struct::sqlvar.

{
/* 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);
}


Variable Documentation

Definition at line 51 of file sql-describe.c.

Definition at line 51 of file sql-describe.c.

Definition at line 51 of file sql-describe.c.