LCOV - code coverage report
Current view: top level - src/interfaces/ecpg/test/sql - execute.pgc (source / functions) Coverage Total Hit
Test: PostgreSQL 19devel Lines: 100.0 % 66 66
Test Date: 2026-02-28 12:14:50 Functions: 100.0 % 1 1
Legend: Lines:     hit not hit

            Line data    Source code
       1              : #include <stdlib.h>
       2              : #include <string.h>
       3              : #include <stdlib.h>
       4              : #include <stdio.h>
       5              : 
       6              : exec sql include ../regression;
       7              : 
       8              : exec sql whenever sqlerror sqlprint;
       9              : 
      10              : int
      11            2 : main(void)
      12              : {
      13              : exec sql begin declare section;
      14              :     int amount[8];
      15            2 :     int increment=100;
      16              :     char name[8][8];
      17              :     char letter[8][1];
      18              :     char command[128];
      19              : exec sql end declare section;
      20              :     int i,j;
      21              : 
      22            2 :     ECPGdebug(1, stderr);
      23              : 
      24            2 :     exec sql connect to REGRESSDB1 as main;
      25            2 :     exec sql create table test (name char(8), amount int, letter char(1));
      26            2 :     exec sql commit;
      27            2 : 
      28              :     /* test handling of embedded quotes in EXECUTE IMMEDIATE "literal" */
      29            2 :     exec sql execute immediate "insert into test (name, \042amount\042, letter) values ('db: ''r1''', 1, 'f')";
      30            2 : 
      31            2 :     sprintf(command, "insert into test (name, amount, letter) values ('db: ''r1''', 2, 't')");
      32            2 :     exec sql execute immediate :command;
      33            2 : 
      34            2 :     sprintf(command, "insert into test (name, amount, letter) select name, amount+10, letter from test");
      35            2 :     exec sql execute immediate :command;
      36            2 : 
      37            2 :     printf("Inserted %ld tuples via execute immediate\n", sqlca.sqlerrd[2]);
      38              : 
      39            2 :     sprintf(command, "insert into test (name, amount, letter) select name, amount+$1, letter from test");
      40            2 :     exec sql prepare I from :command;
      41            2 :     exec sql execute I using :increment;
      42            2 : 
      43            2 :     printf("Inserted %ld tuples via prepared execute\n", sqlca.sqlerrd[2]);
      44              : 
      45            2 :     exec sql commit;
      46            2 : 
      47            2 :     sprintf (command, "select * from test");
      48              : 
      49            2 :     exec sql prepare f from :command;
      50            2 :     exec sql declare CUR cursor for f;
      51              : 
      52            2 :     exec sql open CUR;
      53            2 :     exec sql fetch 8 in CUR into :name, :amount, :letter;
      54            2 : 
      55           18 :     for (i=0, j=sqlca.sqlerrd[2]; i<j; i++)
      56              :     {
      57              :         exec sql begin declare section;
      58           16 :         char n[8], l = letter[i][0];
      59           16 :         int a = amount[i];
      60              :         exec sql end declare section;
      61              : 
      62           16 :         strncpy(n, name[i], 8);
      63           16 :         printf("name[%d]=%8.8s\tamount[%d]=%d\tletter[%d]=%c\n", i, n, i, a, i, l);
      64              :     }
      65              : 
      66            2 :     exec sql close CUR;
      67            2 :     exec sql deallocate f;
      68            2 : 
      69            2 :     sprintf (command, "select * from test where amount = $1");
      70              : 
      71            2 :     exec sql prepare f from :command;
      72            2 :     exec sql declare CUR2 cursor for f;
      73              : 
      74            2 :     exec sql open CUR2 using 1;
      75            2 :     exec sql fetch in CUR2 into :name, :amount, :letter;
      76            2 : 
      77            4 :     for (i=0, j=sqlca.sqlerrd[2]; i<j; i++)
      78              :     {
      79              :         exec sql begin declare section;
      80            2 :         char n[8], l = letter[i][0];
      81            2 :         int a = amount[i];
      82              :         exec sql end declare section;
      83              : 
      84            2 :         strncpy(n, name[i], 8);
      85            2 :         printf("name[%d]=%8.8s\tamount[%d]=%d\tletter[%d]=%c\n", i, n, i, a, i, l);
      86              :     }
      87              : 
      88            2 :     exec sql close CUR2;
      89            2 :     exec sql deallocate f;
      90            2 : 
      91            2 :     sprintf (command, "select * from test where amount = $1");
      92              : 
      93            2 :     exec sql prepare f from :command;
      94            2 :     exec sql execute f using 2 into :name, :amount, :letter;
      95            2 : 
      96            4 :     for (i=0, j=sqlca.sqlerrd[2]; i<j; i++)
      97              :     {
      98              :         exec sql begin declare section;
      99            2 :         char n[8], l = letter[i][0];
     100            2 :         int a = amount[i];
     101              :         exec sql end declare section;
     102              : 
     103            2 :         strncpy(n, name[i], 8);
     104            2 :         printf("name[%d]=%8.8s\tamount[%d]=%d\tletter[%d]=%c\n", i, n, i, a, i, l);
     105              :     }
     106              : 
     107            2 :     exec sql deallocate f;
     108            2 :     exec sql drop table test;
     109            2 :     exec sql commit;
     110            2 :     exec sql disconnect;
     111            2 : 
     112            2 :     return 0;
     113              : }
        

Generated by: LCOV version 2.0-1