Development

/branches/1.1/lib/plugins/sfPropelPlugin/lib/creole/database/sfCreoleDatabase.class.php

You must first sign up to be able to contribute.

root/branches/1.1/lib/plugins/sfPropelPlugin/lib/creole/database/sfCreoleDatabase.class.php

Revision 7792, 7.0 kB (checked in by fabien, 7 years ago)

updated Sean Kerr email address

  • Property svn:mime-type set to text/x-php
  • Property svn:eol-style set to native
  • Property svn:keywords set to Id Rev Date
Line 
1 <?php
2
3 /*
4  * This file is part of the symfony package.
5  * (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
6  * (c) 2004-2006 Sean Kerr <sean@code-box.org>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 set_include_path(get_include_path().PATH_SEPARATOR.dirname(__FILE__).'/../../vendor');
13
14 /**
15  * sfCreoleDatabase provides connectivity for the Creole database abstraction
16  * layer.
17  *
18  * <b>Optional parameters:</b>
19  *
20  * # <b>classpath</b>      - [none]   - An absolute filesystem path to the main
21  *                                      Creole class file.
22  * # <b>database</b>       - [none]   - The database name.
23  * # <b>dsn</b>            - [none]   - The DSN formatted connection string.
24  * # <b>host</b>           - [none]   - The database host specifications.
25  * # <b>port</b>           - [none]   - The database port.
26  * # <b>encoding</b>       - [none]   - The database encoding.
27  * # <b>method</b>         - [normal] - How to read connection parameters.
28  *                                      Possible values are dsn, normal,
29  *                                      server, and env. The dsn method reads
30  *                                      them from the dsn parameter. The
31  *                                      normal method reads them from the
32  *                                      specified values. server reads them
33  *                                      from $_SERVER where the keys to
34  *                                      retrieve the values are what you
35  *                                      specify the value as in the settings.
36  *                                      env reads them from $_ENV and works
37  *                                      like $_SERVER.
38  * # <b>no_assoc_lower</b> - [Off]    - Turn off portabilty of resultset
39  *                                      field names.
40  * # <b>password</b>       - [none]   - The database password.
41  * # <b>persistent</b>     - [No]     - Indicates that the connection should
42  *                                      persistent.
43  * # <b>phptype</b>        - [none]   - The type of database (mysql, pgsql,
44  *                                      etc).
45  * # <b>username</b>       - [none]   - The database username.
46  *
47  * @package    symfony
48  * @subpackage database
49  * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
50  * @author     Sean Kerr <sean@code-box.org>
51  * @version    SVN: $Id$
52  */
53 class sfCreoleDatabase extends sfDatabase
54 {
55   /**
56    * Connect to the database.
57    *
58    * @throws <b>sfDatabaseException</b> If a connection could not be created.
59    */
60   public function connect()
61   {
62     try
63     {
64       // determine how to get our settings
65       $method = $this->getParameter('method', 'normal');
66
67       switch ($method)
68       {
69         case 'normal':
70           // get parameters normally, and all are required
71           $database = $this->getParameter('database', null);
72           $hostspec = $this->getParameter('hostspec') ? $this->getParameter('hostspec') : ($this->getParameter('host') ? $this->getParameter('hostspec') : null);
73           $password = $this->getParameter('password', null);
74           $phptype  = $this->getParameter('phptype'null);
75           $username = $this->getParameter('username', null);
76           $port     = $this->getParameter('port',     null);
77           $encoding = $this->getParameter('encoding', null);
78
79           $dsn = array('database' => $database,
80                        'hostspec' => $hostspec,
81                        'password' => $password,
82                        'phptype'  => $phptype,
83                        'username' => $username,
84                        'port'     => $port,
85                        'encoding' => $encoding);
86           break;
87
88         case 'dsn':
89           $dsn = $this->getParameter('dsn');
90
91           if ($dsn == null)
92           {
93             // missing required dsn parameter
94             throw new sfDatabaseException('Database configuration specifies method "dsn", but is missing dsn parameter.');
95           }
96
97           break;
98
99         case 'server':
100           // construct a DSN connection string from existing $_SERVER values
101           $dsn =& $this->loadDSN($_SERVER);
102
103           break;
104
105         case 'env':
106           // construct a DSN connection string from existing $_ENV values
107           $dsn =& $this->loadDSN($_ENV);
108
109           break;
110
111         default:
112           // who knows what the user wants...
113           throw new sfDatabaseException(sprintf('Invalid CreoleDatabase parameter retrieval method "%s".', $method));
114       }
115
116       // get creole class path
117       $classPath = $this->getParameter('classpath');
118
119       // include the creole file
120       if ($classPath == null)
121       {
122         require_once('creole/Creole.php');
123       }
124       else
125       {
126         require_once($classPath);
127       }
128
129       // set our flags
130       $noAssocLower = $this->getParameter('no_assoc_lower', false);
131       $persistent   = $this->getParameter('persistent', false);
132       $compatAssocLower  = $this->getParameter('compat_assoc_lower', false);
133       $compatRtrimString = $this->getParameter('compat_rtrim_string', false);
134
135       $flags  = 0;
136       $flags |= ($noAssocLower)      ? Creole::NO_ASSOC_LOWER : 0;
137       $flags |= ($persistent)        ? Creole::PERSISTENT : 0;
138       $flags |= ($compatAssocLower)  ? Creole::COMPAT_ASSOC_LOWER : 0;
139       $flags |= ($compatRtrimString) ? Creole::COMPAT_RTRIM_STRING : 0;
140
141       // do the duuuurtay work, right thurr
142       if ($flags > 0)
143       {
144         $this->connection = Creole::getConnection($dsn, $flags);
145       }
146       else
147       {
148         $this->connection = Creole::getConnection($dsn);
149       }
150
151       // get our resource
152       $this->resource = $this->connection->getResource();
153     }
154     catch (SQLException $e)
155     {
156       // the connection's foobar'd
157       throw new sfDatabaseException($e->toString());
158     }
159   }
160
161   /**
162    * Load a DSN connection string from an existing array.
163    *
164    * @return array An associative array of connection parameters.
165    */
166   protected function & loadDSN(&$array)
167   {
168     // determine if a dsn is set, otherwise use separate parameters
169     $dsn = $this->getParameter('dsn');
170
171     if ($dsn == null)
172     {
173       // list of available parameters
174       $available = array('database', 'hostspec', 'password', 'phptype', 'username', 'port');
175
176       $dsn = array();
177
178       // yes, i know variable variables are ugly, but let's avoid using
179       // an array for array's sake in this single spot in the source
180       foreach ($available as $parameter)
181       {
182         $$parameter = $this->getParameter($parameter);
183
184         $dsn[$parameter] = ($$parameter != null) ? $array[$$parameter] : null;
185       }
186     }
187     else
188     {
189       $dsn = $array[$dsn];
190     }
191
192     return $dsn;
193   }
194
195   /**
196    * Execute the shutdown procedure.
197    *
198    * @return void
199    *
200    * @throws <b>sfDatabaseException</b> If an error occurs while shutting down this database.
201    */
202   public function shutdown()
203   {
204     if ($this->connection !== null)
205     {
206       @$this->connection->close();
207     }
208   }
209 }
210
Note: See TracBrowser for help on using the browser.