/** * @return MySQLiAdapter|PDOAdapter * @throws Exception */ private function getAdapter() { // SS version >= 3.2 if (class_exists('MySQLiConnector') && class_exists('PDOConnector')) { $connector = DB::get_connector(); if ($connector instanceof MySQLiConnector) { $connProperty = new ReflectionProperty('MySQLiConnector', 'dbConn'); $connProperty->setAccessible(true); $conn = $connProperty->getValue($connector); return new MySQLiAdapter($conn); } else { if ($connector instanceof PDOConnector) { $connProperty = new ReflectionProperty('PDOConnector', 'pdoConnection'); $connProperty->setAccessible(true); $conn = $connProperty->getValue($connector); return new PDOAdapter($conn); } } } else { $db = DB::getConn(); if ($db instanceof MySQLDatabase) { $connProperty = new ReflectionProperty('MySQLDatabase', 'dbConn'); $connProperty->setAccessible(true); $conn = $connProperty->getValue($db); return new MySQLiAdapter($conn); } } throw new Exception('connection cannot be found'); }
public function testAffectedRows() { if (!DB::get_connector() instanceof PDOConnector) { $this->markTestSkipped('This test requires the current DB connector is PDO'); } $query = new SQLUpdate('MySQLDatabaseTest_Data'); $query->setAssignments(array('Title' => 'New Title')); // Test update which affects no rows $query->setWhere(array('Title' => 'Bob')); $result = $query->execute(); $this->assertInstanceOf('PDOQuery', $result); $this->assertEquals(0, DB::affected_rows()); // Test update which affects some rows $query->setWhere(array('Title' => 'First Item')); $result = $query->execute(); $this->assertInstanceOf('PDOQuery', $result); $this->assertEquals(1, DB::affected_rows()); }
/** * Get the Debug Bar instance * * @global array $databaseConfig * @return DebugBar\StandardDebugBar */ public static function getDebugBar() { if (self::$debugbar !== null) { return self::$debugbar; } if (!Director::isDev() || self::IsDisabled() || self::VendorNotInstalled() || self::NotLocalIp() || Director::is_cli() || self::IsDevUrl() || self::IsAdminUrl() && !self::config()->enabled_in_admin) { self::$debugbar = false; // No need to check again return; } // Add the controller extension programmaticaly because it might not be added properly through yml Controller::add_extension('DebugBarControllerExtension'); // Add a custom logger that logs everything under the Messages tab SS_Log::add_writer(new DebugBarLogWriter(), SS_Log::DEBUG, '<='); self::$debugbar = $debugbar = new DebugBar\DebugBar(); if (isset($_REQUEST['showqueries'])) { self::setShowQueries(true); echo "The queries above have been run before we started DebugBar"; echo '<hr>'; unset($_REQUEST['showqueries']); } $debugbar->addCollector(new DebugBar\DataCollector\PhpInfoCollector()); $debugbar->addCollector(new DebugBar\DataCollector\MessagesCollector()); $debugbar->addCollector(new DebugBar\DataCollector\TimeDataCollector()); $debugbar->addCollector(new DebugBar\DataCollector\MemoryCollector()); // On 3.1, PDO does not exist if (method_exists('DB', 'get_conn')) { if (!DB::get_conn()) { global $databaseConfig; if ($databaseConfig) { DB::connect($databaseConfig); } } $connector = DB::get_connector(); if (!self::config()->force_proxy && $connector instanceof PDOConnector) { // Use a little bit of magic to replace the pdo instance $refObject = new ReflectionObject($connector); $refProperty = $refObject->getProperty('pdoConnection'); $refProperty->setAccessible(true); $traceablePdo = new DebugBar\DataCollector\PDO\TraceablePDO($refProperty->getValue($connector)); $refProperty->setValue($connector, $traceablePdo); $debugbar->addCollector(new DebugBar\DataCollector\PDO\PDOCollector($traceablePdo)); } else { DB::set_conn($db = new DebugBarDatabaseNewProxy(DB::get_conn())); $db->setShowQueries(self::getShowQueries()); $debugbar->addCollector(new DebugBarDatabaseCollector($db)); } } else { if (!DB::getConn()) { global $databaseConfig; if ($databaseConfig) { DB::connect($databaseConfig); } } DB::setConn($db = new DebugBarDatabaseProxy(DB::getConn())); $db->setShowQueries(self::getShowQueries()); $debugbar->addCollector(new DebugBarDatabaseCollector($db)); } // Add some SilverStripe specific infos $debugbar->addCollector(new DebugBarSilverStripeCollector()); if (self::config()->enable_storage) { $debugbar->setStorage(new DebugBar\Storage\FileStorage(TEMP_FOLDER . '/debugbar')); } // Since we buffer everything, why not enable all dev options ? if (self::config()->auto_debug) { $_REQUEST['debug'] = true; $_REQUEST['debug_request'] = true; } if (isset($_REQUEST['debug']) || isset($_REQUEST['debug_request'])) { self::$bufferingEnabled = true; ob_start(); // We buffer everything until we have called an action } return $debugbar; }