]> granicus.if.org Git - postgresql/blobdiff - src/interfaces/ecpg/test/perftest.pgc
From: Michael Meskes <meskes@topsystem.de>
[postgresql] / src / interfaces / ecpg / test / perftest.pgc
index 9fb63fe6fad534a8dc10676bf54260924286f0d9..6e212cf6b90139e23999fb1e51b33320cba7b6d8 100644 (file)
@@ -4,14 +4,18 @@
 
 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
@@ -22,19 +26,17 @@ exec sql begin declare section;
 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++)
        {
@@ -43,30 +45,69 @@ exec sql end declare section;
                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);
 }