]> granicus.if.org Git - postgresql/blob - src/interfaces/ecpg/test/perftest.pgc
From: Michael Meskes <meskes@topsystem.de>
[postgresql] / src / interfaces / ecpg / test / perftest.pgc
1 #include <stdio.h>
2 #include <sys/time.h>
3 #include <unistd.h>
4
5 exec sql include sqlca;
6
7 exec sql whenever sqlerror sqlprint;
8 exec sql whenever not found sqlprint;
9
10 static void
11 print_result(long sec, long usec, char *text)
12 {
13         if (usec < 0)
14         {
15                 sec--;
16                 usec+=1000000;
17         }
18         printf("I needed %ld seconds and %ld microseconds for the %s test.\n", sec, usec, text);
19 }
20
21 int
22 main ()
23 {
24 exec sql begin declare section;
25         long i;
26 exec sql end declare section;
27         struct timeval tvs, tve;
28
29         exec sql connect 'mm';
30
31         exec sql create table perftest1(number int4, ascii char16);
32
33         exec sql create unique index number1 on perftest1(number);
34
35         exec sql create table perftest2(number int4, next_number int4);
36
37         exec sql create unique index number2 on perftest2(number);
38
39         gettimeofday(&tvs, NULL);
40
41         for (i = 0;i < 1407; i++)
42         {
43                 exec sql begin declare section;
44                         char text[16];
45                 exec sql end declare section;
46
47                 sprintf(text, "%ld", i);
48                 exec sql insert into perftest1(number, ascii) values (:i, :text);
49                 exec sql insert into perftest2(number, next_number) values (:i, :i+1);
50
51                 exec sql commit;
52         }
53
54         gettimeofday(&tve, NULL);
55
56         print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "insert");
57
58         gettimeofday(&tvs, NULL);
59
60         for (i = 0;i < 1407; i++)
61         {
62                 exec sql begin declare section;
63                         char text[16];
64                 exec sql end declare section;
65
66                 exec sql select ascii into :text from perftest1 where number = :i;
67
68                 exec sql commit;
69         }
70
71         gettimeofday(&tve, NULL);
72
73         print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "selection&projection");
74
75         gettimeofday(&tvs, NULL);
76
77         for (i = 0;i < 1407; i++)
78         {
79                 exec sql begin declare section;
80                         char text[16];
81                 exec sql end declare section;
82
83                 exec sql select perftest1.ascii into :text from perftest1, perftest2 where perftest1.number = perftest2.number and perftest2.number = :i;
84
85                 exec sql commit;
86         }
87
88         gettimeofday(&tve, NULL);
89
90         print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "join");
91
92         gettimeofday(&tvs, NULL);
93
94         exec sql update perftest2 set next_number = next_number + 1;
95
96         exec sql commit;
97
98         gettimeofday(&tve, NULL);
99
100         print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "update");
101
102         exec sql drop index number2;
103
104         exec sql drop table perftest2;
105
106         exec sql drop index number1;
107
108         exec sql drop table perftest1;
109
110         exec sql commit;
111
112         return (0);
113 }