summaryrefslogtreecommitdiffstats
path: root/src/interfaces/ecpg/test/performance/perftest.pgc
blob: c8a9934986603267bfc00eb16529a9c48564e251 (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
#include <stdio.h>
#include <sys/time.h>
#include <unistd.h>

exec sql include sqlca;
exec sql include ../regression;

exec sql whenever sqlerror sqlprint;
exec sql whenever not found sqlprint;

static void
print_result(long sec, long usec, char *text)
{
	if (usec < 0)
	{
		sec--;
		usec+=1000000;
	}
	printf("%ld seconds and %ld microseconds for test %s\n", sec, usec, text);
	exec sql vacuum;
	sleep(1);
}

int
main (void)
{
exec sql begin declare section;
	long i;
exec sql end declare section;
	struct timeval tvs, tve;

	exec sql connect to REGRESSDB1;

	exec sql create table perftest1(number int4, ascii char(16));

	exec sql create unique index number1 on perftest1(number);

	exec sql create table perftest2(number int4, next_number int4);

	exec sql create unique index number2 on perftest2(number);

	exec sql commit;

	exec sql set autocommit to on;

	exec sql begin transaction;

	gettimeofday(&tvs, NULL);

	for (i = 0;i < 1407; i++)
	{
		exec sql begin declare section;
			char text[16];
		exec sql end declare section;

		sprintf(text, "%ld", i);
		exec sql insert into perftest1(number, ascii) values (:i, :text);
		exec sql insert into perftest2(number, next_number) values (:i, :i+1);
	}

	exec sql commit;

	gettimeofday(&tve, NULL);

	print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "insert");

	exec sql begin transaction;

	gettimeofday(&tvs, NULL);

	for (i = 0;i < 1407; i++)
	{
		exec sql begin declare section;
			char text[16];
		exec sql end declare section;

		exec sql select ascii into :text from perftest1 where number = :i;
	}

	exec sql commit;

	gettimeofday(&tve, NULL);

	print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "selection&projection");

	exec sql begin transaction;

	gettimeofday(&tvs, NULL);

	for (i = 0;i < 1407; i++)
	{
		exec sql begin declare section;
			char text[16];
		exec sql end declare section;

		exec sql select perftest1.ascii into :text from perftest1, perftest2 where perftest1.number = perftest2.number and perftest2.number = :i;
	}

	exec sql commit;

	gettimeofday(&tve, NULL);

	print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "join");

	exec sql begin transaction;

	gettimeofday(&tvs, NULL);

	exec sql update perftest2 set next_number = next_number + 1;

	exec sql commit;

	gettimeofday(&tve, NULL);

	print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "update");

	exec sql begin transaction;

	gettimeofday(&tvs, NULL);

	exec sql delete from perftest2;

	exec sql commit;

	gettimeofday(&tve, NULL);

	print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "delete");

	exec sql set autocommit = off;

	exec sql drop index number2;

	exec sql drop table perftest2;

	exec sql drop index number1;

	exec sql drop table perftest1;

	exec sql commit;

	exec sql disconnect;

	return 0;
}