From f0888cca91df3d945e7633014928b4d112ef6040 Mon Sep 17 00:00:00 2001 From: mar Date: Tue, 9 Feb 1993 16:46:08 +0000 Subject: [PATCH] handle failures better --- dbck/dbck.dc | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/dbck/dbck.dc b/dbck/dbck.dc index 12a214b3..49fe9f30 100644 --- a/dbck/dbck.dc +++ b/dbck/dbck.dc @@ -102,14 +102,11 @@ EXEC SQL END DECLARE SECTION; IIseterr(ingerr); printf("Opening database %s...", database); fflush(stdout); -/* ingres database */ EXEC SQL CONNECT :database; printf("done\n"); -/* retrieve (dcmenable = values.value) where values.name = "dcm_enable" */ EXEC SQL SELECT value INTO :dcmenable FROM numvalues WHERE name='dcm_enable'; dprintf("DCM disabled (was %d)\n", dcmenable); -/* replace values (value = 0) where values.name = "dcm_enable" */ EXEC SQL UPDATE numvalues SET value=0 WHERE name='dcm_enable'; /* Begin transaction here. */ @@ -133,6 +130,7 @@ EXEC SQL END DECLARE SECTION; ingerr(num) int *num; { + if (*num == 100) return; printf("An ingres error occuurred, code %d\n", *num); printf("Aborting...\n"); if (!abort_p) { @@ -162,12 +160,9 @@ int interrupt() EXEC SQL ROLLBACK WORK; } -/* replace values (value = dcmenable) where values.name = "dcm_enable" */ EXEC SQL UPDATE numvalues SET value=:dcmenable WHERE name='dcm_enable'; -/* exit */ - /* No equivalent (?) */ exit(0); } @@ -185,15 +180,11 @@ cleanup() EXEC SQL END DECLARE SECTION; while (sq_get_data(modtables, &tab)) { -/* replace tblstats (modtime = "now") where tblstats.table = tab */ EXEC SQL REPEATED UPDATE tblstats SET modtime='now' WHERE table_name = :tab; } -/* replace values (value = dcmenable) where values.name = "dcm_enable" */ EXEC SQL UPDATE numvalues SET value = :dcmenable WHERE name='dcm_enable'; -/* exit */ - /* No equivalent (?) */ } @@ -201,8 +192,16 @@ out_of_mem(msg) char *msg; { fprintf(stderr, "Out of memory while %s\n", msg); -/* end transaction */ - EXEC SQL COMMIT WORK; - cleanup(); + if (prompt("Save database changes")) { + /* break out of a retrieve loop */ + IIbreak(); + + EXEC SQL COMMIT WORK; + cleanup(); + exit(1); + } + printf("Aborting transaction\n"); + IIbreak(); + EXEC SQL ROLLBACK WORK; exit(1); } -- 2.45.1