/**
  * Compute the difference between two index objects
  *
  * @param Index   $fromIndex
  * @param Index   $toIndex
  * @param boolean $caseInsensitive Whether the comparison is case insensitive.
  *                                 False by default.
  *
  * @return boolean false if the two indices are similar, true if they have differences
  */
 public static function computeDiff(Index $fromIndex, Index $toIndex, $caseInsensitive = false)
 {
     // Check for removed index columns in $toIndex
     $fromIndexColumns = $fromIndex->getColumns();
     for ($i = 0; $i < count($fromIndexColumns); $i++) {
         $indexColumn = $fromIndexColumns[$i];
         if (!$toIndex->hasColumnAtPosition($i, $indexColumn, null, $caseInsensitive)) {
             return true;
         }
     }
     // Check for new index columns in $toIndex
     $toIndexColumns = $toIndex->getColumns();
     for ($i = 0; $i < count($toIndexColumns); $i++) {
         $indexColumn = $toIndexColumns[$i];
         if (!$fromIndex->hasColumnAtPosition($i, $indexColumn, null, $caseInsensitive)) {
             return true;
         }
     }
     // Check for difference in unicity
     if ($fromIndex->isUnique() != $toIndex->isUnique()) {
         return true;
     }
     return false;
 }
Exemple #2
0
 /**
  * Finds the difference between the indexes $index1 and $index2.
  *
  * Compares $index1 with $index2 and returns $index2 if there are any
  * differences or false in case there are no differences.
  *
  * @param Index $index1
  * @param Index $index2
  * @return bool
  */
 public function diffIndex(Index $index1, Index $index2)
 {
     if ($index1->isPrimary() != $index2->isPrimary()) {
         return true;
     }
     if ($index1->isUnique() != $index2->isUnique()) {
         return true;
     }
     // Check for removed index fields in $index2
     $index1Columns = $index1->getColumns();
     for ($i = 0; $i < count($index1Columns); $i++) {
         $indexColumn = $index1Columns[$i];
         if (!$index2->hasColumnAtPosition($indexColumn, $i)) {
             return true;
         }
     }
     // Check for new index fields in $index2
     $index2Columns = $index2->getColumns();
     for ($i = 0; $i < count($index2Columns); $i++) {
         $indexColumn = $index2Columns[$i];
         if (!$index1->hasColumnAtPosition($indexColumn, $i)) {
             return true;
         }
     }
     return false;
 }
Exemple #3
0
 /**
  * Check if given Index is duplicate of this
  *
  * @param Index $index Index
  *
  * @return bool TRUE if duplicate, otherwise FALSE
  */
 public function isDuplicate(Index $index)
 {
     /**
      * Check if columns are the same
      */
     $duplicate = $this->getColumns() === $index->getColumns();
     /**
      * If indices have different unique status they cant be duplicates
      */
     if ($this->isUnique() !== $index->isUnique()) {
         $duplicate = false;
     }
     /**
      * If one of the indicies is the primary key they cant be duplicates
      */
     if ($this->isPrimaryKey() === true || $index->isPrimaryKey() === true) {
         $duplicate = false;
     }
     return $duplicate;
 }
Exemple #4
0
 /**
  * Adds index to table
  * @param Index $index
  */
 public function addIndexToModel($index)
 {
     $this->query('insert into [indexes] values( null, %s, %s, %s, %s)', $index->getName(), $index->getModel()->getTableName(), $index->getHash(), $index->isUnique());
     PerfORMController::getBuilder()->createIndex($index);
 }