summaryrefslogtreecommitdiffstats
path: root/src/interfaces/ecpg/test/performance/perftest.pgc
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/ecpg/test/performance/perftest.pgc')
-rw-r--r--src/interfaces/ecpg/test/performance/perftest.pgc144
1 files changed, 144 insertions, 0 deletions
diff --git a/src/interfaces/ecpg/test/performance/perftest.pgc b/src/interfaces/ecpg/test/performance/perftest.pgc
new file mode 100644
index 0000000..c8a9934
--- /dev/null
+++ b/src/interfaces/ecpg/test/performance/perftest.pgc
@@ -0,0 +1,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;
+}