CRM_Core_DAO
class CRM_Core_DAO extends DB_DataObject
Class CRM_Core_DAO
Constants
NOT_NULL |
|
IS_NULL |
|
DB_DAO_NOTNULL |
|
VALUE_SEPARATOR |
|
BULK_INSERT_COUNT |
|
BULK_INSERT_HIGH_COUNT |
|
QUERY_FORMAT_WILDCARD |
|
QUERY_FORMAT_NO_QUOTES |
|
Properties
static null | $_nullObject | ||
static array | $_nullArray | ||
static | $_dbColumnValueCache | ||
static array | $_testEntitiesToSkip | Define entities that shouldn't be created or deleted when creating/ deleting test objects - this prevents world regions, countries etc from being added / deleted | |
static object | $_factory | The factory class for this application. | |
static | $_checkedSqlFunctionsExist | ||
protected | $_options | https://issues.civicrm.org/jira/browse/CRM-17748 internal variable for DAO to hold per-query settings |
Methods
Class constructor.
Empty definition for virtual function.
Initialize the DAO object.
No description
No description
Generate and assign an arbitrary value to a field of a test object.
Reset the DAO object.
No description
Execute a query by the current DAO, localizing it along the way (if needed).
Static function to set the factory instance for this class.
Factory method to instantiate a new object from a table name.
Initialization for all DAO objects. Since we access DB_DO programatically we need to set the links manually.
Defines the default key as 'id'.
Tells DB_DataObject which keys use autoincrement.
Returns list of FK relationships.
Returns all the column names of this table.
Get/set an associative array of table columns
Save DAO object.
Deletes items from table which match current objects variables.
No description
Given an associative array of name/value pairs, extract all the values that belong to this object and initialize the object with said values
Store all the values from this object in an associative array this is a destructive store, calling function is responsible for keeping sanity of id's.
Create an attribute for this specific field. We only do this for strings and text
Get the size and maxLength attributes for this text field.
No description
Check if there is a record with the same name in the db.
Check if there is a given column in a specific table.
Scans all the tables using a slow query and table name.
No description
Get the name of the CiviCRM database.
Checks if a constraint exists for a specified table.
Checks if CONSTRAINT keyword exists for a specified table.
Checks if the FK constraint name is in the format 'FK_tableName_columnName' for a specified column of a table.
Check whether a specific column in a specific table has always the same value.
Check whether a specific column in a specific table is always NULL.
Check if there is a given table in the database.
No description
Find a DAO object for the given ID and return it.
Returns all results as array-encoded records.
Get all the result records as mapping between columns.
Given a DAO name, a column name and a column value, find the record and GET the value of another column in that record
Given a DAO name, a column name and a column value, find the record and SET the value of another column in that record
Get sort string.
Fetch object based on array of properties.
Delete the object records that are associated with this contact.
Execute an unbuffered query.
Execute a query.
Execute a query and get the single result.
Compose the query by merging the parameters into it.
No description
make a shallow copy of an object.
Cascade update through related entities.
Given the component id, compute the contact id since its used for things like send email
Fetch object based on array of properties.
No description
No description
Escape a list of strings for use with "WHERE X IN (.
No description
Creates a test object, including any required objects it needs via recursion createOnly: only create in database, do not store or return the objects (useful for perf testing) ONLY USE FOR TESTING
Deletes the this object plus any dependent objects that are associated with it.
Set defaults when creating new entity.
No description
No description
No description
Build a list of triggers via hook and add them to (err, reconcile them with) the database.
Because sql functions are sometimes lost, esp during db migration, we check here to avoid numerous support requests
Given a list of fields, create a list of references.
Find all records which refer to this entity.
No description
List all tables which have hard foreign keys to this table.
Lookup the value of a MySQL global configuration variable.
Update the fields array to also hold keys for pseudoconstant fields that relate to contained fields.
Get options for the called BAO object's field.
Populate option labels for this object's fields.
Provides documentation and validation for the buildOptions $context param
No description
Get SQL where clause for SQL filter syntax input parameters.
No description
SQL has a limit of 64 characters on various names: table name, trigger name, column name .
https://issues.civicrm.org/jira/browse/CRM-17748 Sets the internal options to be used on a query
https://issues.civicrm.org/jira/browse/CRM-17748 wrapper to pass internal DAO options down to DB_mysql/DB_Common level
Generates acl clauses suitable for adding to WHERE or ON when doing an api.get for this entity
This returns the final permissioned query string for this entity
ensure database name is 'safe', i.e. only contains word characters (includes underscores) and dashes, and contains at least one [a-z] case insenstive.
Details
at line 94
CRM_Core_DAO
__construct()
Class constructor.
at line 102
static
getTableName()
Empty definition for virtual function.
at line 112
static
init(string $dsn)
Initialize the DAO object.
at line 131
static DB_common
getConnection()
at line 142
protected
assignTestFK(string $fieldName, $fieldDef, array $params)
at line 191
protected
assignTestValue(string $fieldName, array $fieldDef, int $counter)
Generate and assign an arbitrary value to a field of a test object.
at line 303
reset()
Reset the DAO object.
DAO is kinda crappy in that there is an unwritten rule of one query per DAO.
We attempt to get around this crappy restriction by resetting some of DAO's internal fields. Use this with caution
at line 323
static string
getLocaleTableName(string $tableName)
at line 345
object
query(string $query, bool $i18nRewrite = TRUE)
Execute a query by the current DAO, localizing it along the way (if needed).
at line 374
static
setFactory(object $factory)
Static function to set the factory instance for this class.
at line 383
factory(string $table = '')
Factory method to instantiate a new object from a table name.
at line 395
initialize()
Initialization for all DAO objects. Since we access DB_DO programatically we need to set the links manually.
at line 411
array
keys()
Defines the default key as 'id'.
at line 426
array
sequenceKey()
Tells DB_DataObject which keys use autoincrement.
'id' is autoincrementing by default.
at line 441
static array
getReferenceColumns()
Returns list of FK relationships.
at line 451
static array
fields()
Returns all the column names of this table.
at line 462
array
table()
Get/set an associative array of table columns
at line 485
CRM_Core_DAO
save(bool $hook = TRUE)
Save DAO object.
at line 536
delete(bool $useWhere = FALSE)
Deletes items from table which match current objects variables.
Returns the true on success
for example
Designed to be extended
$object = new mytable(); $object->ID=123; echo $object->delete(); // builds a conditon
$object = new mytable(); $object->whereAdd('age > 12'); $object->limit(1); $object->orderBy('age DESC'); $object->delete(true); // dont use object vars, use the conditions, limit and order.
at line 552
log(bool $created = FALSE)
at line 587
bool
copyValues(array $params)
Given an associative array of name/value pairs, extract all the values that belong to this object and initialize the object with said values
at line 628
static
storeValues(object $object, array $values)
Store all the values from this object in an associative array this is a destructive store, calling function is responsible for keeping sanity of id's.
at line 650
static array|null
makeAttribute(array $field)
Create an attribute for this specific field. We only do this for strings and text
at line 703
static array
getAttribute(string $class, string $fieldName = NULL)
Get the size and maxLength attributes for this text field.
(or for all text fields) in the DAO object.
at line 731
static
transaction($type)
at line 754
static bool
objectExists(string $value, string $daoName, string $daoID, string $fieldName = 'name', string $domainID = NULL)
Check if there is a record with the same name in the db.
at line 780
static bool
checkFieldExists(string $tableName, string $columnName, bool $i18nRewrite = TRUE)
Check if there is a given column in a specific table.
at line 798
static array
getTableNames()
Scans all the tables using a slow query and table name.
at line 820
static bool
isDBMyISAM(int $maxTablesToCheck = 10)
at line 837
static string
getDatabaseName()
Get the name of the CiviCRM database.
at line 851
static bool
checkConstraintExists(string $tableName, string $constraint)
Checks if a constraint exists for a specified table.
at line 879
static bool
schemaRequiresRebuilding(array $tables = array("civicrm_contact"))
Checks if CONSTRAINT keyword exists for a specified table.
at line 915
static bool
checkFKConstraintInFormat(string $tableName, string $columnName)
Checks if the FK constraint name is in the format 'FK_tableName_columnName' for a specified column of a table.
at line 944
static bool
checkFieldHasAlwaysValue(string $tableName, string $columnName, string $columnValue)
Check whether a specific column in a specific table has always the same value.
at line 961
static bool
checkFieldIsAlwaysNull(string $tableName, string $columnName)
Check whether a specific column in a specific table is always NULL.
at line 977
static bool
checkTableExists(string $tableName)
Check if there is a given table in the database.
at line 995
bool
checkVersion($version)
at line 1013
static object
findById(int $id)
Find a DAO object for the given ID and return it.
at line 1027
array
fetchAll()
Returns all results as array-encoded records.
at line 1045
array
fetchMap(string $keyColumn, string $valueColumn)
Get all the result records as mapping between columns.
at line 1070
static string|null
getFieldValue(string $daoName, int $searchValue, string $returnColumn = 'name', string $searchColumn = 'id', bool $force = FALSE)
Given a DAO name, a column name and a column value, find the record and GET the value of another column in that record
at line 1120
static bool
setFieldValue(string $daoName, int $searchValue, string $setColumn, string $setValue, string $searchColumn = 'id')
Given a DAO name, a column name and a column value, find the record and SET the value of another column in that record
at line 1146
static string
getSortString(array|object $sort, string $default = NULL)
Get sort string.
at line 1177
static object
commonRetrieve(string $daoName, array $params, array $defaults, array $returnProperities = NULL)
Fetch object based on array of properties.
at line 1202
static
deleteEntityContact(string $daoName, int $contactId)
Delete the object records that are associated with this contact.
at line 1227
static CRM_Core_DAO
executeUnbufferedQuery(string $query, array $params = array(), bool $abort = TRUE, null $daoName = NULL, bool $freeDAO = FALSE, bool $i18nRewrite = TRUE, bool $trapException = FALSE)
Execute an unbuffered query.
This is a wrapper around new functionality exposed with CRM-17748.
at line 1293
static CRM_Core_DAO|object
executeQuery(string $query, array $params = array(), bool $abort = TRUE, null $daoName = NULL, bool $freeDAO = FALSE, bool $i18nRewrite = TRUE, bool $trapException = FALSE)
Execute a query.
at line 1343
static string|null
singleValueQuery(string $query, array $params = array(), bool $abort = TRUE, bool $i18nRewrite = TRUE)
Execute a query and get the single result.
at line 1381
static string
composeQuery(string $query, array $params, bool $abort = TRUE)
Compose the query by merging the parameters into it.
at line 1428
static
freeResult(null $ids = NULL)
at line 1474
static CRM_Core_DAO
copyGeneric(string $daoName, array $criteria, array $newData = NULL, string $fieldsFix = NULL, string $blockCopyOfDependencies = NULL)
make a shallow copy of an object.
and all the fields in the object
at line 1557
static CRM_Core_DAO|null
cascadeUpdate(string $daoName, $fromId, $toId, array $newData = array())
Cascade update through related entities.
at line 1601
static array
getContactIDsFromComponent($componentIDs, string $tableName)
Given the component id, compute the contact id since its used for things like send email
at line 1636
static object
commonRetrieveAll(string $daoName, string $fieldIdName = 'id', int $fieldId, $details, array $returnProperities = NULL)
Fetch object based on array of properties.
at line 1658
static
dropAllTables()
at line 1680
static string
escapeString($string)
at line 1709
static string
escapeStrings(array $strings, string $default = NULL)
Escape a list of strings for use with "WHERE X IN (.
..)" queries.
at line 1728
static string
escapeWildCardString($string)
at line 1756
static object|array|NULL
createTestObject(string $daoName, array $params = array(), int $numObjects = 1, bool $createOnly = FALSE)
Creates a test object, including any required objects it needs via recursion createOnly: only create in database, do not store or return the objects (useful for perf testing) ONLY USE FOR TESTING
at line 1839
static
deleteTestObjects(string $daoName, array $params = array())
Deletes the this object plus any dependent objects that are associated with it.
ONLY USE FOR TESTING
at line 1885
static
setCreateDefaults(array $params, $defaults)
Set defaults when creating new entity.
(don't call this set defaults as already in use with different signature in some places)
at line 1903
static string
createTempTableName(string $prefix = 'civicrm', bool $addRandomString = TRUE, null $string = NULL)
at line 1923
static bool
checkTriggerViewPermission(bool $view = TRUE, bool $trigger = TRUE)
at line 1971
static
debugPrint(null $message = NULL, bool $printDAO = TRUE)
at line 1995
static
triggerRebuild(string $tableName = NULL, bool $force = FALSE)
deprecated
deprecated
Build a list of triggers via hook and add them to (err, reconcile them with) the database.
at line 2006
static
checkSqlFunctionsExist()
Because sql functions are sometimes lost, esp during db migration, we check here to avoid numerous support requests
at line 2023
static
dropTriggers(string $tableName = NULL)
deprecated
deprecated
Wrapper function to drop triggers.
at line 2034
static
createTriggers(array $info, string $onlyTableName = NULL)
deprecated
deprecated
at line 2045
static array
createReferenceColumns(string $className)
Given a list of fields, create a list of references.
at line 2068
array
findReferences()
Find all records which refer to this entity.
at line 2097
array
getReferenceCounts()
at line 2134
static array
getReferencesToTable(string $tableName)
List all tables which have hard foreign keys to this table.
For now, this returns a description of every entity_id/entity_table reference. TODO: filter dynamic entity references on the $tableName, based on schema metadata in dynamicForeignKey which enumerates a restricted set of possible entity_table's.
at line 2158
static mixed
getGlobalSetting(string $name, mixed $default = NULL)
Lookup the value of a MySQL global configuration variable.
at line 2183
static protected
appendPseudoConstantsToFields(array $fields)
Update the fields array to also hold keys for pseudoconstant fields that relate to contained fields.
This is relevant where we want to offer both the ID field and the label field as an option, e.g. search builder.
It is currently limited for optionGroupName for purposes keeping the scope of the change small, but is appropriate for other sorts of pseudoconstants.
at line 2209
static array|bool
buildOptions(string $fieldName, string $context = NULL, array $props = array())
Get options for the called BAO object's field.
This function can be overridden by each BAO to add more logic related to context. The overriding function will generally call the lower-level CRM_Core_PseudoConstant::get
at line 2220
getOptionLabels()
Populate option labels for this object's fields.
at line 2246
static array
buildOptionsContext(string $context = NULL)
Provides documentation and validation for the buildOptions $context param
at line 2266
bool|array
getFieldSpec(string $fieldName)
at line 2309
static NULL|string|array
createSQLFilter(string $fieldName, array $filter, string $type = NULL, string $alias = NULL, bool $returnSanitisedArray = FALSE)
Get SQL where clause for SQL filter syntax input parameters.
SQL version of api function to assign filters to the DAO based on the syntax $field => array('IN' => array(4,6,9)) OR $field => array('LIKE' => array('%me%)) etc
at line 2372
static array
acceptedSQLOperators()
at line 2409
static string
shortenSQLName(string $string, int $length = 60, bool $makeRandom = FALSE)
SQL has a limit of 64 characters on various names: table name, trigger name, column name .
..
For custom groups and fields we generated names from user entered input which can be longer than this length, this function helps with creating strings that meet various criteria.
at line 2435
setOptions(array $options)
https://issues.civicrm.org/jira/browse/CRM-17748 Sets the internal options to be used on a query
at line 2448
protected
_setDBOptions(array $options)
https://issues.civicrm.org/jira/browse/CRM-17748 wrapper to pass internal DAO options down to DB_mysql/DB_Common level
at line 2463
setApiFilter(array $params)
deprecated
deprecated
at line 2480
array
addSelectWhereClause()
Generates acl clauses suitable for adding to WHERE or ON when doing an api.get for this entity
Return format is in the form of fieldname => clauses starting with an operator. e.g.:
at line 2521
static array
getSelectWhereClause(string $tableAlias = NULL)
This returns the final permissioned query string for this entity
With acls from related entities + additional clauses from hook_civicrm_selectWhereClause
at line 2544
static bool
requireSafeDBName($database)
ensure database name is 'safe', i.e. only contains word characters (includes underscores) and dashes, and contains at least one [a-z] case insenstive.