123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- <?php
- /**
- * Elgg database procedural code.
- *
- * Includes functions for reading data, writing data, and escaping queries.
- *
- * @package Elgg.Core
- * @subpackage Database
- */
- /**
- * Queue a query for running during shutdown that writes to the database
- *
- * @param string $query The query to execute
- * @param string $handler The optional handler for processing the result
- *
- * @return boolean
- */
- function execute_delayed_write_query($query, $handler = "") {
- return _elgg_services()->db->registerDelayedQuery($query, 'write', $handler);
- }
- /**
- * Queue a query for running during shutdown that reads from the database
- *
- * @param string $query The query to execute
- * @param string $handler The optional handler for processing the result
- *
- * @return boolean
- */
- function execute_delayed_read_query($query, $handler = "") {
- return _elgg_services()->db->registerDelayedQuery($query, 'read', $handler);
- }
- /**
- * Retrieve rows from the database.
- *
- * Queries are executed with {@link execute_query()} and results
- * are retrieved with {@link mysql_fetch_object()}. If a callback
- * function $callback is defined, each row will be passed as the single
- * argument to $callback. If no callback function is defined, the
- * entire result set is returned as an array.
- *
- * @param mixed $query The query being passed.
- * @param string $callback Optionally, the name of a function to call back to on each row
- *
- * @return array An array of database result objects or callback function results. If the query
- * returned nothing, an empty array.
- */
- function get_data($query, $callback = "") {
- return _elgg_services()->db->getData($query, $callback);
- }
- /**
- * Retrieve a single row from the database.
- *
- * Similar to {@link get_data()} but returns only the first row
- * matched. If a callback function $callback is specified, the row will be passed
- * as the only argument to $callback.
- *
- * @param mixed $query The query to execute.
- * @param string $callback A callback function
- *
- * @return mixed A single database result object or the result of the callback function.
- */
- function get_data_row($query, $callback = "") {
- return _elgg_services()->db->getDataRow($query, $callback);
- }
- /**
- * Insert a row into the database.
- *
- * @note Altering the DB invalidates all queries in {@link $DB_QUERY_CACHE}.
- *
- * @param mixed $query The query to execute.
- *
- * @return int|false The database id of the inserted row if a AUTO_INCREMENT field is
- * defined, 0 if not, and false on failure.
- */
- function insert_data($query) {
- return _elgg_services()->db->insertData($query);
- }
- /**
- * Update a row in the database.
- *
- * @note Altering the DB invalidates all queries in {@link $DB_QUERY_CACHE}.
- *
- * @param string $query The query to run.
- *
- * @return bool
- */
- function update_data($query) {
- return _elgg_services()->db->updateData($query);
- }
- /**
- * Remove a row from the database.
- *
- * @note Altering the DB invalidates all queries in {@link $DB_QUERY_CACHE}.
- *
- * @param string $query The SQL query to run
- *
- * @return int|false The number of affected rows or false on failure
- */
- function delete_data($query) {
- return _elgg_services()->db->deleteData($query);
- }
- /**
- * Runs a full database script from disk.
- *
- * The file specified should be a standard SQL file as created by
- * mysqldump or similar. Statements must be terminated with ;
- * and a newline character (\n or \r\n) with only one statement per line.
- *
- * The special string 'prefix_' is replaced with the database prefix
- * as defined in {@link $CONFIG->dbprefix}.
- *
- * @warning Errors do not halt execution of the script. If a line
- * generates an error, the error message is saved and the
- * next line is executed. After the file is run, any errors
- * are displayed as a {@link DatabaseException}
- *
- * @param string $scriptlocation The full path to the script
- *
- * @return void
- * @throws DatabaseException
- */
- function run_sql_script($scriptlocation) {
- _elgg_services()->db->runSqlScript($scriptlocation);
- }
- /**
- * Sanitize a string for database use.
- *
- * @param string $string The string to sanitize
- * @return string
- */
- function sanitize_string($string) {
- return _elgg_services()->db->sanitizeString($string);
- }
- /**
- * Wrapper function for alternate English spelling (@see sanitize_string)
- *
- * @param string $string The string to sanitize
- * @return string
- */
- function sanitise_string($string) {
- return sanitize_string($string);
- }
- /**
- * Sanitizes an integer for database use.
- *
- * @param int $int Value to be sanitized
- * @param bool $signed Whether negative values should be allowed (true)
- * @return int
- */
- function sanitize_int($int, $signed = true) {
- return _elgg_services()->db->sanitizeInt($int, $signed);
- }
- /**
- * Sanitizes an integer for database use.
- * Wrapper function for alternate English spelling (@see sanitize_int)
- *
- * @param int $int Value to be sanitized
- * @param bool $signed Whether negative values should be allowed (true)
- * @return int
- */
- function sanitise_int($int, $signed = true) {
- return sanitize_int($int, $signed);
- }
- /**
- * Log db profiling information at NOTICE debug level upon shutdown.
- *
- * @return void
- * @access private
- */
- function _elgg_db_log_profiling_data() {
- $db_calls = _elgg_services()->db->getQueryCount();
- // demoted to NOTICE as it corrupts javascript at DEBUG
- elgg_log("DB Queries for this page: $db_calls", 'INFO');
- }
- /**
- * Get a new query counter that will begin counting from 0. For profiling isolated
- * sections of code.
- *
- * <code>
- * $counter = _elgg_db_get_query_counter();
- *
- * ... code to profile
- *
- * $counter->setDeltaHeader();
- * </code>
- *
- * @return \Elgg\Database\QueryCounter
- * @access private
- */
- function _elgg_db_get_query_counter() {
- return _elgg_services()->queryCounter;
- }
- /**
- * Execute any delayed queries upon shutdown.
- *
- * @return void
- * @access private
- */
- function _elgg_db_run_delayed_queries() {
- _elgg_services()->db->executeDelayedQueries();
- }
- /**
- * Registers shutdown functions for database profiling and delayed queries.
- *
- * @access private
- */
- function _elgg_db_init() {
- register_shutdown_function('_elgg_db_run_delayed_queries');
- register_shutdown_function('_elgg_db_log_profiling_data');
- }
- return function(\Elgg\EventsService $events, \Elgg\HooksRegistrationService $hooks) {
- $events->registerHandler('init', 'system', '_elgg_db_init');
- };
|