Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
D
doctrine-dbal
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Tomáš Trávníček
doctrine-dbal
Commits
2e6f3542
Commit
2e6f3542
authored
Nov 15, 2013
by
Benjamin Eberlei
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #414 from easybiblabs/topics/DBAL-275
Enhancement: expose ping() on pingable-connections.
parents
81cc2a7f
99657f7f
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
99 additions
and
2 deletions
+99
-2
Connection.php
lib/Doctrine/DBAL/Connection.php
+28
-0
MysqliConnection.php
lib/Doctrine/DBAL/Driver/Mysqli/MysqliConnection.php
+13
-1
PingableConnection.php
lib/Doctrine/DBAL/Driver/PingableConnection.php
+39
-0
ConnectionTest.php
tests/Doctrine/Tests/DBAL/Functional/ConnectionTest.php
+13
-1
ConnectionTest.php
.../Doctrine/Tests/DBAL/Functional/Mysqli/ConnectionTest.php
+6
-0
No files found.
lib/Doctrine/DBAL/Connection.php
View file @
2e6f3542
...
...
@@ -30,6 +30,7 @@ use Doctrine\DBAL\Cache\ResultCacheStatement;
use
Doctrine\DBAL\Cache\QueryCacheProfile
;
use
Doctrine\DBAL\Cache\ArrayStatement
;
use
Doctrine\DBAL\Cache\CacheException
;
use
Doctrine\DBAL\Driver\PingableConnection
;
/**
* A wrapper around a Doctrine\DBAL\Driver\Connection that adds features like
...
...
@@ -1488,4 +1489,31 @@ class Connection implements DriverConnection
{
return
new
Query\QueryBuilder
(
$this
);
}
/**
* Ping the server!
*
* @return bool
*/
public
function
ping
()
{
if
(
!
$this
->
_isConnected
)
{
return
false
;
// Don't connect if not done yet. It will be lazy on first use
}
if
(
$this
->
_conn
instanceof
PingableConnection
)
{
return
$this
->
_conn
->
ping
();
}
try
{
$this
->
query
(
$this
->
_platform
->
getDummySelectSQL
());
return
true
;
}
catch
(
DBALException
$e
)
{
// As the underlying connection is unset, the next query will connect again thanks to the lazyness
$this
->
close
();
}
return
false
;
}
}
lib/Doctrine/DBAL/Driver/Mysqli/MysqliConnection.php
View file @
2e6f3542
...
...
@@ -20,11 +20,13 @@
namespace
Doctrine\DBAL\Driver\Mysqli
;
use
Doctrine\DBAL\Driver\Connection
as
Connection
;
use
\Doctrine\DBAL\Driver\PingableConnection
;
/**
* @author Kim Hemsø Rasmussen <kimhemsoe@gmail.com>
* @author Till Klampaeckel <till@php.net>
*/
class
MysqliConnection
implements
Connection
class
MysqliConnection
implements
Connection
,
PingableConnection
{
/**
* @var \mysqli
...
...
@@ -207,4 +209,14 @@ class MysqliConnection implements Connection
);
}
}
/**
* Pings the server and re-connects when `mysqli.reconnect = 1`
*
* @return bool
*/
public
function
ping
()
{
return
$this
->
_conn
->
ping
();
}
}
lib/Doctrine/DBAL/Driver/PingableConnection.php
0 → 100644
View file @
2e6f3542
<?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
;
/**
* An interface for connections which support a "native" ping method.
*
* @link www.doctrine-project.org
* @since 2.5
* @author Till Klampaeckel <till@php.net>
* @author Benjamin Eberlei <kontakt@beberlei.de>
*/
interface
PingableConnection
{
/**
* Pings the database server to determine if the connection is still
* available. Return true/false based on if that was successful or not.
*
* @return bool
*/
public
function
ping
();
}
\ No newline at end of file
tests/Doctrine/Tests/DBAL/Functional/ConnectionTest.php
View file @
2e6f3542
...
...
@@ -193,6 +193,7 @@ class ConnectionTest extends \Doctrine\Tests\DbalFunctionalTestCase
{
try
{
$this
->
_conn
->
transactional
(
function
(
$conn
)
{
/* @var $conn \Doctrine\DBAL\Connection */
$conn
->
executeQuery
(
$conn
->
getDatabasePlatform
()
->
getDummySelectSQL
());
throw
new
\RuntimeException
(
"Ooops!"
);
});
...
...
@@ -204,7 +205,7 @@ class ConnectionTest extends \Doctrine\Tests\DbalFunctionalTestCase
public
function
testTransactional
()
{
$this
->
_conn
->
transactional
(
function
(
$conn
)
{
/* @var $conn Connection */
/* @var $conn
\Doctrine\DBAL\
Connection */
$conn
->
executeQuery
(
$conn
->
getDatabasePlatform
()
->
getDummySelectSQL
());
});
}
...
...
@@ -216,4 +217,15 @@ class ConnectionTest extends \Doctrine\Tests\DbalFunctionalTestCase
{
$this
->
assertEquals
(
$this
->
_conn
->
quote
(
"foo"
,
Type
::
STRING
),
$this
->
_conn
->
quote
(
"foo"
,
\PDO
::
PARAM_STR
));
}
public
function
testPingDoesNotTriggerConnect
()
{
$this
->
assertFalse
(
$this
->
_conn
->
ping
());
}
public
function
testPingReturnsTrueWhenConnectionIsPingedOrOpen
()
{
$this
->
_conn
->
connect
();
$this
->
assertTrue
(
$this
->
_conn
->
ping
());
}
}
tests/Doctrine/Tests/DBAL/Functional/Mysqli/ConnectionTest.php
View file @
2e6f3542
...
...
@@ -39,6 +39,12 @@ class ConnectionTest extends \Doctrine\Tests\DbalFunctionalTestCase
$this
->
getConnection
(
array
(
'hello'
=>
'world'
));
// use local infile
}
public
function
testPing
()
{
$conn
=
$this
->
getConnection
(
array
());
$this
->
assertTrue
(
$conn
->
ping
());
}
private
function
getConnection
(
array
$driverOptions
)
{
return
new
\Doctrine\DBAL\Driver\Mysqli\MysqliConnection
(
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment