|
@@ -7,7 +7,7 @@
|
|
|
// a file and then replace the existing schema API include file (e.g.
|
|
|
// tripal_core.schema_v1.2.api.inc). Be sure to check it before replacing
|
|
|
|
|
|
-// thie script requires a single argument (-v) which is the Chado version
|
|
|
+// this script requires a single argument (-v) which is the Chado version
|
|
|
//
|
|
|
// example usage in drupal directory root:
|
|
|
//
|
|
@@ -37,7 +37,7 @@ if (isset($arguments['v'])) {
|
|
|
/**
|
|
|
*
|
|
|
*/
|
|
|
-function get_chado_fk_relationships($version){
|
|
|
+function get_chado_fk_relationships($version) {
|
|
|
|
|
|
// convert the version to a form suitable for function names
|
|
|
$v = $version;
|
|
@@ -57,31 +57,81 @@ function get_chado_fk_relationships($version){
|
|
|
";
|
|
|
|
|
|
// iterate through the tables and get the foreign keys
|
|
|
- print "<?php\n";
|
|
|
+ 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";
|
|
|
- }
|
|
|
-
|
|
|
- // 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;
|
|
|
- }
|
|
|
+ // 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("/array \(/","array(", $arr); // add indentation
|
|
|
+ // 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 "/**
|