Ejemplo n.º 1
0
  ERR RoundRobinCategory::canFreezeConfig()
  {
    if (getState() != STAT_CAT_CONFIG)
    {
      return CONFIG_ALREADY_FROZEN;
    }
    
    // make sure there no unpaired players in singles or doubles
    if ((getMatchType() != SINGLES) && (hasUnpairedPlayers()))
    {
      return UNPAIRED_PLAYERS;
    }
    
    // make sure we have at least three players
    PlayerPairList pp = getPlayerPairs();
    if (pp.size() < 3)
    {
      return INVALID_PLAYER_COUNT;
    }

    // make sure we have a valid group configuration
    KO_Config cfg = KO_Config(getParameter_string(GROUP_CONFIG));
    if (!(cfg.isValid(pp.size())))
    {
      return INVALID_KO_CONFIG;
    }
    
    return OK;
  }
NAString
ElemDDLConstraintRI::getMatchTypeAsNAString() const
{
  switch (getMatchType())
  {
  case COM_NONE_MATCH_OPTION :
    return NAString("Match phrase not specified");
  case COM_FULL_MATCH_OPTION :
    return NAString("MATCH FULL");
  case COM_PARTIAL_MATCH_OPTION :
    return NAString("MATCH PARTIAL");
  default :
    ABORT("internal logic error");
    return NAString();
  }
}
NATraceList
ElemDDLConstraintRI::getDetailInfo() const
{
  //
  // constraint name and related information
  //

  NAString        detailText;
  NATraceList detailTextList = ElemDDLConstraint::getDetailInfo();

  //
  // match type
  //

  if (getMatchType() EQU COM_NONE_MATCH_OPTION)
  {
    detailTextList.append("Match type not specified.");
  }
  else
  {
    detailText = "Match type: ";
    detailText += getMatchTypeAsNAString();
    detailTextList.append(detailText);
  }

  //
  // delete rule
  //

  switch (getDeleteRule())
  {
  case COM_UNKNOWN_DELETE_RULE :
    if (isDeleteRuleSpecified())
    {
      ABORT("internal logic error");
    }
    detailTextList.append("Delete Rule not specified.");
    break;

  case COM_CASCADE_DELETE_RULE :
    detailTextList.append("Delete rule: Cascade");
    break;

  case COM_NO_ACTION_DELETE_RULE :
    detailTextList.append("Delete rule: No Action");
    break;

  case COM_SET_DEFAULT_DELETE_RULE :
    detailTextList.append("Delete rule: Set Default");
    break;

  case COM_SET_NULL_DELETE_RULE :
    detailTextList.append("Delete rule: Set Null");
    break;

  default :
    ABORT("internal logic error");
    break;
  }

  //
  // update rule
  //

  switch (getUpdateRule())
  {
  case COM_UNKNOWN_UPDATE_RULE :
    if (isUpdateRuleSpecified())
    {
      ABORT("internal logic error");
    }
    detailTextList.append("Update Rule not specified.");
    break;

  case COM_CASCADE_UPDATE_RULE :
    detailTextList.append("Update rule: Cascade");
    break;

  case COM_NO_ACTION_UPDATE_RULE :
    detailTextList.append("Update rule: No Action");
    break;

  case COM_SET_DEFAULT_UPDATE_RULE :
    detailTextList.append("Update rule: Set Default");
    break;

  case COM_SET_NULL_UPDATE_RULE :
    detailTextList.append("Update rule: Set Null");
    break;

  default :
    ABORT("internal logic error");
    break;
  }

  //
  // referencing information
  //

  CollIndex nbrRefCols;
  const ElemDDLColNameArray & cols = getReferencingColumns();

  nbrRefCols = cols.entries();

  if (nbrRefCols EQU 0)
  {
    detailTextList.append("Referencing column list is empty.");
  }
  else
  {
    detailText = "Referencing column list [";
    detailText += LongToNAString((Lng32)nbrRefCols);
    detailText += " element(s)]:";
    detailTextList.append(detailText);
  
    for (CollIndex i = 0; i < nbrRefCols; i++)
    {
      detailText = "[referencing column ";
      detailText +=  LongToNAString((Lng32)i);
      detailText += "]";
      detailTextList.append(detailText);
  
      detailTextList.append("    ", cols[i]->getDetailInfo());
    }
  }

  //
  // referenced information
  //

  ElemDDLReferences * pRefd = children_[INDEX_REFERENCED_TABLE_AND_COLUMNS]
        ->castToElemDDLReferences();
  
  detailTextList.append(pRefd->getDetailInfo());

  return detailTextList;
}