| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- <?php
- /*
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This software consists of voluntary contributions made by many individuals
- * and is licensed under the MIT license. For more information, see
- * <http://www.doctrine-project.org>.
- */
- namespace Doctrine\DBAL\Driver\SQLAnywhere;
- use Doctrine\DBAL\DBALException;
- use Doctrine\DBAL\Driver\AbstractSQLAnywhereDriver;
- /**
- * A Doctrine DBAL driver for the SAP Sybase SQL Anywhere PHP extension.
- *
- * @author Steve Müller <st.mueller@dzh-online.de>
- * @link www.doctrine-project.org
- * @since 2.5
- */
- class Driver extends AbstractSQLAnywhereDriver
- {
- /**
- * {@inheritdoc}
- *
- * @throws \Doctrine\DBAL\DBALException if there was a problem establishing the connection.
- */
- public function connect(array $params, $username = null, $password = null, array $driverOptions = array())
- {
- try {
- return new SQLAnywhereConnection(
- $this->buildDsn(
- isset($params['host']) ? $params['host'] : null,
- isset($params['port']) ? $params['port'] : null,
- isset($params['server']) ? $params['server'] : null,
- isset($params['dbname']) ? $params['dbname'] : null,
- $username,
- $password,
- $driverOptions
- ),
- isset($params['persistent']) ? $params['persistent'] : false
- );
- } catch (SQLAnywhereException $e) {
- throw DBALException::driverException($this, $e);
- }
- }
- /**
- * {@inheritdoc}
- */
- public function getName()
- {
- return 'sqlanywhere';
- }
- /**
- * Build the connection string for given connection parameters and driver options.
- *
- * @param string $host Host address to connect to.
- * @param integer $port Port to use for the connection (default to SQL Anywhere standard port 2638).
- * @param string $server Database server name on the host to connect to.
- * SQL Anywhere allows multiple database server instances on the same host,
- * therefore specifying the server instance name to use is mandatory.
- * @param string $dbname Name of the database on the server instance to connect to.
- * @param string $username User name to use for connection authentication.
- * @param string $password Password to use for connection authentication.
- * @param array $driverOptions Additional parameters to use for the connection.
- *
- * @return string
- */
- private function buildDsn($host, $port, $server, $dbname, $username = null, $password = null, array $driverOptions = array())
- {
- $host = $host ?: 'localhost';
- $port = $port ?: 2638;
- if (! empty($server)) {
- $server = ';ServerName=' . $server;
- }
- return
- 'HOST=' . $host . ':' . $port .
- $server .
- ';DBN=' . $dbname .
- ';UID=' . $username .
- ';PWD=' . $password .
- ';' . implode(
- ';',
- array_map(function ($key, $value) {
- return $key . '=' . $value;
- }, array_keys($driverOptions), $driverOptions)
- );
- }
- }
|