Ejemplo n.º 1
0
 /**
  * @param string $check
  * @param bool $returnData
  * @return array empty if no violations
  */
 protected function checkForeignKey($check, $returnData = false, $omitDefinitions = false)
 {
     $def = $this->checks->getForeignKey($check);
     if (!$this->tableExists($def['childTable']) || !$this->tableExists($def['parentTable'])) {
         return array();
     }
     $violations = array();
     if ($omitDefinitions) {
         $violatingDef = false;
     } else {
         $violatingDef = $this->checkFKDefinition($def['childTable'], $def['childCol'], $def['parentTable'], $def['parentCol']);
     }
     $violatingRows = $this->countFKViolations($def['childTable'], $def['childCol'], $def['parentTable'], $def['parentCol'], $def['exceptions']);
     if ($violatingDef || $violatingRows) {
         if ($violatingDef) {
             $def['definitionMismatch'] = $violatingDef;
         }
         $def['violatingRowCount'] = $violatingRows;
         if ($returnData && $violatingRows) {
             $def['violatingRows'] = $this->getFKViolations($def['childTable'], $def['childCol'], $def['parentTable'], $def['parentCol'], $def['exceptions']);
         }
         $violations[] = $def;
     }
     return $violations;
 }