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:
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
|
Reference in New Issue
Block a user