/** * Returns a DataSource to a ressource with the given configuration. * * @param blaze\lang\String|string $dsn The connection string to the datasource. * @param blaze\lang\String|string $uid The uid which is used to establish a connection * @param blaze\lang\String|string $pwd The password which is used to establish a connection * @param \blaze\collections\map\Properties $options Driver specific options. * @return blaze\ds\DataSource A datasource object. * @throws blaze\ds\DataSourceException Is thrown if a database error occurs. */ public function getDataSource($dsn, $uid = null, $pwd = null, \blaze\collections\map\Properties $options = null) { $matches = array(); $uri = null; $url = null; try { $uri = \blaze\net\URI::parseURI($dsn); $url = \blaze\net\URL::parseURL($uri->getSchemeSpecificPart()); } catch (blaze\lang\Exception $e) { throw $e; } if (!$uri->getScheme()->equalsIgnoreCase('bdsc')) { throw new DataSourceException('Invalid DSN'); } $driverProtocol = $url->getScheme()->toNative(); $host = $url->getHost(); $port = $url->getPort(); $database = $url->getPath()->trim('/'); $user = null; $password = null; if ($options === null) { $options = new \blaze\collections\map\Properties(); } if (strlen($url->getQuery()) != 0) { $optParts = explode('&', $url->getQuery()); if (count($optParts) != 0) { foreach ($optParts as $opt) { $optPair = explode('=', $opt); if (count($optPair) == 2) { if (strcasecmp($optPair[0], 'uid') == 0) { $user = $optPair[1]; } else { if (strcasecmp($optPair[0], 'pwd') == 0) { $password = $optPair[1]; } else { if (!$options->containsKey($optPair[0])) { $options->setProperty($optPair[0], $optPair[1]); } } } } } } } if ($uid !== null) { $user = $uid; } if ($pwd !== null) { $password = $pwd; } $options->setProperty('timeout', '' . $this->timeout); if (!array_key_exists($driverProtocol, $this->drivers)) { throw new DataSourceException('No driver found for the given url.'); } return $this->drivers[$driverProtocol]->getDataSource($host, $port, $database, $user, $password, $options); }
public function getRequestURI() { if ($this->requestUri == null) { $this->requestUri = \blaze\net\URI::parseURI($this->getRequestPath()); } return $this->requestUri; }