SQLConditionalExpression
class SQLConditionalExpression extends SQLExpression
Represents a SQL query for an expression which interacts with existing rows (SELECT / DELETE / UPDATE) with a WHERE clause
Methods
Swap some text in the SQL query with another.
Determine if this query is empty, and thus cannot be executed
Generate the SQL statement for this query.
Construct a new SQLInteractExpression.
Sets the list of tables to query from or update
Add a table to include in the query or update
Set the connective property.
Get the connective property.
Use the disjunctive operator 'OR' to join filter expressions in the WHERE clause.
Use the conjunctive operator 'AND' to join filter expressions in the WHERE clause.
Add a LEFT JOIN criteria to the tables list.
Add an INNER JOIN criteria
Add an additional filter (part of the ON clause) on a join.
Set the filter (part of the ON clause) on a join.
Returns true if we are already joining to the given table alias
Return a list of tables that this query is selecting from.
Return a list of tables queried
Retrieves the finalised list of joins
Set a WHERE clause.
Adds a WHERE clause.
No description
No description
Return a list of WHERE clauses used internally.
Return a list of WHERE clauses used internally.
Given a list of conditions as per the format of $this->where, split this into an array of predicates, and a separate array of ordered parameters
Checks whether this query is for a specific ID in a table
Checks whether this query is filtering on a foreign key, ie finding a has_many relationship
Details
in SQLExpression at line 29
__get($field)
deprecated
deprecated since version 4.0
in SQLExpression at line 37
__set($field, $value)
deprecated
deprecated since version 4.0
in SQLExpression at line 52
replaceText(string $old, string $new)
Swap some text in the SQL query with another.
Note that values in parameters will not be replaced
in SQLExpression at line 64
string
__toString()
Return the generated SQL string for this query
in SQLExpression at line 82
renameTable(string $old, string $new)
Swap the use of one table with another.
at line 680
bool
isEmpty()
Determine if this query is empty, and thus cannot be executed
in SQLExpression at line 101
string
sql(array $parameters = array())
Generate the SQL statement for this query.
in SQLExpression at line 119
SS_Query
execute()
Execute this query.
at line 49
__construct(array|string $from = array(), array $where = array())
Construct a new SQLInteractExpression.
at line 62
SQLConditionalExpression
setFrom(string|array $from)
Sets the list of tables to query from or update
at line 75
SQLConditionalExpression
addFrom(string|array $from)
Add a table to include in the query or update
at line 90
setConnective(string $value)
Set the connective property.
at line 99
string
getConnective()
Get the connective property.
at line 106
useDisjunction()
Use the disjunctive operator 'OR' to join filter expressions in the WHERE clause.
at line 113
useConjunction()
Use the conjunctive operator 'AND' to join filter expressions in the WHERE clause.
at line 130
SQLConditionalExpression
addLeftJoin(string $table, string $onPredicate, string $tableAlias = '', int $order = 20, array $parameters = array())
Add a LEFT JOIN criteria to the tables list.
at line 157
SQLConditionalExpression
addInnerJoin(string $table, string $onPredicate, string $tableAlias = null, int $order = 20, array $parameters = array())
Add an INNER JOIN criteria
at line 176
SQLConditionalExpression
addFilterToJoin(string $table, string $filter)
Add an additional filter (part of the ON clause) on a join.
at line 188
SQLConditionalExpression
setJoinFilter(string $table, string $filter)
Set the filter (part of the ON clause) on a join.
at line 199
boolean
isJoinedTo(string $tableAlias)
Returns true if we are already joining to the given table alias
at line 208
array
queriedTables()
Return a list of tables that this query is selecting from.
at line 234
array
getFrom()
Return a list of tables queried
at line 246
array
getJoins(array $parameters = array())
Retrieves the finalised list of joins
at line 380
SQLConditionalExpression
setWhere($where)
Set a WHERE clause.
at line 466
SQLConditionalExpression
addWhere($where)
Adds a WHERE clause.
Note that the database will execute any parameterised queries using prepared statements whenever available.
There are several different ways of doing this.
// the entire predicate as a single string
$query->addWhere("\"Column\" = 'Value'");
// multiple predicates as an array
$query->addWhere(array("\"Column\" = 'Value'", "\"Column\" != 'Value'"));
// Shorthand for the above using argument expansion
$query->addWhere("\"Column\" = 'Value'", "\"Column\" != 'Value'");
// multiple predicates with parameters
$query->addWhere(array('"Column" = ?' => $column, '"Name" = ?' => $value)));
// Shorthand for simple column comparison (as above), omitting the '?'
$query->addWhere(array('"Column"' => $column, '"Name"' => $value));
// Multiple predicates, each with multiple parameters.
$query->addWhere(array(
'"ColumnOne" = ? OR "ColumnTwo" != ?' => array(1, 4),
'"ID" != ?' => $value
));
// Using a dynamically generated condition (any object that implements SQLConditionGroup)
$condition = new ObjectThatImplements_SQLConditionGroup();
$query->addWhere($condition);
Note that if giving multiple parameters for a single predicate the array of values must be given as an indexed array, not an associative array.
Also should be noted is that any null values for parameters may give unexpected behaviour. array('Column' => NULL) is shorthand for array('Column = ?', NULL), and will not match null values for that column, as 'Column IS NULL' is the correct syntax.
Additionally, be careful of key conflicts. Adding two predicates with the same condition but different parameters can cause a key conflict if added in the same array. This can be solved by wrapping each individual condition in an array. E.g.
// Multiple predicates with duplicate conditions
$query->addWhere(array(
array('ID != ?' => 5),
array('ID != ?' => 6)
));
// Alternatively this can be added in two separate calls to addWhere
$query->addWhere(array('ID != ?' => 5));
$query->addWhere(array('ID != ?' => 6));
// Or simply omit the outer array
$query->addWhere(array('ID != ?' => 5), array('ID != ?' => 6));
If it's necessary to force the parameter to be considered as a specific data type by the database connector's prepared query processor any parameter can be cast to that type by using the following format.
// Treat this value as a double type, regardless of its type within PHP
$query->addWhere(array(
'Column' => array(
'value' => $variable,
'type' => 'double'
)
));
at line 482
SQLConditionalExpression
setWhereAny($filters)
at line 496
SQLConditionalExpression
addWhereAny($filters)
at line 510
array
getWhere()
Return a list of WHERE clauses used internally.
at line 520
array
getWhereParameterised(array $parameters)
Return a list of WHERE clauses used internally.
at line 624
splitQueryParameters(array $conditions, array $predicates, array $parameters)
Given a list of conditions as per the format of $this->where, split this into an array of predicates, and a separate array of ordered parameters
Note, that any SQLConditionGroup objects will be evaluated here.
at line 652
boolean
filtersOnID()
Checks whether this query is for a specific ID in a table
at line 669
boolean
filtersOnFK()
Checks whether this query is filtering on a foreign key, ie finding a has_many relationship
at line 689
SQLDelete
toDelete()
Generates an SQLDelete object using the currently specified parameters
at line 700
SQLSelect
toSelect()
Generates an SQLSelect object using the currently specified parameters.
at line 713
SQLUpdate
toUpdate()
Generates an SQLUpdate object using the currently specified parameters.
No fields will have any assigned values for the newly generated SQLUpdate object.