2012-03-03 20:01:01 +00:00
< ? php
/**
* @ file
* Core systems for the database layer .
*
* Classes required for basic functioning of the database system should be
* placed in this file . All utility functions should also be placed in this
* file only , as they cannot auto - load the way classes can .
*/
2015-07-28 14:48:37 +00:00
use Drupal\Core\Database\Database ;
use Drupal\Core\Database\Query\Condition ;
use Drupal\Core\Site\Settings ;
2012-03-03 20:01:01 +00:00
/**
2015-04-13 15:52:41 +00:00
* @ addtogroup database
2012-03-03 20:01:01 +00:00
* @ {
*/
/**
* Executes an arbitrary query string against the active database .
*
* Use this function for SELECT queries if it is just a simple query string .
* If the caller or other modules need to change the query , use db_select ()
* instead .
*
* Do not use this function for INSERT , UPDATE , or DELETE queries . Those should
* be handled via db_insert (), db_update () and db_delete () respectively .
*
2015-07-28 14:48:37 +00:00
* @ param string | \Drupal\Core\Database\StatementInterface $query
2012-03-03 20:01:01 +00:00
* The prepared statement query to run . Although it will accept both named and
* unnamed placeholders , named placeholders are strongly preferred as they are
2015-02-03 09:42:28 +00:00
* more self - documenting . If the argument corresponding to a placeholder is
2015-12-03 19:04:31 +00:00
* an array of values to be expanded ( for example , with an IN query ), the
* placeholder should be named with a trailing bracket like : example [] .
2015-07-28 14:48:37 +00:00
* @ param array $args
2012-03-03 20:01:01 +00:00
* An array of values to substitute into the query . If the query uses named
* placeholders , this is an associative array in any order . If the query uses
* unnamed placeholders ( ? ), this is an indexed array and the order must match
* the order of placeholders in the query string .
2015-07-28 14:48:37 +00:00
* @ param array $options
2012-03-03 20:01:01 +00:00
* An array of options to control how the query operates .
*
2013-08-13 14:39:22 +00:00
* @ return \Drupal\Core\Database\StatementInterface
2012-03-03 20:01:01 +00:00
* A prepared statement object , already executed .
*
2015-07-28 14:48:37 +00:00
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container and
2015-12-03 19:04:31 +00:00
* call query () on it . For example ,
2015-07-28 14:48:37 +00:00
* $injected_database -> query ( $query , $args , $options );
*
* @ see \Drupal\Core\Database\Connection :: query ()
2013-08-13 18:41:40 +00:00
* @ see \Drupal\Core\Database\Connection :: defaultOptions ()
2012-03-03 20:01:01 +00:00
*/
2017-03-04 01:20:24 +00:00
function db_query ( $query , array $args = [], array $options = []) {
2012-03-03 20:01:01 +00:00
if ( empty ( $options [ 'target' ])) {
$options [ 'target' ] = 'default' ;
}
return Database :: getConnection ( $options [ 'target' ]) -> query ( $query , $args , $options );
}
/**
* Executes a query against the active database , restricted to a range .
*
2015-07-28 14:48:37 +00:00
* @ param string $query
2012-03-03 20:01:01 +00:00
* The prepared statement query to run . Although it will accept both named and
* unnamed placeholders , named placeholders are strongly preferred as they are
* more self - documenting .
* @ param $from
* The first record from the result set to return .
* @ param $count
* The number of records to return from the result set .
2015-07-28 14:48:37 +00:00
* @ param array $args
2012-03-03 20:01:01 +00:00
* An array of values to substitute into the query . If the query uses named
* placeholders , this is an associative array in any order . If the query uses
* unnamed placeholders ( ? ), this is an indexed array and the order must match
* the order of placeholders in the query string .
2015-07-28 14:48:37 +00:00
* @ param array $options
2012-03-03 20:01:01 +00:00
* An array of options to control how the query operates .
*
2013-08-13 14:39:22 +00:00
* @ return \Drupal\Core\Database\StatementInterface
2012-03-03 20:01:01 +00:00
* A prepared statement object , already executed .
*
2015-07-28 14:48:37 +00:00
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container and
2015-12-03 19:04:31 +00:00
* call queryRange () on it . For example ,
2015-07-28 14:48:37 +00:00
* $injected_database -> queryRange ( $query , $from , $count , $args , $options );
*
* @ see \Drupal\Core\Database\Connection :: queryRange ()
2013-08-13 18:41:40 +00:00
* @ see \Drupal\Core\Database\Connection :: defaultOptions ()
2012-03-03 20:01:01 +00:00
*/
2017-03-04 01:20:24 +00:00
function db_query_range ( $query , $from , $count , array $args = [], array $options = []) {
2012-03-03 20:01:01 +00:00
if ( empty ( $options [ 'target' ])) {
$options [ 'target' ] = 'default' ;
}
return Database :: getConnection ( $options [ 'target' ]) -> queryRange ( $query , $from , $count , $args , $options );
}
/**
2014-05-06 19:00:05 +00:00
* Executes a SELECT query string and saves the result set to a temporary table .
2012-03-03 20:01:01 +00:00
*
* The execution of the query string happens against the active database .
*
2015-07-28 14:48:37 +00:00
* @ param string $query
2014-05-06 19:00:05 +00:00
* The prepared SELECT statement query to run . Although it will accept both
* named and unnamed placeholders , named placeholders are strongly preferred
* as they are more self - documenting .
2015-07-28 14:48:37 +00:00
* @ param array $args
2012-03-03 20:01:01 +00:00
* An array of values to substitute into the query . If the query uses named
* placeholders , this is an associative array in any order . If the query uses
* unnamed placeholders ( ? ), this is an indexed array and the order must match
* the order of placeholders in the query string .
2015-07-28 14:48:37 +00:00
* @ param array $options
2012-03-03 20:01:01 +00:00
* An array of options to control how the query operates .
*
* @ return
* The name of the temporary table .
*
2015-07-28 14:48:37 +00:00
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container and
2015-12-03 19:04:31 +00:00
* call queryTemporary () on it . For example ,
2015-07-28 14:48:37 +00:00
* $injected_database -> queryTemporary ( $query , $args , $options );
*
* @ see \Drupal\Core\Database\Connection :: queryTemporary ()
2013-08-13 18:41:40 +00:00
* @ see \Drupal\Core\Database\Connection :: defaultOptions ()
2012-03-03 20:01:01 +00:00
*/
2017-03-04 01:20:24 +00:00
function db_query_temporary ( $query , array $args = [], array $options = []) {
2012-03-03 20:01:01 +00:00
if ( empty ( $options [ 'target' ])) {
$options [ 'target' ] = 'default' ;
}
return Database :: getConnection ( $options [ 'target' ]) -> queryTemporary ( $query , $args , $options );
}
/**
* Returns a new InsertQuery object for the active database .
*
2015-07-28 14:48:37 +00:00
* @ param string $table
2012-03-03 20:01:01 +00:00
* The table into which to insert .
2015-07-28 14:48:37 +00:00
* @ param array $options
2012-03-03 20:01:01 +00:00
* An array of options to control how the query operates .
*
2013-08-13 14:39:22 +00:00
* @ return \Drupal\Core\Database\Query\Insert
* A new Insert object for this connection .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container and
2015-12-03 19:04:31 +00:00
* call insert () on it . For example ,
* $injected_database -> insert ( $table , $options );
2015-07-28 14:48:37 +00:00
*
* @ see \Drupal\Core\Database\Connection :: insert ()
* @ see \Drupal\Core\Database\Connection :: defaultOptions ()
2012-03-03 20:01:01 +00:00
*/
2017-03-04 01:20:24 +00:00
function db_insert ( $table , array $options = []) {
2014-06-14 02:31:56 +00:00
if ( empty ( $options [ 'target' ]) || $options [ 'target' ] == 'replica' ) {
2012-03-03 20:01:01 +00:00
$options [ 'target' ] = 'default' ;
}
return Database :: getConnection ( $options [ 'target' ]) -> insert ( $table , $options );
}
/**
* Returns a new MergeQuery object for the active database .
*
2015-07-28 14:48:37 +00:00
* @ param string $table
* Name of the table to associate with this query .
* @ param array $options
2012-03-03 20:01:01 +00:00
* An array of options to control how the query operates .
*
2013-08-13 14:39:22 +00:00
* @ return \Drupal\Core\Database\Query\Merge
* A new Merge object for this connection .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container and
2015-12-03 19:04:31 +00:00
* call merge () on it . For example ,
* $injected_database -> merge ( $table , $options );
2015-07-28 14:48:37 +00:00
*
* @ see \Drupal\Core\Database\Connection :: merge ()
* @ see \Drupal\Core\Database\Connection :: defaultOptions ()
2012-03-03 20:01:01 +00:00
*/
2017-03-04 01:20:24 +00:00
function db_merge ( $table , array $options = []) {
2014-06-14 02:31:56 +00:00
if ( empty ( $options [ 'target' ]) || $options [ 'target' ] == 'replica' ) {
2012-03-03 20:01:01 +00:00
$options [ 'target' ] = 'default' ;
}
return Database :: getConnection ( $options [ 'target' ]) -> merge ( $table , $options );
}
/**
* Returns a new UpdateQuery object for the active database .
*
2015-07-28 14:48:37 +00:00
* @ param string $table
2012-03-03 20:01:01 +00:00
* The table to update .
2015-07-28 14:48:37 +00:00
* @ param array $options
2012-03-03 20:01:01 +00:00
* An array of options to control how the query operates .
*
2013-08-13 14:39:22 +00:00
* @ return \Drupal\Core\Database\Query\Update
* A new Update object for this connection .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container and
2015-12-03 19:04:31 +00:00
* call update () on it . For example ,
* $injected_database -> update ( $table , $options );
2015-07-28 14:48:37 +00:00
*
* @ see \Drupal\Core\Database\Connection :: update ()
* @ see \Drupal\Core\Database\Connection :: defaultOptions ()
2012-03-03 20:01:01 +00:00
*/
2017-03-04 01:20:24 +00:00
function db_update ( $table , array $options = []) {
2014-06-14 02:31:56 +00:00
if ( empty ( $options [ 'target' ]) || $options [ 'target' ] == 'replica' ) {
2012-03-03 20:01:01 +00:00
$options [ 'target' ] = 'default' ;
}
return Database :: getConnection ( $options [ 'target' ]) -> update ( $table , $options );
}
/**
* Returns a new DeleteQuery object for the active database .
*
2015-07-28 14:48:37 +00:00
* @ param string $table
2012-03-03 20:01:01 +00:00
* The table from which to delete .
2015-07-28 14:48:37 +00:00
* @ param array $options
2012-03-03 20:01:01 +00:00
* An array of options to control how the query operates .
*
2013-08-13 14:39:22 +00:00
* @ return \Drupal\Core\Database\Query\Delete
* A new Delete object for this connection .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container and
2015-12-03 19:04:31 +00:00
* call delete () on it . For example ,
* $injected_database -> delete ( $table , $options );
2015-07-28 14:48:37 +00:00
*
* @ see \Drupal\Core\Database\Connection :: delete ()
* @ see \Drupal\Core\Database\Connection :: defaultOptions ()
2012-03-03 20:01:01 +00:00
*/
2017-03-04 01:20:24 +00:00
function db_delete ( $table , array $options = []) {
2014-06-14 02:31:56 +00:00
if ( empty ( $options [ 'target' ]) || $options [ 'target' ] == 'replica' ) {
2012-03-03 20:01:01 +00:00
$options [ 'target' ] = 'default' ;
}
return Database :: getConnection ( $options [ 'target' ]) -> delete ( $table , $options );
}
/**
* Returns a new TruncateQuery object for the active database .
*
2015-07-28 14:48:37 +00:00
* @ param string $table
* The table from which to truncate .
* @ param array $options
2012-03-03 20:01:01 +00:00
* An array of options to control how the query operates .
*
2013-08-13 14:39:22 +00:00
* @ return \Drupal\Core\Database\Query\Truncate
* A new Truncate object for this connection .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container and
2015-12-03 19:04:31 +00:00
* call truncate () on it . For example ,
* $injected_database -> truncate ( $table , $options );
2015-07-28 14:48:37 +00:00
*
* @ see \Drupal\Core\Database\Connection :: truncate ()
* @ see \Drupal\Core\Database\Connection :: defaultOptions ()
2012-03-03 20:01:01 +00:00
*/
2017-03-04 01:20:24 +00:00
function db_truncate ( $table , array $options = []) {
2014-06-14 02:31:56 +00:00
if ( empty ( $options [ 'target' ]) || $options [ 'target' ] == 'replica' ) {
2012-03-03 20:01:01 +00:00
$options [ 'target' ] = 'default' ;
}
return Database :: getConnection ( $options [ 'target' ]) -> truncate ( $table , $options );
}
/**
* Returns a new SelectQuery object for the active database .
*
2015-07-28 14:48:37 +00:00
* @ param string | \Drupal\Core\Database\Query\SelectInterface $table
* The base table for this query . May be a string or another SelectInterface
* object . If a SelectInterface object is passed , it will be used as a
* subselect .
* @ param string $alias
2014-12-11 17:17:45 +00:00
* ( optional ) The alias for the base table of this query .
2015-07-28 14:48:37 +00:00
* @ param array $options
2014-12-11 17:17:45 +00:00
* ( optional ) An array of options to control how the query operates .
2012-03-03 20:01:01 +00:00
*
2013-08-13 14:39:22 +00:00
* @ return \Drupal\Core\Database\Query\Select
* A new Select object for this connection .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container and
2015-12-03 19:04:31 +00:00
* call select () on it . For example ,
2015-07-28 14:48:37 +00:00
* $injected_database -> select ( $table , $alias , $options );
*
* @ see \Drupal\Core\Database\Connection :: select ()
* @ see \Drupal\Core\Database\Connection :: defaultOptions ()
2012-03-03 20:01:01 +00:00
*/
2017-03-04 01:20:24 +00:00
function db_select ( $table , $alias = NULL , array $options = []) {
2012-03-03 20:01:01 +00:00
if ( empty ( $options [ 'target' ])) {
$options [ 'target' ] = 'default' ;
}
return Database :: getConnection ( $options [ 'target' ]) -> select ( $table , $alias , $options );
}
/**
* Returns a new transaction object for the active database .
*
* @ param string $name
* Optional name of the transaction .
* @ param array $options
* An array of options to control how the transaction operates :
* - target : The database target name .
*
2013-08-13 14:39:22 +00:00
* @ return \Drupal\Core\Database\Transaction
* A new Transaction object for this connection .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container and
2015-12-03 19:04:31 +00:00
* call startTransaction () on it . For example ,
2015-07-28 14:48:37 +00:00
* $injected_database -> startTransaction ( $name );
*
* @ see \Drupal\Core\Database\Connection :: startTransaction ()
* @ see \Drupal\Core\Database\Connection :: defaultOptions ()
2012-03-03 20:01:01 +00:00
*/
2017-03-04 01:20:24 +00:00
function db_transaction ( $name = NULL , array $options = []) {
2018-08-22 00:35:38 +00:00
@ trigger_error ( 'db_transaction is deprecated in Drupal 8.0.x and will be removed before Drupal 9.0.0. Instead, get a database connection injected into your service from the container and call startTransaction() on it. For example, $injected_database->startTransaction($name). See https://www.drupal.org/node/2993033' , E_USER_DEPRECATED );
// @todo Move away from here setting default target connection,
// https://www.drupal.org/node/2947775
2012-03-03 20:01:01 +00:00
if ( empty ( $options [ 'target' ])) {
$options [ 'target' ] = 'default' ;
}
return Database :: getConnection ( $options [ 'target' ]) -> startTransaction ( $name );
}
/**
* Sets a new active database .
*
* @ param $key
* The key in the $databases array to set as the default database .
*
2015-07-28 14:48:37 +00:00
* @ return string | null
2012-03-03 20:01:01 +00:00
* The key of the formerly active database .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Use
* \Drupal\Core\Database\Database :: setActiveConnection () .
2012-03-03 20:01:01 +00:00
*/
function db_set_active ( $key = 'default' ) {
2018-02-22 10:16:55 +00:00
@ trigger_error ( 'db_set_active() is deprecated in Drupal 8.0.x and will be removed before Drupal 9.0.0. Use \Drupal\Core\Database\Database::setActiveConnection() instead. See https://www.drupal.org/node/2944084.' , E_USER_DEPRECATED );
2012-03-03 20:01:01 +00:00
return Database :: setActiveConnection ( $key );
}
/**
* Restricts a dynamic table name to safe characters .
*
* Only keeps alphanumeric and underscores .
*
* @ param $table
* The table name to escape .
*
2015-07-28 14:48:37 +00:00
* @ return string
2012-03-03 20:01:01 +00:00
* The escaped table name as a string .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container and
2015-12-03 19:04:31 +00:00
* call escapeTable () on it . For example ,
* $injected_database -> escapeTable ( $table );
2015-07-28 14:48:37 +00:00
*
* @ see \Drupal\Core\Database\Connection :: escapeTable ()
2012-03-03 20:01:01 +00:00
*/
function db_escape_table ( $table ) {
return Database :: getConnection () -> escapeTable ( $table );
}
/**
* Restricts a dynamic column or constraint name to safe characters .
*
* Only keeps alphanumeric and underscores .
*
2015-07-28 14:48:37 +00:00
* @ param string $field
2012-03-03 20:01:01 +00:00
* The field name to escape .
*
2015-07-28 14:48:37 +00:00
* @ return string
2012-03-03 20:01:01 +00:00
* The escaped field name as a string .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container and
2015-12-03 19:04:31 +00:00
* call escapeTable () on it . For example ,
* $injected_database -> escapeTable ( $table );
2015-07-28 14:48:37 +00:00
*
* @ see \Drupal\Core\Database\Connection :: escapeField ()
2012-03-03 20:01:01 +00:00
*/
function db_escape_field ( $field ) {
return Database :: getConnection () -> escapeField ( $field );
}
/**
* Escapes characters that work as wildcard characters in a LIKE pattern .
*
* The wildcard characters " % " and " _ " as well as backslash are prefixed with
* a backslash . Use this to do a search for a verbatim string without any
* wildcard behavior .
*
* You must use a query builder like db_select () in order to use db_like () on
* all supported database systems . Using db_like () with db_query () or
* db_query_range () is not supported .
*
* For example , the following does a case - insensitive query for all rows whose
* name starts with $prefix :
* @ code
* $result = db_select ( 'person' , 'p' )
* -> fields ( 'p' )
* -> condition ( 'name' , db_like ( $prefix ) . '%' , 'LIKE' )
* -> execute ()
* -> fetchAll ();
* @ endcode
*
* Backslash is defined as escape character for LIKE patterns in
* DatabaseCondition :: mapConditionOperator () .
*
2015-07-28 14:48:37 +00:00
* @ param string $string
2012-03-03 20:01:01 +00:00
* The string to escape .
*
2015-07-28 14:48:37 +00:00
* @ return string
2012-03-03 20:01:01 +00:00
* The escaped string .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container and
2015-12-03 19:04:31 +00:00
* call escapeLike () on it . For example ,
* $injected_database -> escapeLike ( $string );
2015-07-28 14:48:37 +00:00
*
* @ see \Drupal\Core\Database\Connection :: escapeLike ()
2012-03-03 20:01:01 +00:00
*/
function db_like ( $string ) {
return Database :: getConnection () -> escapeLike ( $string );
}
/**
* Retrieves the name of the currently active database driver .
*
2015-07-28 14:48:37 +00:00
* @ return string
2012-03-03 20:01:01 +00:00
* The name of the currently active database driver .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container and
2015-12-03 19:04:31 +00:00
* call driver () on it . For example , $injected_database -> driver ( $string );
2015-07-28 14:48:37 +00:00
*
* @ see \Drupal\Core\Database\Connection :: driver ()
2012-03-03 20:01:01 +00:00
*/
function db_driver () {
return Database :: getConnection () -> driver ();
}
/**
* Closes the active database connection .
*
2015-07-28 14:48:37 +00:00
* @ param array $options
2012-03-03 20:01:01 +00:00
* An array of options to control which connection is closed . Only the target
* key has any meaning in this case .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Use
* \Drupal\Core\Database\Database :: closeConnection ( $target ) .
*
* @ see \Drupal\Core\Database\Database :: closeConnection ()
2012-03-03 20:01:01 +00:00
*/
2017-03-04 01:20:24 +00:00
function db_close ( array $options = []) {
2018-08-22 11:56:09 +00:00
@ trigger_error ( 'db_close() is deprecated in Drupal 8.0.x and will be removed before Drupal 9.0.0. Use \Drupal\Core\Database\Database::closeConnection() instead. See https://www.drupal.org/node/2993033.' , E_USER_DEPRECATED );
2012-03-03 20:01:01 +00:00
if ( empty ( $options [ 'target' ])) {
$options [ 'target' ] = NULL ;
}
Database :: closeConnection ( $options [ 'target' ]);
}
/**
* Retrieves a unique id .
*
* Use this function if for some reason you can ' t use a serial field . Using a
* serial field is preferred , and InsertQuery :: execute () returns the value of
* the last ID inserted .
*
2015-07-28 14:48:37 +00:00
* @ param int $existing_id
2012-03-03 20:01:01 +00:00
* After a database import , it might be that the sequences table is behind , so
* by passing in a minimum ID , it can be assured that we never issue the same
* ID .
*
2015-07-28 14:48:37 +00:00
* @ return int
2012-03-03 20:01:01 +00:00
* An integer number larger than any number returned before for this sequence .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container and
2015-12-03 19:04:31 +00:00
* call nextId () on it . For example , $injected_database -> nextId ( $existing_id );
2015-07-28 14:48:37 +00:00
*
* @ see \Drupal\Core\Database\Connection :: nextId ()
2012-03-03 20:01:01 +00:00
*/
function db_next_id ( $existing_id = 0 ) {
return Database :: getConnection () -> nextId ( $existing_id );
}
/**
* Returns a new DatabaseCondition , set to " OR " all conditions together .
*
2013-08-13 14:39:22 +00:00
* @ return \Drupal\Core\Database\Query\Condition
* A new Condition object , set to " OR " all conditions together .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Create
* a \Drupal\Core\Database\Query\Condition object , specifying an OR
* conjunction : new Condition ( 'OR' );
*
* @ see \Drupal\Core\Database\Query\Condition
2012-03-03 20:01:01 +00:00
*/
function db_or () {
2018-08-23 12:05:52 +00:00
@ trigger_error ( 'db_or() is deprecated in Drupal 8.0.x and will be removed before Drupal 9.0.0. Create a \Drupal\Core\Database\Query\Condition object, specifying an OR conjunction: new Condition(\'OR\'), instead. See https://www.drupal.org/node/2993033.' , E_USER_DEPRECATED );
2012-03-03 20:01:01 +00:00
return new Condition ( 'OR' );
}
/**
* Returns a new DatabaseCondition , set to " AND " all conditions together .
*
2013-08-13 14:39:22 +00:00
* @ return \Drupal\Core\Database\Query\Condition
* A new Condition object , set to " AND " all conditions together .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Create
* a \Drupal\Core\Database\Query\Condition object , specifying an AND
* conjunction : new Condition ( 'AND' );
*
* @ see \Drupal\Core\Database\Query\Condition
2012-03-03 20:01:01 +00:00
*/
function db_and () {
2018-08-23 12:05:52 +00:00
@ trigger_error ( 'db_and() is deprecated in Drupal 8.0.x and will be removed before Drupal 9.0.0. Create a \Drupal\Core\Database\Query\Condition object, specifying an AND conjunction: new Condition(\'AND\'), instead. See https://www.drupal.org/node/2993033.' , E_USER_DEPRECATED );
2012-03-03 20:01:01 +00:00
return new Condition ( 'AND' );
}
/**
* Returns a new DatabaseCondition , set to " XOR " all conditions together .
*
2013-08-13 14:39:22 +00:00
* @ return \Drupal\Core\Database\Query\Condition
* A new Condition object , set to " XOR " all conditions together .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Create
2018-08-23 12:05:52 +00:00
* a \Drupal\Core\Database\Query\Condition object , specifying a XOR
2015-07-28 14:48:37 +00:00
* conjunction : new Condition ( 'XOR' );
*
* @ see \Drupal\Core\Database\Query\Condition
2012-03-03 20:01:01 +00:00
*/
function db_xor () {
2018-08-23 12:05:52 +00:00
@ trigger_error ( 'db_xor() is deprecated in Drupal 8.0.x and will be removed before Drupal 9.0.0. Create a \Drupal\Core\Database\Query\Condition object, specifying a XOR conjunction: new Condition(\'XOR\'), instead. See https://www.drupal.org/node/2993033.' , E_USER_DEPRECATED );
2012-03-03 20:01:01 +00:00
return new Condition ( 'XOR' );
}
/**
* Returns a new DatabaseCondition , set to the specified conjunction .
*
2018-08-23 12:05:52 +00:00
* Internal API function call . Creating a
* \Drupal\Core\Database\Query\Condition object , specifying the desired
* conjunction ( 'AND' , 'OR' or 'XOR' ), is preferred .
2012-03-03 20:01:01 +00:00
*
2015-07-28 14:48:37 +00:00
* @ param string $conjunction
2012-03-03 20:01:01 +00:00
* The conjunction to use for query conditions ( AND , OR or XOR ) .
2013-08-13 14:39:22 +00:00
*
* @ return \Drupal\Core\Database\Query\Condition
* A new Condition object , set to the specified conjunction .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Create
* a \Drupal\Core\Database\Query\Condition object , specifying the desired
2018-08-23 12:05:52 +00:00
* conjunction : new Condition ( $conjunction );
2015-07-28 14:48:37 +00:00
*
* @ see \Drupal\Core\Database\Query\Condition
2012-03-03 20:01:01 +00:00
*/
function db_condition ( $conjunction ) {
2018-08-23 12:05:52 +00:00
@ trigger_error ( 'db_condition() is deprecated in Drupal 8.0.x and will be removed before Drupal 9.0.0. Create a \Drupal\Core\Database\Query\Condition object, specifying the desired conjunction: new Condition($conjunction), instead. See https://www.drupal.org/node/2993033.' , E_USER_DEPRECATED );
2012-03-03 20:01:01 +00:00
return new Condition ( $conjunction );
}
/**
2015-04-13 15:52:41 +00:00
* @ } End of " addtogroup database " .
2012-03-03 20:01:01 +00:00
*/
/**
2012-05-17 12:58:49 +00:00
* @ addtogroup schemaapi
2012-03-03 20:01:01 +00:00
* @ {
*/
/**
* Creates a new table from a Drupal table definition .
*
2015-07-28 14:48:37 +00:00
* @ param string $name
2012-03-03 20:01:01 +00:00
* The name of the table to create .
2015-07-28 14:48:37 +00:00
* @ param array $table
2012-03-03 20:01:01 +00:00
* A Schema API table definition array .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container , get
2015-12-03 19:04:31 +00:00
* its schema driver , and call createTable () on it . For example ,
2015-07-28 14:48:37 +00:00
* $injected_database -> schema () -> createTable ( $name , $table );
*
* @ see \Drupal\Core\Database\Schema :: createTable ()
2012-03-03 20:01:01 +00:00
*/
function db_create_table ( $name , $table ) {
2018-08-23 12:13:10 +00:00
@ trigger_error ( 'db_create_table() is deprecated in Drupal 8.0.x and will be removed before Drupal 9.0.0. Instead, get a database connection injected into your service from the container, get its schema driver, and call createTable() on it. For example, $injected_database->schema()->createTable($name, $table). See https://www.drupal.org/node/2993033' , E_USER_DEPRECATED );
2012-03-03 20:01:01 +00:00
return Database :: getConnection () -> schema () -> createTable ( $name , $table );
}
/**
* Returns an array of field names from an array of key / index column specifiers .
*
* This is usually an identity function but if a key / index uses a column prefix
* specification , this function extracts just the name .
*
2015-07-28 14:48:37 +00:00
* @ param array $fields
2012-03-03 20:01:01 +00:00
* An array of key / index column specifiers .
*
2015-07-28 14:48:37 +00:00
* @ return array
2012-03-03 20:01:01 +00:00
* An array of field names .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container , get
2015-12-03 19:04:31 +00:00
* its schema driver , and call fieldNames () on it . For example ,
2015-07-28 14:48:37 +00:00
* $injected_database -> schema () -> fieldNames ( $fields );
*
* @ see \Drupal\Core\Database\Schema :: fieldNames ()
2012-03-03 20:01:01 +00:00
*/
function db_field_names ( $fields ) {
2018-08-23 05:31:16 +00:00
@ trigger_error ( 'db_field_names() is deprecated in Drupal 8.0.x and will be removed before Drupal 9.0.0. Instead, get a database connection injected into your service from the container, get its schema driver, and call fieldNames() on it. For example, $injected_database->schema()->fieldNames($fields). See https://www.drupal.org/node/2993033' , E_USER_DEPRECATED );
2012-03-03 20:01:01 +00:00
return Database :: getConnection () -> schema () -> fieldNames ( $fields );
}
/**
* Checks if an index exists in the given table .
*
2015-07-28 14:48:37 +00:00
* @ param string $table
2012-03-03 20:01:01 +00:00
* The name of the table in drupal ( no prefixing ) .
2015-07-28 14:48:37 +00:00
* @ param string $name
2012-03-03 20:01:01 +00:00
* The name of the index in drupal ( no prefixing ) .
*
2015-07-28 14:48:37 +00:00
* @ return bool
2012-03-03 20:01:01 +00:00
* TRUE if the given index exists , otherwise FALSE .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container , get
2015-12-03 19:04:31 +00:00
* its schema driver , and call indexExists () on it . For example ,
2015-07-28 14:48:37 +00:00
* $injected_database -> schema () -> indexExists ( $table , $name );
*
* @ see \Drupal\Core\Database\Schema :: indexExists ()
2012-03-03 20:01:01 +00:00
*/
function db_index_exists ( $table , $name ) {
return Database :: getConnection () -> schema () -> indexExists ( $table , $name );
}
/**
* Checks if a table exists .
*
2015-07-28 14:48:37 +00:00
* @ param string $table
2012-03-03 20:01:01 +00:00
* The name of the table in drupal ( no prefixing ) .
*
2015-07-28 14:48:37 +00:00
* @ return bool
2012-03-03 20:01:01 +00:00
* TRUE if the given table exists , otherwise FALSE .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container , get
2015-12-03 19:04:31 +00:00
* its schema driver , and call tableExists () on it . For example ,
2015-07-28 14:48:37 +00:00
* $injected_database -> schema () -> tableExists ( $table );
*
* @ see \Drupal\Core\Database\Schema :: tableExists ()
2012-03-03 20:01:01 +00:00
*/
function db_table_exists ( $table ) {
Issue #2848817 by voleger, andypost, hgunicamp, JacobSanford, techtud, alexpott, vidhatanand, Sharique, JayKandari, kiamlaluno, cilefen, borisson_: Replace all calls to db_table_exists, which is deprecated
2018-08-06 09:41:05 +00:00
@ trigger_error (
'db_table_exists() is deprecated in Drupal 8.0.x and will be removed before Drupal 9.0.0. Use $injected_database->schema()->tableExists($table) instead. See https://www.drupal.org/node/2947929.' ,
E_USER_DEPRECATED
);
2012-03-03 20:01:01 +00:00
return Database :: getConnection () -> schema () -> tableExists ( $table );
}
/**
* Checks if a column exists in the given table .
*
* @ param $table
* The name of the table in drupal ( no prefixing ) .
* @ param $field
* The name of the field .
*
2015-07-28 14:48:37 +00:00
* @ return bool
2012-03-03 20:01:01 +00:00
* TRUE if the given column exists , otherwise FALSE .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container , get
2015-12-03 19:04:31 +00:00
* its schema driver , and call fieldExists () on it . For example ,
2015-07-28 14:48:37 +00:00
* $injected_database -> schema () -> fieldExists ( $table , $field );
*
* @ see \Drupal\Core\Database\Schema :: fieldExists ()
2012-03-03 20:01:01 +00:00
*/
function db_field_exists ( $table , $field ) {
return Database :: getConnection () -> schema () -> fieldExists ( $table , $field );
}
/**
* Finds all tables that are like the specified base table name .
*
2015-07-28 14:48:37 +00:00
* @ param string $table_expression
2012-03-03 20:01:01 +00:00
* An SQL expression , for example " simpletest% " ( without the quotes ) .
*
2015-07-28 14:48:37 +00:00
* @ return array
2012-03-03 20:01:01 +00:00
* Array , both the keys and the values are the matching tables .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container , get
2015-12-03 19:04:31 +00:00
* its schema driver , and call findTables () on it . For example ,
2015-07-28 14:48:37 +00:00
* $injected_database -> schema () -> findTables ( $table_expression );
*
* @ see \Drupal\Core\Database\Schema :: findTables ()
2012-03-03 20:01:01 +00:00
*/
function db_find_tables ( $table_expression ) {
return Database :: getConnection () -> schema () -> findTables ( $table_expression );
}
/**
* Renames a table .
*
* @ param $table
2012-08-01 16:09:25 +00:00
* The current name of the table to be renamed .
2012-03-03 20:01:01 +00:00
* @ param $new_name
* The new name for the table .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container , get
2015-12-03 19:04:31 +00:00
* its schema driver , and call renameTable () on it . For example ,
2015-07-28 14:48:37 +00:00
* $injected_database -> schema () -> renameTable ( $table , $new_name );
*
* @ see \Drupal\Core\Database\Schema :: renameTable ()
2012-03-03 20:01:01 +00:00
*/
function db_rename_table ( $table , $new_name ) {
return Database :: getConnection () -> schema () -> renameTable ( $table , $new_name );
}
/**
* Drops a table .
*
* @ param $table
* The table to be dropped .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container , get
2015-12-03 19:04:31 +00:00
* its schema driver , and call dropTable () on it . For example ,
2015-07-28 14:48:37 +00:00
* $injected_database -> schema () -> dropTable ( $table );
*
* @ see \Drupal\Core\Database\Schema :: dropTable ()
2012-03-03 20:01:01 +00:00
*/
function db_drop_table ( $table ) {
Issue #2848479 by voleger, yogeshmpawar, marvin_B8, gaurav.kapoor, hgunicamp, mondrake, daffie, alexpott, xjm, cilefen: Replace all calls to db_drop_table, which is deprecated
2018-07-24 13:57:22 +00:00
@ trigger_error ( 'db_drop_table() is deprecated in Drupal 8.0.x and will be removed before Drupal 9.0.0. Use \Drupal\Core\Database\Database::getConnection()->schema()->dropTable() instead. See https://www.drupal.org/node/2987737' , E_USER_DEPRECATED );
2012-03-03 20:01:01 +00:00
return Database :: getConnection () -> schema () -> dropTable ( $table );
}
/**
* Adds a new field to a table .
*
* @ param $table
* Name of the table to be altered .
* @ param $field
* Name of the field to be added .
2015-07-28 14:48:37 +00:00
* @ param array $spec
2012-03-03 20:01:01 +00:00
* The field specification array , as taken from a schema definition . The
* specification may also contain the key 'initial' ; the newly - created field
* will be set to the value of the key in all rows . This is most useful for
* creating NOT NULL columns with no default value in existing tables .
2015-07-28 14:48:37 +00:00
* @ param array $keys_new
2014-05-30 22:56:24 +00:00
* ( optional ) Keys and indexes specification to be created on the table along
2012-03-03 20:01:01 +00:00
* with adding the field . The format is the same as a table specification , but
* without the 'fields' element . If you are adding a type 'serial' field , you
* MUST specify at least one key or index including it in this array . See
2018-08-21 03:52:43 +00:00
* \Drupal\Core\Database\Schema :: changeField () for more explanation why .
2012-03-03 20:01:01 +00:00
*
2015-07-28 14:48:37 +00:00
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container , get
2015-12-03 19:04:31 +00:00
* its schema driver , and call addField () on it . For example ,
2015-07-28 14:48:37 +00:00
* $injected_database -> schema () -> addField ( $table , $field , $spec , $keys_new );
*
* @ see \Drupal\Core\Database\Schema :: addField ()
2018-08-21 03:52:43 +00:00
* @ see \Drupal\Core\Database\Schema :: changeField ()
2012-03-03 20:01:01 +00:00
*/
2017-03-04 01:20:24 +00:00
function db_add_field ( $table , $field , $spec , $keys_new = []) {
2018-08-23 05:31:16 +00:00
@ trigger_error ( 'db_add_field() is deprecated in Drupal 8.0.x and will be removed before Drupal 9.0.0. Instead, get a database connection injected into your service from the container, get its schema driver, and call addField() on it. For example, $injected_database->schema()->addField($table, $field, $spec, $keys_new). See https://www.drupal.org/node/2993033' , E_USER_DEPRECATED );
2012-03-03 20:01:01 +00:00
return Database :: getConnection () -> schema () -> addField ( $table , $field , $spec , $keys_new );
}
/**
* Drops a field .
*
* @ param $table
* The table to be altered .
* @ param $field
* The field to be dropped .
2015-07-28 14:48:37 +00:00
*
* @ return bool
* TRUE if the field was successfully dropped , FALSE if there was no field by
* that name to begin with .
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container , get
2015-12-03 19:04:31 +00:00
* its schema driver , and call dropField () on it . For example ,
2015-07-28 14:48:37 +00:00
* $injected_database -> schema () -> dropField ( $table , $field );
*
* @ see \Drupal\Core\Database\Schema :: dropField ()
2012-03-03 20:01:01 +00:00
*/
function db_drop_field ( $table , $field ) {
2018-08-23 05:31:16 +00:00
@ trigger_error ( 'db_drop_field() is deprecated in Drupal 8.0.x and will be removed before Drupal 9.0.0. Instead, get a database connection injected into your service from the container, get its schema driver, and call dropField() on it. For example, $injected_database->schema()->dropField($table, $field). See https://www.drupal.org/node/2993033' , E_USER_DEPRECATED );
2012-03-03 20:01:01 +00:00
return Database :: getConnection () -> schema () -> dropField ( $table , $field );
}
/**
* Sets the default value for a field .
*
* @ param $table
* The table to be altered .
* @ param $field
* The field to be altered .
* @ param $default
* Default value to be set . NULL for 'default NULL' .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container , get
2015-12-03 19:04:31 +00:00
* its schema driver , and call fieldSetDefault () on it . For example ,
2015-07-28 14:48:37 +00:00
* $injected_database -> schema () -> fieldSetDefault ( $table , $field , $default );
*
* @ see \Drupal\Core\Database\Schema :: fieldSetDefault ()
2012-03-03 20:01:01 +00:00
*/
function db_field_set_default ( $table , $field , $default ) {
return Database :: getConnection () -> schema () -> fieldSetDefault ( $table , $field , $default );
}
/**
* Sets a field to have no default value .
*
* @ param $table
* The table to be altered .
* @ param $field
* The field to be altered .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container , get
2015-12-03 19:04:31 +00:00
* its schema driver , and call fieldSetNoDefault () on it . For example ,
2015-07-28 14:48:37 +00:00
* $injected_database -> schema () -> fieldSetNoDefault ( $table , $field );
*
* @ see \Drupal\Core\Database\Schema :: fieldSetNoDefault ()
2012-03-03 20:01:01 +00:00
*/
function db_field_set_no_default ( $table , $field ) {
return Database :: getConnection () -> schema () -> fieldSetNoDefault ( $table , $field );
}
/**
* Adds a primary key to a database table .
*
* @ param $table
* Name of the table to be altered .
* @ param $fields
* Array of fields for the primary key .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container , get
2015-12-03 19:04:31 +00:00
* its schema driver , and call addPrimaryKey () on it . For example ,
2015-07-28 14:48:37 +00:00
* $injected_database -> schema () -> addPrimaryKey ( $table , $fields );
*
* @ see \Drupal\Core\Database\Schema :: addPrimaryKey ()
2012-03-03 20:01:01 +00:00
*/
function db_add_primary_key ( $table , $fields ) {
return Database :: getConnection () -> schema () -> addPrimaryKey ( $table , $fields );
}
/**
* Drops the primary key of a database table .
*
* @ param $table
* Name of the table to be altered .
2015-07-28 14:48:37 +00:00
*
* @ return bool
* TRUE if the primary key was successfully dropped , FALSE if there was no
* primary key on this table to begin with .
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container , get
2015-12-03 19:04:31 +00:00
* its schema driver , and call dropPrimaryKey () on it . For example ,
2015-07-28 14:48:37 +00:00
* $injected_database -> schema () -> dropPrimaryKey ( $table );
*
* @ see \Drupal\Core\Database\Schema :: dropPrimaryKey ()
2012-03-03 20:01:01 +00:00
*/
function db_drop_primary_key ( $table ) {
return Database :: getConnection () -> schema () -> dropPrimaryKey ( $table );
}
/**
* Adds a unique key .
*
* @ param $table
* The table to be altered .
* @ param $name
* The name of the key .
2015-07-28 14:48:37 +00:00
* @ param array $fields
2012-03-03 20:01:01 +00:00
* An array of field names .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container , get
2015-12-03 19:04:31 +00:00
* its schema driver , and call addUniqueKey () on it . For example ,
2015-07-28 14:48:37 +00:00
* $injected_database -> schema () -> addUniqueKey ( $table , $name , $fields );
*
* @ see \Drupal\Core\Database\Schema :: addUniqueKey ()
2012-03-03 20:01:01 +00:00
*/
function db_add_unique_key ( $table , $name , $fields ) {
return Database :: getConnection () -> schema () -> addUniqueKey ( $table , $name , $fields );
}
/**
* Drops a unique key .
*
* @ param $table
* The table to be altered .
* @ param $name
* The name of the key .
2015-07-28 14:48:37 +00:00
*
* @ return bool
* TRUE if the key was successfully dropped , FALSE if there was no key by
* that name to begin with .
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container , get
2015-12-03 19:04:31 +00:00
* its schema driver , and call dropUniqueKey () on it . For example ,
2015-07-28 14:48:37 +00:00
* $injected_database -> schema () -> dropUniqueKey ( $table , $name );
*
* @ see \Drupal\Core\Database\Schema :: dropUniqueKey ()
2012-03-03 20:01:01 +00:00
*/
function db_drop_unique_key ( $table , $name ) {
return Database :: getConnection () -> schema () -> dropUniqueKey ( $table , $name );
}
/**
* Adds an index .
*
* @ param $table
* The table to be altered .
* @ param $name
* The name of the index .
2015-07-28 14:48:37 +00:00
* @ param array $fields
2012-03-03 20:01:01 +00:00
* An array of field names .
2015-08-04 11:55:30 +00:00
* @ param array $spec
* The table specification of the table to be altered , as taken from a schema
* definition . See \Drupal\Core\Database\Schema :: addIndex () for how to obtain
* this specification .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container , get
2015-12-03 19:04:31 +00:00
* its schema driver , and call addIndex () on it . For example ,
2015-08-04 11:55:30 +00:00
* $injected_database -> schema () -> addIndex ( $table , $name , $fields , $spec );
2015-07-28 14:48:37 +00:00
*
2015-08-04 11:55:30 +00:00
* @ see hook_schema ()
* @ see schemaapi
2015-07-28 14:48:37 +00:00
* @ see \Drupal\Core\Database\Schema :: addIndex ()
2012-03-03 20:01:01 +00:00
*/
2015-08-04 11:55:30 +00:00
function db_add_index ( $table , $name , $fields , array $spec ) {
return Database :: getConnection () -> schema () -> addIndex ( $table , $name , $fields , $spec );
2012-03-03 20:01:01 +00:00
}
/**
* Drops an index .
*
* @ param $table
* The table to be altered .
* @ param $name
* The name of the index .
2015-07-28 14:48:37 +00:00
*
* @ return bool
* TRUE if the index was successfully dropped , FALSE if there was no index
* by that name to begin with .
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container , get
2015-12-03 19:04:31 +00:00
* its schema driver , and call dropIndex () on it . For example ,
2015-07-28 14:48:37 +00:00
* $injected_database -> schema () -> dropIndex ( $table , $name );
*
* @ see \Drupal\Core\Database\Schema :: dropIndex ()
2012-03-03 20:01:01 +00:00
*/
function db_drop_index ( $table , $name ) {
return Database :: getConnection () -> schema () -> dropIndex ( $table , $name );
}
/**
* Changes a field definition .
*
* IMPORTANT NOTE : To maintain database portability , you have to explicitly
* recreate all indices and primary keys that are using the changed field .
*
* That means that you have to drop all affected keys and indexes with
2018-08-21 03:52:43 +00:00
* db_drop_ { primary_key , unique_key , index }() before calling
* \Drupal\Core\Database\Schema :: changeField () .
2012-03-03 20:01:01 +00:00
* To recreate the keys and indices , pass the key definitions as the optional
2018-08-21 03:52:43 +00:00
* $keys_new argument directly to \Drupal\Core\Database\Schema :: changeField () .
2012-03-03 20:01:01 +00:00
*
* For example , suppose you have :
* @ code
* $schema [ 'foo' ] = array (
* 'fields' => array (
* 'bar' => array ( 'type' => 'int' , 'not null' => TRUE )
* ),
* 'primary key' => array ( 'bar' )
* );
* @ endcode
* and you want to change foo . bar to be type serial , leaving it as the primary
* key . The correct sequence is :
* @ code
2018-08-21 03:52:43 +00:00
* $schema = \Drupal :: database () -> schema ();
2012-03-03 20:01:01 +00:00
* db_drop_primary_key ( 'foo' );
2018-08-21 03:52:43 +00:00
* $schema -> changeField ( 'foo' , 'bar' , 'bar' ,
2012-03-03 20:01:01 +00:00
* array ( 'type' => 'serial' , 'not null' => TRUE ),
* array ( 'primary key' => array ( 'bar' )));
* @ endcode
*
* The reasons for this are due to the different database engines :
*
* On PostgreSQL , changing a field definition involves adding a new field and
* dropping an old one which causes any indices , primary keys and sequences
* ( from serial - type fields ) that use the changed field to be dropped .
*
* On MySQL , all type 'serial' fields must be part of at least one key or index
* as soon as they are created . You cannot use
* db_add_ { primary_key , unique_key , index }() for this purpose because the ALTER
* TABLE command will fail to add the column without a key or index
* specification . The solution is to use the optional $keys_new argument to
* create the key or index at the same time as field .
*
* You could use db_add_ { primary_key , unique_key , index }() in all cases unless you
* are converting a field to be type serial . You can use the $keys_new argument
* in all cases .
*
* @ param $table
* Name of the table .
* @ param $field
* Name of the field to change .
* @ param $field_new
* New name for the field ( set to the same as $field if you don ' t want to
* change the name ) .
* @ param $spec
* The field specification for the new field .
2015-07-28 14:48:37 +00:00
* @ param array $keys_new
2014-05-30 22:56:24 +00:00
* ( optional ) Keys and indexes specification to be created on the table along
2012-03-03 20:01:01 +00:00
* with changing the field . The format is the same as a table specification
* but without the 'fields' element .
2015-07-28 14:48:37 +00:00
*
* @ deprecated as of Drupal 8.0 . x , will be removed in Drupal 9.0 . 0. Instead , get
* a database connection injected into your service from the container , get
2015-12-03 19:04:31 +00:00
* its schema driver , and call changeField () on it . For example ,
2015-07-28 14:48:37 +00:00
* $injected_database -> schema () -> changeField ( $table , $field , $field_new , $spec , $keys_new );
*
* @ see \Drupal\Core\Database\Schema :: changeField ()
2012-03-03 20:01:01 +00:00
*/
2017-03-04 01:20:24 +00:00
function db_change_field ( $table , $field , $field_new , $spec , $keys_new = []) {
2018-08-21 03:52:43 +00:00
@ trigger_error ( " Deprecated as of Drupal 8.0.x, will be removed in Drupal 9.0.0. Instead, get a database connection injected into your service from the container, get its schema driver, and call changeField() on it. For example, \$ injected_database->schema()->changeField( \$ table, \$ field, \$ field_new, \$ spec, \$ keys_new). See https://www.drupal.org/node/2993033 " , E_USER_DEPRECATED );
2012-03-03 20:01:01 +00:00
return Database :: getConnection () -> schema () -> changeField ( $table , $field , $field_new , $spec , $keys_new );
}
/**
2012-05-17 12:58:49 +00:00
* @ } End of " addtogroup schemaapi " .
2012-03-03 20:01:01 +00:00
*/
/**
2014-06-14 02:31:56 +00:00
* Sets a session variable specifying the lag time for ignoring a replica
* server ( A replica server is traditionally referred to as
* a " slave " in database server documentation ) .
2015-05-24 20:08:46 +00:00
* @ see https :// www . drupal . org / node / 2275877
2012-03-03 20:01:01 +00:00
*/
2014-06-14 02:31:56 +00:00
function db_ignore_replica () {
2012-03-03 20:01:01 +00:00
$connection_info = Database :: getConnectionInfo ();
2014-06-14 02:31:56 +00:00
// Only set ignore_replica_server if there are replica servers being used,
// which is assumed if there are more than one.
2012-03-03 20:01:01 +00:00
if ( count ( $connection_info ) > 1 ) {
2014-06-14 02:31:56 +00:00
// Five minutes is long enough to allow the replica to break and resume
2012-03-03 20:01:01 +00:00
// interrupted replication without causing problems on the Drupal site from
// the old data.
2014-03-24 08:51:28 +00:00
$duration = Settings :: get ( 'maximum_replication_lag' , 300 );
2014-06-14 02:31:56 +00:00
// Set session variable with amount of time to delay before using replica.
$_SESSION [ 'ignore_replica_server' ] = REQUEST_TIME + $duration ;
2012-03-03 20:01:01 +00:00
}
}