From 73f3673a117691b5b55efaf81dc168137ceaed95 Mon Sep 17 00:00:00 2001 From: Taras Machyshyn Date: Fri, 27 Feb 2015 12:27:37 +0200 Subject: [PATCH] Improved unique indexes for relationship tables --- .../Core/Utils/Database/Schema/Converter.php | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/application/Espo/Core/Utils/Database/Schema/Converter.php b/application/Espo/Core/Utils/Database/Schema/Converter.php index 7da2a448d6..36d583734e 100644 --- a/application/Espo/Core/Utils/Database/Schema/Converter.php +++ b/application/Espo/Core/Utils/Database/Schema/Converter.php @@ -244,20 +244,16 @@ class Converter $uniqueIndex = array(); foreach($relationParams['midKeys'] as $index => $midKey) { - $usMidKey = Util::toUnderScore($midKey); - $table->addColumn($usMidKey, $this->idParams['dbType'], array('length'=>$this->idParams['len'])); - $table->addIndex(array($usMidKey)); + $columnName = Util::toUnderScore($midKey); + $table->addColumn($columnName, $this->idParams['dbType'], array('length'=>$this->idParams['len'])); + $table->addIndex(array($columnName)); - $uniqueIndex[] = $usMidKey; - } - - if (!empty($uniqueIndex)) { - $table->addUniqueIndex($uniqueIndex); + $uniqueIndex[] = $columnName; } //END: add midKeys to a schema //add additionalColumns - if (isset($relationParams['additionalColumns'])) { + if (!empty($relationParams['additionalColumns'])) { foreach($relationParams['additionalColumns'] as $fieldName => $fieldParams) { if (!isset($fieldParams['type'])) { @@ -271,6 +267,17 @@ class Converter } } //END: add additionalColumns + //add unique indexes + if (!empty($relationParams['conditions'])) { + foreach ($relationParams['conditions'] as $fieldName => $fieldParams) { + $uniqueIndex[] = Util::toUnderScore($fieldName); + } + } + + if (!empty($uniqueIndex)) { + $table->addUniqueIndex($uniqueIndex); + } + //END: add unique indexes $table->addColumn('deleted', 'bool', array('default' => 0)); $table->setPrimaryKey(array("id")); @@ -278,7 +285,6 @@ class Converter return $table; } - protected function getDbFieldParams($fieldParams) { $dbFieldParams = array();