|
@@ -299,7 +299,63 @@ class sbo__relationship extends ChadoField {
|
|
|
* @see ChadoField::query()
|
|
|
*/
|
|
|
public function query($condition, &$query) {
|
|
|
+ $alias = $this->field['field_name'];
|
|
|
+ $chado_table = $this->instance['settings']['chado_table'];
|
|
|
+ $base_table = $this->instance['settings']['base_table'];
|
|
|
+ $bschema = chado_get_schema($base_table);
|
|
|
+ $bpkey = $bschema['primary key'][0];
|
|
|
+
|
|
|
+ // Filter by the name of the subject or object.
|
|
|
+ if ($condition['column'] == 'relationship.clause_subject.schema:name' or
|
|
|
+ $condition['column'] == 'relationship.clause_subject.name') {
|
|
|
+ $query->join($chado_table, $alias, "base.$bpkey = $alias.object_id");
|
|
|
+ $query->join($base_table, 'base2', "base2.$bpkey = $alias.subject_id");
|
|
|
+ $query->condition("base2.name", $condition['value']);
|
|
|
+ }
|
|
|
+ if ($condition['column'] == 'relationship.clause_predicate.schema:name' or
|
|
|
+ $condition['column'] == 'relationship.clause_predicate.name') {
|
|
|
+ $query->join($chado_table, $alias, "base.$bpkey = $alias.subject_id");
|
|
|
+ $query->join($base_table, 'base2', "base2.$bpkey = $alias.object_id");
|
|
|
+ $query->condition("base2.name", $condition['value']);
|
|
|
+ }
|
|
|
+
|
|
|
+ // Filter by unique name of the subject or object.
|
|
|
+ if ($condition['column'] == 'relationship.clause_subject.data:0842' or
|
|
|
+ $condition['column'] == 'relationship.clause_subject.identifier') {
|
|
|
+ $query->join($chado_table, $alias, "base.$bpkey = $alias.object_id");
|
|
|
+ $query->join($base_table, 'base2', "base2.$bpkey = $alias.subject_id");
|
|
|
+ $query->condition("base2.uniquename", $condition['value']);
|
|
|
+ }
|
|
|
+ if ($condition['column'] == 'relationship.clause_predicate.data:0842' or
|
|
|
+ $condition['column'] == 'relationship.clause_predicate.identifier') {
|
|
|
+ $query->join($chado_table, $alias, "base.$bpkey = $alias.subject_id");
|
|
|
+ $query->join($base_table, 'base2', "base2.$bpkey = $alias.object_id");
|
|
|
+ $query->condition("base2.uniquename", $condition['value']);
|
|
|
+ }
|
|
|
|
|
|
+ // Filter by the type of the subject or object
|
|
|
+ if ($condition['column'] == 'relationship.clause_subject.rdfs:type' or
|
|
|
+ $condition['column'] == 'relationship.clause_subject.type') {
|
|
|
+ $query->join($chado_table, $alias, "base.$bpkey = $alias.object_id");
|
|
|
+ $query->join($base_table, 'base2', "base2.$bpkey = $alias.subject_id");
|
|
|
+ $query->join('cvterm', 'SubjectCVT', "SubjectCVT.cvterm_id = base2.type_id");
|
|
|
+ $query->condition("SubjectCVT.name", $condition['value']);
|
|
|
+ }
|
|
|
+ if ($condition['column'] == 'relationship.clause_predicate.rdfs:type' or
|
|
|
+ $condition['column'] == 'relationship.clause_predicate.type') {
|
|
|
+ $query->join($chado_table, $alias, "base.$bpkey = $alias.subject_id");
|
|
|
+ $query->join($base_table, 'base2', "base2.$bpkey = $alias.object_id");
|
|
|
+ $query->join('cvterm', 'ObjectCVT', "ObjectCVT.cvterm_id = base2.type_id");
|
|
|
+ $query->condition("ObjectCVT.name", $condition['value']);
|
|
|
+ }
|
|
|
+
|
|
|
+ // Filter by relationship type
|
|
|
+ if ($condition['column'] == 'relationship.relationship_type') {
|
|
|
+ // This filter commented out because it's way to slow...
|
|
|
+// $query->join($chado_table, $alias, "base.$bpkey = $alias.subject_id OR base.$bpkey = $alias.object_id");
|
|
|
+// $query->join('cvterm', 'RelTypeCVT', "RelTypeCVT.cvterm_id = $alias.type_id");
|
|
|
+// $query->condition("RelTypeCVT.name", $condition['value']);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|