abstract class SS_Database (View source)

Abstract database connectivity class.

Sub-classes of this implement the actual database connection libraries

Properties

protected DBConnector $connector

Database connector object

protected DBSchemaManager $schemaManager

Database schema manager object

protected DBQueryBuilder $queryBuilder

Query builder object

Methods

public
getConnector()

Get the current connector

public
setConnector(DBConnector $connector)

Injector injection point for connector dependency

public
getSchemaManager()

Returns the current schema manager

public
setSchemaManager(DBSchemaManager $schemaManager)

Injector injection point for schema manager

public
getQueryBuilder()

Returns the current query builder

public
setQueryBuilder(DBQueryBuilder $queryBuilder)

Injector injection point for schema manager

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.

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

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

public
int
getGeneratedID(string $table)

Get the autogenerated ID from the previous INSERT query.

public
bool
isActive()

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

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.

public
string
quoteString(mixed $value)

Wrap a string into DB-specific quotes.

public
escapeIdentifier(string $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!

protected
array
escapeColumnKeys(array $fieldValues)

Escapes unquoted columns keys in an associative array

public
manipulate(array $manipulation)

Execute a complex manipulation on the database.

public
quiet()

Enable supression of database messages.

public
clearAllData()

Clear all data out of the database

public
clearTable(string $table)

Clear all data in a given table

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($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($date1, string $date2)

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

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

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.

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
supportsTransactions()

Determines if this database supports transactions

protected
supportsExtensions($extensions)

No description

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
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
transactionEnd(bool $chain = false)

Commit everything inside this transaction so far

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

public
array
databaseList()

Retrieves the list of all databases the user has access to

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.

public
dropSelectedDatabase()

Drop the database that this object is currently connected to.

public
string|null
getSelectedDatabase()

Returns the name of the currently selected 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
dbDataType($type) deprecated

No description

public
createDatabase() deprecated

No description

public
getConnect($parameters) deprecated

No description

public
prepStringForDB($string) deprecated

No description

public
dropDatabase() deprecated

No description

public
allDatabaseNames() deprecated

No description

public
createTable($table, $fields = null, $indexes = null, $options = null, $advancedOptions = null) deprecated

No description

public
alterTable($table, $newFields = null, $newIndexes = null, $alteredFields = null, $alteredIndexes = null, $alteredOptions = null, $advancedOptions = null) deprecated

No description

public
renameTable($oldTableName, $newTableName) deprecated

No description

public
createField($table, $field, $spec) deprecated

No description

public
renameField($tableName, $oldName, $newName) deprecated

No description

public
currentDatabase() deprecated

No description

public
fieldList($table) deprecated

No description

public
tableList() deprecated

No description

public
hasTable($tableName) deprecated

No description

public
enumValuesForField($tableName, $fieldName) deprecated

No description

public
addslashes($value) deprecated

No description

public
beginSchemaUpdate() deprecated

No description

public
endSchemaUpdate() deprecated

No description

public
cancelSchemaUpdate() deprecated

No description

public
isSchemaUpdating() deprecated

No description

public
doesSchemaNeedUpdating() deprecated

No description

public
transCreateTable($table, $options = null, $advanced_options = null) deprecated

No description

public
transAlterTable($table, $options, $advanced_options) deprecated

No description

public
transCreateField($table, $field, $schema) deprecated

No description

public
transCreateIndex($table, $index, $schema) deprecated

No description

public
transAlterField($table, $field, $schema) deprecated

No description

public
transAlterIndex($table, $index, $schema) deprecated

No description

public
requireTable($table, $fieldSchema = null, $indexSchema = null, $hasAutoIncPK = true, $options = array(), $extensions = false) deprecated

No description

public
dontRequireTable($table) deprecated

No description

public
requireIndex($table, $index, $spec) deprecated

No description

public
hasField($tableName, $fieldName) deprecated

No description

public
requireField($table, $field, $spec) deprecated

No description

public
dontRequireField($table, $fieldName) deprecated

No description

public
sqlQueryToString(SQLExpression $query, $parameters = array()) deprecated

No description

Details

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

SS_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

SS_Query

SS_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

SS_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 debuging 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 = array())

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

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

escapeIdentifier(string $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 $value

The identifier to escape

string $separator

optional identifier splitter

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 supression 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

abstract 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

abstract 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 formated, 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

abstract string datetimeIntervalClause($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

$date
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

abstract string datetimeDifferenceClause($date1, string $date2)

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

Parameters

$date1
string $date2

to be substracted 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 substraction

abstract bool supportsCollations()

Returns true if this database supports collations

Return Value

bool

abstract 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

abstract 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

abstract 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.

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

abstract bool supportsTransactions()

Determines if this database supports transactions

Return Value

bool

Flag indicating support for transactions

protected supportsExtensions($extensions)

No description

Parameters

$extensions

abstract 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

abstract transactionSavepoint(string $savepoint)

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

Parameters

string $savepoint

Name of savepoint

abstract 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

abstract transactionEnd(bool $chain = false)

Commit everything inside this transaction so far

Parameters

bool $chain

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

abstract string now()

Return SQL expression used to represent the current date/time

Return Value

string

Expression for the current date/time

abstract string random()

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

Return Value

string

Expression for a random value

dbDataType($type) deprecated

deprecated since version 4.0 Use DB::get_schema()->dbDataType($type) instead

No description

Parameters

$type

createDatabase() deprecated

deprecated since version 4.0 Use selectDatabase('dbname', true) instead

No description

getConnect($parameters) deprecated

deprecated since version 4.0 SS_Database::getConnect was never implemented and is obsolete

No description

Parameters

$parameters

prepStringForDB($string) deprecated

deprecated since version 4.0 Use Convert::raw2sql($string, true) instead

No description

Parameters

$string

dropDatabase() deprecated

deprecated since version 4.0 Use dropSelectedDatabase instead

No description

allDatabaseNames() deprecated

deprecated since version 4.0 Use databaseList instead

No description

createTable($table, $fields = null, $indexes = null, $options = null, $advancedOptions = null) deprecated

deprecated since version 4.0 Use DB::create_table instead

No description

Parameters

$table
$fields
$indexes
$options
$advancedOptions

alterTable($table, $newFields = null, $newIndexes = null, $alteredFields = null, $alteredIndexes = null, $alteredOptions = null, $advancedOptions = null) deprecated

deprecated since version 4.0 Use DB::get_schema()->alterTable() instead

No description

Parameters

$table
$newFields
$newIndexes
$alteredFields
$alteredIndexes
$alteredOptions
$advancedOptions

renameTable($oldTableName, $newTableName) deprecated

deprecated since version 4.0 Use DB::get_schema()->renameTable() instead

No description

Parameters

$oldTableName
$newTableName

createField($table, $field, $spec) deprecated

deprecated since version 4.0 Use DB::create_field() instead

No description

Parameters

$table
$field
$spec

renameField($tableName, $oldName, $newName) deprecated

deprecated since version 4.0 Use DB::get_schema()->renameField() instead

No description

Parameters

$tableName
$oldName
$newName

currentDatabase() deprecated

deprecated since version 4.0 Use getSelectedDatabase instead

No description

fieldList($table) deprecated

deprecated since version 4.0 Use DB::field_list instead

No description

Parameters

$table

tableList() deprecated

deprecated since version 4.0 Use DB::table_list instead

No description

hasTable($tableName) deprecated

deprecated since version 4.0 Use DB::get_schema()->hasTable() instead

No description

Parameters

$tableName

enumValuesForField($tableName, $fieldName) deprecated

deprecated since version 4.0 Use DB::get_schema()->enumValuesForField() instead

No description

Parameters

$tableName
$fieldName

addslashes($value) deprecated

deprecated since version 4.0 Use Convert::raw2sql instead

No description

Parameters

$value

beginSchemaUpdate() deprecated

deprecated since version 3.2 Use DB::get_schema()->schemaUpdate with a callback instead

No description

endSchemaUpdate() deprecated

deprecated since version 3.2 Use DB::get_schema()->schemaUpdate with a callback instead

No description

cancelSchemaUpdate() deprecated

deprecated since version 4.0 Use DB::get_schema()->cancelSchemaUpdate instead

No description

isSchemaUpdating() deprecated

deprecated since version 4.0 Use DB::get_schema()->isSchemaUpdating() instead

No description

doesSchemaNeedUpdating() deprecated

deprecated since version 4.0 Use DB::get_schema()->doesSchemaNeedUpdating() instead

No description

transCreateTable($table, $options = null, $advanced_options = null) deprecated

deprecated since version 4.0 Use DB::get_schema()->transCreateTable() instead

No description

Parameters

$table
$options
$advanced_options

transAlterTable($table, $options, $advanced_options) deprecated

deprecated since version 4.0 Use DB::get_schema()->transAlterTable() instead

No description

Parameters

$table
$options
$advanced_options

transCreateField($table, $field, $schema) deprecated

deprecated since version 4.0 Use DB::get_schema()->transCreateField() instead

No description

Parameters

$table
$field
$schema

transCreateIndex($table, $index, $schema) deprecated

deprecated since version 4.0 Use DB::get_schema()->transCreateIndex() instead

No description

Parameters

$table
$index
$schema

transAlterField($table, $field, $schema) deprecated

deprecated since version 4.0 Use DB::get_schema()->transAlterField() instead

No description

Parameters

$table
$field
$schema

transAlterIndex($table, $index, $schema) deprecated

deprecated since version 4.0 Use DB::get_schema()->transAlterIndex() instead

No description

Parameters

$table
$index
$schema

requireTable($table, $fieldSchema = null, $indexSchema = null, $hasAutoIncPK = true, $options = array(), $extensions = false) deprecated

deprecated since version 4.0 Use DB::require_table() instead

No description

Parameters

$table
$fieldSchema
$indexSchema
$hasAutoIncPK
$options
$extensions

dontRequireTable($table) deprecated

deprecated since version 4.0 Use DB::dont_require_table() instead

No description

Parameters

$table

requireIndex($table, $index, $spec) deprecated

deprecated since version 4.0 Use DB::require_index() instead

No description

Parameters

$table
$index
$spec

hasField($tableName, $fieldName) deprecated

deprecated since version 4.0 Use DB::get_schema()->hasField() instead

No description

Parameters

$tableName
$fieldName

requireField($table, $field, $spec) deprecated

deprecated since version 4.0 Use DB::require_field() instead

No description

Parameters

$table
$field
$spec

dontRequireField($table, $fieldName) deprecated

deprecated since version 4.0 Use DB::dont_require_field() instead

No description

Parameters

$table
$fieldName

sqlQueryToString(SQLExpression $query, $parameters = array()) deprecated

deprecated since version 4.0 Use DB::build_sql() instead

No description

Parameters

SQLExpression $query
$parameters