Пример #1
0
 /**
  * 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);
 }
Пример #2
0
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;
}