/** * 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; }