Github user zellerh commented on a diff in the pull request:
https://github.com/apache/trafodion/pull/1721#discussion_r221747417
--- Diff: core/sql/sqlcomp/CmpSeabaseDDLroutine.cpp ---
@@ -1925,3 +2730,568 @@ short
CmpSeabaseDDL::createSeabaseLibmgrCPPLib(ExeCliInterface * cliInterface)
}
return 0;
}
+
+short CmpSeabaseDDL::upgradeLibraries(ExeCliInterface * cliInterface,
+ CmpDDLwithStatusInfo *mdui)
+{
+Lng32 cliRC = 0;
+
+ while (1) // exit via return stmt in switch
+ {
+ switch (mdui->subStep())
+ {
+ case 0:
+ {
+ mdui->setMsg("Upgrade Libraries: Started");
+ mdui->subStep()++;
+ mdui->setEndStep(FALSE);
+
+ return 0;
+ }
+ break;
+
+ case 1:
+ {
+ mdui->setMsg(" Start: Drop Old Libraries");
+ mdui->subStep()++;
+ mdui->setEndStep(FALSE);
+
+ return 0;
+ }
+ break;
+
+ case 2:
+ {
+ // drop old libraries
+ if (dropLibraries(cliInterface, TRUE/*old */))
+ return -3; // error, but no recovery needed
+
+ mdui->setMsg(" End: Drop Old Libraries");
+ mdui->subStep()++;
+ mdui->setEndStep(FALSE);
+
+ return 0;
+ }
+ break;
+
+ case 3:
+ {
+ mdui->setMsg(" Start: Rename Current Libraries");
+ mdui->subStep()++;
+ mdui->setEndStep(FALSE);
+
+ return 0;
+ }
+ break;
+
+ case 4:
+ {
+ // rename current libraries tables to *_OLD_LIBRARIES
+ if (alterRenameLibraries(cliInterface, TRUE))
+ return -2; // error, need to undo the rename only
+
+ mdui->setMsg(" End: Rename Current Libraries");
+ mdui->subStep()++;
+ mdui->setEndStep(FALSE);
+
+ return 0;
+ }
+ break;
+
+ case 5:
+ {
+ mdui->setMsg(" Start: Create New Libraries");
+ mdui->subStep()++;
+ mdui->setEndStep(FALSE);
+
+ return 0;
+ }
+ break;
+
+ case 6:
+ {
+ // create new libraries
+ if (createLibraries(cliInterface))
+ return -1; // error, need to drop new libraies then undo
rename
+
+ mdui->setMsg(" End: Create New Libraries");
+ mdui->subStep()++;
+ mdui->setEndStep(FALSE);
+
+ return 0;
+ }
+ break;
+
+ case 7:
+ {
+ mdui->setMsg(" Start: Copy Old Libraries Contents ");
+ mdui->subStep()++;
+ mdui->setEndStep(FALSE);
+
+ return 0;
+ }
+ break;
+
+ case 8:
+ {
+ // copy old contents into new
+
+ if (copyOldLibrariesToNew(cliInterface))
+ {
+ mdui->setMsg(" Copy Old Libraries failed ! Drop and
recreate the following : ");
+ //return -1; // error, need to drop new libraries then
undo rename
+ }
+
+ mdui->setMsg(" End: Copy Old Libraries Contents ");
+ mdui->subStep()++;
+ mdui->setEndStep(FALSE);
+
+ return 0;
+ }
+ break;
+
+ case 9:
+ {
+ mdui->setMsg("Upgrade Libraries: Done except for cleaning up");
+ mdui->setSubstep(0);
+ mdui->setEndStep(TRUE);
+
+ return 0;
+ }
+ break;
+
+ default:
+ return -1;
+ }
+ } // while
+
+ return 0;
+}
+
+short CmpSeabaseDDL::upgradeLibrariesComplete(ExeCliInterface *
cliInterface,
+ CmpDDLwithStatusInfo *mdui)
+{
+ switch (mdui->subStep())
+ {
+ case 0:
+ {
+ mdui->setMsg("Upgrade Libraries: Drop old libraries");
+ mdui->subStep()++;
+ mdui->setEndStep(FALSE);
+
+ return 0;
+ }
+ break;
+ case 1:
+ {
+ // drop old libraries; ignore errors
+ dropLibraries(cliInterface, TRUE/*old repos*/, FALSE/*no schema
drop*/);
+
+ mdui->setMsg("Upgrade Libraries: Drop Old Libraries done");
+ mdui->setEndStep(TRUE);
+ mdui->setSubstep(0);
+
+ return 0;
+ }
+ break;
+
+ default:
+ return -1;
+ }
+
+return 0;
+}
+
+
+short CmpSeabaseDDL::upgradeLibrariesUndo(ExeCliInterface * cliInterface,
+ CmpDDLwithStatusInfo *mdui)
+{
+ Lng32 cliRC = 0;
+
+ while (1) // exit via return stmt in switch
+ {
+ switch (mdui->subStep())
+ {
+ // error return codes from upgradeLibraries can be mapped to
+ // the right recovery substep by this formula: substep = -(retcode
+ 1)
+ case 0: // corresponds to -1 return code from upgradeRepos (or
+ // to full recovery after some error after upgradeRepos)
+ case 1: // corresponds to -2 return code from upgradeRepos
+ case 2: // corresponds to -3 return code from upgradeRepos
+ {
+ mdui->setMsg("Upgrade Libraries: Restoring Old Libraries");
+ mdui->setSubstep(2*mdui->subStep()+3); // go to appropriate
case
+ mdui->setEndStep(FALSE);
+
+ return 0;
+ }
+ break;
+
+ case 3:
+ {
+ mdui->setMsg(" Start: Drop New Libraries");
+ mdui->subStep()++;
+ mdui->setEndStep(FALSE);
+
+ return 0;
+ }
+ break;
+
+ case 4:
+ {
+ // drop new Libraries; ignore errors
+ dropLibraries(cliInterface, FALSE/*new repos*/,
+ TRUE /* don't drop new tables that haven't been
upgraded */);
+ cliInterface->clearGlobalDiags();
+ mdui->setMsg(" End: Drop New Libraries");
+ mdui->subStep()++;
+ mdui->setEndStep(FALSE);
+
+ return 0;
+ }
+ break;
+
+ case 5:
+ {
+ mdui->setMsg(" Start: Rename Old Libraries back to New");
+ mdui->subStep()++;
+ mdui->setEndStep(FALSE);
+
+ return 0;
+ }
+ break;
+
+ case 6:
+ {
+ // rename old Libraries to current; ignore errors
+ alterRenameLibraries(cliInterface, FALSE);
+ cliInterface->clearGlobalDiags();
+ mdui->setMsg(" End: Rename Old Libraries back to New");
+ mdui->subStep()++;
+ mdui->setEndStep(FALSE);
+
+ return 0;
+ }
+ break;
+
+ case 7:
+ {
+ mdui->setMsg("Upgrade Libraries: Restore done");
+ mdui->setSubstep(0);
+ mdui->setEndStep(TRUE);
+
+ return 0;
+ }
+ break;
+
+ default:
+ return -1;
+ }
+ } // while
+
+ return 0;
+
+}
+
+short CmpSeabaseDDL::createLibraries(ExeCliInterface * cliInterface)
--- End diff --
This name confused me somewhat. As far as I understand it now, this creates
the new ```"_MD_".LIBRARIES``` table, but not any libraries.
---