Header And Logo

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

Data Structures | Defines | Enumerations | Functions

sql-dyntest.c File Reference

#include <ecpglib.h>
#include <ecpgerrno.h>
#include <sqlca.h>
#include <stdio.h>
#include <stdlib.h>
Include dependency graph for sql-dyntest.c:

Go to the source code of this file.

Data Structures

struct  sqlca_t

Defines

#define ECPGdebug(X, Y)   ECPGdebug((X)+100,(Y))
#define POSTGRES_SQLCA_H
#define PGDLLIMPORT
#define SQLERRMC_LEN   150
#define sqlca   (*ECPGget_sqlca())

Enumerations

enum  {
  SQL3_CHARACTER = 1, SQL3_NUMERIC, SQL3_DECIMAL, SQL3_INTEGER,
  SQL3_SMALLINT, SQL3_FLOAT, SQL3_REAL, SQL3_DOUBLE_PRECISION,
  SQL3_DATE_TIME_TIMESTAMP, SQL3_INTERVAL, SQL3_CHARACTER_VARYING = 12, SQL3_ENUMERATED,
  SQL3_BIT, SQL3_BIT_VARYING, SQL3_BOOLEAN, SQL3_abstract
}
enum  {
  SQL3_DDT_DATE = 1, SQL3_DDT_TIME, SQL3_DDT_TIMESTAMP, SQL3_DDT_TIME_WITH_TIME_ZONE,
  SQL3_DDT_TIMESTAMP_WITH_TIME_ZONE, SQL3_DDT_ILLEGAL
}

Functions

struct sqlca_tECPGget_sqlca (void)
static void error (void)
int main ()

Define Documentation

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

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

#define PGDLLIMPORT

Definition at line 73 of file sql-dyntest.c.

#define POSTGRES_SQLCA_H

Definition at line 67 of file sql-dyntest.c.

#define sqlca   (*ECPGget_sqlca())

Definition at line 124 of file sql-dyntest.c.

Referenced by error(), and main().

#define SQLERRMC_LEN   150

Definition at line 77 of file sql-dyntest.c.


Enumeration Type Documentation

anonymous enum
Enumerator:
SQL3_CHARACTER 
SQL3_NUMERIC 
SQL3_DECIMAL 
SQL3_INTEGER 
SQL3_SMALLINT 
SQL3_FLOAT 
SQL3_REAL 
SQL3_DOUBLE_PRECISION 
SQL3_DATE_TIME_TIMESTAMP 
SQL3_INTERVAL 
SQL3_CHARACTER_VARYING 
SQL3_ENUMERATED 
SQL3_BIT 
SQL3_BIT_VARYING 
SQL3_BOOLEAN 
SQL3_abstract 

Definition at line 25 of file sql-dyntest.c.

{
    SQL3_CHARACTER = 1,
    SQL3_NUMERIC,
    SQL3_DECIMAL,
    SQL3_INTEGER,
    SQL3_SMALLINT,
    SQL3_FLOAT,
    SQL3_REAL,
    SQL3_DOUBLE_PRECISION,
    SQL3_DATE_TIME_TIMESTAMP,
    SQL3_INTERVAL,              /* 10 */
    SQL3_CHARACTER_VARYING = 12,
    SQL3_ENUMERATED,
    SQL3_BIT,
    SQL3_BIT_VARYING,
    SQL3_BOOLEAN,
    SQL3_abstract
    /* the rest is xLOB stuff */
};

anonymous enum
Enumerator:
SQL3_DDT_DATE 
SQL3_DDT_TIME 
SQL3_DDT_TIMESTAMP 
SQL3_DDT_TIME_WITH_TIME_ZONE 
SQL3_DDT_TIMESTAMP_WITH_TIME_ZONE 
SQL3_DDT_ILLEGAL 

Definition at line 48 of file sql-dyntest.c.

{
    SQL3_DDT_DATE = 1,
    SQL3_DDT_TIME,
    SQL3_DDT_TIMESTAMP,
    SQL3_DDT_TIME_WITH_TIME_ZONE,
    SQL3_DDT_TIMESTAMP_WITH_TIME_ZONE,

    SQL3_DDT_ILLEGAL            /* not a datetime data type (not part of
                                 * standard) */
};


Function Documentation

struct sqlca_t* ECPGget_sqlca ( void   )  [read]

Definition at line 135 of file misc.c.

{
#ifdef ENABLE_THREAD_SAFETY
    struct sqlca_t *sqlca;

    pthread_once(&sqlca_key_once, ecpg_sqlca_key_init);

    sqlca = pthread_getspecific(sqlca_key);
    if (sqlca == NULL)
    {
        sqlca = malloc(sizeof(struct sqlca_t));
        ecpg_init_sqlca(sqlca);
        pthread_setspecific(sqlca_key, sqlca);
    }
    return (sqlca);
#else
    return (&sqlca);
#endif
}

static void error ( void   )  [static]
int main ( void   ) 

Definition at line 154 of file sql-dyntest.c.

References ECPGallocate_desc(), ECPGconnect(), ECPGd_data, ECPGd_di_code, ECPGd_EODT, ECPGd_indicator, ECPGd_length, ECPGd_name, ECPGd_octet, ECPGd_precision, ECPGd_ret_octet, ECPGd_scale, ECPGd_type, ECPGdeallocate_desc(), ECPGdebug, ECPGdo(), ECPGget_desc(), ECPGget_desc_header(), ECPGprepare(), ECPGprepared_statement(), ECPGst_normal, ECPGt_bool, ECPGt_char, ECPGt_char_variable, ECPGt_descriptor, ECPGt_double, ECPGt_EOIT, ECPGt_EORT, ECPGt_int, ECPGt_NO_INDICATOR, error(), NULL, SQL3_BOOLEAN, SQL3_CHARACTER, SQL3_CHARACTER_VARYING, SQL3_DATE_TIME_TIMESTAMP, SQL3_DDT_DATE, SQL3_DDT_TIME, SQL3_DDT_TIME_WITH_TIME_ZONE, SQL3_DDT_TIMESTAMP, SQL3_DDT_TIMESTAMP_WITH_TIME_ZONE, SQL3_DECIMAL, SQL3_DOUBLE_PRECISION, SQL3_FLOAT, SQL3_INTEGER, SQL3_INTERVAL, SQL3_NUMERIC, SQL3_REAL, SQL3_SMALLINT, and sqlca.

{
  /* exec sql begin declare section */
   
   
   
   
        
   
    
   
   
   
  
#line 22 "dyntest.pgc"
 int COUNT ;
 
#line 23 "dyntest.pgc"
 int INTVAR ;
 
#line 24 "dyntest.pgc"
 int INDEX ;
 
#line 25 "dyntest.pgc"
 int INDICATOR ;
 
#line 26 "dyntest.pgc"
 int TYPE , LENGTH , OCTET_LENGTH , PRECISION , SCALE , RETURNED_OCTET_LENGTH ;
 
#line 27 "dyntest.pgc"
 int DATETIME_INTERVAL_CODE ;
 
#line 28 "dyntest.pgc"
 char NAME [ 120 ] , BOOLVAR ;
 
#line 29 "dyntest.pgc"
 char STRINGVAR [ 1024 ] ;
 
#line 30 "dyntest.pgc"
 double DOUBLEVAR ;
 
#line 31 "dyntest.pgc"
 char * QUERY ;
/* exec sql end declare section */
#line 32 "dyntest.pgc"

  int done = 0;

  /* exec sql var BOOLVAR is bool */
#line 35 "dyntest.pgc"


  ECPGdebug (1, stderr);

  QUERY = "select * from dyntest";

  /* exec sql whenever sqlerror  do error ( ) ; */
#line 43 "dyntest.pgc"


  ECPGallocate_desc(__LINE__, "MYDESC");
#line 45 "dyntest.pgc"

if (sqlca.sqlcode < 0) error ( );
#line 45 "dyntest.pgc"


  { ECPGconnect(__LINE__, 0, "regress1" , NULL, NULL , NULL, 0); 
#line 47 "dyntest.pgc"

if (sqlca.sqlcode < 0) error ( );}
#line 47 "dyntest.pgc"


  { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "set datestyle to german", ECPGt_EOIT, ECPGt_EORT);
#line 49 "dyntest.pgc"

if (sqlca.sqlcode < 0) error ( );}
#line 49 "dyntest.pgc"


  { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table dyntest ( name char ( 14 ) , d float8 , i int , bignumber int8 , b boolean , comment text , day date )", ECPGt_EOIT, ECPGt_EORT);
#line 53 "dyntest.pgc"

if (sqlca.sqlcode < 0) error ( );}
#line 53 "dyntest.pgc"

  { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into dyntest values ( 'first entry' , 14.7 , 14 , 123045607890 , true , 'The world''s most advanced open source database.' , '1987-07-14' )", ECPGt_EOIT, ECPGt_EORT);
#line 54 "dyntest.pgc"

if (sqlca.sqlcode < 0) error ( );}
#line 54 "dyntest.pgc"

  { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into dyntest values ( 'second entry' , 1407.87 , 1407 , 987065403210 , false , 'The elephant never forgets.' , '1999-11-5' )", ECPGt_EOIT, ECPGt_EORT);
#line 55 "dyntest.pgc"

if (sqlca.sqlcode < 0) error ( );}
#line 55 "dyntest.pgc"


  { ECPGprepare(__LINE__, NULL, 0, "myquery", QUERY);
#line 57 "dyntest.pgc"

if (sqlca.sqlcode < 0) error ( );}
#line 57 "dyntest.pgc"

  /* declare MYCURS cursor for $1 */
#line 58 "dyntest.pgc"


  { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "declare MYCURS cursor for $1", 
    ECPGt_char_variable,(ECPGprepared_statement(NULL, "myquery", __LINE__)),(long)1,(long)1,(1)*sizeof(char), 
    ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);
#line 60 "dyntest.pgc"

if (sqlca.sqlcode < 0) error ( );}
#line 60 "dyntest.pgc"


  while (1)
    {
      { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch in MYCURS", ECPGt_EOIT, 
    ECPGt_descriptor, "MYDESC", 0L, 0L, 0L, 
    ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);
#line 64 "dyntest.pgc"

if (sqlca.sqlcode < 0) error ( );}
#line 64 "dyntest.pgc"


      if (sqlca.sqlcode)
    break;

      { ECPGget_desc_header(__LINE__, "MYDESC", &(COUNT));

#line 69 "dyntest.pgc"

if (sqlca.sqlcode < 0) error ( );}
#line 69 "dyntest.pgc"

      if (!done)
    {
      printf ("Found %d columns\n", COUNT);
      done = 1;
    }

      for (INDEX = 1; INDEX <= COUNT; ++INDEX)
    {
    { ECPGget_desc(__LINE__, "MYDESC", INDEX,ECPGd_indicator,
    ECPGt_int,&(INDICATOR),(long)1,(long)1,sizeof(int), ECPGd_name,
    ECPGt_char,(NAME),(long)120,(long)1,(120)*sizeof(char), ECPGd_scale,
    ECPGt_int,&(SCALE),(long)1,(long)1,sizeof(int), ECPGd_precision,
    ECPGt_int,&(PRECISION),(long)1,(long)1,sizeof(int), ECPGd_ret_octet,
    ECPGt_int,&(RETURNED_OCTET_LENGTH),(long)1,(long)1,sizeof(int), ECPGd_octet,
    ECPGt_int,&(OCTET_LENGTH),(long)1,(long)1,sizeof(int), ECPGd_length,
    ECPGt_int,&(LENGTH),(long)1,(long)1,sizeof(int), ECPGd_type,
    ECPGt_int,&(TYPE),(long)1,(long)1,sizeof(int), ECPGd_EODT);

#line 86 "dyntest.pgc"

if (sqlca.sqlcode < 0) error ( );}
#line 86 "dyntest.pgc"

      printf ("%2d\t%s (type: %d length: %d precision: %d scale: %d = " , INDEX, NAME, TYPE, LENGTH, PRECISION, SCALE);
      switch (TYPE)
        {
        case SQL3_BOOLEAN:
          printf ("bool");
          break;
        case SQL3_NUMERIC:
          printf ("numeric(%d,%d)", PRECISION, SCALE);
          break;
        case SQL3_DECIMAL:
          printf ("decimal(%d,%d)", PRECISION, SCALE);
          break;
        case SQL3_INTEGER:
          printf ("integer");
          break;
        case SQL3_SMALLINT:
          printf ("smallint");
          break;
        case SQL3_FLOAT:
          printf ("float(%d,%d)", PRECISION, SCALE);
          break;
        case SQL3_REAL:
          printf ("real");
          break;
        case SQL3_DOUBLE_PRECISION:
          printf ("double precision");
          break;
        case SQL3_DATE_TIME_TIMESTAMP:
        { ECPGget_desc(__LINE__, "MYDESC", INDEX,ECPGd_di_code,
    ECPGt_int,&(DATETIME_INTERVAL_CODE),(long)1,(long)1,sizeof(int), ECPGd_EODT);

#line 116 "dyntest.pgc"

if (sqlca.sqlcode < 0) error ( );}
#line 116 "dyntest.pgc"

          switch (DATETIME_INTERVAL_CODE)
        {
        case SQL3_DDT_DATE:
          printf ("date");
          break;
        case SQL3_DDT_TIME:
          printf ("time");
          break;
        case SQL3_DDT_TIMESTAMP:
          printf ("timestamp");
          break;
        case SQL3_DDT_TIME_WITH_TIME_ZONE:
          printf ("time with time zone");
          break;
        case SQL3_DDT_TIMESTAMP_WITH_TIME_ZONE:
          printf ("timestamp with time zone");
          break;
        }
          break;
        case SQL3_INTERVAL:
          printf ("interval");
          break;
        case SQL3_CHARACTER:
          if (LENGTH > 0)
        printf ("char(%d)", LENGTH);
          else
        printf ("text");
          break;
        case SQL3_CHARACTER_VARYING:
          if (LENGTH > 0)
        printf ("varchar(%d)", LENGTH);
          else
        printf ("varchar()");
          break;
        default:
          printf ("<SQL3 %d>", TYPE);
          break;
        }
      printf (")\n\toctet_length: %d returned_octet_length: %d)\n\t= ",
          OCTET_LENGTH, RETURNED_OCTET_LENGTH);
      if (INDICATOR == -1)
        printf ("NULL\n");
      else
        switch (TYPE)
          {
          case SQL3_BOOLEAN:
          { ECPGget_desc(__LINE__, "MYDESC", INDEX,ECPGd_data,
    ECPGt_bool,&(BOOLVAR),(long)1,(long)1,sizeof(bool), ECPGd_EODT);

#line 163 "dyntest.pgc"

if (sqlca.sqlcode < 0) error ( );}
#line 163 "dyntest.pgc"

        printf ("%s\n", BOOLVAR ? "true" : "false");
        break;
          case SQL3_INTEGER:
          case SQL3_SMALLINT:
          { ECPGget_desc(__LINE__, "MYDESC", INDEX,ECPGd_data,
    ECPGt_int,&(INTVAR),(long)1,(long)1,sizeof(int), ECPGd_EODT);

#line 168 "dyntest.pgc"

if (sqlca.sqlcode < 0) error ( );}
#line 168 "dyntest.pgc"

        printf ("%d\n", INTVAR);
        break;
          case SQL3_DOUBLE_PRECISION:
          { ECPGget_desc(__LINE__, "MYDESC", INDEX,ECPGd_data,
    ECPGt_double,&(DOUBLEVAR),(long)1,(long)1,sizeof(double), ECPGd_EODT);

#line 172 "dyntest.pgc"

if (sqlca.sqlcode < 0) error ( );}
#line 172 "dyntest.pgc"

        printf ("%.*f\n", PRECISION, DOUBLEVAR);
        break;
          case SQL3_DATE_TIME_TIMESTAMP:
          { ECPGget_desc(__LINE__, "MYDESC", INDEX,ECPGd_data,
    ECPGt_char,(STRINGVAR),(long)1024,(long)1,(1024)*sizeof(char), ECPGd_di_code,
    ECPGt_int,&(DATETIME_INTERVAL_CODE),(long)1,(long)1,sizeof(int), ECPGd_EODT);

#line 178 "dyntest.pgc"

if (sqlca.sqlcode < 0) error ( );}
#line 178 "dyntest.pgc"

        printf ("%d \"%s\"\n", DATETIME_INTERVAL_CODE, STRINGVAR);
        break;
          case SQL3_CHARACTER:
          case SQL3_CHARACTER_VARYING:
          { ECPGget_desc(__LINE__, "MYDESC", INDEX,ECPGd_data,
    ECPGt_char,(STRINGVAR),(long)1024,(long)1,(1024)*sizeof(char), ECPGd_EODT);

#line 183 "dyntest.pgc"

if (sqlca.sqlcode < 0) error ( );}
#line 183 "dyntest.pgc"

        printf ("\"%s\"\n", STRINGVAR);
        break;
          default:
          { ECPGget_desc(__LINE__, "MYDESC", INDEX,ECPGd_data,
    ECPGt_char,(STRINGVAR),(long)1024,(long)1,(1024)*sizeof(char), ECPGd_EODT);

#line 187 "dyntest.pgc"

if (sqlca.sqlcode < 0) error ( );}
#line 187 "dyntest.pgc"

        printf ("<\"%s\">\n", STRINGVAR);
        break;
          }
    }
    }

  { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "close MYCURS", ECPGt_EOIT, ECPGt_EORT);
#line 194 "dyntest.pgc"

if (sqlca.sqlcode < 0) error ( );}
#line 194 "dyntest.pgc"


  ECPGdeallocate_desc(__LINE__, "MYDESC");
#line 196 "dyntest.pgc"

if (sqlca.sqlcode < 0) error ( );
#line 196 "dyntest.pgc"


  return 0;
  }