/** * Test whether unique constraints are properly created using * reflection. * * @return void */ public function testUniqueInspect() { $writer = R::getWriter(); R::nuke(); $book = R::dispense('book'); $category = R::dispense('category'); $book->sharedCategory[] = $category; R::store($book); asrt(count(get_uniques_for_type('book_category')), 1); asrt(are_cols_in_unique('book_category', array('book_id', 'category_id')), TRUE); R::nuke(); $book = R::dispense('book'); $category = R::dispense('category'); $book->via('library')->sharedCategory[] = $category; R::store($book); asrt(count(get_uniques_for_type('book_category')), 0); asrt(are_cols_in_unique('book_category', array('book_id', 'category_id')), FALSE); asrt(count(get_uniques_for_type('library')), 1); asrt(are_cols_in_unique('library', array('book_id', 'category_id')), TRUE); AQueryWriter::clearRenames(); R::nuke(); $book = R::dispense('book'); $category = R::dispense('category'); $book->sharedCategory[] = $category; R::store($book); asrt(count(get_uniques_for_type('book_category')), 1); asrt(are_cols_in_unique('book_category', array('book_id', 'category_id')), TRUE); asrt(count(get_uniques_for_type('library')), 0); asrt(are_cols_in_unique('library', array('book_id', 'category_id')), FALSE); R::nuke(); $book = R::dispense('book'); $book2 = R::dispense('book'); $book->sharedBook[] = $book2; R::store($book); asrt(count(get_uniques_for_type('book_book')), 1); asrt(are_cols_in_unique('book_book', array('book_id', 'book2_id')), TRUE); try { $result = R::getWriter()->addUniqueConstraint('nonexistant', array('a', 'b')); } catch (\Exception $e) { print_r($e); exit; } pass(); //dont crash! asrt($result, FALSE); }
function are_cols_in_unique($type, $properties) { sort($properties); $propertyFootprint = implode(',', $properties); $uniques = get_uniques_for_type($type); foreach ($uniques as $unique) { sort($unique); $uniqueFootprint = implode(',', $unique); if ($uniqueFootprint === $propertyFootprint) { return TRUE; } } return FALSE; }