Origin database can work since it is just an adapter.
$db = JFactory::getDbo();
$db->setQuery($query)->execute();
Get Doctrine to do advanced work.
$dt = $db->getDoctrine();
$em = $dt->getEntityManager();
// Do some stuff
<?php | |
/** | |
* @package Joomla.Platform | |
* @subpackage Database | |
* | |
* @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved. | |
* @license GNU General Public License version 2 or later; see LICENSE | |
*/ | |
defined('JPATH_PLATFORM') or die; | |
/** | |
* Doctrine DBAL Adapter. | |
* | |
* @package Joomla.Platform | |
* @subpackage Database | |
*/ | |
class JDatabaseDriverDoctrine extends JDatabaseDriver | |
{ | |
/** | |
* The name of the database driver. | |
* | |
* @var string | |
* @since 12.1 | |
*/ | |
public $name = 'doctrine'; | |
/** | |
* The character(s) used to quote SQL statement names such as table names or field names, | |
* etc. The child classes should define this as necessary. If a single character string the | |
* same character is used for both sides of the quoted name, else the first character will be | |
* used for the opening quote and the second for the closing quote. | |
* | |
* @var string | |
* @since 12.2 | |
*/ | |
protected $nameQuote = '`'; | |
/** | |
* The null or zero representation of a timestamp for the database driver. This should be | |
* defined in child classes to hold the appropriate value for the engine. | |
* | |
* @var string | |
* @since 12.2 | |
*/ | |
protected $nullDate = '0000-00-00 00:00:00'; | |
/** | |
* @var string The minimum supported database version. | |
* @since 12.2 | |
*/ | |
protected static $dbMinimum = '5.0.4'; | |
/** | |
* Constructor. | |
* | |
* @param array $options List of options used to configure the connection | |
* | |
* @since 12.1 | |
*/ | |
public function __construct($options) | |
{ | |
// Get some basic values from the options. | |
$options['host'] = (isset($options['host'])) ? $options['host'] : 'localhost'; | |
$options['user'] = (isset($options['user'])) ? $options['user'] : 'root'; | |
$options['password'] = (isset($options['password'])) ? $options['password'] : ''; | |
$options['database'] = (isset($options['database'])) ? $options['database'] : ''; | |
$options['select'] = (isset($options['select'])) ? (bool) $options['select'] : true; | |
$options['port'] = null; | |
$options['socket'] = null; | |
// Finalize initialisation. | |
parent::__construct($options); | |
} | |
/** | |
* Destructor. | |
* | |
* @since 12.1 | |
*/ | |
public function __destruct() | |
{ | |
$this->disconnect(); | |
} | |
/** | |
* Connects to the database if needed. | |
* | |
* @return void Returns void if the database connected successfully. | |
* | |
* @since 12.1 | |
* @throws RuntimeException | |
*/ | |
public function connect() | |
{ | |
if ($this->connection) | |
{ | |
return; | |
} | |
$dsn = 'mysql:dbname=testdb;host=127.0.0.1'; | |
$user = 'dbuser'; | |
$password = 'dbpass'; | |
$dbh = new PDO($dsn, $user, $password); | |
$this->connection = Doctrine_Manager::connection($dbh); | |
} | |
/** | |
* Disconnects the database. | |
* | |
* @return void | |
* | |
* @since 12.1 | |
*/ | |
public function disconnect() | |
{ | |
// Close the connection. | |
if ($this->connection) | |
{ | |
$this->connection->close(); | |
} | |
$this->connection = null; | |
} | |
/** | |
* getDoctrine | |
* | |
* @return resource | |
*/ | |
public function getDoctrine() | |
{ | |
if (!$this->connection) | |
{ | |
$this->connect(); | |
} | |
return $this->connection; | |
} | |
/** | |
* Method to escape a string for usage in an SQL statement. | |
* | |
* @param string $text The string to be escaped. | |
* @param boolean $extra Optional parameter to provide extra escaping. | |
* | |
* @return string The escaped string. | |
* | |
* @since 12.1 | |
*/ | |
public function escape($text, $extra = false) | |
{ | |
} | |
/** | |
* Test to see if the MySQL connector is available. | |
* | |
* @return boolean True on success, false otherwise. | |
* | |
* @since 12.1 | |
*/ | |
public static function isSupported() | |
{ | |
return class_exists('Doctrine_Manager'); | |
} | |
/** | |
* Determines if the connection to the server is active. | |
* | |
* @return boolean True if connected to the database engine. | |
* | |
* @since 12.1 | |
*/ | |
public function connected() | |
{ | |
if ($this->connection) | |
{ | |
return ($this->connection == Doctrine_Manager::connection()); | |
} | |
return false; | |
} | |
/** | |
* Execute the SQL statement. | |
* | |
* @return mixed A database cursor resource on success, boolean false on failure. | |
* | |
* @since 12.1 | |
* @throws RuntimeException | |
*/ | |
public function execute() | |
{ | |
$this->connect(); | |
if (!is_object($this->connection)) | |
{ | |
JLog::add(JText::sprintf('JLIB_DATABASE_QUERY_FAILED', $this->errorNum, $this->errorMsg), JLog::ERROR, 'database'); | |
throw new RuntimeException($this->errorMsg, $this->errorNum); | |
} | |
// Take a local copy so that we don't modify the original query and cause issues later | |
$query = $this->replacePrefix((string) $this->sql); | |
if (!($this->sql instanceof JDatabaseQuery) && ($this->limit > 0 || $this->offset > 0)) | |
{ | |
$query .= ' LIMIT ' . $this->offset . ', ' . $this->limit; | |
} | |
// Increment the query counter. | |
$this->count++; | |
// Reset the error values. | |
$this->errorNum = 0; | |
$this->errorMsg = ''; | |
$memoryBefore = null; | |
// If debugging is enabled then let's log the query. | |
if ($this->debug) | |
{ | |
// Add the query to the object queue. | |
$this->log[] = $query; | |
JLog::add($query, JLog::DEBUG, 'databasequery'); | |
$this->timings[] = microtime(true); | |
if (is_object($this->cursor)) | |
{ | |
// Avoid warning if result already freed by third-party library | |
@$this->freeResult(); | |
} | |
$memoryBefore = memory_get_usage(); | |
} | |
// Execute the query. Error suppression is used here to prevent warnings/notices that the connection has been lost. | |
try | |
{ | |
$this->cursor = $this->connection->execute((string) $query); | |
} | |
catch (Doctrine_Connection_Exception $e) | |
{ | |
$this->errorNum = (int) $e->getPortableCode(); | |
$this->errorMsg = (string) $e->getPortableMessage() . ' SQL=' . $query; | |
JLog::add(JText::sprintf('JLIB_DATABASE_QUERY_FAILED', $this->errorNum, $this->errorMsg), JLog::ERROR, 'databasequery'); | |
throw new RuntimeException($this->errorMsg, $this->errorNum, $e); | |
} | |
if ($this->debug) | |
{ | |
$this->timings[] = microtime(true); | |
if (defined('DEBUG_BACKTRACE_IGNORE_ARGS')) | |
{ | |
$this->callStacks[] = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); | |
} | |
else | |
{ | |
$this->callStacks[] = debug_backtrace(); | |
} | |
$this->callStacks[count($this->callStacks) - 1][0]['memory'] = array($memoryBefore, memory_get_usage(), is_object($this->cursor) ? $this->getNumRows() : null); | |
} | |
return $this->cursor; | |
} | |
/** | |
* Drops a table from the database. | |
* | |
* @param string $tableName The name of the database table to drop. | |
* @param boolean $ifExists Optionally specify that the table must exist before it is dropped. | |
* | |
* @return JDatabaseDriverMysqli Returns this object to support chaining. | |
* | |
* @since 12.2 | |
* @throws RuntimeException | |
*/ | |
public function dropTable($tableName, $ifExists = true) | |
{ | |
$schema = $this->getDoctrine() | |
->getSchemaManager(); | |
if ($ifExists && !$schema->tablesExist(array($tableName))) | |
{ | |
return $this; | |
} | |
$schema->createSchema() | |
->dropTable($tableName); | |
return $this; | |
} | |
/** | |
* Get the number of affected rows for the previous executed SQL statement. | |
* | |
* @return integer The number of affected rows. | |
* | |
* @since 12.1 | |
*/ | |
public function getAffectedRows() | |
{ | |
} | |
/** | |
* Method to get the database collation in use by sampling a text field of a table in the database. | |
* | |
* @return mixed The collation in use by the database (string) or boolean false if not supported. | |
* | |
* @since 12.2 | |
* @throws RuntimeException | |
*/ | |
public function getCollation() | |
{ | |
} | |
/** | |
* Get the number of returned rows for the previous executed SQL statement. | |
* | |
* @param resource $cursor An optional database cursor resource to extract the row count from. | |
* | |
* @return integer The number of returned rows. | |
* | |
* @since 12.1 | |
*/ | |
public function getNumRows($cursor = null) | |
{ | |
} | |
/** | |
* Shows the table CREATE statement that creates the given tables. | |
* | |
* @param mixed $tables A table name or a list of table names. | |
* | |
* @return array A list of the create SQL for the tables. | |
* | |
* @since 12.1 | |
* @throws RuntimeException | |
*/ | |
public function getTableCreate($tables) | |
{ | |
} | |
/** | |
* Retrieves field information about a given table. | |
* | |
* @param string $table The name of the database table. | |
* @param boolean $typeOnly True to only return field types. | |
* | |
* @return array An array of fields for the database table. | |
* | |
* @since 12.2 | |
* @throws RuntimeException | |
*/ | |
public function getTableColumns($table, $typeOnly = true) | |
{ | |
} | |
/** | |
* Get the details list of keys for a table. | |
* | |
* @param string $table The name of the table. | |
* | |
* @return array An array of the column specification for the table. | |
* | |
* @since 12.2 | |
* @throws RuntimeException | |
*/ | |
public function getTableKeys($table) | |
{ | |
} | |
/** | |
* Method to get an array of all tables in the database. | |
* | |
* @return array An array of all the tables in the database. | |
* | |
* @since 12.2 | |
* @throws RuntimeException | |
*/ | |
public function getTableList() | |
{ | |
} | |
/** | |
* Get the version of the database connector. | |
* | |
* @return string The database connector version. | |
* | |
* @since 12.1 | |
*/ | |
public function getVersion() | |
{ | |
} | |
/** | |
* Method to get the auto-incremented value from the last INSERT statement. | |
* | |
* @return mixed The value of the auto-increment field from the last inserted row. | |
* If the value is greater than maximal int value, it will return a string. | |
* | |
* @since 12.1 | |
*/ | |
public function insertid() | |
{ | |
} | |
/** | |
* Locks a table in the database. | |
* | |
* @param string $table The name of the table to unlock. | |
* | |
* @return JDatabaseDriverMysqli Returns this object to support chaining. | |
* | |
* @since 12.2 | |
* @throws RuntimeException | |
*/ | |
public function lockTable($table) | |
{ | |
} | |
/** | |
* Renames a table in the database. | |
* | |
* @param string $oldTable The name of the table to be renamed | |
* @param string $newTable The new name for the table. | |
* @param string $backup Not used by MySQL. | |
* @param string $prefix Not used by MySQL. | |
* | |
* @return JDatabaseDriverMysqli Returns this object to support chaining. | |
* | |
* @since 12.2 | |
* @throws RuntimeException | |
*/ | |
public function renameTable($oldTable, $newTable, $backup = null, $prefix = null) | |
{ | |
} | |
/** | |
* Select a database for use. | |
* | |
* @param string $database The name of the database to select for use. | |
* | |
* @return boolean True if the database was successfully selected. | |
* | |
* @since 12.1 | |
* @throws RuntimeException | |
*/ | |
public function select($database) | |
{ | |
} | |
/** | |
* Set the connection to use UTF-8 character encoding. | |
* | |
* @return boolean True on success. | |
* | |
* @since 12.1 | |
*/ | |
public function setUTF() | |
{ | |
} | |
/** | |
* Method to commit a transaction. | |
* | |
* @param boolean $toSavepoint If true, commit to the last savepoint. | |
* | |
* @return void | |
* | |
* @since 12.2 | |
* @throws RuntimeException | |
*/ | |
public function transactionCommit($toSavepoint = false) | |
{ | |
} | |
/** | |
* Method to roll back a transaction. | |
* | |
* @param boolean $toSavepoint If true, rollback to the last savepoint. | |
* | |
* @return void | |
* | |
* @since 12.2 | |
* @throws RuntimeException | |
*/ | |
public function transactionRollback($toSavepoint = false) | |
{ | |
} | |
/** | |
* Method to initialize a transaction. | |
* | |
* @param boolean $asSavepoint If true and a transaction is already active, a savepoint will be created. | |
* | |
* @return void | |
* | |
* @since 12.2 | |
* @throws RuntimeException | |
*/ | |
public function transactionStart($asSavepoint = false) | |
{ | |
} | |
/** | |
* Method to fetch a row from the result set cursor as an array. | |
* | |
* @param mixed $cursor The optional result set cursor from which to fetch the row. | |
* | |
* @return mixed Either the next row from the result set or false if there are no more rows. | |
* | |
* @since 12.1 | |
*/ | |
protected function fetchArray($cursor = null) | |
{ | |
} | |
/** | |
* Method to fetch a row from the result set cursor as an associative array. | |
* | |
* @param mixed $cursor The optional result set cursor from which to fetch the row. | |
* | |
* @return mixed Either the next row from the result set or false if there are no more rows. | |
* | |
* @since 12.1 | |
*/ | |
protected function fetchAssoc($cursor = null) | |
{ | |
} | |
/** | |
* Method to fetch a row from the result set cursor as an object. | |
* | |
* @param mixed $cursor The optional result set cursor from which to fetch the row. | |
* @param string $class The class name to use for the returned row object. | |
* | |
* @return mixed Either the next row from the result set or false if there are no more rows. | |
* | |
* @since 12.1 | |
*/ | |
protected function fetchObject($cursor = null, $class = 'stdClass') | |
{ | |
} | |
/** | |
* Method to free up the memory used for the result set. | |
* | |
* @param mixed $cursor The optional result set cursor from which to fetch the row. | |
* | |
* @return void | |
* | |
* @since 12.1 | |
*/ | |
protected function freeResult($cursor = null) | |
{ | |
} | |
/** | |
* Unlocks tables in the database. | |
* | |
* @return JDatabaseDriverMysqli Returns this object to support chaining. | |
* | |
* @since 12.1 | |
* @throws RuntimeException | |
*/ | |
public function unlockTables() | |
{ | |
} | |
/** | |
* Internal function to check if profiling is available | |
* | |
* @return boolean | |
* | |
* @since 3.1.3 | |
*/ | |
private function hasProfiling() | |
{ | |
} | |
} |