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