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

            Line data    Source code
       1              : #include <stdio.h>
       2              : #include <stdlib.h>
       3              : 
       4              : EXEC SQL include ../regression;
       5              : 
       6              : EXEC SQL BEGIN DECLARE SECTION;
       7              : struct TBempl
       8              : {
       9              :   long idnum;
      10              :   char name[21];
      11              :   short accs;
      12              :   char byte[20];
      13              : };
      14              : EXEC SQL END DECLARE SECTION;
      15              : 
      16              : EXEC SQL WHENEVER SQLERROR STOP;
      17              : 
      18              : int
      19            2 : main (void)
      20              : {
      21              :   EXEC SQL BEGIN DECLARE SECTION;
      22              :   struct TBempl empl;
      23            2 :   char *pointer = NULL;
      24            2 :   char *data = "\\001\\155\\000\\212";
      25              :   EXEC SQL END DECLARE SECTION;
      26              :   int i;
      27              : 
      28            2 :   ECPGdebug (1, stderr);
      29              : 
      30            2 :   empl.idnum = 1;
      31            2 :   EXEC SQL connect to REGRESSDB1;
      32            2 :   EXEC SQL set bytea_output = escape;
      33            2 :   EXEC SQL create table empl
      34              :     (idnum integer, name char (20), accs smallint, byte bytea);
      35            2 :   EXEC SQL insert into empl values (1, 'first user', 320, :data);
      36            2 :   EXEC SQL DECLARE C CURSOR FOR select name, accs, byte from empl where idnum =:empl.idnum;
      37            2 :   EXEC SQL OPEN C;
      38            2 :   EXEC SQL FETCH C INTO:empl.name,:empl.accs,:empl.byte;
      39            2 :   printf ("name=%s, accs=%d byte=%s\n", empl.name, empl.accs, empl.byte);
      40              : 
      41            2 :   EXEC SQL CLOSE C;
      42            2 : 
      43            2 :   memset(empl.name, 0, 21L);
      44            2 :   EXEC SQL DECLARE B BINARY CURSOR FOR select name, accs, byte from empl where idnum =:empl.idnum;
      45            2 :   EXEC SQL OPEN B;
      46            2 :   EXEC SQL FETCH B INTO :empl.name,:empl.accs,:empl.byte;
      47            2 :   EXEC SQL CLOSE B;
      48            2 : 
      49              :   /* do not print a.accs because big/little endian will have different outputs here */
      50            2 :   printf ("name=%s, byte=", empl.name);
      51           10 :   for (i=0; i<4; i++)
      52            8 :     printf("(%o)", (unsigned char)empl.byte[i]);
      53            2 :   printf("\n");
      54              : 
      55            2 :   EXEC SQL DECLARE A BINARY CURSOR FOR select byte from empl where idnum =:empl.idnum;
      56            2 :   EXEC SQL OPEN A;
      57            2 :   EXEC SQL FETCH A INTO :pointer;
      58            2 :   EXEC SQL CLOSE A;
      59            2 : 
      60            2 :   if (pointer) {
      61            2 :     printf ("pointer=");
      62           10 :     for (i=0; i<4; i++)
      63            8 :         printf("(%o)", (unsigned char)pointer[i]);
      64            2 :     printf("\n");
      65            2 :     free(pointer);
      66              :   }
      67              : 
      68            2 :   EXEC SQL disconnect;
      69            2 :   exit (0);
      70              : }
        

Generated by: LCOV version 2.0-1