exec sql include sqlca;
-#define SQLCODE sqlca.sqlcode
+exec sql whenever sqlerror sqlprint;
+exec sql whenever not found sqlprint;
-void
-db_error (char *msg)
+static void
+print_result(long sec, long usec, char *text)
{
- sqlca.sqlerrm.sqlerrmc[sqlca.sqlerrm.sqlerrml] = '\0';
- printf ("%s: db error %s\n", msg, sqlca.sqlerrm.sqlerrmc);
- exit (1);
+ if (usec < 0)
+ {
+ sec--;
+ usec+=1000000;
+ }
+ printf("I needed %ld seconds and %ld microseconds for the %s test.\n", sec, usec, text);
}
int
exec sql end declare section;
struct timeval tvs, tve;
- gettimeofday(&tvs, NULL);
-
exec sql connect 'mm';
- if (SQLCODE)
- db_error ("connect");
- exec sql create table perftest(number int4, ascii char16);
- if (SQLCODE)
- db_error ("create t");
+ exec sql create table perftest1(number int4, ascii char16);
+
+ exec sql create unique index number1 on perftest1(number);
+
+ exec sql create table perftest2(number int4, next_number int4);
- exec sql create unique index number on perftest(number);
- if (SQLCODE)
- db_error ("create i");
+ exec sql create unique index number2 on perftest2(number);
+
+ gettimeofday(&tvs, NULL);
for (i = 0;i < 1407; i++)
{
exec sql end declare section;
sprintf(text, "%ld", i);
- exec sql insert into perftest(number, ascii) values (:i, :text);
- if (SQLCODE)
- db_error ("insert");
+ 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");
+
+ 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");
+
+ 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;
- if (SQLCODE)
- db_error ("commit");
}
- exec sql drop index number;
- if (SQLCODE)
- db_error ("drop i");
+ gettimeofday(&tve, NULL);
+
+ print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "join");
+
+ gettimeofday(&tvs, NULL);
- exec sql drop table perftest;
- if (SQLCODE)
- db_error ("drop t");
+ exec sql update perftest2 set next_number = next_number + 1;
exec sql commit;
- if (SQLCODE)
- db_error ("commit");
gettimeofday(&tve, NULL);
- printf("I needed %ld seconds and %ld microseconds for this test\n", tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec);
+ print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "update");
+
+ exec sql drop index number2;
+
+ exec sql drop table perftest2;
+
+ exec sql drop index number1;
+
+ exec sql drop table perftest1;
+
+ exec sql commit;
return (0);
}