summaryrefslogtreecommitdiff
path: root/src/interfaces/ecpg/test/sql/dyntest2.pgc
blob: ca684c30a10d7bc2891fe490dcd0d9256b74e275 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/* dynamic SQL test program
 */

#include <stdio.h>
#include <stdlib.h>

exec sql include sql3types;
exec sql include sqlca;
exec sql include ../regression;

static void error(void)
{
   printf("\n#%ld:%s\n",sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);
   exit(1);
}

int main(int argc,char **argv)
{
exec sql begin declare section;
  int COUNT;
  int INTVAR;
  int INDEX;
  int INDICATOR;
  int TYPE,LENGTH,OCTET_LENGTH,PRECISION,SCALE,RETURNED_OCTET_LENGTH;
  int DATETIME_INTERVAL_CODE;
  char NAME[120], BOOLVAR;
  char STRINGVAR[1024];
  double DOUBLEVAR;
  char *QUERY;
exec sql end declare section;
  int done=0;

  exec sql var BOOLVAR is bool;

  ECPGdebug(1, stderr);

  QUERY="select * from dyntest";

  exec sql whenever sqlerror do error();

  exec sql allocate descriptor MYDESC;

  exec sql connect to REGRESSDB1;

  exec sql create table dyntest (name char(14), d float8, i int, bignumber int8, b boolean, comment text, day date);
  exec sql insert into dyntest values('first entry', 14.7, 14, 123045607890, true, 'The world''''s most advanced open source database.', '1987-07-14');
  exec sql insert into dyntest values('second entry', 1407.87, 1407, 987065403210, false, 'The elephant never forgets.', '1999-11-5');

  exec sql prepare MYQUERY from :QUERY;
  exec sql declare MYCURS cursor for MYQUERY;

  exec sql open MYCURS;

  while (1)
  {
     exec sql fetch in MYCURS into sql descriptor MYDESC;

     if (sqlca.sqlcode) break;

     exec sql get descriptor MYDESC :COUNT = count;
     if (!done)
     {
        printf("Count %d\n",COUNT);
        done=1;
     }

     for (INDEX=1;INDEX<=COUNT;++INDEX)
     {
     	exec sql get descriptor MYDESC value :INDEX
     		:TYPE = type,
     		:LENGTH = length, :OCTET_LENGTH=octet_length,
     		:RETURNED_OCTET_LENGTH=returned_octet_length,
     		:PRECISION = precision, :SCALE=scale,
     		:NAME=name, :INDICATOR=indicator;
     	printf("%2d\t%s (type: %d length: %d precision: %d scale: %d\n"
		"\toctet_length: %d returned_octet_length: %d)\n\t= "
     			,INDEX,NAME,TYPE,LENGTH,PRECISION,SCALE
     			,OCTET_LENGTH,RETURNED_OCTET_LENGTH);
     	if (INDICATOR==-1) printf("NULL\n");
        else switch (TYPE)
     	{
	  case SQL3_BOOLEAN:
     	        exec sql get descriptor MYDESC value :INDEX :BOOLVAR=data;
     		printf("%s\n",BOOLVAR ? "true":"false");
     		break;
     	   case SQL3_INTEGER:
     	   case SQL3_SMALLINT:
     	        exec sql get descriptor MYDESC value :INDEX :INTVAR=data;
     	        printf("%d\n",INTVAR);
     	        break;
     	   case SQL3_DOUBLE_PRECISION:
     	        exec sql get descriptor MYDESC value :INDEX :DOUBLEVAR=data;
     	        printf("%.*f\n",PRECISION,DOUBLEVAR);
     	        break;
     	   case SQL3_DATE_TIME_TIMESTAMP:
     	   	exec sql get descriptor MYDESC value :INDEX
     	   		:DATETIME_INTERVAL_CODE=datetime_interval_code,
     	   		:STRINGVAR=data;
     	        printf("%d \"%s\"\n",DATETIME_INTERVAL_CODE,STRINGVAR);
     	        break;
     	   case SQL3_CHARACTER:
     	   case SQL3_CHARACTER_VARYING:
     	        exec sql get descriptor MYDESC value :INDEX :STRINGVAR=data;
     	        printf("\"%s\"\n",STRINGVAR);
     	        break;
     	   default:
     	        exec sql get descriptor MYDESC value :INDEX :STRINGVAR=data;
     	        printf("<\"%s\">\n",STRINGVAR);
     	        break;
     	}
     }
  }

  exec sql close MYCURS;

  exec sql deallocate descriptor MYDESC;

  return 0;
}