summaryrefslogtreecommitdiff
path: root/src/interfaces/libpgeasy/examples/pgnulltest.c
blob: a9e4204e18d199ca6e10b19e6b77db748520f641 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/*
 * pgnulltest.c
 *
*/

#define TEST_NON_NULLS

#include <stdio.h>
#include <time.h>
#include "libpq-fe.h"
#include "../halt.h"
#include "libpgeasy.h"

int
main(int argc, char **argv)
{
	char		query[4000];
	int			row = 1;
	int			aint;
	float		afloat;
	double		adouble;
	char		achar[11],
				achar16[17],
				abpchar[11],
				avarchar[51],
				atext[51];
	time_t		aabstime;
	int			aint_null,
				afloat_null,
				adouble_null,
				achar_null,
				achar16_null,
				abpchar_null,
				avarchar_null,
				atext_null,
				aabstime_null;
	char		optstr[256];

	if (argc != 2)
		halt("Usage:  %s database\n", argv[0]);

	snprintf(optstr, 256, "dbname=%s", argv[1]);
	connectdb(optstr);

	on_error_continue();
	doquery("DROP TABLE testfetch");
	on_error_stop();

	doquery("\
        CREATE TABLE testfetch( \
            aint    int4, \
            afloat  float4, \
            adouble float8, \
            achar   char, \
            achar16 char16, \
            abpchar char(10), \
            avarchar varchar(50), \
            atext   text, \
            aabstime abstime) \
        ");

#ifdef TEST_NON_NULLS
	sprintf(query, "INSERT INTO testfetch VALUES ( \
            0, \
			0, \
			0, \
			'', \
			'', \
			'', \
			'', \
			'', \
			'');");
#else
	sprintf(query, "INSERT INTO testfetch VALUES ( \
            NULL, \
			NULL, \
			NULL, \
			NULL, \
			NULL, \
			NULL, \
			NULL, \
			NULL, \
			NULL);");
#endif
	doquery(query);

	doquery("BEGIN WORK");
	doquery("DECLARE c_testfetch BINARY CURSOR FOR \
                    SELECT * FROM testfetch");

	doquery("FETCH ALL IN c_testfetch");

	if (fetchwithnulls(
					   &aint,
					   &aint_null,
					   &afloat,
					   &afloat_null,
					   &adouble,
					   &adouble_null,
					   achar,
					   &achar_null,
					   achar16,
					   &achar16_null,
					   abpchar,
					   &abpchar_null,
					   avarchar,
					   &avarchar_null,
					   atext,
					   &atext_null,
					   &aabstime,
					   &aabstime_null) != END_OF_TUPLES)
		printf("int %d\nfloat %f\ndouble %f\nchar %s\nchar16 %s\n\
bpchar %s\nvarchar %s\ntext %s\nabstime %s\n",
			   aint,
			   afloat,
			   adouble,
			   achar,
			   achar16,
			   abpchar,
			   avarchar,
			   atext,
			   ctime(&aabstime));
	printf("NULL:\nint %d\nfloat %d\ndouble %d\nchar %d\nchar16 %d\n\
bpchar %d\nvarchar %d\ntext %d\nabstime %d\n",
		   aint_null,
		   afloat_null,
		   adouble_null,
		   achar_null,
		   achar16_null,
		   abpchar_null,
		   avarchar_null,
		   atext_null,
		   aabstime_null);


	doquery("CLOSE c_testfetch");
	doquery("COMMIT WORK");
	printf("--- %-d rows inserted so far\n", row);

	row++;

	disconnectdb();
	return 0;
}