LCOV - code coverage report
Current view: top level - src/interfaces/ecpg/test/sql - desc.pgc (source / functions) Coverage Total Hit
Test: PostgreSQL 20devel Lines: 100.0 % 70 70
Test Date: 2026-07-25 10:15:40 Functions: 100.0 % 1 1
Legend: Lines:     hit not hit
Branches: + taken - not taken # not executed
Branches: 50.0 % 74 37

             Branch data     Line data    Source code
       1                 :             : EXEC SQL INCLUDE ../regression;
       2                 :             : EXEC SQL WHENEVER SQLERROR SQLPRINT;
       3                 :             : 
       4                 :             : int
       5                 :           2 : main(void)
       6                 :             : {
       7                 :             :     EXEC SQL BEGIN DECLARE SECTION;
       8                 :           2 :     char *stmt1 = "INSERT INTO test1 VALUES ($1, $2)";
       9                 :           2 :     char *stmt2 = "SELECT * from test1 where a = $1 and b = $2";
      10                 :           2 :     char *stmt3 = "SELECT * from test1 where :var = a";
      11                 :             : 
      12                 :           2 :     int val1 = 1;
      13                 :           2 :     char val2[4] = "one", val2output[] = "AAA";
      14                 :           2 :     int val1output = 2, val2i = 0;
      15                 :           2 :     int val2null = -1;
      16                 :             :     int ind1, ind2;
      17                 :           2 :     char desc1[8] = "outdesc";
      18                 :             :     EXEC SQL END DECLARE SECTION;
      19                 :             : 
      20                 :           2 :     ECPGdebug(1, stderr);
      21                 :             : 
      22                 :           2 :     EXEC SQL ALLOCATE DESCRIPTOR indesc;
      23         [ -  + ]:           2 :     EXEC SQL ALLOCATE DESCRIPTOR :desc1;
      24         [ -  + ]:           2 : 
      25                 :           2 :     EXEC SQL SET DESCRIPTOR indesc VALUE 1 DATA = :val1;
      26         [ -  + ]:           2 :     EXEC SQL SET DESCRIPTOR indesc VALUE 2 INDICATOR = :val2i, DATA = :val2;
      27         [ -  + ]:           2 : 
      28                 :           2 :     EXEC SQL CONNECT TO REGRESSDB1;
      29         [ -  + ]:           2 : 
      30                 :           2 :     EXEC SQL CREATE TABLE test1 (a int, b text);
      31         [ -  + ]:           2 :     EXEC SQL PREPARE foo1 FROM :stmt1;
      32         [ -  + ]:           2 :     EXEC SQL PREPARE "Foo-1" FROM :stmt1;
      33         [ -  + ]:           2 :     EXEC SQL PREPARE foo2 FROM :stmt2;
      34         [ -  + ]:           2 :     EXEC SQL PREPARE foo3 FROM :stmt3;
      35         [ -  + ]:           2 : 
      36                 :           2 :     EXEC SQL EXECUTE foo1 USING SQL DESCRIPTOR indesc;
      37         [ -  + ]:           2 : 
      38                 :           2 :     EXEC SQL SET DESCRIPTOR indesc VALUE 1 DATA = 2;
      39         [ -  + ]:           2 :     EXEC SQL SET DESCRIPTOR indesc VALUE 2 INDICATOR = :val2null, DATA = :val2;
      40         [ -  + ]:           2 : 
      41                 :           2 :     EXEC SQL EXECUTE foo1 USING SQL DESCRIPTOR indesc;
      42         [ -  + ]:           2 : 
      43                 :           2 :     EXEC SQL SET DESCRIPTOR indesc VALUE 1 DATA = 3;
      44         [ -  + ]:           2 :     EXEC SQL SET DESCRIPTOR indesc VALUE 2 INDICATOR = :val1, DATA = 'this is a long test';
      45         [ -  + ]:           2 : 
      46                 :           2 :     EXEC SQL EXECUTE "Foo-1" USING SQL DESCRIPTOR indesc;
      47         [ -  + ]:           2 : 
      48                 :           2 :     EXEC SQL DEALLOCATE "Foo-1";
      49         [ -  + ]:           2 : 
      50                 :           2 :     EXEC SQL SET DESCRIPTOR indesc VALUE 1 DATA = :val1;
      51         [ -  + ]:           2 :     EXEC SQL SET DESCRIPTOR indesc VALUE 2 INDICATOR = :val2i, DATA = :val2;
      52         [ -  + ]:           2 : 
      53                 :           2 :     EXEC SQL EXECUTE foo2 USING SQL DESCRIPTOR indesc INTO SQL DESCRIPTOR :desc1;
      54         [ -  + ]:           2 : 
      55                 :           2 :     EXEC SQL GET DESCRIPTOR :desc1 VALUE 1 :val2output = DATA;
      56         [ -  + ]:           2 :     printf("output = %s\n", val2output);
      57                 :             : 
      58                 :             :     EXEC SQL DECLARE c1 CURSOR FOR foo2;
      59                 :           2 :     EXEC SQL OPEN c1 USING SQL DESCRIPTOR indesc;
      60         [ -  + ]:           2 : 
      61                 :           2 :     EXEC SQL FETCH next FROM c1 INTO :val1output:ind1, :val2output:ind2;
      62         [ -  + ]:           2 :     printf("val1=%d (ind1: %d) val2=%s (ind2: %d)\n",
      63                 :             :         val1output, ind1, val2output, ind2);
      64                 :             : 
      65                 :           2 :     EXEC SQL CLOSE c1;
      66         [ -  + ]:           2 : 
      67                 :           2 :     EXEC SQL SET DESCRIPTOR indesc COUNT = 1;
      68         [ -  + ]:           2 :     EXEC SQL SET DESCRIPTOR indesc VALUE 1 DATA = 2;
      69         [ -  + ]:           2 : 
      70                 :             :     EXEC SQL DECLARE c2 CURSOR FOR foo3;
      71                 :           2 :     EXEC SQL OPEN c2 USING SQL DESCRIPTOR indesc;
      72         [ -  + ]:           2 : 
      73                 :           2 :     EXEC SQL FETCH next FROM c2 INTO :val1output, :val2output :val2i;
      74   [ -  +  -  + ]:           2 :     printf("val1=%d val2=%s\n", val1output, val2i ? "null" : val2output);
      75                 :             : 
      76                 :           2 :     EXEC SQL CLOSE c2;
      77         [ -  + ]:           2 : 
      78                 :           2 :     EXEC SQL SELECT * INTO :val1output, :val2output:val2i FROM test1 where a = 3;
      79         [ -  + ]:           2 :     printf("val1=%d val2=%c%c%c%c warn=%c truncate=%d\n", val1output, val2output[0], val2output[1], val2output[2], val2output[3], sqlca.sqlwarn[0], val2i);
      80                 :             : 
      81                 :           2 :     EXEC SQL DROP TABLE test1;
      82         [ -  + ]:           2 :     EXEC SQL DEALLOCATE ALL;
      83         [ -  + ]:           2 :     EXEC SQL DISCONNECT;
      84         [ -  + ]:           2 : 
      85                 :           2 :     EXEC SQL DEALLOCATE DESCRIPTOR indesc;
      86         [ -  + ]:           2 :     EXEC SQL DEALLOCATE DESCRIPTOR :desc1;
      87         [ -  + ]:           2 : 
      88                 :           2 :     return 0;
      89                 :             : }
        

Generated by: LCOV version 2.0-1