Files
pathfinder/app/Db/Sql/Mysql/Constraint.php
Mark Friedrich cf553b7c20 - Upgraded "[_Cortex_](https://github.com/ikkez/f3-cortex)" PHP dependency to current dev-master
- Fixed "Deprecation" warning on Composer `1.10.5`, closed #951
2020-04-16 18:20:35 +02:00

162 lines
4.1 KiB
PHP

<?php
namespace Exodus4D\Pathfinder\Db\Sql\Mysql;
use DB\SQL;
class Constraint {
// available actions
const ACTIONS_DELETE = ['RESTRICT', 'CASCADE', 'SET NULL', 'NO ACTION'];
const ACTIONS_UPDATE = ['RESTRICT', 'CASCADE', 'SET NULL', 'NO ACTION'];
// default actions
const ACTION_DELETE = 'RESTRICT';
const ACTION_UPDATE = 'RESTRICT';
const ERROR_ACTION_NOT_SUPPORTED = 'Constraint action `%s` is not supported.';
protected $table;
protected $keys = [];
protected $referencedTable = '';
protected $referencedCols = [];
protected $onDelete = self::ACTION_DELETE;
protected $onUpdate = self::ACTION_UPDATE;
/**
* Constraint constructor.
* @param SQL\TableBuilder $table
* @param array $keys
* @param string $referencedTable
* @param array $referencedCols
*/
public function __construct(SQL\TableBuilder $table, $keys = [], $referencedTable = '', $referencedCols = ['id']){
$this->table = &$table;
$this->setKeys($keys);
$this->setReferencedTable($referencedTable);
$this->setReferencedCols($referencedCols);
}
/**
* @param mixed $keys
*/
public function setKeys($keys){
$this->keys = (array)$keys;
}
/**
* @param mixed $referencedTable
*/
public function setReferencedTable($referencedTable){
$this->referencedTable = $referencedTable;
}
/**
* @param mixed $referencedCols
*/
public function setReferencedCols($referencedCols){
$this->referencedCols = (array)$referencedCols;
}
/**
* @param string $onDelete
*/
public function setOnDelete($onDelete){
if( in_array($onDelete, self::ACTIONS_DELETE) ){
$this->onDelete = $onDelete;
}else{
trigger_error(sprintf(self::ERROR_ACTION_NOT_SUPPORTED, $onDelete));
}
}
/**
* @param string $onUpdate
*/
public function setOnUpdate($onUpdate){
if( in_array($onUpdate, self::ACTIONS_UPDATE) ){
$this->onUpdate = $onUpdate;
}else{
trigger_error(sprintf(self::ERROR_ACTION_NOT_SUPPORTED, $onUpdate));
}
}
/**
* @return array
*/
public function getKeys(){
return $this->keys;
}
/**
* @return string
*/
public function getReferencedTable(){
return $this->referencedTable;
}
/**
* @return array
*/
public function getReferencedCols(){
return $this->referencedCols;
}
/**
* @return string
*/
public function getOnDelete(){
return $this->onDelete;
}
/**
* @return string
*/
public function getOnUpdate(){
return $this->onUpdate;
}
/**
* get a constraint name for this table.
* This can either be used to generate unique constraint names for foreign keys in parent tables
* or generate a "part" of a name. e.g. for db-Query all constraints of this table (ignore columns)
* by "LIKE" selecting "information_schema"
* -> To get a certain constraint or generate a unique constraint, ALL params are required!
* @return string
*/
public function getConstraintName(){
$constraintName = 'fk_' . $this->table->name;
if(!empty($this->getKeys())){
$constraintName .= '___' . implode('__', $this->getKeys());
if(!empty($this->getReferencedTable())){
$constraintName .= '___' . $this->getReferencedTable();
if(!empty($this->getReferencedCols())){
$constraintName .= '___' . implode('__', $this->getReferencedCols());
}
}
}
return $constraintName;
}
/**
* checks if constraint is valid
* -> all required members must be set!
* @return bool
*/
public function isValid(){
$valid = false;
if(
!empty($this->getKeys()) &&
!empty($this->getReferencedTable()) &&
!empty($this->getReferencedCols())
){
$valid = true;
}
return $valid;
}
}