short ExExeUtilTcb::extractObjectParts(
     char * objectName,
     char * sys,
     char * &cat,
     char * &sch,
     char * &tab,
     char * ansiNameBuf)
{
  Lng32 error = 0;

  error = ComRtGetOSClusterName(sys, 10, NULL);
  if (error <= 0)
    {
      return -1;
    }

  char * parts[3];
  Lng32 numParts;
  if (LateNameInfo::extractParts(objectName,
				 ansiNameBuf,
				 numParts,
				 parts,
				 FALSE) ||
      (numParts != 3))
    {
      return -1;
    }

  cat = parts[0];
  sch = parts[1];
  tab = parts[2];

  return 0;
}
Пример #2
0
// -----------------------------------------------------------------------
// Get the MP system catalog name.
// the guardian name of the system catalog is returned in sysCatBuffer and
// its size in sysCatLength.
// Error code or 0 is returned for error case and success case respectively.
// -----------------------------------------------------------------------
Lng32 ComRtGetMPSysCatName(
     char *sysCatBuffer,        // in/out
     Lng32 inputBufferLength,    // in
     char *inputSysName,        // in, must set to NULL if no name is passed.
     Lng32 *sysCatLength,	// out
     short *detailError,        // out
     CollHeap *heap)            // in

{
  // the following enum is replicated from ComMPSysCat.h for detail error
  enum MPSysCatErr { NSK_SYSTEM_NAME_ERROR
                   , NSK_CANNOT_LOCATE_MP_SYSTEM_CATALOG
                   , NSK_DEVICE_GETINFOBYLDEV_ERROR
                   , NSK_FILE_GETINFOBYNAME_ERROR
                   };

  const Int32 DISPLAYBUFSIZE = 8000;
  const Int32 FILENAMELEN = 36;

  char mpSysCat[FILENAMELEN];
  Lng32 nameSize = 0;

  Lng32 error = 0;
  *detailError = 0;
  char *sysCatLoc = NULL;

#ifdef _DEBUG
  sysCatLoc = getenv("MP_SYSTEM_CATALOG");  // for Dev+QA convenience
#endif

  if (sysCatLoc)
  {
    if (inputBufferLength < str_len(sysCatLoc))
      return -1;
    Int32 locLen = str_len (sysCatLoc);

    // add local system name if not specified.
    //
    if ((sysCatLoc[0] != '\\') && (sysCatLoc[0] == '$'))
      {
	mpSysCat[0] = '\\';

        error = ComRtGetOSClusterName (&mpSysCat[1], sizeof(mpSysCat), &nameSize);
	if (error || nameSize == 0)
	  {
	    *detailError = NSK_SYSTEM_NAME_ERROR;
	    return -1;
	  }
	nameSize++;
	mpSysCat[nameSize] = '.';
	str_cpy_all(&mpSysCat[nameSize+1], sysCatLoc, locLen);
	locLen = locLen + nameSize + 1;
	str_cpy_all (sysCatBuffer, mpSysCat,locLen );
      }
    else
      {
	if (sysCatLoc[0] != '\\')
	  return -1;
	str_cpy_all (sysCatBuffer, sysCatLoc, locLen);
      }
    sysCatBuffer[locLen] = '\0';
    *sysCatLength = locLen;
  }
  else {
    sysCatLoc = sysCatBuffer;
    *sysCatLoc = '\0';
    *sysCatLength = 0;


    // Allows some debugging/testing of this code while on NT.
    struct la_display_table_struct { char cat_volname[10], cat_subvolname[10]; };
    la_display_table_struct la   = { "??MPVOL ", "MPSYSCAT" };
    la_display_table_struct *tab = &la;
    char sysName[8] = "\\MPSYS ";


    size_t i, z;
    for (i = 0; i < 8; i++)  //padded with blanks
      {
	if (sysName[i] == ' ') break;
      }
#pragma nowarn(1506)   // warning elimination
    str_cpy_all(sysCatLoc, sysName, i);
#pragma warn(1506)  // warning elimination
    if (i)
      sysCatLoc[i++] = '.';
    z = i;

    for (i = 2; i < 8; i++)  // the first 2 chars are the sysnum, and the volume
                             // name is blank-padded
      {
	if (tab->cat_volname[i] == ' ') break;
      }
    //ComDEBUG(i > 2);
    sysCatLoc[z++] = '$';
#pragma nowarn(1506)   // warning elimination
#pragma nowarn(252)   // warning elimination
    str_cpy_all(sysCatLoc + z, tab->cat_volname + 2, i - 2);
#pragma warn(252)  // warning elimination
#pragma warn(1506)  // warning elimination
    z += i - 2;
    sysCatLoc[z++] = '.';
    for (i = 0; i < 8; i++)  //padded with blanks
      {
	if (tab->cat_subvolname[i] == ' ') break;
      }
#pragma nowarn(252)   // warning elimination
#pragma nowarn(1506)   // warning elimination
    str_cpy_all(sysCatLoc + z, tab->cat_subvolname, i);
#pragma warn(252)  // warning elimination
#pragma warn(1506)  // warning elimination
    sysCatLoc[z+i] = '\0';
#pragma nowarn(1506)   // warning elimination
    *sysCatLength = (Lng32)z+i;
#pragma warn(1506)  // warning elimination

  }

  return 0;
}