/** * get the foreign key object from a db result array * * @param string[] dbresult array * @return rdbms.DBForeignKeyConstraint */ private function parseForeignKey($db_constraint) { $cstring = $db_constraint['definition']; $bracestrings = $this->subBracerString($cstring); $strings = explode(' ', $cstring); $attributes = []; foreach ($bracestrings as $bracestring) { $attributes[] = $this->extractParams($bracestring); } $constraint = new \rdbms\DBForeignKeyConstraint(); $constraint->setSource($strings[5]); $constraint->setName($db_constraint['name']); $constraint->setKeys(array_combine($attributes[0], $attributes[1])); return $constraint; }
/** * get the foreign key object from a string * * @param string parsestring * @return rdbms.DBForeignKeyConstraint */ private function parseForeignKeyString($string) { $constraint = new \rdbms\DBForeignKeyConstraint(); $quotstrings = []; $bracestrings = []; $attributes = []; $pos = 10; while (++$pos < strlen($string)) { switch ($string[$pos]) { case '`': $quotstrings[] = $this->parseQuoteString($string, $pos, '`'); break; case '"': $quotstrings[] = $this->parseQuoteString($string, $pos, '"'); break; case '(': $bracestrings[] = $this->parseBracerString($string, $pos); break; } } foreach ($bracestrings as $bracestring) { $params = $this->extractParams($bracestring); foreach ($params as $i => $param) { $params[$i] = substr($param, 1, -1); } $attributes[] = $params; } $constraint->setKeys(array_combine($attributes[0], $attributes[1])); $constraint->setName($quotstrings[0]); $constraint->setSource($quotstrings[1]); return $constraint; }