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 /* Needed for informix compatibility */ 7 #include <ecpg_informix.h> 8 /* End of automatic include section */ 9 #define ECPGdebug(X,Y) ECPGdebug((X)+100,(Y)) 10 11 #line 1 "sqlda.pgc" 12 #include <stdlib.h> 13 #include <string.h> 14 #include <limits.h> 15 16 17 #line 1 "regression.h" 18 19 20 21 22 23 24 #line 5 "sqlda.pgc" 25 26 27 28 #line 1 "sqlda.h" 29 #ifndef ECPG_SQLDA_H 30 #define ECPG_SQLDA_H 31 32 #ifdef _ECPG_INFORMIX_H 33 34 #include "sqlda-compat.h" 35 typedef struct sqlvar_compat sqlvar_t; 36 typedef struct sqlda_compat sqlda_t; 37 38 #else 39 40 #include "sqlda-native.h" 41 typedef struct sqlvar_struct sqlvar_t; 42 typedef struct sqlda_struct sqlda_t; 43 44 #endif 45 46 #endif /* ECPG_SQLDA_H */ 47 48 #line 7 "sqlda.pgc" 49 50 51 #line 1 "sqltypes.h" 52 #ifndef ECPG_SQLTYPES_H 53 #define ECPG_SQLTYPES_H 54 55 #include <limits.h> 56 57 #define CCHARTYPE ECPGt_char 58 #define CSHORTTYPE ECPGt_short 59 #define CINTTYPE ECPGt_int 60 #define CLONGTYPE ECPGt_long 61 #define CFLOATTYPE ECPGt_float 62 #define CDOUBLETYPE ECPGt_double 63 #define CDECIMALTYPE ECPGt_decimal 64 #define CFIXCHARTYPE 108 65 #define CSTRINGTYPE ECPGt_char 66 #define CDATETYPE ECPGt_date 67 #define CMONEYTYPE 111 68 #define CDTIMETYPE ECPGt_timestamp 69 #define CLOCATORTYPE 113 70 #define CVCHARTYPE ECPGt_varchar 71 #define CINVTYPE 115 72 #define CFILETYPE 116 73 #define CINT8TYPE ECPGt_long_long 74 #define CCOLLTYPE 118 75 #define CLVCHARTYPE 119 76 #define CFIXBINTYPE 120 77 #define CVARBINTYPE 121 78 #define CBOOLTYPE ECPGt_bool 79 #define CROWTYPE 123 80 #define CLVCHARPTRTYPE 124 81 #define CTYPEMAX 25 82 83 /* 84 * Values used in sqlda->sqlvar[i]->sqltype 85 */ 86 #define SQLCHAR ECPGt_char 87 #define SQLSMINT ECPGt_short 88 #define SQLINT ECPGt_int 89 #define SQLFLOAT ECPGt_double 90 #define SQLSMFLOAT ECPGt_float 91 #define SQLDECIMAL ECPGt_decimal 92 #define SQLSERIAL ECPGt_int 93 #define SQLDATE ECPGt_date 94 #define SQLDTIME ECPGt_timestamp 95 #define SQLTEXT ECPGt_char 96 #define SQLVCHAR ECPGt_char 97 #define SQLINTERVAL ECPGt_interval 98 #define SQLNCHAR ECPGt_char 99 #define SQLNVCHAR ECPGt_char 100 #ifdef HAVE_LONG_LONG_INT_64 101 #define SQLINT8 ECPGt_long_long 102 #define SQLSERIAL8 ECPGt_long_long 103 #else 104 #define SQLINT8 ECPGt_long 105 #define SQLSERIAL8 ECPGt_long 106 #endif 107 108 #endif /* ndef ECPG_SQLTYPES_H */ 109 110 #line 8 "sqlda.pgc" 111 112 113 /* exec sql whenever sqlerror stop ; */ 114 #line 10 "sqlda.pgc" 115 116 117 /* These shouldn't be under DECLARE SECTION */ 118 sqlda_t *inp_sqlda, *outp_sqlda; 119 120 static void 121 dump_sqlda(sqlda_t *sqlda) 122 { 123 int i; 124 125 if (sqlda == NULL) 126 { 127 printf("dump_sqlda called with NULL sqlda\n"); 128 return; 129 } 130 131 for (i = 0; i < sqlda->sqld; i++) 132 { 133 if (sqlda->sqlvar[i].sqlind && *(sqlda->sqlvar[i].sqlind) == -1) 134 printf("name sqlda descriptor: '%s' value NULL'\n", sqlda->sqlvar[i].sqlname); 135 else 136 switch (sqlda->sqlvar[i].sqltype) 137 { 138 case SQLCHAR: 139 printf("name sqlda descriptor: '%s' value '%s'\n", sqlda->sqlvar[i].sqlname, sqlda->sqlvar[i].sqldata); 140 break; 141 case SQLINT: 142 printf("name sqlda descriptor: '%s' value %d\n", sqlda->sqlvar[i].sqlname, *(int *)sqlda->sqlvar[i].sqldata); 143 break; 144 case SQLFLOAT: 145 printf("name sqlda descriptor: '%s' value %f\n", sqlda->sqlvar[i].sqlname, *(double *)sqlda->sqlvar[i].sqldata); 146 break; 147 case SQLDECIMAL: 148 { 149 char val[64]; 150 dectoasc((decimal *)sqlda->sqlvar[i].sqldata, val, 64, -1); 151 printf("name sqlda descriptor: '%s' value DECIMAL '%s'\n", sqlda->sqlvar[i].sqlname, val); 152 break; 153 } 154 } 155 } 156 } 157 158 int 159 main (void) 160 { 161 /* exec sql begin declare section */ 162 163 164 165 166 167 #line 57 "sqlda.pgc" 168 char * stmt1 = "SELECT * FROM t1" ; 169 170 #line 58 "sqlda.pgc" 171 char * stmt2 = "SELECT * FROM t1 WHERE id = ?" ; 172 173 #line 59 "sqlda.pgc" 174 int rec ; 175 176 #line 60 "sqlda.pgc" 177 int id ; 178 /* exec sql end declare section */ 179 #line 61 "sqlda.pgc" 180 181 182 char msg[128]; 183 184 ECPGdebug(1, stderr); 185 186 strcpy(msg, "connect"); 187 { ECPGconnect(__LINE__, 1, "ecpg1_regression" , NULL, NULL , "regress1", 0); 188 #line 68 "sqlda.pgc" 189 190 if (sqlca.sqlcode < 0) exit (1);} 191 #line 68 "sqlda.pgc" 192 193 194 strcpy(msg, "set"); 195 { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "set datestyle to iso", ECPGt_EOIT, ECPGt_EORT); 196 #line 71 "sqlda.pgc" 197 198 if (sqlca.sqlcode < 0) exit (1);} 199 #line 71 "sqlda.pgc" 200 201 202 strcpy(msg, "create"); 203 { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "create table t1 ( id integer , t text , d1 numeric , d2 float8 , c char ( 10 ) )", ECPGt_EOIT, ECPGt_EORT); 204 #line 79 "sqlda.pgc" 205 206 if (sqlca.sqlcode < 0) exit (1);} 207 #line 79 "sqlda.pgc" 208 209 210 strcpy(msg, "insert"); 211 { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "insert into t1 values ( 1 , 'a' , 1.0 , 1 , 'a' ) , ( 2 , null , null , null , null ) , ( 4 , 'd' , 4.0 , 4 , 'd' )", ECPGt_EOIT, ECPGt_EORT); 212 #line 85 "sqlda.pgc" 213 214 if (sqlca.sqlcode < 0) exit (1);} 215 #line 85 "sqlda.pgc" 216 217 218 strcpy(msg, "commit"); 219 { ECPGtrans(__LINE__, NULL, "commit"); 220 #line 88 "sqlda.pgc" 221 222 if (sqlca.sqlcode < 0) exit (1);} 223 #line 88 "sqlda.pgc" 224 225 226 /* SQLDA test for getting all records from a table */ 227 228 outp_sqlda = NULL; 229 230 strcpy(msg, "prepare"); 231 { ECPGprepare(__LINE__, NULL, 0, "st_id1", stmt1); 232 #line 95 "sqlda.pgc" 233 234 if (sqlca.sqlcode < 0) exit (1);} 235 #line 95 "sqlda.pgc" 236 237 238 strcpy(msg, "declare"); 239 ECPG_informix_reset_sqlca(); /* declare mycur1 cursor for $1 */ 240 #line 98 "sqlda.pgc" 241 242 243 strcpy(msg, "open"); 244 { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "declare mycur1 cursor for $1", 245 ECPGt_char_variable,(ECPGprepared_statement(NULL, "st_id1", __LINE__)),(long)1,(long)1,(1)*sizeof(char), 246 ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); 247 #line 101 "sqlda.pgc" 248 249 if (sqlca.sqlcode < 0) exit (1);} 250 #line 101 "sqlda.pgc" 251 252 253 /* exec sql whenever not found break ; */ 254 #line 103 "sqlda.pgc" 255 256 257 rec = 0; 258 while (1) 259 { 260 strcpy(msg, "fetch"); 261 { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch 1 from mycur1", ECPGt_EOIT, 262 ECPGt_sqlda, &outp_sqlda, 0L, 0L, 0L, 263 ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); 264 #line 109 "sqlda.pgc" 265 266 if (sqlca.sqlcode == ECPG_NOT_FOUND) break; 267 #line 109 "sqlda.pgc" 268 269 if (sqlca.sqlcode < 0) exit (1);} 270 #line 109 "sqlda.pgc" 271 272 273 printf("FETCH RECORD %d\n", ++rec); 274 dump_sqlda(outp_sqlda); 275 } 276 277 /* exec sql whenever not found continue ; */ 278 #line 115 "sqlda.pgc" 279 280 281 strcpy(msg, "close"); 282 { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "close mycur1", ECPGt_EOIT, ECPGt_EORT); 283 #line 118 "sqlda.pgc" 284 285 if (sqlca.sqlcode < 0) exit (1);} 286 #line 118 "sqlda.pgc" 287 288 289 strcpy(msg, "deallocate"); 290 { ECPGdeallocate(__LINE__, 1, NULL, "st_id1"); 291 #line 121 "sqlda.pgc" 292 293 if (sqlca.sqlcode < 0) exit (1);} 294 #line 121 "sqlda.pgc" 295 296 297 free(outp_sqlda); 298 299 /* SQLDA test for getting all records from a table 300 using the Informix-specific FETCH ... USING DESCRIPTOR 301 */ 302 303 outp_sqlda = NULL; 304 305 strcpy(msg, "prepare"); 306 { ECPGprepare(__LINE__, NULL, 0, "st_id2", stmt1); 307 #line 132 "sqlda.pgc" 308 309 if (sqlca.sqlcode < 0) exit (1);} 310 #line 132 "sqlda.pgc" 311 312 313 strcpy(msg, "declare"); 314 ECPG_informix_reset_sqlca(); /* declare mycur2 cursor for $1 */ 315 #line 135 "sqlda.pgc" 316 317 318 strcpy(msg, "open"); 319 { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "declare mycur2 cursor for $1", 320 ECPGt_char_variable,(ECPGprepared_statement(NULL, "st_id2", __LINE__)),(long)1,(long)1,(1)*sizeof(char), 321 ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); 322 #line 138 "sqlda.pgc" 323 324 if (sqlca.sqlcode < 0) exit (1);} 325 #line 138 "sqlda.pgc" 326 327 328 /* exec sql whenever not found break ; */ 329 #line 140 "sqlda.pgc" 330 331 332 rec = 0; 333 while (1) 334 { 335 strcpy(msg, "fetch"); 336 { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "fetch from mycur2", ECPGt_EOIT, 337 ECPGt_sqlda, &outp_sqlda, 0L, 0L, 0L, 338 ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); 339 #line 146 "sqlda.pgc" 340 341 if (sqlca.sqlcode == ECPG_NOT_FOUND) break; 342 #line 146 "sqlda.pgc" 343 344 if (sqlca.sqlcode < 0) exit (1);} 345 #line 146 "sqlda.pgc" 346 347 348 printf("FETCH RECORD %d\n", ++rec); 349 dump_sqlda(outp_sqlda); 350 } 351 352 /* exec sql whenever not found continue ; */ 353 #line 152 "sqlda.pgc" 354 355 356 strcpy(msg, "close"); 357 { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "close mycur2", ECPGt_EOIT, ECPGt_EORT); 358 #line 155 "sqlda.pgc" 359 360 if (sqlca.sqlcode < 0) exit (1);} 361 #line 155 "sqlda.pgc" 362 363 364 strcpy(msg, "deallocate"); 365 { ECPGdeallocate(__LINE__, 1, NULL, "st_id2"); 366 #line 158 "sqlda.pgc" 367 368 if (sqlca.sqlcode < 0) exit (1);} 369 #line 158 "sqlda.pgc" 370 371 372 free(outp_sqlda); 373 374 /* SQLDA test for getting one record using an input descriptor */ 375 376 /* Input sqlda has to be built manually */ 377 inp_sqlda = (sqlda_t *)malloc(sizeof(sqlda_t)); 378 memset(inp_sqlda, 0, sizeof(sqlda_t)); 379 inp_sqlda->sqld = 1; 380 inp_sqlda->sqlvar = malloc(sizeof(sqlvar_t)); 381 memset(inp_sqlda->sqlvar, 0, sizeof(sqlvar_t)); 382 383 inp_sqlda->sqlvar[0].sqltype = SQLINT; 384 inp_sqlda->sqlvar[0].sqldata = (char *)&id; 385 386 printf("EXECUTE RECORD 4\n"); 387 388 id = 4; 389 390 outp_sqlda = NULL; 391 392 strcpy(msg, "prepare"); 393 { ECPGprepare(__LINE__, NULL, 0, "st_id3", stmt2); 394 #line 181 "sqlda.pgc" 395 396 if (sqlca.sqlcode < 0) exit (1);} 397 #line 181 "sqlda.pgc" 398 399 400 strcpy(msg, "execute"); 401 { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_execute, "st_id3", 402 ECPGt_sqlda, &inp_sqlda, 0L, 0L, 0L, 403 ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, 404 ECPGt_sqlda, &outp_sqlda, 0L, 0L, 0L, 405 ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); 406 #line 184 "sqlda.pgc" 407 408 if (sqlca.sqlcode < 0) exit (1);} 409 #line 184 "sqlda.pgc" 410 411 412 dump_sqlda(outp_sqlda); 413 414 strcpy(msg, "deallocate"); 415 { ECPGdeallocate(__LINE__, 1, NULL, "st_id3"); 416 #line 189 "sqlda.pgc" 417 418 if (sqlca.sqlcode < 0) exit (1);} 419 #line 189 "sqlda.pgc" 420 421 422 free(inp_sqlda->sqlvar); 423 free(inp_sqlda); 424 free(outp_sqlda); 425 426 /* SQLDA test for getting one record using an input descriptor 427 * on a named connection 428 */ 429 430 { ECPGconnect(__LINE__, 1, "ecpg1_regression" , NULL, NULL , "con2", 0); 431 #line 199 "sqlda.pgc" 432 433 if (sqlca.sqlcode < 0) exit (1);} 434 #line 199 "sqlda.pgc" 435 436 437 /* Input sqlda has to be built manually */ 438 inp_sqlda = (sqlda_t *)malloc(sizeof(sqlda_t)); 439 memset(inp_sqlda, 0, sizeof(sqlda_t)); 440 inp_sqlda->sqld = 1; 441 inp_sqlda->sqlvar = malloc(sizeof(sqlvar_t)); 442 memset(inp_sqlda->sqlvar, 0, sizeof(sqlvar_t)); 443 444 inp_sqlda->sqlvar[0].sqltype = SQLINT; 445 inp_sqlda->sqlvar[0].sqldata = (char *)&id; 446 447 printf("EXECUTE RECORD 4\n"); 448 449 id = 4; 450 451 outp_sqlda = NULL; 452 453 strcpy(msg, "prepare"); 454 { ECPGprepare(__LINE__, "con2", 0, "st_id4", stmt2); 455 #line 218 "sqlda.pgc" 456 457 if (sqlca.sqlcode < 0) exit (1);} 458 #line 218 "sqlda.pgc" 459 460 461 strcpy(msg, "execute"); 462 { ECPGdo(__LINE__, 1, 1, "con2", 0, ECPGst_execute, "st_id4", 463 ECPGt_sqlda, &inp_sqlda, 0L, 0L, 0L, 464 ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, 465 ECPGt_sqlda, &outp_sqlda, 0L, 0L, 0L, 466 ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); 467 #line 221 "sqlda.pgc" 468 469 if (sqlca.sqlcode < 0) exit (1);} 470 #line 221 "sqlda.pgc" 471 472 473 dump_sqlda(outp_sqlda); 474 475 strcpy(msg, "commit"); 476 { ECPGtrans(__LINE__, "con2", "commit"); 477 #line 226 "sqlda.pgc" 478 479 if (sqlca.sqlcode < 0) exit (1);} 480 #line 226 "sqlda.pgc" 481 482 483 strcpy(msg, "deallocate"); 484 { ECPGdeallocate(__LINE__, 1, NULL, "st_id4"); 485 #line 229 "sqlda.pgc" 486 487 if (sqlca.sqlcode < 0) exit (1);} 488 #line 229 "sqlda.pgc" 489 490 491 free(inp_sqlda->sqlvar); 492 free(inp_sqlda); 493 free(outp_sqlda); 494 495 strcpy(msg, "disconnect"); 496 { ECPGdisconnect(__LINE__, "con2"); 497 #line 236 "sqlda.pgc" 498 499 if (sqlca.sqlcode < 0) exit (1);} 500 #line 236 "sqlda.pgc" 501 502 503 /* End test */ 504 505 strcpy(msg, "drop"); 506 { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "drop table t1", ECPGt_EOIT, ECPGt_EORT); 507 #line 241 "sqlda.pgc" 508 509 if (sqlca.sqlcode < 0) exit (1);} 510 #line 241 "sqlda.pgc" 511 512 513 strcpy(msg, "commit"); 514 { ECPGtrans(__LINE__, NULL, "commit"); 515 #line 244 "sqlda.pgc" 516 517 if (sqlca.sqlcode < 0) exit (1);} 518 #line 244 "sqlda.pgc" 519 520 521 strcpy(msg, "disconnect"); 522 { ECPGdisconnect(__LINE__, "CURRENT"); 523 #line 247 "sqlda.pgc" 524 525 if (sqlca.sqlcode < 0) exit (1);} 526 #line 247 "sqlda.pgc" 527 528 529 return 0; 530 } 531