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