Api4SelectQuery
class Api4SelectQuery extends SelectQuery
A query node
may be in one of three formats:
- leaf: [$fieldName, $operator, $criteria]
- negated: ['NOT', $node]
- branch: ['OR|NOT', [$node, $node, ...]]
Leaf operators are one of:
- '=', '<=', '>=', '>', '<', 'LIKE', "<>", "!=",
- "NOT LIKE", 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN',
- 'IS NOT NULL', or 'IS NULL'.
Constants
MAX_JOINS |
|
MAIN_TABLE_ALIAS |
|
Properties
protected string | $entity | from SelectQuery | |
$select | from SelectQuery | ||
$where | from SelectQuery | ||
$orderBy | from SelectQuery | ||
$limit | from SelectQuery | ||
$offset | from SelectQuery | ||
protected array | $selectFields | from SelectQuery | |
bool | $isFillUniqueFields | from SelectQuery | |
protected CRM_Utils_SQL_Select | $query | from SelectQuery | |
protected array | $joins | from SelectQuery | |
protected array | $apiFieldSpec | from SelectQuery | |
protected array | $entityFieldNames | from SelectQuery | |
protected array | $aclFields | from SelectQuery | |
protected string|bool | $checkPermissions | from SelectQuery | |
protected int | $apiVersion | ||
protected array | $fkSelectAliases | ||
protected Joinable[] | $joinedTables |
Methods
No description
Why walk when you can
Get join info for dynamically-joined fields (e.g. "entity_id", "option_group")
Joins onto a custom field
Fetch a field from the getFields list
Perform input validation on params that use the join syntax
Check permission to join onto another api entity
Get acl clause for an entity
No description
No description
No description
Populate $this->selectFields
No description
Gets all FK fields and does the required joins
Recursively validate and transform a branch or leaf clause array to SQL.
Validate and transform a leaf clause array to SQL.
No description
No description
No description
No description
No description
No description
No description
No description
No description
No description
No description
No description
No description
No description
No description
No description
No description
No description
No description
No description
Get table name on basis of entity
Separates a string like 'emails.location_type.label' into an array, where each value in the array tells whether it is 1-1 or 1-n join type
Details
at line 77
__construct(string $entity, bool $checkPermissions, array $fields)
at line 99
array|int
run()
Why walk when you can
in SelectQuery at line 174
SelectQuery
merge(CRM_Utils_SQL_Select $sqlFragment)
in SelectQuery at line 194
protected array|null
addFkField($fkFieldName, $side)
Joins onto an fk field
Adds one or more joins to the query to make this field available for use in a clause.
Enforces permissions at the api level and by appending the acl clause for that entity to the join.
in SelectQuery at line 275
protected
getJoinInfo($fkField, $stack)
Get join info for dynamically-joined fields (e.g. "entity_id", "option_group")
in SelectQuery at line 303
protected array
addCustomField(array $customField, string $side, string $baseTable = self::MAIN_TABLE_ALIAS)
Joins onto a custom field
Adds a join to the query to make this field available for use in a clause.
at line 322
protected array|null
getField(string $fieldName)
Fetch a field from the getFields list
in SelectQuery at line 329
protected
validateNestedInput($fieldName, $value)
Perform input validation on params that use the join syntax
Arguably this should be done at the api wrapper level, but doing it here provides a bit more consistency in that api permissions to perform the join are checked first.
in SelectQuery at line 350
protected bool
checkPermissionToJoin(string $entity, array $fieldStack)
Check permission to join onto another api entity
in SelectQuery at line 384
protected array
getAclClause(string $tableAlias, string $baoName, array $stack = [])
Get acl clause for an entity
at line 220
protected
buildOrderBy()
in SelectQuery at line 442
join(string $side, string $tableName, string $tableAlias, array $conditions)
at line 210
protected
buildWhereClause()
at line 179
protected
buildSelectFields()
Populate $this->selectFields
at line 311
protected array
getFields()
at line 146
protected
addJoins()
Gets all FK fields and does the required joins
at line 244
protected string
treeWalkWhereClause(array $clause)
Recursively validate and transform a branch or leaf clause array to SQL.
at line 280
protected string
validateClauseAndComposeSql(array $clause)
Validate and transform a leaf clause array to SQL.
at line 337
protected
joinFK($key)
at line 390
$this
addJoinedTable(Joinable $joinable)
at line 399
FALSE|string
getFrom()
at line 406
string
getEntity()
at line 413
array
getSelect()
at line 420
array
getWhere()
at line 427
array
getOrderBy()
at line 434
mixed
getLimit()
at line 441
mixed
getOffset()
at line 448
array
getSelectFields()
at line 455
bool
isFillUniqueFields()
at line 462
CRM_Utils_SQL_Select
getQuery()
at line 469
array
getJoins()
at line 476
array
getApiFieldSpec()
at line 483
array
getEntityFieldNames()
at line 490
array
getAclFields()
at line 497
bool|string
getCheckPermissions()
at line 504
int
getApiVersion()
at line 511
array
getFkSelectAliases()
at line 518
Joinable[]
getJoinedTables()
at line 525
Joinable
getJoinedTable($alias)
at line 540
void
getTableName(string $baoName)
Get table name on basis of entity
at line 561
array
getPathJoinTypes(string $pathString)
Separates a string like 'emails.location_type.label' into an array, where each value in the array tells whether it is 1-1 or 1-n join type