1#include <stdio.h>
2#include <sys/time.h>
3#include <unistd.h>
4
5exec sql include sqlca;
6exec sql include ../regression;
7
8exec sql whenever sqlerror sqlprint;
9exec sql whenever not found sqlprint;
10
11static void
12print_result(long sec, long usec, char *text)
13{
14	if (usec < 0)
15	{
16		sec--;
17		usec+=1000000;
18	}
19	printf("%ld seconds and %ld microseconds for test %s\n", sec, usec, text);
20	exec sql vacuum;
21	sleep(1);
22}
23
24int
25main (void)
26{
27exec sql begin declare section;
28	long i;
29exec sql end declare section;
30	struct timeval tvs, tve;
31
32	exec sql connect to REGRESSDB1;
33
34	exec sql create table perftest1(number int4, ascii char(16));
35
36	exec sql create unique index number1 on perftest1(number);
37
38	exec sql create table perftest2(number int4, next_number int4);
39
40	exec sql create unique index number2 on perftest2(number);
41
42	exec sql commit;
43
44	exec sql set autocommit to on;
45
46	exec sql begin transaction;
47
48	gettimeofday(&tvs, NULL);
49
50	for (i = 0;i < 1407; i++)
51	{
52		exec sql begin declare section;
53			char text[16];
54		exec sql end declare section;
55
56		sprintf(text, "%ld", i);
57		exec sql insert into perftest1(number, ascii) values (:i, :text);
58		exec sql insert into perftest2(number, next_number) values (:i, :i+1);
59	}
60
61	exec sql commit;
62
63	gettimeofday(&tve, NULL);
64
65	print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "insert");
66
67	exec sql begin transaction;
68
69	gettimeofday(&tvs, NULL);
70
71	for (i = 0;i < 1407; i++)
72	{
73		exec sql begin declare section;
74			char text[16];
75		exec sql end declare section;
76
77		exec sql select ascii into :text from perftest1 where number = :i;
78	}
79
80	exec sql commit;
81
82	gettimeofday(&tve, NULL);
83
84	print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "selection&projection");
85
86	exec sql begin transaction;
87
88	gettimeofday(&tvs, NULL);
89
90	for (i = 0;i < 1407; i++)
91	{
92		exec sql begin declare section;
93			char text[16];
94		exec sql end declare section;
95
96		exec sql select perftest1.ascii into :text from perftest1, perftest2 where perftest1.number = perftest2.number and perftest2.number = :i;
97	}
98
99	exec sql commit;
100
101	gettimeofday(&tve, NULL);
102
103	print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "join");
104
105	exec sql begin transaction;
106
107	gettimeofday(&tvs, NULL);
108
109	exec sql update perftest2 set next_number = next_number + 1;
110
111	exec sql commit;
112
113	gettimeofday(&tve, NULL);
114
115	print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "update");
116
117	exec sql begin transaction;
118
119	gettimeofday(&tvs, NULL);
120
121	exec sql delete from perftest2;
122
123	exec sql commit;
124
125	gettimeofday(&tve, NULL);
126
127	print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "delete");
128
129	exec sql set autocommit = off;
130
131	exec sql drop index number2;
132
133	exec sql drop table perftest2;
134
135	exec sql drop index number1;
136
137	exec sql drop table perftest1;
138
139	exec sql commit;
140
141	exec sql disconnect;
142
143	return (0);
144}
145