Development

HowToPatchSymfony1.1ToThePostgreSQLWorkingMultipleSchemas: sf_postgresql_working_multiple_schemas_1.1.patch

You must first sign up to be able to contribute.

HowToPatchSymfony1.1ToThePostgreSQLWorkingMultipleSchemas: sf_postgresql_working_multiple_schemas_1.1.patch

File sf_postgresql_working_multiple_schemas_1.1.patch, 5.3 kB (added by patrickespake, 9 years ago)
  • symfony/plugins/sfPropelPlugin/lib/vendor/creole/drivers/pgsql/metadata/PgSQLDatabaseInfo.php

    old new  
    3030 */ 
    3131class PgSQLDatabaseInfo extends DatabaseInfo { 
    3232 
     33    /** Database schema selection */ 
     34    protected $dbschemas = null; 
     35 
     36    public function __construct(Connection $conn, $vendorInfo = array()) 
     37    { 
     38      parent::__construct($conn,$vendorInfo); 
     39      $dsn = $this->conn->getDSN(); 
     40      $this->dbschemas = $dsn['schema']; 
     41    } 
     42 
    3343    /** 
    3444     * @throws SQLException 
    3545     * @return void 
     
    5565        pg_free_result ($result); 
    5666        $result = null; 
    5767 
    58         $result = pg_query($this->conn->getResource(), "SELECT c.oid,  
    59                                                         case when n.nspname='public' then c.relname else n.nspname||'.'||c.relname end as relname  
    60                                                         FROM pg_class c join pg_namespace n on (c.relnamespace=n.oid) 
    61                                                         WHERE c.relkind = 'r' 
    62                                                           AND n.nspname NOT IN ('information_schema','pg_catalog') 
    63                                                           AND n.nspname NOT LIKE 'pg_temp%' 
    64                                                           AND n.nspname NOT LIKE 'pg_toast%' 
    65                                                         ORDER BY relname"); 
     68        $result = pg_query($this->conn->getResource(),"SELECT oid, relname FROM pg_class WHERE (relkind = 'r' OR relkind = 'v') 
     69              AND relnamespace IN ( 
     70                            SELECT 
     71                              oid 
     72                            FROM 
     73                              pg_namespace 
     74                            WHERE 
     75                                nspname NOT IN ('information_schema','pg_catalog') 
     76                              AND nspname NOT LIKE 'pg_temp%' ". 
     77                                (isset($this->dbschemas) ? "AND nspname IN (".$this->dbschemas.")" : "" ). " 
     78                              AND nspname NOT LIKE 'pg_toast%') ORDER BY relname"); 
    6679 
    6780        if (!$result) { 
    6881            throw new SQLException("Could not list tables", pg_last_error($this->dblink)); 
     
    7184        while ($row = pg_fetch_assoc($result)) { 
    7285            $this->tables[strtoupper($row['relname'])] = new PgSQLTableInfo($this, $row['relname'], $version, $row['oid']); 
    7386        } 
    74          
    75        $this->tablesLoaded = true; 
     87 
     88    $this->tablesLoaded = true; 
    7689    } 
    7790 
    7891    /** 
     
    8396     */ 
    8497    protected function initSequences() 
    8598    { 
    86       
    87         $this->sequences = array(); 
    88             
    89         $result = pg_query($this->conn->getResource(), "SELECT c.oid,  
    90                                                         case when n.nspname='public' then c.relname else n.nspname||'.'||c.relname end as relname  
    91                                                         FROM pg_class c join pg_namespace n on (c.relnamespace=n.oid) 
    92                                                         WHERE c.relkind = 'S' 
    93                                                           AND n.nspname NOT IN ('information_schema','pg_catalog') 
    94                                                           AND n.nspname NOT LIKE 'pg_temp%' 
    95                                                           AND n.nspname NOT LIKE 'pg_toast%' 
    96                                                         ORDER BY relname"); 
    97                                                          
     99 
     100    $this->sequences = array(); 
     101 
     102        $result = pg_query($this->conn->getResource(), "SELECT oid, relname FROM pg_class 
     103                    WHERE relkind = 'S' AND relnamespace = (SELECT oid 
     104                      FROM pg_namespace 
     105                      WHERE 
     106                          nspname NOT IN ('information_schema','pg_catalog') 
     107                        AND nspname NOT LIKE 'pg_temp%' 
     108                        AND nspname NOT LIKE 'pg_toast%' 
     109                      LIMIT 1) 
     110                    ORDER BY relname"); 
     111 
    98112        if (!$result) { 
    99113            throw new SQLException("Could not list sequences", pg_last_error($this->dblink)); 
    100114        } 
  • symfony/plugins/sfPropelPlugin/lib/vendor/creole/drivers/pgsql/PgSQLConnection.php

    old new  
    104104            $cleanconnstr = preg_replace('/password=\'.*?\'($|\s)/', 'password=\'*********\'', $connstr); 
    105105            throw new SQLException('Could not connect', $php_errormsg, $cleanconnstr); 
    106106        } 
    107          
     107 
     108        if(!empty($dsninfo['schema'])) 
     109          pg_query('SET search_path TO '.$dsninfo['schema'].';'); 
     110 
    108111        $this->dblink = $conn;         
    109112    } 
    110113     
  • symfony/plugins/sfPropelPlugin/lib/vendor/propel/Propel.php

    old new  
    485485 
    486486            try { 
    487487                $con = Creole::getConnection($dsn); 
     488                 
     489                if ($dsn['phptype'] == 'pgsql') { 
     490                  $sql = "SET SEARCH_PATH = 'public'"; 
     491                  $stmt = $con->prepareStatement($sql); 
     492                  $stmt->executeQuery(); 
     493        } 
    488494            } catch (SQLException $e) { 
    489495                throw new PropelException($e); 
    490496            }