Skip to content
Snippets Groups Projects
Commit 68397d69 authored by Andreas Kusalananda Kähäri's avatar Andreas Kusalananda Kähäri
Browse files

Modified generic_fetch():

  Sorted out possible SQL precedence problem (idea from James).

  Old SQL (fragment):

    FROM (transcript t)
      LEFT JOIN transcript_stable_id tsi
        ON tsi.transcript_id = t.transcript_id
      LEFT JOIN xref x
        ON x.xref_id = t.display_xref_id
      LEFT JOIN external_db exdb
        ON exdb.external_db_id = x.external_db_id

  New SQL (same fragment):

    FROM
      ( ( ( (transcript t)
            LEFT JOIN transcript_stable_id tsi
              ON tsi.transcript_id = t.transcript_id
          )
          LEFT JOIN xref x
            ON x.xref_id = t.display_xref_id
        )
        LEFT JOIN external_db exdb
          ON exdb.external_db_id = x.external_db_id
      )
parent 1ade13b0
No related branches found
No related tags found
No related merge requests found
......@@ -293,6 +293,7 @@ sub generic_fetch {
# left-joined table from the table list
#
my @left_join_list = $self->_left_join();
my $left_join_prefix = '';
my $left_join = '';
my @tables;
if(@left_join_list) {
......@@ -301,7 +302,9 @@ sub generic_fetch {
if( exists $left_join_hash{ $t->[0] } ) {
my $condition = $left_join_hash{ $t->[0] };
my $syn = $t->[1];
$left_join .= "LEFT JOIN\n ".$t->[0]." $syn ON $condition ";
$left_join .=
"\n LEFT JOIN " . $t->[0] . " $syn ON $condition ) ";
$left_join_prefix .= '(';
} else {
push @tables, $t;
}
......@@ -310,7 +313,6 @@ sub generic_fetch {
@tables = @tabs;
}
my $straight_join = '';
if($self->_straight_join()) {
......@@ -320,7 +322,9 @@ sub generic_fetch {
#construct a nice table string like 'table1 t1, table2 t2'
my $tablenames = join(', ', map({ join(' ', @$_) } @tables));
my $sql = "SELECT $straight_join $columns\n FROM ($tablenames) $left_join";
my $sql =
"SELECT $straight_join $columns\n"
. "FROM $left_join_prefix ($tablenames) $left_join";
my $default_where = $self->_default_where_clause;
my $final_clause = $self->_final_clause;
......@@ -338,6 +342,9 @@ sub generic_fetch {
#append additional clauses which may have been defined
$sql .= "\n$final_clause";
# FOR DEBUG:
# printf(STDERR "SQL:\n%s\n", $sql);
my $sth = $db->dbc->prepare($sql);
$sth->execute;
my $res = $self->_objs_from_sth($sth, $mapper, $slice);
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment