class MySQLDatabase extends Database implements TransactionManager (View source)

MySQL connector class.

Supported indexes for requireTable()

You are advised to backup your tables if changing settings on an existing database connection_charset and charset should be equal, similarly so should connection_collation and collation

Traits

Provides extensions to this object to integrate it with standard config API methods.

Allows an object to have extensions applied to it.

Allows an object to declare a set of custom methods

Constants

PARTIAL_QUERY

FULL_QUERY

Config options

extensions array

An array of extension names and parameters to be applied to this object upon construction.

from  Extensible
unextendable_classes array

Classes that cannot be extended

from  Extensible
optimistic_connect bool

In cases where your environment does not have 'SHOW DATABASES' permission, you can set this to true. Then selectDatabase() will always connect without doing databaseExists() check.

from  Database
connection_charset string

Default connection charset (may be overridden in $databaseConfig)

connection_collation string

Default connection collation

charset string

Default charset

sql_mode string

SQL Mode used on connections to MySQL. Defaults to ANSI. For basic ORM compatibility, this setting must always include ANSI or ANSI_QUOTES.

collation string

Default collation

Properties

protected static array $extra_methods

Custom method sources

from  CustomMethods
protected array $extra_method_registers

Name of methods to invoke by defineMethods for this instance

from  CustomMethods
protected static array $built_in_methods

Non-custom public methods.

from  CustomMethods
protected Extension[] $extension_instances from  Extensible
protected callable[][] $beforeExtendCallbacks

List of callbacks to call prior to extensions having extend called on them, each grouped by methodName.

from  Extensible
protected callable[][] $afterExtendCallbacks

List of callbacks to call after extensions having extend called on them, each grouped by methodName.

from  Extensible
protected static array $whitelist_array

To use, call from _config.php Example:

Database::setWhitelistQueryArray([
     'Qualmark' => 'partial_query',
     'SELECT "Version" FROM "SiteTree_Live" WHERE "ID" = ?' => 'full_query',
])
from  Database
protected DBConnector $connector

Database connector object

from  Database
protected int $queryCount

Amount of queries executed, for debugging purposes.

from  Database
protected DBSchemaManager $schemaManager

Database schema manager object

from  Database
protected DBQueryBuilder $queryBuilder

Query builder object

from  Database

Methods

public
mixed
__call(string $method, array $arguments)

Attempts to locate and call a method dynamically added to a class at runtime if a default cannot be located

protected
defineMethods()

Adds any methods from Extension instances attached to this object.

protected
registerExtraMethodCallback(string $name, callable $callback)

Register an callback to invoke that defines extra methods

public
bool
hasMethod(string $method)

Return TRUE if a method exists on this object

protected
bool
hasCustomMethod($method)

Determines if a custom method with this name is defined.

protected
array
getExtraMethodConfig(string $method)

Get meta-data details on a named method

public
array
allMethodNames(bool $custom = false)

Return the names of all the methods available on this object

protected static 
array
findBuiltInMethods(string|object $class = null)

Get all public built in methods for this class

protected
array
findMethodsFrom(object $object)

Find all methods on the given object.

protected
addMethodsFrom(string $property, string|int $index = null)

Add all the methods from an object property.

protected
removeMethodsFrom(string $property, string|int $index = null)

Add all the methods from an object property (which is an Extension) to this object.

protected
addWrapperMethod(string $method, string $wrap)

Add a wrapper method - a method which points to another method with a different name. For example, Thumbnail(x) can be wrapped to generateThumbnail(x)

protected
addCallbackMethod(string $method, callable $callback)

Add callback as a method.

protected
beforeExtending(string $method, callable $callback)

Allows user code to hook into Object::extend prior to control being delegated to extensions. Each callback will be reset once called.

protected
afterExtending(string $method, callable $callback)

Allows user code to hook into Object::extend after control being delegated to extensions. Each callback will be reset once called.

protected
defineExtensionMethods()

Adds any methods from Extension instances attached to this object.

public static 
bool
add_extension(string $classOrExtension, string $extension = null)

Add an extension to a specific class.

public static 
remove_extension(string $extension)

Remove an extension from a class.

public static 
array
get_extensions(string $class = null, bool $includeArgumentString = false)

No description

public static 
array|null
get_extra_config_sources(string $class = null)

Get extra config sources for this class

public static 
bool
has_extension(string $classOrExtension, string $requiredExtension = null, bool $strict = false)

Return TRUE if a class has a specified extension.

public
array
invokeWithExtensions(string $method, mixed ...$arguments)

Calls a method if available on both this object and all applied Extensions, and then attempts to merge all results into an array

public
array
extend(string $method, mixed ...$arguments)

Run the given function on all of this object's extensions. Note that this method originally returned void, so if you wanted to return results, you're hosed

public
Extension|null
getExtensionInstance(string $extension)

Get an extension instance attached to this object by name.

public
bool
hasExtension(string $extension)

Returns TRUE if this object instance has a specific extension applied in $extension_instances. Extension instances are initialized at constructor time, meaning if you use add_extension() afterwards, the added extension will just be added to new instances of the extended class. Use the static method has_extension() to check if a class (not an instance) has a specific extension.

public
getExtensionInstances()

Get all extension instances for this specific object instance.

public
getConnector()

Get the current connector

from  Database
public
setConnector(DBConnector $connector)

Injector injection point for connector dependency

from  Database
public
getSchemaManager()

Returns the current schema manager

from  Database
public
setSchemaManager(DBSchemaManager $schemaManager)

Injector injection point for schema manager

from  Database
public
getQueryBuilder()

Returns the current query builder

from  Database
public
setQueryBuilder(DBQueryBuilder $queryBuilder)

Injector injection point for schema manager

from  Database
public
query(string $sql, int $errorLevel = E_USER_ERROR)

Execute the given SQL query.

public
preparedQuery(string $sql, array $parameters, int $errorLevel = E_USER_ERROR)

Execute the given SQL parameterised query with the specified arguments

protected
bool
previewWrite(string $sql)

Determines if the query should be previewed, and thus interrupted silently.

from  Database
protected
mixed
benchmarkQuery(string $sql, callable $callback, array $parameters = [])

Allows the display and benchmarking of queries as they are being run

from  Database
protected
displayQuery(mixed $query, float $endtime)

Display query message

from  Database
public static 
setWhitelistQueryArray(array $whitelistArray)

Add the sql queries that need to be partially or fully matched

from  Database
public static 
array
getWhitelistQueryArray()

Get the sql queries that need to be partially or fully matched

from  Database
public
int
getGeneratedID(string $table)

Get the autogenerated ID from the previous INSERT query.

from  Database
public
bool
isActive()

Determines if we are connected to a server AND have a valid database selected.

from  Database
public
string
escapeString(mixed $value)

Returns an escaped string. This string won't be quoted, so would be suitable for appending to other quoted strings.

from  Database
public
string
quoteString(mixed $value)

Wrap a string into DB-specific quotes.

from  Database
public
string
escapeIdentifier(string|array $value, string $separator = '.')

Escapes an identifier (table / database name). Typically the value is simply double quoted. Don't pass in already escaped identifiers in, as this will double escape the value!

from  Database
protected
array
escapeColumnKeys(array $fieldValues)

Escapes unquoted columns keys in an associative array

from  Database
public
manipulate(array $manipulation)

Execute a complex manipulation on the database.

from  Database
public
quiet()

Enable suppression of database messages.

from  Database
public
clearAllData()

Clear all data out of the database

from  Database
public
clearTable(string $table)

Clear all data in a given table

public
string
nullCheckClause(string $field, bool $isNull)

Generates a WHERE clause for null comparison check

from  Database
public
string
comparisonClause(string $field, string $value, bool $exact = false, bool $negate = false, bool $caseSensitive = null, bool $parameterised = false)

Generate a WHERE clause for text matching.

public
string
formattedDatetimeClause(string $date, string $format)

function to return an SQL datetime expression that can be used with the adapter in use used for querying a datetime in a certain format

public
string
datetimeIntervalClause(string $date, string $interval)

function to return an SQL datetime expression that can be used with the adapter in use used for querying a datetime addition

public
string
datetimeDifferenceClause(string $date1, string $date2)

function to return an SQL datetime expression that can be used with the adapter in use used for querying a datetime subtraction

public
string
concatOperator()

String operator for concatenation of strings

from  Database
public
bool
supportsCollations()

Returns true if this database supports collations

public
bool
supportsTimezoneOverride()

Can the database override timezone as a connection setting, or does it use the system timezone exclusively?

public
string
getVersion()

Query for the version of the currently connected database

from  Database
public
string
getDatabaseServer()

Get the database server type (e.g. mysql, postgresql).

public
int
affectedRows()

Return the number of rows affected by the previous operation.

from  Database
public
searchEngine(array $classesToSearch, string $keywords, int $start, int $pageLength, string $sortBy = "Relevance DESC", string $extraFilter = "", bool $booleanSearch = false, string $alternativeFileFilter = "", bool $invertedMatch = false)

The core search engine, used by this class and its subclasses to do fun stuff.

public
bool
supportsCteQueries(bool $recursive = false)

Determines if this database supports Common Table Expression (aka WITH) clauses.

public
bool
supportsTransactions()

Determines if this database supports transactions

public
bool
supportsSavepoints()

Does this database support savepoints in transactions By default it is assumed that they don't unless they are explicitly enabled.

public
bool
supportsTransactionMode(string $mode)

Determines if the used database supports given transactionMode as an argument to startTransaction() If transactions are completely unsupported, returns false.

from  Database
public
withTransaction(callable $callback, callable $errorCallback = null, bool|string $transactionMode = false, bool $errorIfTransactionsUnsupported = false)

Invoke $callback within a transaction

from  Database
public
supportsExtensions($extensions)

No description

from  Database
public
transactionStart(string|bool $transactionMode = false, string|bool $sessionCharacteristics = false)

Start a prepared transaction See http://developer.postgresql.org/pgdocs/postgres/sql-set-transaction.html for details on transaction isolation options

public
transactionSavepoint(string $savepoint)

Create a savepoint that you can jump back to if you encounter problems

public
bool|null
transactionRollback(string|bool $savepoint = false)

Rollback or revert to a savepoint if your queries encounter problems If you encounter a problem at any point during a transaction, you may need to rollback that particular query, or return to a savepoint

public
bool|null
transactionEnd()

Commit everything inside this transaction so far

public
int
transactionDepth()

Return depth of current transaction

public
bool
supportsLocks()

Determines if the used database supports application-level locks, which is different from table- or row-level locking.

public
bool
canLock(string $name)

Returns if the lock is available.

public
bool
getLock(string $name, int $timeout = 5)

Sets an application-level lock so that no two processes can run at the same time, also called a "cooperative advisory lock".

public
bool
releaseLock(string $name)

Remove an application-level lock file to allow another process to run (if the execution aborts (e.g. due to an error) all locks are automatically released).

public
connect(array $parameters)

Instruct the database to generate a live connection

public
bool
databaseExists(string $name)

Determine if the database with the specified name exists

from  Database
public
array
databaseList()

Retrieves the list of all databases the user has access to

from  Database
public
bool
selectDatabase(string $name, bool $create = false, int|bool $errorLevel = E_USER_ERROR)

Change the connection to the specified database, optionally creating the database if it doesn't exist in the current schema.

from  Database
public
dropSelectedDatabase()

Drop the database that this object is currently connected to.

from  Database
public
string|null
getSelectedDatabase()

Returns the name of the currently selected database

from  Database
public
string
now()

Return SQL expression used to represent the current date/time

public
string
random()

Returns the database-specific version of the random() function

public
string
sortByField(string $field, array $values)

Generate SQL for sorting by a specific field using MySQL's FIELD function.

public static 
config()

Get a configuration accessor for this class. Short hand for Config::inst()->get($this->class, .....).

public
mixed
uninherited(string $name)

Gets the uninherited value for the given config option

public
setSQLMode(string $mode)

Sets the SQL mode

public
selectTimezone(string $timezone)

Sets the system timezone for the database connection

protected
getTransactionManager()

Returns the TransactionManager to handle transactions for this database.

protected
resetTransactionNesting()

In error condition, set transactionNesting to zero

protected
inspectQuery(string $sql)

Inspect a SQL query prior to execution

protected
getLockIdentifier($name)

No description

Details

mixed __call(string $method, array $arguments)

Attempts to locate and call a method dynamically added to a class at runtime if a default cannot be located

You can add extra methods to a class using Extensions}, {@link Object::createMethod() or Object::addWrapperMethod()

Parameters

string $method
array $arguments

Return Value

mixed

Exceptions

BadMethodCallException

protected defineMethods()

Adds any methods from Extension instances attached to this object.

All these methods can then be called directly on the instance (transparently mapped through __call()}), or called explicitly through {@link extend().

protected registerExtraMethodCallback(string $name, callable $callback)

Register an callback to invoke that defines extra methods

Parameters

string $name
callable $callback

bool hasMethod(string $method)

Return TRUE if a method exists on this object

This should be used rather than PHP's inbuild method_exists() as it takes into account methods added via extensions

Parameters

string $method

Return Value

bool

protected bool hasCustomMethod($method)

Determines if a custom method with this name is defined.

Parameters

$method

Return Value

bool

protected array getExtraMethodConfig(string $method)

Get meta-data details on a named method

Parameters

string $method

Return Value

array

List of custom method details, if defined for this method

array allMethodNames(bool $custom = false)

Return the names of all the methods available on this object

Parameters

bool $custom

include methods added dynamically at runtime

Return Value

array

Map of method names with lowercase keys

static protected array findBuiltInMethods(string|object $class = null)

Get all public built in methods for this class

Parameters

string|object $class

Class or instance to query methods from (defaults to static::class)

Return Value

array

Map of methods with lowercase key name

protected array findMethodsFrom(object $object)

Find all methods on the given object.

Parameters

object $object

Return Value

array

protected addMethodsFrom(string $property, string|int $index = null)

Add all the methods from an object property.

Parameters

string $property

the property name

string|int $index

an index to use if the property is an array

Exceptions

InvalidArgumentException

protected removeMethodsFrom(string $property, string|int $index = null)

Add all the methods from an object property (which is an Extension) to this object.

Parameters

string $property

the property name

string|int $index

an index to use if the property is an array

protected addWrapperMethod(string $method, string $wrap)

Add a wrapper method - a method which points to another method with a different name. For example, Thumbnail(x) can be wrapped to generateThumbnail(x)

Parameters

string $method

the method name to wrap

string $wrap

the method name to wrap to

protected addCallbackMethod(string $method, callable $callback)

Add callback as a method.

Parameters

string $method

Name of method

callable $callback

Callback to invoke. Note: $this is passed as first parameter to this callback and then $args as array

protected beforeExtending(string $method, callable $callback)

Allows user code to hook into Object::extend prior to control being delegated to extensions. Each callback will be reset once called.

Parameters

string $method

The name of the method to hook into

callable $callback

The callback to execute

protected afterExtending(string $method, callable $callback)

Allows user code to hook into Object::extend after control being delegated to extensions. Each callback will be reset once called.

Parameters

string $method

The name of the method to hook into

callable $callback

The callback to execute

protected defineExtensionMethods()

Adds any methods from Extension instances attached to this object.

All these methods can then be called directly on the instance (transparently mapped through __call()}), or called explicitly through {@link extend().

static bool add_extension(string $classOrExtension, string $extension = null)

Add an extension to a specific class.

The preferred method for adding extensions is through YAML config, since it avoids autoloading the class, and is easier to override in more specific configurations.

As an alternative, extensions can be added to a specific class directly in the Object::$extensions array. See SiteTree::$extensions for examples. Keep in mind that the extension will only be applied to new instances, not existing ones (including all instances created through singleton()).

Parameters

string $classOrExtension

Class that should be extended - has to be a subclass of Object

string $extension

Subclass of Extension with optional parameters as a string, e.g. "Versioned"

Return Value

bool

Flag if the extension was added

static remove_extension(string $extension)

Remove an extension from a class.

Note: This will not remove extensions from parent classes, and must be called directly on the class assigned the extension.

Keep in mind that this won't revert any datamodel additions of the extension at runtime, unless its used before the schema building kicks in (in your _config.php). Doesn't remove the extension from any Object instances which are already created, but will have an effect on new extensions. Clears any previously created singletons through singleton() to avoid side-effects from stale extension information.

Parameters

string $extension

class name of an Extension subclass, without parameters

static array get_extensions(string $class = null, bool $includeArgumentString = false)

No description

Parameters

string $class

If omitted, will get extensions for the current class

bool $includeArgumentString

Include the argument string in the return array, FALSE would return array("Versioned"), TRUE returns array("Versioned('Stage','Live')").

Return Value

array

Numeric array of either Extension class names, or eval'ed class name strings with constructor arguments.

static array|null get_extra_config_sources(string $class = null)

Get extra config sources for this class

Parameters

string $class

Name of class. If left null will return for the current class

Return Value

array|null

static bool has_extension(string $classOrExtension, string $requiredExtension = null, bool $strict = false)

Return TRUE if a class has a specified extension.

This supports backwards-compatible format (static Object::has_extension($requiredExtension)) and new format ($object->has_extension($class, $requiredExtension))

Parameters

string $classOrExtension

Class to check extension for, or the extension name to check if the second argument is null.

string $requiredExtension

If the first argument is the parent class, this is the extension to check. If left null, the first parameter will be treated as the extension.

bool $strict

if the extension has to match the required extension and not be a subclass

Return Value

bool

Flag if the extension exists

array invokeWithExtensions(string $method, mixed ...$arguments)

Calls a method if available on both this object and all applied Extensions, and then attempts to merge all results into an array

Parameters

string $method

the method name to call

mixed ...$arguments

List of arguments

Return Value

array

List of results with nulls filtered out

array extend(string $method, mixed ...$arguments)

Run the given function on all of this object's extensions. Note that this method originally returned void, so if you wanted to return results, you're hosed

Currently returns an array, with an index resulting every time the function is called. Only adds returns if they're not NULL, to avoid bogus results from methods just defined on the parent extension. This is important for permission-checks through extend, as they use min() to determine if any of the returns is FALSE. As min() doesn't do type checking, an included NULL return would fail the permission checks.

The extension methods are defined during __construct()} in {@link defineMethods().

Parameters

string $method

the name of the method to call on each extension

mixed ...$arguments

Return Value

array

Extension|null getExtensionInstance(string $extension)

Get an extension instance attached to this object by name.

Parameters

string $extension

Return Value

Extension|null

bool hasExtension(string $extension)

Returns TRUE if this object instance has a specific extension applied in $extension_instances. Extension instances are initialized at constructor time, meaning if you use add_extension() afterwards, the added extension will just be added to new instances of the extended class. Use the static method has_extension() to check if a class (not an instance) has a specific extension.

Caution: Don't use singleton()->hasExtension() as it will give you inconsistent results based on when the singleton was first accessed.

Parameters

string $extension

Classname of an Extension subclass without parameters

Return Value

bool

Extension[] getExtensionInstances()

Get all extension instances for this specific object instance.

See get_extensions() to get all applied extension classes for this class (not the instance).

This method also provides lazy-population of the extension_instances property.

Return Value

Extension[]

Map of Extension instances, keyed by classname.

DBConnector getConnector()

Get the current connector

Return Value

DBConnector

setConnector(DBConnector $connector)

Injector injection point for connector dependency

Parameters

DBConnector $connector

DBSchemaManager getSchemaManager()

Returns the current schema manager

Return Value

DBSchemaManager

setSchemaManager(DBSchemaManager $schemaManager)

Injector injection point for schema manager

Parameters

DBSchemaManager $schemaManager

DBQueryBuilder getQueryBuilder()

Returns the current query builder

Return Value

DBQueryBuilder

setQueryBuilder(DBQueryBuilder $queryBuilder)

Injector injection point for schema manager

Parameters

DBQueryBuilder $queryBuilder

Query query(string $sql, int $errorLevel = E_USER_ERROR)

Execute the given SQL query.

Parameters

string $sql

The SQL query to execute

int $errorLevel

The level of error reporting to enable for the query

Return Value

Query

Query preparedQuery(string $sql, array $parameters, int $errorLevel = E_USER_ERROR)

Execute the given SQL parameterised query with the specified arguments

Parameters

string $sql

The SQL query to execute. The ? character will denote parameters.

array $parameters

An ordered list of arguments.

int $errorLevel

The level of error reporting to enable for the query

Return Value

Query

protected bool previewWrite(string $sql)

Determines if the query should be previewed, and thus interrupted silently.

If so, this function also displays the query via the debugging system. Subclasess should respect the results of this call for each query, and not execute any queries that generate a true response.

Parameters

string $sql

The query to be executed

Return Value

bool

Flag indicating that the query was previewed

protected mixed benchmarkQuery(string $sql, callable $callback, array $parameters = [])

Allows the display and benchmarking of queries as they are being run

Parameters

string $sql

Query to run, and single parameter to callback

callable $callback

Callback to execute code

array $parameters

Parameters for any parameterised query

Return Value

mixed

Result of query

protected displayQuery(mixed $query, float $endtime)

Display query message

Parameters

mixed $query
float $endtime

static setWhitelistQueryArray(array $whitelistArray)

Add the sql queries that need to be partially or fully matched

Parameters

array $whitelistArray

static array getWhitelistQueryArray()

Get the sql queries that need to be partially or fully matched

Return Value

array

int getGeneratedID(string $table)

Get the autogenerated ID from the previous INSERT query.

Parameters

string $table

The name of the table to get the generated ID for

Return Value

int

the most recently generated ID for the specified table

bool isActive()

Determines if we are connected to a server AND have a valid database selected.

Return Value

bool

Flag indicating that a valid database is connected

string escapeString(mixed $value)

Returns an escaped string. This string won't be quoted, so would be suitable for appending to other quoted strings.

Parameters

mixed $value

Value to be prepared for database query

Return Value

string

Prepared string

string quoteString(mixed $value)

Wrap a string into DB-specific quotes.

Parameters

mixed $value

Value to be prepared for database query

Return Value

string

Prepared string

string escapeIdentifier(string|array $value, string $separator = '.')

Escapes an identifier (table / database name). Typically the value is simply double quoted. Don't pass in already escaped identifiers in, as this will double escape the value!

Parameters

string|array $value

The identifier to escape or list of split components

string $separator

Splitter for each component

Return Value

string

protected array escapeColumnKeys(array $fieldValues)

Escapes unquoted columns keys in an associative array

Parameters

array $fieldValues

Return Value

array

List of field values with the keys as escaped column names

manipulate(array $manipulation)

Execute a complex manipulation on the database.

A manipulation is an array of insert / or update sequences. The keys of the array are table names, and the values are map containing 'command' and 'fields'. Command should be 'insert' or 'update', and fields should be a map of field names to field values, NOT including quotes.

The field values could also be in paramaterised format, such as array('MAX(?,?)' => array(42, 69)), allowing the use of raw SQL values such as array('NOW()' => array()).

Parameters

array $manipulation

See also

SQLWriteExpression::addAssignments for syntax examples

quiet()

Enable suppression of database messages.

clearAllData()

Clear all data out of the database

clearTable(string $table)

Clear all data in a given table

Parameters

string $table

Name of table

string nullCheckClause(string $field, bool $isNull)

Generates a WHERE clause for null comparison check

Parameters

string $field

Quoted field name

bool $isNull

Whether to check for NULL or NOT NULL

Return Value

string

Non-parameterised null comparison clause

string comparisonClause(string $field, string $value, bool $exact = false, bool $negate = false, bool $caseSensitive = null, bool $parameterised = false)

Generate a WHERE clause for text matching.

Parameters

string $field

Quoted field name

string $value

Escaped search. Can include percentage wildcards. Ignored if $parameterised is true.

bool $exact

Exact matches or wildcard support.

bool $negate

Negate the clause.

bool $caseSensitive

Enforce case sensitivity if TRUE or FALSE. Fallback to default collation if set to NULL.

bool $parameterised

Insert the ? placeholder rather than the given value. If this is true then $value is ignored.

Return Value

string SQL

string formattedDatetimeClause(string $date, string $format)

function to return an SQL datetime expression that can be used with the adapter in use used for querying a datetime in a certain format

Parameters

string $date

to be formatted, can be either 'now', literal datetime like '1973-10-14 10:30:00' or field name, e.g. '"SiteTree"."Created"'

string $format

to be used, supported specifiers: %Y = Year (four digits) %m = Month (01..12) %d = Day (01..31) %H = Hour (00..23) %i = Minutes (00..59) %s = Seconds (00..59) %U = unix timestamp, can only be used on it's own

Return Value

string

SQL datetime expression to query for a formatted datetime

string datetimeIntervalClause(string $date, string $interval)

function to return an SQL datetime expression that can be used with the adapter in use used for querying a datetime addition

Parameters

string $date

can be either 'now', literal datetime like '1973-10-14 10:30:00' or field name, e.g. '"SiteTree"."Created"'

string $interval

to be added, use the format [sign][integer] [qualifier], e.g. -1 Day, +15 minutes, +1 YEAR supported qualifiers:

  • years
  • months
  • days
  • hours
  • minutes
  • seconds This includes the singular forms as well

Return Value

string

SQL datetime expression to query for a datetime (YYYY-MM-DD hh:mm:ss) which is the result of the addition

string datetimeDifferenceClause(string $date1, string $date2)

function to return an SQL datetime expression that can be used with the adapter in use used for querying a datetime subtraction

Parameters

string $date1

can be either 'now', literal datetime like '1973-10-14 10:30:00' or field name e.g. '"SiteTree"."Created"'

string $date2

to be subtracted of $date1, can be either 'now', literal datetime like '1973-10-14 10:30:00' or field name, e.g. '"SiteTree"."Created"'

Return Value

string

SQL datetime expression to query for the interval between $date1 and $date2 in seconds which is the result of the subtraction

string concatOperator()

String operator for concatenation of strings

Return Value

string

bool supportsCollations()

Returns true if this database supports collations

Return Value

bool

bool supportsTimezoneOverride()

Can the database override timezone as a connection setting, or does it use the system timezone exclusively?

Return Value

bool

string getVersion()

Query for the version of the currently connected database

Return Value

string

Version of this database

string getDatabaseServer()

Get the database server type (e.g. mysql, postgresql).

This value is passed to the connector as the 'driver' argument when initiating a database connection

Return Value

string

int affectedRows()

Return the number of rows affected by the previous operation.

Return Value

int

PaginatedList searchEngine(array $classesToSearch, string $keywords, int $start, int $pageLength, string $sortBy = "Relevance DESC", string $extraFilter = "", bool $booleanSearch = false, string $alternativeFileFilter = "", bool $invertedMatch = false)

The core search engine, used by this class and its subclasses to do fun stuff.

Searches both SiteTree and File.

Caution: While the $keywords argument is escaped for safe use in a query context, you need to ensure that it is also a valid boolean expression when opting into $booleanSearch. For example, the "asterisk" and "greater than" characters have a special meaning in this context, and can only be placed in certain parts of the keywords. You will need to preprocess and sanitise user input accordingly in order to avoid query errors.

Parameters

array $classesToSearch

List of classes to search

string $keywords

Keywords as a string.

int $start

Item to start returning results from

int $pageLength

Number of items per page

string $sortBy

Sort order expression

string $extraFilter

Additional filter

bool $booleanSearch

Flag for boolean search mode

string $alternativeFileFilter
bool $invertedMatch

Return Value

PaginatedList

Search results

Exceptions

Exception

bool supportsCteQueries(bool $recursive = false)

Determines if this database supports Common Table Expression (aka WITH) clauses.

By default it is assumed that it doesn't unless this method is explicitly overridden.

Parameters

bool $recursive

if true, checks specifically if recursive CTEs are supported.

Return Value

bool

bool supportsTransactions()

Determines if this database supports transactions

Return Value

bool

Flag indicating support for transactions

bool supportsSavepoints()

Does this database support savepoints in transactions By default it is assumed that they don't unless they are explicitly enabled.

Return Value

bool

Flag indicating support for savepoints in transactions

bool supportsTransactionMode(string $mode)

Determines if the used database supports given transactionMode as an argument to startTransaction() If transactions are completely unsupported, returns false.

Parameters

string $mode

Return Value

bool

withTransaction(callable $callback, callable $errorCallback = null, bool|string $transactionMode = false, bool $errorIfTransactionsUnsupported = false)

Invoke $callback within a transaction

Parameters

callable $callback

Callback to run

callable $errorCallback

Optional callback to run after rolling back transaction.

bool|string $transactionMode

Optional transaction mode to use

bool $errorIfTransactionsUnsupported

If true, this method will fail if transactions are unsupported. Otherwise, the $callback will potentially be invoked outside of a transaction.

Exceptions

Exception

supportsExtensions($extensions)

No description

Parameters

$extensions

transactionStart(string|bool $transactionMode = false, string|bool $sessionCharacteristics = false)

Start a prepared transaction See http://developer.postgresql.org/pgdocs/postgres/sql-set-transaction.html for details on transaction isolation options

Parameters

string|bool $transactionMode

Transaction mode, or false to ignore

string|bool $sessionCharacteristics

Session characteristics, or false to ignore

transactionSavepoint(string $savepoint)

Create a savepoint that you can jump back to if you encounter problems

Parameters

string $savepoint

Name of savepoint

bool|null transactionRollback(string|bool $savepoint = false)

Rollback or revert to a savepoint if your queries encounter problems If you encounter a problem at any point during a transaction, you may need to rollback that particular query, or return to a savepoint

Parameters

string|bool $savepoint

Name of savepoint, or leave empty to rollback to last savepoint

Return Value

bool|null

Boolean is returned if success state is known, or null if unknown. Note: For error checking purposes null should not be treated as error.

bool|null transactionEnd()

Commit everything inside this transaction so far

Boolean is returned if success state is known, or null if unknown. Note: For error checking purposes null should not be treated as error.

Return Value

bool|null

int transactionDepth()

Return depth of current transaction

Return Value

int

Nesting level, or 0 if not in a transaction

bool supportsLocks()

Determines if the used database supports application-level locks, which is different from table- or row-level locking.

See getLock() for details.

Return Value

bool

Flag indicating that locking is available

bool canLock(string $name)

Returns if the lock is available.

See supportsLocks() to check if locking is generally supported.

Parameters

string $name

Name of the lock

Return Value

bool

bool getLock(string $name, int $timeout = 5)

Sets an application-level lock so that no two processes can run at the same time, also called a "cooperative advisory lock".

Return FALSE if acquiring the lock fails; otherwise return TRUE, if lock was acquired successfully. Lock is automatically released if connection to the database is broken (either normally or abnormally), making it less prone to deadlocks than session- or file-based locks. Should be accompanied by a releaseLock() call after the logic requiring the lock has completed. Can be called multiple times, in which case locks "stack" (PostgreSQL, SQL Server), or auto-releases the previous lock (MySQL).

Note that this might trigger the database to wait for the lock to be released, delaying further execution.

Parameters

string $name

Name of lock

int $timeout

Timeout in seconds

Return Value

bool

bool releaseLock(string $name)

Remove an application-level lock file to allow another process to run (if the execution aborts (e.g. due to an error) all locks are automatically released).

Parameters

string $name

Name of the lock

Return Value

bool

Flag indicating whether the lock was successfully released

connect(array $parameters)

Instruct the database to generate a live connection

Parameters

array $parameters

An map of parameters, which should include:

  • server: The server, eg, localhost
  • username: The username to log on with
  • password: The password to log on with
  • database: The database to connect to
  • charset: The character set to use. Defaults to utf8
  • timezone: (optional) The timezone offset. For example: +12:00, "Pacific/Auckland", or "SYSTEM"
  • driver: (optional) Driver name

bool databaseExists(string $name)

Determine if the database with the specified name exists

Parameters

string $name

Name of the database to check for

Return Value

bool

Flag indicating whether this database exists

array databaseList()

Retrieves the list of all databases the user has access to

Return Value

array

List of database names

bool selectDatabase(string $name, bool $create = false, int|bool $errorLevel = E_USER_ERROR)

Change the connection to the specified database, optionally creating the database if it doesn't exist in the current schema.

Parameters

string $name

Name of the database

bool $create

Flag indicating whether the database should be created if it doesn't exist. If $create is false and the database doesn't exist then an error will be raised

int|bool $errorLevel

The level of error reporting to enable for the query, or false if no error should be raised

Return Value

bool

Flag indicating success

dropSelectedDatabase()

Drop the database that this object is currently connected to.

Use with caution.

string|null getSelectedDatabase()

Returns the name of the currently selected database

Return Value

string|null

Name of the selected database, or null if none selected

string now()

Return SQL expression used to represent the current date/time

Return Value

string

Expression for the current date/time

string random()

Returns the database-specific version of the random() function

Return Value

string

Expression for a random value

string sortByField(string $field, array $values)

Generate SQL for sorting by a specific field using MySQL's FIELD function.

Parameters

string $field

The name of the field to sort by.

array $values

The values to order by.

Return Value

string

SQL snippet for ordering.

static Config_ForClass config()

Get a configuration accessor for this class. Short hand for Config::inst()->get($this->class, .....).

Return Value

Config_ForClass

mixed uninherited(string $name)

Gets the uninherited value for the given config option

Parameters

string $name

Return Value

mixed

setSQLMode(string $mode)

Sets the SQL mode

Parameters

string $mode

Connection mode

selectTimezone(string $timezone)

Sets the system timezone for the database connection

Parameters

string $timezone

protected TransactionManager getTransactionManager()

Returns the TransactionManager to handle transactions for this database.

Return Value

TransactionManager

protected resetTransactionNesting()

In error condition, set transactionNesting to zero

protected inspectQuery(string $sql)

Inspect a SQL query prior to execution

Parameters

string $sql

protected getLockIdentifier($name)

No description

Parameters

$name