public function testForeignKeysWithPostgres()
{
testpack('Test Postgres Foreign keys');
$a = R::getWriter()->addFK('a', 'b', 'c', 'd');
//must fail
pass();
//survive without exception
asrt($a, FALSE);
//must return false
$book = R::dispense('book');
$page = R::dispense('page');
$cover = R::dispense('cover');
list($g1, $g2) = R::dispense('genre', 2);
$g1->name = '1';
$g2->name = '2';
$book->ownPage = array($page);
$book->cover = $cover;
$book->sharedGenre = array($g1, $g2);
R::store($book);
$sql = "SELECT\n\t\t tc.constraint_name, tc.table_name, kcu.column_name,\n\t\t ccu.table_name AS foreign_table_name,\n\t\t ccu.column_name AS foreign_column_name\n\t\tFROM\n\t\t information_schema.table_constraints AS tc\n\t\t JOIN information_schema.key_column_usage AS kcu ON tc.constraint_name = kcu.constraint_name\n\t\t JOIN information_schema.constraint_column_usage AS ccu ON ccu.constraint_name = tc.constraint_name\n\t\tWHERE constraint_type = 'FOREIGN KEY' AND (tc.table_name='book' OR tc.table_name='book_genre' OR tc.table_name='page');";
$fks = R::getAll($sql);
$json = '[
{
"constraint_name": "book_cover_id_fkey",
"table_name": "book",
"column_name": "cover_id",
"foreign_table_name": "cover",
"foreign_column_name": "id"
},
{
"constraint_name": "page_book_id_fkey",
"table_name": "page",
"column_name": "book_id",
"foreign_table_name": "book",
"foreign_column_name": "id"
},
{
"constraint_name": "book_genre_genre_id_fkey",
"table_name": "book_genre",
"column_name": "genre_id",
"foreign_table_name": "genre",
"foreign_column_name": "id"
},
{
"constraint_name": "book_genre_book_id_fkey",
"table_name": "book_genre",
"column_name": "book_id",
"foreign_table_name": "book",
"foreign_column_name": "id"
}
]';
$j = json_encode($fks);
$j1 = json_decode($j, TRUE);
$j2 = json_decode($json, TRUE);
foreach ($j1 as $jrow) {
$s = json_encode($jrow);
$found = 0;
foreach ($j2 as $k => $j2row) {
if (json_encode($j2row) === $s) {
pass();
unset($j2[$k]);
$found = 1;
}
}
if (!$found) {
fail();
}
}
}