function get_chado_fk_relationships
1.x get_FKs.php | get_chado_fk_relationships($version) |
1 call to get_chado_fk_relationships()
- get_FKs.php in tripal_core/
api/ get_FKs.php
File
- tripal_core/
api/ get_FKs.php, line 40
Code
function get_chado_fk_relationships($version) {
// convert the version to a form suitable for function names
$v = $version;
$v = preg_replace("/\./", "_", $v);
$tables = tripal_core_get_chado_tables();
$sql = "
SELECT
tc.constraint_name, tc.table_name, kcu.column_name,
ccu.table_name AS foreign_table_name,
ccu.column_name AS foreign_column_name
FROM
information_schema.table_constraints AS tc
JOIN information_schema.key_column_usage AS kcu ON tc.constraint_name = kcu.constraint_name
JOIN information_schema.constraint_column_usage AS ccu ON ccu.constraint_name = tc.constraint_name
WHERE constraint_type = 'FOREIGN KEY' AND tc.table_name='%s'
";
// iterate through the tables and get the foreign keys
print "<?php
/* @file: This file contains default schema definitions for all chado v$version tables
* to be used by other function. Specifically these functions are used
* by the tripal_core select/insert/update API functions and by
* the Tripal Views module.
*
* These schema definitions can be augmented by another modules
* (specifically to add missing definitions) by implementing
* hook_chado_schema_v" . $v . "_<table name>().
*
* @defgroup tripal_schema_api Core Module Schema API
* @{
* Provides an application programming interface (API) for describing Chado tables.
* This API consists of a set of functions, one for each table in Chado. Each
* function simply returns a Drupal style array that defines the table.
*
* Because Drupal 6 does not handle foreign key (FK) relationships, however FK
* relationships are needed to for Tripal Views. Therefore, FK relationships
* have been added to the schema defintitions below.
*
* The functions provided in this documentation should not be called as is, but if you need
* the Drupal-style array definition for any table, use the following function
* call:
*
* \$table_desc = tripal_core_get_chado_table_schema(\$table)
*
* where the variable \$table contains the name of the table you want to
* retireve. The tripal_core_get_chado_table_schema function determines the appropriate version of
* Chado and uses the Drupal hook infrastructure to call the appropriate
* hook function to retrieve the table schema.
*
* @}
* @ingroup tripal_api
*/
";
$referring = array();
$tables_def = array();
foreach ($tables as $table) {
// get the existing table array
$table_arr = tripal_core_get_chado_table_schema($table);
if (empty($table_arr)) {
print "ERROR: empty table definition $table\n";
continue;
}
// add the table name to the array
$table_arr['table'] = $table;
// get the foreign keys and add them to the array
$fks = db_query($sql, $table);
while ($fk = db_fetch_object($fks)) {
$table_arr['foreign keys'][$fk->foreign_table_name]['table'] = $fk->foreign_table_name;
$table_arr['foreign keys'][$fk->foreign_table_name]['columns'][$fk->column_name] = $fk->foreign_column_name;
$reffering[$fk->foreign_table_name][] = $table;
}
$tables_def[] = $table_arr;
}
// now add in the referring tables and print
foreach ($tables_def as $table_arr) {
$table = $table_arr['table'];
// add in the referring tables
$table_referring = array_unique($reffering[$table]);
$table_arr['referring_tables'] = $table_referring;
// reformat the array to be more legible
$arr = var_export($table_arr, 1);
$arr = preg_replace("/\n\s+array/", "array", $arr); // move array( to previous line
$arr = preg_replace("/\n/", "\n ", $arr); // add indentation
$arr = preg_replace("/true/", "TRUE", $arr); // add indentation
$arr = preg_replace("/false/", "FALSE", $arr); // add indentation
$arr = preg_replace("/array \(/", "array(", $arr); // add indentation
// print out the new Schema API function for this table
print "/**
* Implements hook_chado_schema_v" . $v . "_" . $table . "()
* Purpose: To describe the structure of '$table' to tripal
* @see tripal_core_chado_insert()
* @see tripal_core_chado_update()
* @see tripal_core_chado_select()
*
* @return
* An array describing the '$table' table
*
* @ingroup tripal_chado_v" . $version . "_schema_api
*
*/
function tripal_core_chado_schema_v" . $v . "_" . $table . "() {
\$description = $arr;
return \$description;
}
";
}
}