protected function tearDown() { foreach ($this->tmpFiles as $eachFile) { @unlink($eachFile); } $this->tmpFiles = array(); // Only commit if the transaction hasn't failed. // This is because tearDown() is also executed on a failed tests, // and we don't want to call ConnectionInterface::commit() in that case // since it will trigger an exception on its own // ('Cannot commit because a nested transaction was rolled back') if (null !== $this->con) { if ($this->con->isCommitable()) { $this->con->commit(); } $this->con = null; } }
/** * Do Explain Plan for query object or query string * * @param PropelPDO $con propel connection * @param ModelCriteria|string $query query the criteria or the query string * @throws PropelException * @return PDOStatement A PDO statement executed using the connection, ready to be fetched */ public function doExplainPlan(PropelPDO $con, $query) { $con->beginTransaction(); if ($query instanceof ModelCriteria) { $params = array(); $dbMap = Propel::getDatabaseMap($query->getDbName()); $sql = BasePeer::createSelectSql($query, $params); } else { $sql = $query; } // unique id for the query string $uniqueId = uniqid('Propel', true); $stmt = $con->prepare($this->getExplainPlanQuery($sql, $uniqueId)); if ($query instanceof ModelCriteria) { $this->bindValues($stmt, $params, $dbMap); } $stmt->execute(); // explain plan is save in a table, data must be commit $con->commit(); $stmt = $con->prepare($this->getExplainPlanReadQuery($uniqueId)); $stmt->execute(); return $stmt; }