mirror of
https://gitlab.com/hashborgir/d2tools.git
synced 2025-04-28 07:15:37 +00:00
257 lines
9.1 KiB
PHP
257 lines
9.1 KiB
PHP
<?php
|
|
|
|
namespace RedUNIT\Base;
|
|
|
|
use RedUNIT\Base as Base;
|
|
use RedBeanPHP\Facade as R;
|
|
use RedBeanPHP\Logger as Logger;
|
|
use RedBeanPHP\Logger\RDefault as RDefault;
|
|
use RedBeanPHP\Logger\RDefault\Debug as Debug;
|
|
|
|
/**
|
|
* Logging
|
|
*
|
|
* Tests the Query Logging tools that are part of RedBeanPHP.
|
|
*
|
|
* @file RedUNIT/Base/Logging.php
|
|
* @desc Tests Logging facilities.
|
|
* @author Gabor de Mooij and the RedBeanPHP Community
|
|
* @license New BSD/GPLv2
|
|
*
|
|
* (c) G.J.G.T. (Gabor) de Mooij and the RedBeanPHP Community.
|
|
* This source file is subject to the New BSD/GPLv2 License that is bundled
|
|
* with this source code in the file license.txt.
|
|
*/
|
|
class Logging extends Base
|
|
{
|
|
/**
|
|
* Test basic logging functionality.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function testBasicLogging()
|
|
{
|
|
R::nuke();
|
|
R::startLogging();
|
|
R::store( R::dispense( 'book' ) );
|
|
$logs = R::getLogs();
|
|
$count = count( $logs );
|
|
asrt( ( count( $logs ) > 0 ), TRUE );
|
|
asrt( ( R::getLogger() instanceof Logger ), TRUE );
|
|
R::stopLogging();
|
|
R::store( R::dispense( 'book' ) );
|
|
$logs = R::getLogs();
|
|
asrt( ( count( $logs ) === 0 ), TRUE );
|
|
}
|
|
|
|
/**
|
|
* Test for Issue #751 (Update Logger to accept parameter typed bindings):
|
|
* While debugging some of our queries, we noticed
|
|
* the logger would often display
|
|
* 'Array' as value for the bindings,
|
|
* even when the SQL query seemed to work correctly.
|
|
* Debugging this, it appeared the debug logger did
|
|
* not support the new parameter type bindings added in 5.3.
|
|
* This merge request adds support for
|
|
* the PDO::PARAM_INT and PDO::PARAM_STR
|
|
* to the Debug logger, as well as a visible support
|
|
* for the RPDO flagUseStringOnlyBinding flag.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function testIssue751()
|
|
{
|
|
R::nuke();
|
|
$debugger = new Debug;
|
|
$database = R::getDatabaseAdapter()->getDatabase();
|
|
$database->setLogger( $debugger );
|
|
asrt( $database->getLogger(), $debugger );
|
|
$database->setEnableLogging( TRUE );
|
|
$debugger->setMode( RDefault::C_LOGGER_ARRAY );
|
|
/* debug logger with nostringonlybinding should have unquoted ints */
|
|
R::store( R::dispense( 'book' ) );
|
|
R::getAll( 'SELECT * FROM book WHERE id < ?', array( array( 999, \PDO::PARAM_INT ) ) );
|
|
asrt( count( $debugger->grep('999') ), 1 );
|
|
asrt( count( $debugger->grep('\'999\'') ), 0 );
|
|
asrt( count( $debugger->grep('rray') ), 0 );
|
|
$debugger->setUseStringOnlyBinding( FALSE );
|
|
$debugger->clear();
|
|
R::getAll( 'SELECT * FROM book WHERE id < ?', array( array( 999, \PDO::PARAM_STR ) ) );
|
|
/* ...but quoted strings */
|
|
asrt( count( $debugger->grep('\'999\'') ), 1 );
|
|
asrt( count( $debugger->grep('rray') ), 0 );
|
|
$debugger->setUseStringOnlyBinding( FALSE );
|
|
$debugger->clear();
|
|
/* even if PARAM INT if stringonlybinding then override */
|
|
$debugger->setUseStringOnlyBinding( TRUE );
|
|
R::getAll( 'SELECT * FROM book WHERE id < ?', array( array( 999, \PDO::PARAM_INT ) ) );
|
|
asrt( count( $debugger->grep('\'999\'') ), 1 );
|
|
asrt( count( $debugger->grep('rray') ), 0 );
|
|
/* if no type and stringonlybinding always quote */
|
|
$debugger->clear();
|
|
R::getAll( 'SELECT * FROM book WHERE id < ?', array( 999 ) );
|
|
asrt( count( $debugger->grep('\'999\'') ), 1 );
|
|
asrt( count( $debugger->grep('rray') ), 0 );
|
|
/* a more closer inspection */
|
|
/* log implicit INT param without StringOnly */
|
|
$debugger->clear();
|
|
$debugger->setUseStringOnlyBinding( FALSE );
|
|
$debugger->log(' Hello ? ', array( 123 ) );
|
|
asrt( count( $debugger->grep('123') ), 1 );
|
|
asrt( count( $debugger->grep('\'123\'') ), 0 );
|
|
/* log implicit STR param without StringOnly */
|
|
$debugger->clear();
|
|
$debugger->setUseStringOnlyBinding( FALSE );
|
|
$debugger->log(' Hello ? ', array( 'abc' ) );
|
|
asrt( count( $debugger->grep('\'abc\'') ), 1 );
|
|
/* log NULL param without StringOnly */
|
|
$debugger->clear();
|
|
$debugger->setUseStringOnlyBinding( FALSE );
|
|
$debugger->log(' Hello ? ', array( NULL ) );
|
|
asrt( count( $debugger->grep('NULL') ), 1 );
|
|
asrt( count( $debugger->grep('\'NULL\'') ), 0 );
|
|
/* log explicit INT param without StringOnly */
|
|
$debugger->clear();
|
|
$debugger->setUseStringOnlyBinding( FALSE );
|
|
$debugger->log(' Hello ? ', array( 123, \PDO::PARAM_INT ) );
|
|
asrt( count( $debugger->grep('123') ), 1 );
|
|
asrt( count( $debugger->grep('\'123\'') ), 0 );
|
|
/* log explicit STR param without StringOnly */
|
|
$debugger->clear();
|
|
$debugger->setUseStringOnlyBinding( FALSE );
|
|
$debugger->log(' Hello ? ', array( 'abc', \PDO::PARAM_STR ) );
|
|
asrt( count( $debugger->grep('\'abc\'') ), 1 );
|
|
/* log NULL with explicit param type without StringOnly */
|
|
$debugger->clear();
|
|
$debugger->setUseStringOnlyBinding( FALSE );
|
|
$debugger->log(' Hello ? ', array( NULL, \PDO::PARAM_STR ) );
|
|
asrt( count( $debugger->grep('NULL') ), 1 );
|
|
asrt( count( $debugger->grep('\'NULL\'') ), 0 );
|
|
$debugger->clear();
|
|
$debugger->setUseStringOnlyBinding( FALSE );
|
|
$debugger->log(' Hello ? ', array( NULL, \PDO::PARAM_INT ) );
|
|
asrt( count( $debugger->grep('NULL') ), 1 );
|
|
asrt( count( $debugger->grep('\'NULL\'') ), 0 );
|
|
/* log implicit INT param with StringOnly */
|
|
$debugger->clear();
|
|
$debugger->setUseStringOnlyBinding( TRUE );
|
|
$debugger->log(' Hello ? ', array( 123 ) );
|
|
asrt( count( $debugger->grep('\'123\'') ), 1 );
|
|
/* log implicit STR param with StringOnly */
|
|
$debugger->clear();
|
|
$debugger->setUseStringOnlyBinding( TRUE );
|
|
$debugger->log(' Hello ? ', array( 'abc' ) );
|
|
asrt( count( $debugger->grep('\'abc\'') ), 1 );
|
|
/* log NULL param with StringOnly */
|
|
$debugger->clear();
|
|
$debugger->setUseStringOnlyBinding( TRUE );
|
|
$debugger->log(' Hello ? ', array( NULL ) );
|
|
asrt( count( $debugger->grep('\'NULL\'') ), 1 );
|
|
/* log explicit INT param with StringOnly */
|
|
$debugger->clear();
|
|
$debugger->setUseStringOnlyBinding( TRUE );
|
|
$debugger->log(' Hello ? ', array( 123, \PDO::PARAM_INT ) );
|
|
asrt( count( $debugger->grep('\'123\'') ), 1 );
|
|
/* log explicit STR param with StringOnly */
|
|
$debugger->clear();
|
|
$debugger->setUseStringOnlyBinding( TRUE );
|
|
$debugger->log(' Hello ? ', array( 'abc', \PDO::PARAM_STR ) );
|
|
asrt( count( $debugger->grep('\'abc\'') ), 1 );
|
|
/* log NULL with explicit param type with StringOnly - remains just NULL */
|
|
$debugger->clear();
|
|
$debugger->setUseStringOnlyBinding( FALSE );
|
|
$debugger->log(' Hello ? ', array( NULL, \PDO::PARAM_STR ) );
|
|
asrt( count( $debugger->grep('NULL') ), 1 );
|
|
asrt( count( $debugger->grep('\'NULL\'') ), 0 );
|
|
$debugger->clear();
|
|
$debugger->setUseStringOnlyBinding( FALSE );
|
|
$debugger->log(' Hello ? ', array( NULL, \PDO::PARAM_INT ) );
|
|
asrt( count( $debugger->grep('NULL') ), 1 );
|
|
asrt( count( $debugger->grep('\'NULL\'') ), 0 );
|
|
$debugger->setUseStringOnlyBinding( FALSE );
|
|
/* Does stringonly mode switch along with Database mode ? */
|
|
$database->setUseStringOnlyBinding( TRUE );
|
|
$debugger->clear();
|
|
$debugger->log(' Hello ? ', array( 123, \PDO::PARAM_INT ) );
|
|
asrt( count( $debugger->grep('\'123\'') ), 1 );
|
|
$database->setUseStringOnlyBinding( FALSE );
|
|
$debugger->clear();
|
|
$debugger->log(' Hello ? ', array( 123, \PDO::PARAM_INT ) );
|
|
asrt( count( $debugger->grep('\'123\'') ), 0 );
|
|
asrt( count( $debugger->grep('123') ), 1 );
|
|
$database->setUseStringOnlyBinding( TRUE );
|
|
$debugger->clear();
|
|
$debugger->log(' Hello ? ', array( 123, \PDO::PARAM_INT ) );
|
|
asrt( count( $debugger->grep('\'123\'') ), 1 );
|
|
$database->setUseStringOnlyBinding( FALSE );
|
|
$debugger->setUseStringOnlyBinding( FALSE );
|
|
}
|
|
|
|
/**
|
|
* Can we manually set a logger and enable logging?
|
|
*
|
|
* @return void
|
|
*/
|
|
public function testCanSetLogger()
|
|
{
|
|
R::nuke();
|
|
R::store( R::dispense( 'bean' ) );
|
|
$logger = new RDefault;
|
|
$logger->setMode( RDefault::C_LOGGER_ARRAY );
|
|
$database = R::getDatabaseAdapter()->getDatabase();
|
|
$database->setLogger( $logger );
|
|
asrt( $database->getLogger(), $logger );
|
|
$database->setEnableLogging( FALSE );
|
|
$logs = $logger->getLogs();
|
|
asrt( is_array( $logs ), TRUE );
|
|
asrt( count( $logs ), 0 );
|
|
$database->setEnableLogging( TRUE );
|
|
$logs = $logger->getLogs();
|
|
asrt( is_array( $logs ), TRUE );
|
|
asrt( count( $logs ), 0 );
|
|
R::findOne( 'bean' ); //writes 3 log entries
|
|
$logs = $logger->getLogs();
|
|
asrt( is_array( $logs ), TRUE );
|
|
asrt( count( $logs ), 3 );
|
|
}
|
|
|
|
/**
|
|
* Test query counter.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function testQueryCount()
|
|
{
|
|
R::nuke();
|
|
R::store( R::dispense( 'bean' ) );
|
|
R::resetQueryCount();
|
|
asrt( R::getQueryCount(), 0 );
|
|
R::findOne( 'bean' );
|
|
asrt( R::getQueryCount(), 1 );
|
|
R::resetQueryCount();
|
|
asrt( R::getQueryCount(), 0 );
|
|
R::findOne( 'bean' );
|
|
R::findOne( 'bean' );
|
|
R::findOne( 'bean' );
|
|
asrt( R::getQueryCount(), 0 );
|
|
R::store( R::dispense( 'bean2' ) );
|
|
R::resetQueryCount();
|
|
R::findOne( 'bean' );
|
|
R::findOne( 'bean2' );
|
|
asrt( R::getQueryCount(), 2 );
|
|
R::resetQueryCount();
|
|
R::findOne( 'bean', ' id < 100' );
|
|
R::findOne( 'bean', ' id < 101' );
|
|
R::findOne( 'bean', ' id < 102' );
|
|
R::findOne( 'bean', ' id < 103' );
|
|
asrt( R::getQueryCount(), 4 );
|
|
R::findOne( 'bean', ' id < 100' );
|
|
R::findOne( 'bean', ' id < 101' );
|
|
R::findOne( 'bean', ' id < 102' );
|
|
R::findOne( 'bean', ' id < 103' );
|
|
asrt( R::getQueryCount(), 4 );
|
|
R::findOne( 'bean', ' id < 104' );
|
|
asrt( R::getQueryCount(), 5 );
|
|
}
|
|
}
|