/**
  * Provided modelClassName, $indexMetadata it generated index definitions that match schema requirements
  * @param string $modelClassName
  * @param array $indexesMetadata
  * @param $messageLogger
  * @return array index rules
  * @throws CException if we were unable to resolve an index
  */
 public static function resolve($modelClassName, array $indexesMetadata, &$messageLogger)
 {
     $messageLogger->addInfoMessage(Zurmo::t('Core', 'Building Indexes definitions for {{model}}', array('{{model}}' => $modelClassName)));
     $indexes = array();
     foreach ($indexesMetadata as $indexName => $indexMetadata) {
         $indexResolved = RedBeanModelMemberIndexMetadataAdapter::resolve($indexMetadata);
         if ($indexResolved) {
             $indexes[$indexName] = $indexMetadata;
         } else {
             $errorMessage = Zurmo::t('Core', 'Failed to resolve {{model}}.{{index}} index', array('{{model}}' => $modelClassName, '{{index}}' => $indexName));
             $messageLogger->addErrorMessage($errorMessage);
             throw new CException($errorMessage);
         }
     }
     $messageLogger->addInfoMessage(Zurmo::t('Core', 'Index definitions Built'));
     return $indexes;
 }
 protected static function registerUniqueIndexByMemberName($member, $modelClassName)
 {
     $indexName = RedBeanModelMemberIndexMetadataAdapter::resolveRandomIndexName($member, true);
     $uniqueIndexes = GeneralCache::getEntry(static::CACHE_KEY, array());
     $uniqueIndexes[$modelClassName][$indexName] = array('members' => array($member), 'unique' => true);
     GeneralCache::cacheEntry(static::CACHE_KEY, $uniqueIndexes);
 }
 /**
  * @depends testResolveWithUniqueNotSet
  */
 public function testResolve()
 {
     $indexMetadata = array('members' => array('memberOne', 'memberTwo'), 'unique' => true);
     $resolved = RedBeanModelMemberIndexMetadataAdapter::resolve($indexMetadata);
     $this->assertTrue($resolved);
     $this->assertNotEmpty($indexMetadata);
     $this->assertArrayHasKey('columns', $indexMetadata);
     $this->assertCount(2, $indexMetadata['columns']);
     $this->assertEquals('memberone', $indexMetadata['columns'][0]);
     $this->assertEquals('membertwo', $indexMetadata['columns'][1]);
     $this->assertArrayHasKey('unique', $indexMetadata);
     $this->assertTrue($indexMetadata['unique']);
 }
 protected static function resolveIndexesByColumnNames($columns)
 {
     $indexes = array();
     $compositeIndexKey = null;
     $compositeIndexValues = array('columns' => array(), 'unique' => true);
     foreach ($columns as $column) {
         $columnName = $column['name'];
         $indexName = RedBeanModelMemberIndexMetadataAdapter::resolveRandomIndexName($columnName, false);
         $indexes[$indexName] = array('columns' => array($columnName), 'unique' => false);
         if (!empty($compositeIndexKey)) {
             $compositeIndexKey .= '_';
         }
         $compositeIndexKey .= $columnName;
         $compositeIndexValues['columns'][] = $columnName;
     }
     $indexName = RedBeanModelMemberIndexMetadataAdapter::resolveRandomIndexName($compositeIndexKey, true);
     $indexes[$indexName] = $compositeIndexValues;
     return $indexes;
 }