Browse Source

Fixed bug in bulk deletion

Stephen Ficklin 9 years ago
parent
commit
0dc0bb14bf
1 changed files with 34 additions and 12 deletions
  1. 34 12
      tripal_core/api/tripal_core.chado_nodes.api.inc

+ 34 - 12
tripal_core/api/tripal_core.chado_nodes.api.inc

@@ -983,29 +983,51 @@ function chado_node_sync_records($base_table, $max_sync = FALSE,
  * @param $table
  *   The name of the table that corresonds to the node type we want to clean up.
  * @param $nentries
- *   The number of entries to parse at one time (ie: the batch size).
+ *   Optional. The number of entries to parse at one time (ie: the batch size).
+ *   Set to zero if no limit is needed.
+ * @param $linking_table
+ *   Optional. The name of the linking table that maps Drupal nodes to Chado
+ *   records. This is only required if the linking table name is not of the
+ *   form: chado_[table] where [table] is the value provided to the $table
+ *   argument.
+ * @param $node_type
+ *   Optional. The name of the node type for the records.  This is only
+ *   required if the node type is not of the form: chado_[table] where
+ *   [table] is the value provided to the $table.
  * @param $job_id
- *   This should be the job id from the Tripal jobs system.  This function
- *   will update the job status using the provided job ID.
+ *   Optional. This should be the job id from the Tripal jobs system. Typically,
+ *   only the Tripal jobs system will use the argument.
  *
  * @ingroup tripal_chado_node_api
  */
-function chado_cleanup_orphaned_nodes($table, $nentries = 25000, $linking_table, $node_type, $job_id = NULL) {
+function chado_cleanup_orphaned_nodes($table, $nentries = 25000, $linking_table = NULL, $node_type = NULL, $job_id = NULL) {
+  // The max number of records either as nodes or linked records.
   $count = 0;
+  // Will hold the number of nodes of this type.
+  $ncount = 0;
+  // Will hold the number of linked records.
+  $clcount = 0;
 
-  // Find the total number of entries in the table.
-  $dsql = "SELECT COUNT(*) FROM {node} WHERE type = :node_type";
-  $clsql= "SELECT COUNT(*) FROM {$linking_table}";
-
+  if (!$node_type) {
+    $node_type = 'chado_' . $table;
+  }
+  if (!$linking_table) {
+    $linking_table = 'chado_' . $table;
+  }
   // Find the number nodes of type chado_$table and find the number of entries
   // in chado_$table; keep the larger of the two numbers.
+  $dsql = "SELECT COUNT(*) FROM {node} WHERE type = :node_type";
   $ndat = db_query($dsql, array(':node_type' => $node_type));
   $temp = $ndat->fetchObject();
-  $count = $temp->count;
+  $ncount = $temp->count;
+  $clsql= "SELECT COUNT(*) FROM {" . $linking_table . "}";
   $cdat = db_query($clsql);
-  $temp = $cdat->fetchObject();
-  if (count < $temp->count) {
-    $count = $temp->count;
+  $clcount = $cdat->fetchObject();
+  if ($ncount < $clcount) {
+    $count = $clcount;
+  }
+  else {
+    $count = $ncount;
   }
 
   $transaction = db_transaction();