Changeset 5111

Show
Ignore:
Timestamp:
10/21/08 08:58:04 (9 months ago)
Author:
adrive
Message:

[1.0, 1.1] Fixes #1588: Oracle building schema does not detect foreign keys

Location:
branches/1.0
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • branches/1.0/lib/Doctrine/Import/Oracle.php

    r4252 r5111  
    121121    public function listTableColumns($table) 
    122122    { 
    123         $table  = strtoupper($table); 
    124123        $sql    = "SELECT column_name, data_type, data_length, nullable, data_default, data_scale, data_precision FROM all_tab_columns" 
    125                 . " WHERE table_name = '" . $table . "' ORDER BY column_name"; 
     124                . " WHERE table_name = '" . $table . "' ORDER BY column_id"; 
    126125 
    127126        $result = $this->conn->fetchAssoc($sql); 
     
    169168        return array_map(array($this->conn->formatter, 'fixIndexName'), $indexes); 
    170169    } 
    171  
     170     
     171    /** 
     172     * list table relations 
     173     */ 
     174    public function listTableRelations($table) 
     175    { 
     176        $relations = array(); 
     177        $sql  = 'SELECT ac.table_name AS referenced_table_name, lcc.column_name AS local_column_name, rcc.column_name AS referenced_column_name ' 
     178              . 'FROM all_constraints ac ' 
     179              . 'JOIN all_cons_columns lcc ON ac.r_constraint_name = lcc.constraint_name ' 
     180              . 'JOIN all_cons_columns rcc ON ac.constraint_name = rcc.constraint_name ' 
     181              . "WHERE ac.constraint_type = 'R'"  
     182              . "AND ac.r_constraint_name IN (SELECT constraint_name FROM all_constraints WHERE constraint_type IN ('P', 'U') AND table_name ='$table')"; 
     183         
     184        $results = $this->conn->fetchAssoc($sql); 
     185        foreach ($results as $result)  
     186        { 
     187            $result = array_change_key_case($result, CASE_LOWER); 
     188            $relations[] = array('table'   => $result['referenced_table_name'], 
     189                                 'local'   => $result['column_name'], 
     190                                 'foreign' => $result['referenced_column_name']); 
     191        } 
     192        return $relations; 
     193    } 
    172194    /** 
    173195     * lists tables 
  • branches/1.0/tests/Import/OracleTestCase.php

    r3884 r5111  
    4545        $this->import->listTableColumns('table'); 
    4646 
    47         $q = "SELECT column_name, data_type, data_length, nullable, data_default, data_scale, data_precision FROM all_tab_columns WHERE table_name = 'TABLE' ORDER BY column_name"; 
     47        $q = "SELECT column_name, data_type, data_length, nullable, data_default, data_scale, data_precision FROM all_tab_columns WHERE table_name = 'table' ORDER BY column_id"; 
    4848 
    4949        $this->assertEqual($this->adapter->pop(), $q);