|
@@ -53,6 +53,7 @@ class views_handler_join_chado_aggregator extends views_join {
|
|
|
'table_aggregated' => $this->definition['table_aggregated'],
|
|
|
'sort' => $this->sort,
|
|
|
'filter' => $this->filter,
|
|
|
+ 'additional_joins' => $this->additional_joins,
|
|
|
'postgresql_9up' => $this->postgresql_9up,
|
|
|
);
|
|
|
|
|
@@ -143,10 +144,11 @@ class views_handler_join_chado_aggregator extends views_join {
|
|
|
$table_desc = tripal_core_get_chado_table_schema($opt['table']);
|
|
|
$select_fields[ $opt['table'] ] = $table_desc['fields'];
|
|
|
|
|
|
+
|
|
|
+ $joins = array();
|
|
|
if (!empty($table_desc)) {
|
|
|
// Add joins to tables with a foreign key in this table
|
|
|
// (ie: add join to cvterm if this table has a type_id
|
|
|
- $joins = array();
|
|
|
foreach ($table_desc['foreign keys'] as $defn) {
|
|
|
if ($defn['table'] != $opt['left_table']) {
|
|
|
foreach ( $defn['columns'] as $left => $right) {
|
|
@@ -191,8 +193,8 @@ class views_handler_join_chado_aggregator extends views_join {
|
|
|
}
|
|
|
else {
|
|
|
|
|
|
- // No known foreign key reelationships
|
|
|
- $joins = array();
|
|
|
+ // No known foreign key relationships
|
|
|
+ // so don't add to $joins
|
|
|
|
|
|
// Fields to be selected
|
|
|
$sql = "SELECT
|
|
@@ -226,6 +228,32 @@ class views_handler_join_chado_aggregator extends views_join {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ // Add in any additional joins specified by handlers
|
|
|
+ if (!empty($opt['additional_joins'])) {
|
|
|
+ foreach ($opt['additional_joins'] as $join_defn) {
|
|
|
+
|
|
|
+ // Add the join SQL in
|
|
|
+ $table = ($join_defn['table_alias']) ? $join_defn['table_alias'] : $join_defn['table'];
|
|
|
+ $left = $join_defn['left_table'] . '.' . $join_defn['left_field'];
|
|
|
+ $right = $table . '.' . $join_defn['field'];
|
|
|
+ $joins[] = "LEFT JOIN $join_defn[table] $table ON $left=$right";
|
|
|
+
|
|
|
+ // Add to the fields and composite field
|
|
|
+ $join_table_desc = tripal_core_get_chado_table_schema($join_defn['table']);
|
|
|
+ $alias = $table . '_';
|
|
|
+ foreach ($join_table_desc['fields'] as $fname => $fdesc) {
|
|
|
+ // Add sort to aggregate field if postgreSQL 9.0+
|
|
|
+ if ($opt['postgresql_9up'] && !empty($order_by)) {
|
|
|
+ $fields[] = 'array_agg(' . $table . '.' . $fname . ' ORDER BY ' . implode(',', $order_by) . ') as ' . $alias . $fname;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $fields[] = 'array_agg(' . $table . '.' . $fname . ') as ' . $alias . $fname;
|
|
|
+ }
|
|
|
+ $composite_field_parts[] = "'" . $alias . $fname . "::' || COALESCE(CAST(" . $table . '.' . $fname . " as text), '')";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// composite field
|
|
|
// (combines all other fields before aggregating)
|
|
|
// Add sort to aggregate field if postgreSQL 9.0+
|