PostgreSQL Source Code  git master
sql-dyntest.c
Go to the documentation of this file.
1 /* Processed by ecpg (regression mode) */
2 /* These include files are added by the preprocessor */
3 #include <ecpglib.h>
4 #include <ecpgerrno.h>
5 #include <sqlca.h>
6 /* End of automatic include section */
7 #define ECPGdebug(X,Y) ECPGdebug((X)+100,(Y))
8 
9 #line 1 "dyntest.pgc"
10 /* dynamic SQL test program
11  */
12 
13 #include <stdio.h>
14 #include <stdlib.h>
15 
16 
17 #line 1 "sql3types.h"
18 #ifndef _ECPG_SQL3TYPES_H
19 #define _ECPG_SQL3TYPES_H
20 
21 /* SQL3 dynamic type codes */
22 
23 /* chapter 13.1 table 2: Codes used for SQL data types in Dynamic SQL */
24 
25 enum
26 {
36  SQL3_INTERVAL, /* 10 */
43  /* the rest is xLOB stuff */
44 };
45 
46 /* chapter 13.1 table 3: Codes associated with datetime data types in Dynamic SQL */
47 
48 enum
49 {
55 
56  SQL3_DDT_ILLEGAL /* not a datetime data type (not part of
57  * standard) */
58 };
59 
60 #endif /* !_ECPG_SQL3TYPES_H */
61 
62 #line 7 "dyntest.pgc"
63 
64 
65 #line 1 "sqlca.h"
66 #ifndef POSTGRES_SQLCA_H
67 #define POSTGRES_SQLCA_H
68 
69 #ifndef PGDLLIMPORT
70 #if defined(WIN32) || defined(__CYGWIN__)
71 #define PGDLLIMPORT __declspec (dllimport)
72 #else
73 #define PGDLLIMPORT
74 #endif /* __CYGWIN__ */
75 #endif /* PGDLLIMPORT */
76 
77 #define SQLERRMC_LEN 150
78 
79 #ifdef __cplusplus
80 extern "C"
81 {
82 #endif
83 
84 struct sqlca_t
85 {
86  char sqlcaid[8];
87  long sqlabc;
88  long sqlcode;
89  struct
90  {
91  int sqlerrml;
92  char sqlerrmc[SQLERRMC_LEN];
94  char sqlerrp[8];
95  long sqlerrd[6];
96  /* Element 0: empty */
97  /* 1: OID of processed tuple if applicable */
98  /* 2: number of rows processed */
99  /* after an INSERT, UPDATE or */
100  /* DELETE statement */
101  /* 3: empty */
102  /* 4: empty */
103  /* 5: empty */
104  char sqlwarn[8];
105  /* Element 0: set to 'W' if at least one other is 'W' */
106  /* 1: if 'W' at least one character string */
107  /* value was truncated when it was */
108  /* stored into a host variable. */
109 
110  /*
111  * 2: if 'W' a (hopefully) non-fatal notice occurred
112  */ /* 3: empty */
113  /* 4: empty */
114  /* 5: empty */
115  /* 6: empty */
116  /* 7: empty */
117 
118  char sqlstate[5];
119 };
120 
121 struct sqlca_t *ECPGget_sqlca(void);
122 
123 #ifndef POSTGRES_ECPG_INTERNAL
124 #define sqlca (*ECPGget_sqlca())
125 #endif
126 
127 #ifdef __cplusplus
128 }
129 #endif
130 
131 #endif
132 
133 #line 8 "dyntest.pgc"
134 
135 
136 #line 1 "regression.h"
137 
138 
139 
140 
141 
142 
143 #line 9 "dyntest.pgc"
144 
145 
146 static void
147 error (void)
148 {
149  printf ("\n#%ld:%s\n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
150  exit (1);
151 }
152 
153 int
155 {
156  /* exec sql begin declare section */
157 
158 
159 
160 
161 
162 
163 
164 
165 
166 
167 
168 #line 22 "dyntest.pgc"
169  int COUNT ;
170 
171 #line 23 "dyntest.pgc"
172  int INTVAR ;
173 
174 #line 24 "dyntest.pgc"
175  int INDEX ;
176 
177 #line 25 "dyntest.pgc"
178  int INDICATOR ;
179 
180 #line 26 "dyntest.pgc"
181  int TYPE , LENGTH , OCTET_LENGTH , PRECISION , SCALE , RETURNED_OCTET_LENGTH ;
182 
183 #line 27 "dyntest.pgc"
184  int DATETIME_INTERVAL_CODE ;
185 
186 #line 28 "dyntest.pgc"
187  char NAME [ 120 ] , BOOLVAR ;
188 
189 #line 29 "dyntest.pgc"
190  char STRINGVAR [ 1024 ] ;
191 
192 #line 30 "dyntest.pgc"
193  double DOUBLEVAR ;
194 
195 #line 31 "dyntest.pgc"
196  char * QUERY ;
197 /* exec sql end declare section */
198 #line 32 "dyntest.pgc"
199 
200  int done = 0;
201 
202  /* exec sql var BOOLVAR is bool */
203 #line 35 "dyntest.pgc"
204 
205 
206  ECPGdebug (1, stderr);
207 
208  QUERY = "select * from dyntest";
209 
210  /* exec sql whenever sqlerror do error ( ) ; */
211 #line 43 "dyntest.pgc"
212 
213 
214  ECPGallocate_desc(__LINE__, "MYDESC");
215 #line 45 "dyntest.pgc"
216 
217 if (sqlca.sqlcode < 0) error ( );
218 #line 45 "dyntest.pgc"
219 
220 
221  { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , NULL, 0);
222 #line 47 "dyntest.pgc"
223 
224 if (sqlca.sqlcode < 0) error ( );}
225 #line 47 "dyntest.pgc"
226 
227 
228  { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "set datestyle to german", ECPGt_EOIT, ECPGt_EORT);
229 #line 49 "dyntest.pgc"
230 
231 if (sqlca.sqlcode < 0) error ( );}
232 #line 49 "dyntest.pgc"
233 
234 
235  { 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);
236 #line 53 "dyntest.pgc"
237 
238 if (sqlca.sqlcode < 0) error ( );}
239 #line 53 "dyntest.pgc"
240 
241  { 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);
242 #line 54 "dyntest.pgc"
243 
244 if (sqlca.sqlcode < 0) error ( );}
245 #line 54 "dyntest.pgc"
246 
247  { 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);
248 #line 55 "dyntest.pgc"
249 
250 if (sqlca.sqlcode < 0) error ( );}
251 #line 55 "dyntest.pgc"
252 
253 
254  { ECPGprepare(__LINE__, NULL, 0, "myquery", QUERY);
255 #line 57 "dyntest.pgc"
256 
257 if (sqlca.sqlcode < 0) error ( );}
258 #line 57 "dyntest.pgc"
259 
260  /* declare MYCURS cursor for $1 */
261 #line 58 "dyntest.pgc"
262 
263 
264  { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "declare MYCURS cursor for $1",
265  ECPGt_char_variable,(ECPGprepared_statement(NULL, "myquery", __LINE__)),(long)1,(long)1,(1)*sizeof(char),
266  ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);
267 #line 60 "dyntest.pgc"
268 
269 if (sqlca.sqlcode < 0) error ( );}
270 #line 60 "dyntest.pgc"
271 
272 
273  while (1)
274  {
275  { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch in MYCURS", ECPGt_EOIT,
276  ECPGt_descriptor, "MYDESC", 1L, 1L, 1L,
277  ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);
278 #line 64 "dyntest.pgc"
279 
280 if (sqlca.sqlcode < 0) error ( );}
281 #line 64 "dyntest.pgc"
282 
283 
284  if (sqlca.sqlcode)
285  break;
286 
287  { ECPGget_desc_header(__LINE__, "MYDESC", &(COUNT));
288 
289 #line 69 "dyntest.pgc"
290 
291 if (sqlca.sqlcode < 0) error ( );}
292 #line 69 "dyntest.pgc"
293 
294  if (!done)
295  {
296  printf ("Found %d columns\n", COUNT);
297  done = 1;
298  }
299 
300  for (INDEX = 1; INDEX <= COUNT; ++INDEX)
301  {
302  { ECPGget_desc(__LINE__, "MYDESC", INDEX,ECPGd_indicator,
303  ECPGt_int,&(INDICATOR),(long)1,(long)1,sizeof(int), ECPGd_name,
304  ECPGt_char,(NAME),(long)120,(long)1,(120)*sizeof(char), ECPGd_scale,
305  ECPGt_int,&(SCALE),(long)1,(long)1,sizeof(int), ECPGd_precision,
306  ECPGt_int,&(PRECISION),(long)1,(long)1,sizeof(int), ECPGd_ret_octet,
307  ECPGt_int,&(RETURNED_OCTET_LENGTH),(long)1,(long)1,sizeof(int), ECPGd_octet,
308  ECPGt_int,&(OCTET_LENGTH),(long)1,(long)1,sizeof(int), ECPGd_length,
309  ECPGt_int,&(LENGTH),(long)1,(long)1,sizeof(int), ECPGd_type,
310  ECPGt_int,&(TYPE),(long)1,(long)1,sizeof(int), ECPGd_EODT);
311 
312 #line 86 "dyntest.pgc"
313 
314 if (sqlca.sqlcode < 0) error ( );}
315 #line 86 "dyntest.pgc"
316 
317  printf ("%2d\t%s (type: %d length: %d precision: %d scale: %d = " , INDEX, NAME, TYPE, LENGTH, PRECISION, SCALE);
318  switch (TYPE)
319  {
320  case SQL3_BOOLEAN:
321  printf ("bool");
322  break;
323  case SQL3_NUMERIC:
324  printf ("numeric(%d,%d)", PRECISION, SCALE);
325  break;
326  case SQL3_DECIMAL:
327  printf ("decimal(%d,%d)", PRECISION, SCALE);
328  break;
329  case SQL3_INTEGER:
330  printf ("integer");
331  break;
332  case SQL3_SMALLINT:
333  printf ("smallint");
334  break;
335  case SQL3_FLOAT:
336  printf ("float(%d,%d)", PRECISION, SCALE);
337  break;
338  case SQL3_REAL:
339  printf ("real");
340  break;
342  printf ("double precision");
343  break;
345  { ECPGget_desc(__LINE__, "MYDESC", INDEX,ECPGd_di_code,
346  ECPGt_int,&(DATETIME_INTERVAL_CODE),(long)1,(long)1,sizeof(int), ECPGd_EODT);
347 
348 #line 116 "dyntest.pgc"
349 
350 if (sqlca.sqlcode < 0) error ( );}
351 #line 116 "dyntest.pgc"
352 
353  switch (DATETIME_INTERVAL_CODE)
354  {
355  case SQL3_DDT_DATE:
356  printf ("date");
357  break;
358  case SQL3_DDT_TIME:
359  printf ("time");
360  break;
361  case SQL3_DDT_TIMESTAMP:
362  printf ("timestamp");
363  break;
365  printf ("time with time zone");
366  break;
368  printf ("timestamp with time zone");
369  break;
370  }
371  break;
372  case SQL3_INTERVAL:
373  printf ("interval");
374  break;
375  case SQL3_CHARACTER:
376  if (LENGTH > 0)
377  printf ("char(%d)", LENGTH);
378  else
379  printf ("text");
380  break;
382  if (LENGTH > 0)
383  printf ("varchar(%d)", LENGTH);
384  else
385  printf ("varchar()");
386  break;
387  default:
388  printf ("<SQL3 %d>", TYPE);
389  break;
390  }
391  printf (")\n\toctet_length: %d returned_octet_length: %d)\n\t= ",
392  OCTET_LENGTH, RETURNED_OCTET_LENGTH);
393  if (INDICATOR == -1)
394  printf ("NULL\n");
395  else
396  switch (TYPE)
397  {
398  case SQL3_BOOLEAN:
399  { ECPGget_desc(__LINE__, "MYDESC", INDEX,ECPGd_data,
400  ECPGt_bool,&(BOOLVAR),(long)1,(long)1,sizeof(bool), ECPGd_EODT);
401 
402 #line 163 "dyntest.pgc"
403 
404 if (sqlca.sqlcode < 0) error ( );}
405 #line 163 "dyntest.pgc"
406 
407  printf ("%s\n", BOOLVAR ? "true" : "false");
408  break;
409  case SQL3_INTEGER:
410  case SQL3_SMALLINT:
411  { ECPGget_desc(__LINE__, "MYDESC", INDEX,ECPGd_data,
412  ECPGt_int,&(INTVAR),(long)1,(long)1,sizeof(int), ECPGd_EODT);
413 
414 #line 168 "dyntest.pgc"
415 
416 if (sqlca.sqlcode < 0) error ( );}
417 #line 168 "dyntest.pgc"
418 
419  printf ("%d\n", INTVAR);
420  break;
422  { ECPGget_desc(__LINE__, "MYDESC", INDEX,ECPGd_data,
423  ECPGt_double,&(DOUBLEVAR),(long)1,(long)1,sizeof(double), ECPGd_EODT);
424 
425 #line 172 "dyntest.pgc"
426 
427 if (sqlca.sqlcode < 0) error ( );}
428 #line 172 "dyntest.pgc"
429 
430  printf ("%.*f\n", PRECISION, DOUBLEVAR);
431  break;
433  { ECPGget_desc(__LINE__, "MYDESC", INDEX,ECPGd_data,
434  ECPGt_char,(STRINGVAR),(long)1024,(long)1,(1024)*sizeof(char), ECPGd_di_code,
435  ECPGt_int,&(DATETIME_INTERVAL_CODE),(long)1,(long)1,sizeof(int), ECPGd_EODT);
436 
437 #line 178 "dyntest.pgc"
438 
439 if (sqlca.sqlcode < 0) error ( );}
440 #line 178 "dyntest.pgc"
441 
442  printf ("%d \"%s\"\n", DATETIME_INTERVAL_CODE, STRINGVAR);
443  break;
444  case SQL3_CHARACTER:
446  { ECPGget_desc(__LINE__, "MYDESC", INDEX,ECPGd_data,
447  ECPGt_char,(STRINGVAR),(long)1024,(long)1,(1024)*sizeof(char), ECPGd_EODT);
448 
449 #line 183 "dyntest.pgc"
450 
451 if (sqlca.sqlcode < 0) error ( );}
452 #line 183 "dyntest.pgc"
453 
454  printf ("\"%s\"\n", STRINGVAR);
455  break;
456  default:
457  { ECPGget_desc(__LINE__, "MYDESC", INDEX,ECPGd_data,
458  ECPGt_char,(STRINGVAR),(long)1024,(long)1,(1024)*sizeof(char), ECPGd_EODT);
459 
460 #line 187 "dyntest.pgc"
461 
462 if (sqlca.sqlcode < 0) error ( );}
463 #line 187 "dyntest.pgc"
464 
465  printf ("<\"%s\">\n", STRINGVAR);
466  break;
467  }
468  }
469  }
470 
471  { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "close MYCURS", ECPGt_EOIT, ECPGt_EORT);
472 #line 194 "dyntest.pgc"
473 
474 if (sqlca.sqlcode < 0) error ( );}
475 #line 194 "dyntest.pgc"
476 
477 
478  ECPGdeallocate_desc(__LINE__, "MYDESC");
479 #line 196 "dyntest.pgc"
480 
481 if (sqlca.sqlcode < 0) error ( );
482 #line 196 "dyntest.pgc"
483 
484 
485  return 0;
486  }
bool ECPGconnect(int lineno, int c, const char *name, const char *user, const char *passwd, const char *connection_name, int autocommit)
Definition: connect.c:255
bool ECPGdeallocate_desc(int line, const char *name)
Definition: descriptor.c:748
bool ECPGget_desc(int lineno, const char *desc_name, int index,...)
Definition: descriptor.c:234
bool ECPGallocate_desc(int line, const char *name)
Definition: descriptor.c:792
bool ECPGget_desc_header(int lineno, const char *desc_name, int *count)
Definition: descriptor.c:84
@ ECPGst_normal
Definition: ecpgtype.h:97
@ ECPGt_EOIT
Definition: ecpgtype.h:62
@ ECPGt_char_variable
Definition: ecpgtype.h:60
@ ECPGt_int
Definition: ecpgtype.h:44
@ ECPGt_double
Definition: ecpgtype.h:47
@ ECPGt_NO_INDICATOR
Definition: ecpgtype.h:64
@ ECPGt_EORT
Definition: ecpgtype.h:63
@ ECPGt_bool
Definition: ecpgtype.h:46
@ ECPGt_descriptor
Definition: ecpgtype.h:59
@ ECPGt_char
Definition: ecpgtype.h:43
@ ECPGd_scale
Definition: ecpgtype.h:86
@ ECPGd_precision
Definition: ecpgtype.h:83
@ ECPGd_length
Definition: ecpgtype.h:79
@ ECPGd_type
Definition: ecpgtype.h:87
@ ECPGd_indicator
Definition: ecpgtype.h:77
@ ECPGd_di_code
Definition: ecpgtype.h:75
@ ECPGd_name
Definition: ecpgtype.h:80
@ ECPGd_EODT
Definition: ecpgtype.h:88
@ ECPGd_octet
Definition: ecpgtype.h:82
@ ECPGd_ret_octet
Definition: ecpgtype.h:85
@ ECPGd_data
Definition: ecpgtype.h:74
bool ECPGdo(const int lineno, const int compat, const int force_indicator, const char *connection_name, const bool questionmarks, const int st, const char *query,...)
Definition: execute.c:2277
bool ECPGprepare(int lineno, const char *connection_name, const bool questionmarks, const char *name, const char *variable)
Definition: prepare.c:217
char * ECPGprepared_statement(const char *connection_name, const char *name, int lineno)
Definition: prepare.c:368
exit(1)
#define printf(...)
Definition: port.h:244
#define COUNT
Definition: sha1.c:76
static void error(void)
Definition: sql-dyntest.c:147
@ SQL3_DDT_TIME_WITH_TIME_ZONE
Definition: sql-dyntest.c:53
@ SQL3_DDT_DATE
Definition: sql-dyntest.c:50
@ SQL3_DDT_TIMESTAMP
Definition: sql-dyntest.c:52
@ SQL3_DDT_ILLEGAL
Definition: sql-dyntest.c:56
@ SQL3_DDT_TIMESTAMP_WITH_TIME_ZONE
Definition: sql-dyntest.c:54
@ SQL3_DDT_TIME
Definition: sql-dyntest.c:51
#define SQLERRMC_LEN
Definition: sql-dyntest.c:77
struct sqlca_t * ECPGget_sqlca(void)
Definition: misc.c:108
#define sqlca
Definition: sql-dyntest.c:124
@ SQL3_DATE_TIME_TIMESTAMP
Definition: sql-dyntest.c:35
@ SQL3_FLOAT
Definition: sql-dyntest.c:32
@ SQL3_INTEGER
Definition: sql-dyntest.c:30
@ SQL3_BIT_VARYING
Definition: sql-dyntest.c:40
@ SQL3_abstract
Definition: sql-dyntest.c:42
@ SQL3_BOOLEAN
Definition: sql-dyntest.c:41
@ SQL3_CHARACTER_VARYING
Definition: sql-dyntest.c:37
@ SQL3_BIT
Definition: sql-dyntest.c:39
@ SQL3_SMALLINT
Definition: sql-dyntest.c:31
@ SQL3_INTERVAL
Definition: sql-dyntest.c:36
@ SQL3_DOUBLE_PRECISION
Definition: sql-dyntest.c:34
@ SQL3_NUMERIC
Definition: sql-dyntest.c:28
@ SQL3_ENUMERATED
Definition: sql-dyntest.c:38
@ SQL3_DECIMAL
Definition: sql-dyntest.c:29
@ SQL3_CHARACTER
Definition: sql-dyntest.c:27
@ SQL3_REAL
Definition: sql-dyntest.c:33
#define ECPGdebug(X, Y)
Definition: sql-dyntest.c:7
int main()
Definition: sql-dyntest.c:154
Definition: sqlca.h:20
char sqlerrp[8]
Definition: sqlca.h:29
long sqlerrd[6]
Definition: sqlca.h:30
char sqlstate[5]
Definition: sqlca.h:53
char sqlwarn[8]
Definition: sqlca.h:39
long sqlabc
Definition: sqlca.h:22
char sqlcaid[8]
Definition: sqlca.h:21
struct sqlca_t::@153 sqlerrm
char sqlerrmc[SQLERRMC_LEN]
Definition: sqlca.h:27
long sqlcode
Definition: sqlca.h:23
int sqlerrml
Definition: sqlca.h:26