Github user sandhyasun commented on a diff in the pull request:

    https://github.com/apache/trafodion/pull/1721#discussion_r225301717
  
    --- 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 --
    
    Yes this is creating the LIBRARIES table only. 


---

Reply via email to