public function testAddIndexWithKey() { $instance = new Table('Foo'); $instance->addIndexWithKey('bar', array('foobar')); $expected = array('indicies' => array('bar' => array('foobar'))); $this->assertEquals($expected, $instance->getConfiguration()); }
private function newPropertyTable($propertyTable, $diHandler) { // Prepare indexes. By default, property-value tables // have the following indexes: // // sp: getPropertyValues(), getSemanticData(), getProperties() // po: ask, getPropertySubjects() // // The "p" component is omitted for tables with fixed property. $indexes = array(); if ($propertyTable->usesIdSubject()) { $fieldarray = array('s_id' => array(FieldType::FIELD_ID, 'NOT NULL')); $indexes['sp'] = 's_id'; } else { $fieldarray = array('s_title' => array(FieldType::FIELD_TITLE, 'NOT NULL'), 's_namespace' => array(FieldType::FIELD_NAMESPACE, 'NOT NULL')); $indexes['sp'] = 's_title,s_namespace'; } $indexes['po'] = $diHandler->getIndexField(); if (!$propertyTable->isFixedPropertyTable()) { $fieldarray['p_id'] = array(FieldType::FIELD_ID, 'NOT NULL'); $indexes['po'] = 'p_id,' . $indexes['po']; $indexes['sp'] = $indexes['sp'] . ',p_id'; } // TODO Special handling; concepts should be handled differently // in the future. See comments in SMW_DIHandler_Concept.php. if ($propertyTable->getDiType() === DataItem::TYPE_CONCEPT) { unset($indexes['po']); } $indexes = array_merge($indexes, $diHandler->getTableIndexes()); $indexes = array_unique($indexes); foreach ($diHandler->getTableFields() as $fieldname => $fieldType) { $fieldarray[$fieldname] = $fieldType; } $table = new Table($propertyTable->getName()); foreach ($fieldarray as $fieldName => $fieldType) { $table->addColumn($fieldName, $fieldType); } foreach ($indexes as $key => $index) { $table->addIndexWithKey($key, $index); } return $table; }