|
@@ -32,52 +32,45 @@ function tripal_entities_field_storage_write($entity_type, $entity, $op, $fields
|
|
|
$residues = $field_vals['feature__residues'];
|
|
|
$field_vals['feature__md5checksum'] = $field_vals['feature__md5checksum'] ? md5($residues) : NULL;
|
|
|
}
|
|
|
- $transaction = db_transaction();
|
|
|
- try {
|
|
|
- switch ($op) {
|
|
|
- case FIELD_STORAGE_INSERT:
|
|
|
- // Use the cvterm_id to look up tables where this term is used
|
|
|
- $sel_values = array(
|
|
|
- 'term_id' => array(
|
|
|
- 'cvterm_id' => $entity->cvterm_id,
|
|
|
- ),
|
|
|
- );
|
|
|
- $term_usage = chado_generate_var('tripal_term_usage', $sel_values, array('return_array' => 1));
|
|
|
+dpm($field_vals);
|
|
|
+ switch ($op) {
|
|
|
+ case FIELD_STORAGE_INSERT:
|
|
|
+ // Use the cvterm_id to look up tables where this term is used
|
|
|
+ $sel_values = array(
|
|
|
+ 'term_id' => array(
|
|
|
+ 'cvterm_id' => $entity->cvterm_id,
|
|
|
+ ),
|
|
|
+ );
|
|
|
+ $term_usage = chado_generate_var('tripal_term_usage', $sel_values, array('return_array' => 1));
|
|
|
|
|
|
- // For each table that uses this term, insert the field recursively
|
|
|
- foreach ($term_usage as $usage) {
|
|
|
- $data_table = $usage->data_table;
|
|
|
- //$type_table = $usage->type_table;
|
|
|
- $type_field = $usage->field;
|
|
|
- tripal_entities_field_storage_write_recursive($entity_type, $entity,
|
|
|
- $op, $field_vals, $data_table, $type_field);
|
|
|
- }
|
|
|
- break;
|
|
|
+ // For each table that uses this term, insert the field recursively
|
|
|
+ foreach ($term_usage as $usage) {
|
|
|
+ $data_table = $usage->data_table;
|
|
|
+ //$type_table = $usage->type_table;
|
|
|
+ $type_field = $usage->field;
|
|
|
+ tripal_entities_field_storage_write_recursive($entity_type, $entity,
|
|
|
+ $op, $field_vals, $data_table, $type_field);
|
|
|
+ }
|
|
|
+ break;
|
|
|
|
|
|
- case FIELD_STORAGE_UPDATE :
|
|
|
+ case FIELD_STORAGE_UPDATE :
|
|
|
|
|
|
- // Get the base table and record id for the fields of this entity.
|
|
|
- $details = db_select('chado_entity', 'ce')
|
|
|
- ->fields('ce')
|
|
|
- ->condition('entity_id', $entity->id)
|
|
|
- ->execute()
|
|
|
- ->fetchObject();
|
|
|
- $tablename = $details->data_table;
|
|
|
- $type_field = $details->field;
|
|
|
- $record_id = $details->record_id;
|
|
|
+ // Get the base table and record id for the fields of this entity.
|
|
|
+ $details = db_select('chado_entity', 'ce')
|
|
|
+ ->fields('ce')
|
|
|
+ ->condition('entity_id', $entity->id)
|
|
|
+ ->execute()
|
|
|
+ ->fetchObject();
|
|
|
+ $tablename = $details->data_table;
|
|
|
+ $type_field = $details->field;
|
|
|
+ $record_id = $details->record_id;
|
|
|
|
|
|
- tripal_entities_field_storage_write_recursive($entity_type, $entity,
|
|
|
- $op, $field_vals, $tablename, $type_field, $record_id);
|
|
|
- if (!$details) {
|
|
|
- // TODO: what to do if record is missing!
|
|
|
- }
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- catch (Exception $e) {
|
|
|
- $transaction->rollback();
|
|
|
- watchdog_exception('tripal_feature', $e);
|
|
|
- drupal_set_message('Could not write record to Chado. See recent logs', 'error');
|
|
|
+ tripal_entities_field_storage_write_recursive($entity_type, $entity,
|
|
|
+ $op, $field_vals, $tablename, $type_field, $record_id);
|
|
|
+ if (!$details) {
|
|
|
+ // TODO: what to do if record is missing!
|
|
|
+ }
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -86,7 +79,7 @@ function tripal_entities_field_storage_write($entity_type, $entity, $op, $fields
|
|
|
*/
|
|
|
function tripal_entities_field_storage_write_recursive($entity_type, $entity,
|
|
|
$op, $field_vals, $tablename, $type_field = NULL, $record_id = NULL, $depth = 0) {
|
|
|
-
|
|
|
+ dpm($tablename);
|
|
|
// Intialize the values array and $record_id;
|
|
|
$values = array();
|
|
|
|
|
@@ -119,7 +112,7 @@ function tripal_entities_field_storage_write_recursive($entity_type, $entity,
|
|
|
$fk_val = array_key_exists($fk_field_name, $field_vals) ? $field_vals[$fk_field_name] : NULL;
|
|
|
$fk_val = tripal_entities_field_storage_write_recursive($entity_type,
|
|
|
$entity, $op, $field_vals, $fk_table, NULL, $fk_val, $depth + 1);
|
|
|
- if ($fk_val) {
|
|
|
+ if (!isset($fk_val) or $fk_value != '') {
|
|
|
$values[$local_id] = $fk_val;
|
|
|
}
|
|
|
}
|
|
@@ -161,19 +154,19 @@ function tripal_entities_field_storage_write_recursive($entity_type, $entity,
|
|
|
}
|
|
|
// If we don't have an incoming record ID then this is an insert.
|
|
|
if (!$record_id) {
|
|
|
- // STEP 4: Before inserting, we want to make sure the record does not already exist
|
|
|
- $existing = chado_select_record($tablename, array('*'), $values);
|
|
|
- if(count($existing) > 0) {
|
|
|
- $existing_record = $existing[0];
|
|
|
- $record_id = $existing_record->$pkey_field;
|
|
|
- return $record_id;
|
|
|
+ // STEP 3a: Before inserting, we want to make sure the record does not
|
|
|
+ // already exist. Using the unique constraint check for a matching record.
|
|
|
+ $options = array('is_duplicate' => TRUE);
|
|
|
+ $is_duplicate = chado_select_record($tablename, array('*'), $values, $options);
|
|
|
+ if($is_duplicate) {
|
|
|
+ throw new Exception('Could not insert Chado record into table: "' . $tablename . '".');
|
|
|
}
|
|
|
-
|
|
|
- // STEP 5: Insert the reocrd
|
|
|
+
|
|
|
+ // STEP 3b: Insert the reocrd
|
|
|
// Insert the values array as a new record in the table.
|
|
|
$record = chado_insert_record($tablename, $values);
|
|
|
if ($record === FALSE) {
|
|
|
- drupal_set_message('Could not insert Chado record into table, "$table".', 'error');
|
|
|
+ throw new Exception('Could not insert Chado record into table: "' . $tablename . '".');
|
|
|
}
|
|
|
$record_id = $record[$pkey_field];
|
|
|
|