1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-28 23:42:10 +03:00

From: Michael Meskes <meskes@topsystem.de>

No more shift/reduce conflicts. Also all other bugs I know about are fixed.
This commit is contained in:
Marc G. Fournier
1998-02-27 12:59:33 +00:00
parent 1a6de0760d
commit 96ac738269
13 changed files with 163 additions and 88 deletions

View File

@ -1,8 +0,0 @@
create table meskes(name char8, born int4, age int2);
insert into meskes(name, born) values ('Petra', 19661202, 31);
insert into meskes(name, born) values ('Michael', 19660117, 32);
insert into meskes(name, born) values ('Carsten', 19910103, 7);
insert into meskes(name, born) values ('Marc', 19930907, 4);
insert into meskes(name, born) values ('Chris', 19970923, 0);

View 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 number on perftest(number);
if (SQLCODE)
db_error ("create i");
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);
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;
if (SQLCODE)
db_error ("commit");
}
exec sql drop index number;
if (SQLCODE)
db_error ("drop i");
exec sql drop table perftest;
if (SQLCODE)
db_error ("drop t");
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, "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;
}
gettimeofday(&tve, NULL);
print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "join");
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 drop index number2;
exec sql drop table perftest2;
exec sql drop index number1;
exec sql drop table perftest1;
exec sql commit;
return (0);
}

View File

@ -4,15 +4,14 @@ exec sql include sqlca;
extern void ECPGdebug(int n, FILE *dbgs);
exec sql whenever not found sqlprint;
exec sql whenever sqlerror do db_error(msg);
exec sql whenever not found do set_not_found();
exec sql whenever sqlerror sqlprint;
void
db_error (char *msg)
static int not_found = 0;
static void
set_not_found(void)
{
sqlca.sqlerrm.sqlerrmc[sqlca.sqlerrm.sqlerrml] = '\0';
printf ("%s: db error %s\n", msg, sqlca.sqlerrm.sqlerrmc);
exit (1);
not_found = 1;
}
int
@ -50,18 +49,13 @@ exec sql end declare section;
exec sql open cur;
while (1) {
/* make sure we leave this loop */
exec sql whenever not found break;
while (not_found == 0) {
strcpy(msg, "fetch");
exec sql fetch in cur into :personal;
printf ("%8.8s was born %d (age = %d)\n", personal.name.arr, personal.birth.born, personal.birth.age);
exec sql fetch cur into :personal;
if (not_found == 0)
printf ("%8.8s was born %d (age = %d)\n", personal.name.arr, personal.birth.born, personal.birth.age);
}
/* back to normal behaviour */
exec sql whenever not found sqlprint;
strcpy(msg, "close");
exec sql close cur;