From 3388d7f8014f819c6414dd55b92a2090a4ad6b66 Mon Sep 17 00:00:00 2001 From: mar Date: Wed, 14 Jul 1993 10:38:50 +0000 Subject: [PATCH] SQL translation --- backup/db2bkup.awk | 78 ++++++++++++++++++++++++---------------------- backup/db2rest.awk | 70 ++++++++++++++++++++++------------------- backup/dumprest.dc | 16 +--------- backup/rest_db.dc | 27 +++++++++++++--- 4 files changed, 103 insertions(+), 88 deletions(-) diff --git a/backup/db2bkup.awk b/backup/db2bkup.awk index 4dfef50f..abd951ed 100644 --- a/backup/db2bkup.awk +++ b/backup/db2bkup.awk @@ -9,63 +9,67 @@ BEGIN { print "/* This file automatically generated */"; print "/* Do not edit */"; print "#include "; + print "EXEC SQL INCLUDE sqlca;"; print "#include \"dump_db.h\""; - print "/* This file automatically generated */" > "bkup1.qc"; - print "/* Do not edit */" >> "bkup1.qc" - print "#include " >> "bkup1.qc" - print "FILE *open_file();" >> "bkup1.qc" - print "do_backups(prefix)\n\tchar *prefix;\n{" >>"bkup1.qc" + print; + print "/* This file automatically generated */" > "bkup1.dc"; + print "/* Do not edit */" >> "bkup1.dc" + print "#include " >> "bkup1.dc" + print "FILE *open_file();" >> "bkup1.dc" + print "do_backups(prefix)\n\tchar *prefix;\n{" >>"bkup1.dc" } -/^create/ { printf "dump_%s(f)\nFILE *f;\n", $2; - printf "\tdump_%s(open_file(prefix, \"%s\"));\n", $2, $2 >> "bkup1.qc" - tablename = $2; +$1=="#" { next; } + +/^create/ { printf "dump_%s(f)\nFILE *f;\n{\n\tEXEC SQL BEGIN DECLARE SECTION;\n", $3; + printf "\tdump_%s(open_file(prefix, \"%s\"));\n", $3, $3 >> "bkup1.dc" + tablename = $3; rangename = substr(tablename, 1, 1); - count = 0; } + count = 0; + next;} -$2 ~ /\=/ { +NF>=2 { vname[count] = $1; printf "/* %s */\n", $0 - if ($3 ~ /i[124]/) { - printf "## int t_%s;\n", vname[count] + if ($2 ~ /INTEGER/ || $2 ~ /SMALLINT/ || $2 ~ /INTEGER1/) { + printf "\tint\tt_%s;\n", vname[count] vtype[count]="int" - } else if ($3 ~ /text\([0-9]*\)/) { - t = split($3, temp, "(") - if (t != 2) printf "Can't parse %s\n", $3; + } else if ($2 ~ /CHAR\([0-9]*\)/) { + t = split($2, temp, "(") + if (t != 2) printf "Can't parse %s\n", $2; t = split(temp[2], temp2, ")") if (t != 2) printf "Can't parse %s\n", temp[2]; - printf "## char t_%s[%d];\n", vname[count], temp2[1]+1; - vtype[count]="str" - } else if ($3 ~ /date/) { - printf "## char t_%s[26];\n", vname[count] + printf "\tchar\tt_%s[%d];\n", vname[count], temp2[1]+1; vtype[count]="str" - } else if ($3 ~ /c[0-9]*/) { - t = split($3, temp, ",") - printf "## char t_%s[%d];\n", vname[count], substr(temp[1], 2) + 1 + } else if ($2 ~ /DATE/) { + printf "\tchar\tt_%s[26];\n", vname[count] vtype[count]="str" - } else printf "Unknown data type %s\n", $3; + } else printf "Unknown data type %s\n", $2; count++; } -/^\($/ { print "##{" } -/^\)$/ { - printf "## range of %s is %s\n", rangename, tablename - printf "## retrieve(\n" +/^\);$/ { + printf "\tEXEC SQL END DECLARE SECTION;\n"; + printf "\tEXEC SQL DECLARE c_%s CURSOR FOR\n", tablename; + printf "\t\tSELECT * FROM %s;\n", tablename; + printf "\tEXEC SQL OPEN c_%s;\n", tablename; + printf "\twhile(1) {\n\tEXEC SQL FETCH c_%s INTO\n", tablename; for (i = 0; i < count; i++) { if (i != 0) printf ",\n"; - printf "##\t\tt_%s = %s.%s", vname[i], rangename, vname[i] + printf "\t\t:t_%s", vname[i]; } - printf ")\n" - printf "## {\n" + printf ";\n"; + printf "\tif(sqlca.sqlcode != 0) break;\n"; for (i = 0; i < count; i++) { - if (i != 0) print "\t\tdump_sep(f);" - printf "\t\tdump_%s(f, t_%s);\n", vtype[i], vname[i] + if (i != 0) print "\tdump_sep(f);" + printf "\tdump_%s(f, t_%s);\n", vtype[i], vname[i]; } - printf "\t\tdump_nl(f);\n" - printf "## }\n" - printf "\tsafe_close(f);\n" - printf "##}\n" + printf "\t\tdump_nl(f);\n"; + printf "\t}\n"; + printf "\tEXEC SQL CLOSE c_%s;\n", tablename; + printf "\tsafe_close(f);\n"; + printf "}\n"; } END { print "/* All done */" - print "}" >>"bkup1.qc" + print "}" >>"bkup1.dc" } diff --git a/backup/db2rest.awk b/backup/db2rest.awk index 009068e9..fd07bb68 100644 --- a/backup/db2rest.awk +++ b/backup/db2rest.awk @@ -9,49 +9,49 @@ BEGIN { print "/* This file automatically generated */"; print "/* Do not edit */"; print "#include "; + print "EXEC SQL INCLUDE sqlca;"; print "void parse_nl(), parse_str(), parse_sep();" - print "/* This file automatically generated */" > "rest1.qc"; - print "/* Do not edit */" - print "#include " >> "rest1.qc" - print "FILE *open_file();" >> "rest1.qc" - print "do_restores(prefix)\n\tchar *prefix;\n{" >>"rest1.qc" + print "/* This file automatically generated */" > "rest1.dc"; + print "/* Do not edit */" >> "rest1.dc"; + print "#include " >> "rest1.dc"; + print "FILE *open_file();" >> "rest1.dc"; + print "do_restores(prefix)\n\tchar *prefix;\n{" >>"rest1.dc"; } -/^create/ { printf "restore_%s(f)\nFILE *f;\n", $2; - printf "\trestore_%s(open_file(prefix, \"%s\"));\n", $2, $2 >> "rest1.qc" - tablename = $2; +$1=="#" { next; } + +/^create/ { printf "restore_%s(f)\nFILE *f;\n", $3; + print "{\n\tEXEC SQL BEGIN DECLARE SECTION;"; + printf "\trestore_%s(open_file(prefix, \"%s\"));\n", $3, $3 >> "rest1.dc"; + tablename = $3; rangename = substr(tablename, 1, 1); - count = 0; } + count = 0; + next; } -$2 ~ /\=/ { +NF >= 2 { vname[count] = $1; printf "/* %s */\n", $0 - if ($3 ~ /i[124]/) { - printf "## int t_%s;\n", vname[count] + if ($2 ~ /INTEGER/ || $2 ~ /SMALLINT/ || $2 ~ /INTEGER1/) { + printf "\tint\tt_%s;\n", vname[count] vtype[count]="int" - } else if ($3 ~ /text\([0-9]*\)/) { - t = split($3, temp, "(") - if (t != 2) printf "Can't parse %s\n", $3; + } else if ($2 ~ /CHAR\([0-9]*\)/) { + t = split($2, temp, "(") + if (t != 2) printf "Can't parse %s\n", $2; t = split(temp[2], temp2, ")") if (t != 2) printf "Can't parse %s\n", temp[2]; - printf "## char t_%s[%d];\n", vname[count], temp2[1]+1; + printf "\tchar\tt_%s[%d];\n", vname[count], temp2[1]+1; vsize[count] = temp2[1]+1; vtype[count]="str" - } else if ($3 ~ /date/) { - printf "## char t_%s[26];\n", vname[count]; + } else if ($2 ~ /DATE/) { + printf "\tchar\tt_%s[26];\n", vname[count]; vtype[count]="str"; vsize[count]=26; - } else if ($3 ~ /c[0-9]*/) { - t = split($3, temp, ",") - vsize[count] = substr(temp[1], 2) + 1 - printf "## char t_%s[%d];\n", vname[count],vsize[count] - vtype[count]="str" - } else printf "Unknown data type %s\n", $3; + } else printf "Unknown data type %s\n", $2; count++; } -/^\($/ { print "##{" } -/^\)$/ { +/^\);$/ { + print "\tEXEC SQL END DECLARE SECTION;\n"; print "\twhile(!feof(f)) {" for (i = 0; i < count; i++) { if (i != 0) print "\t\tparse_sep(f);" @@ -62,16 +62,22 @@ $2 ~ /\=/ { } printf "\t\tparse_nl(f);\n" - printf "##\t\tappend %s (\n", tablename + printf "\t\tEXEC SQL INSERT INTO %s (\n", tablename; + for (i = 0; i < count; i++) { + if (i != 0) printf ",\n"; + printf "\t\t\t%s", vname[i]; + } + printf ")\n\t\tVALUES (\n"; for (i = 0; i < count; i++) { if (i != 0) printf ",\n"; - printf "##\t\t\t%s = t_%s", vname[i], vname[i] + printf "\t\t\t:t_%s", vname[i]; } - printf ")\n" - printf "\t}\n" + printf ");\n\t\tif (sqlca.sqlcode != 0) {\n" + printf "\t\t\tcom_err(\"restore\", 0, \"insert failed\");\n" + printf "\t\t\texit(2);\n\t\t}\n\t}\n" printf "\t(void) fclose(f);\n" - printf "##}\n" + printf "}\n" } END { print "/* All done */" - print "}" >>"rest1.qc" + print "}" >>"rest1.dc"; } diff --git a/backup/dumprest.dc b/backup/dumprest.dc index 580836a3..fa523c2d 100644 --- a/backup/dumprest.dc +++ b/backup/dumprest.dc @@ -22,20 +22,6 @@ punt(msg) char *msg; { perror(msg); -## exit + EXEC SQL DISCONNECT; exit(1); } - - - - -/* - * Local Variables: - * mode: c - * c-indent-level: 4 - * c-continued-statement-offset: 4 - * c-brace-offset: -4 - * c-argdecl-indent: 4 - * c-label-offset: -4 - * End: - */ diff --git a/backup/rest_db.dc b/backup/rest_db.dc index 21bd7070..b0a01a6f 100644 --- a/backup/rest_db.dc +++ b/backup/rest_db.dc @@ -17,6 +17,7 @@ static char *rcsid_rest_db_qc = "$Header$"; #include #include #include +EXEC SQL INCLUDE sqlca; #include "dump_db.h" @@ -27,19 +28,34 @@ main(argc, argv) { char buf[BUFSIZ]; char *prefix; - + EXEC SQL BEGIN DECLARE SECTION; + char *db; + EXEC SQL END DECLARE SECTION; + + if (argc != 2) { + fprintf(stderr, "Usage: %s database\n", argv[0]); + exit(1); + } + db = argv[1]; + if (!yes_or_no("Do you *REALLY* want to wipe the SMS database?")) { printf("I didn't think so\n"); exit(1); } - if (!yes_or_no("Have you initialized an empty database named smstemp?")) { + sprintf(buf, "Have you initialized an empty database named %s?", db); + if (!yes_or_no(buf)) { printf("You should have\n"); exit(1); } printf("Opening database: "); (void) fflush(stdout); -## ingres smstemp + EXEC SQL CONNECT :db; + if (sqlca.sqlcode != 0) { + com_err(argv[0], 0, "Ingres database open failed"); + exit(1); + } + EXEC SQL SET AUTOCOMMIT ON; printf(" done\n"); @@ -56,7 +72,8 @@ main(argc, argv) } do_restores(prefix); printf("Restore complete\n"); -## exit + EXEC SQL COMMIT; + EXEC SQL DISCONNECT; exit(0); /*NOTREACHED*/ } @@ -181,6 +198,8 @@ FILE *open_file(prefix, suffix) int fd; FILE *f; + EXEC SQL COMMIT WORK; + (void) strcpy(name, prefix); (void) strcat(name, suffix); -- 2.45.2