Commit 7b2c2c7d authored by webchick's avatar webchick

Temporary roll-back of #890994, per Dries's feedback.

parent dc3e02fb
......@@ -823,20 +823,6 @@ public function escapeAlias($field) {
return preg_replace('/[^A-Za-z0-9_]+/', '', $field);
}
/**
* Escapes a alias name string.
*
* Force all alias names to be strictly alphanumeric-plus-underscore. In
* contrast to DatabaseConnection::escapeField() /
* DatabaseConnection::escapeTable(), this doesn't allow the point.
*
* @return
* The sanitized field name string.
*/
public function escapeAlias($field) {
return preg_replace('/[^A-Za-z0-9_]+/', '', $field);
}
/**
* Escapes characters that work as wildcard characters in a LIKE pattern.
*
......
......@@ -217,71 +217,4 @@ public function orderRandom() {
return $this;
}
/**
* Overrides SelectQuery::orderBy().
*
* Automatically adds columns that are ordered on as fields.
*/
public function orderBy($field, $direction = 'ASC') {
// Call parent function to order on this.
$return = parent::orderBy($field, $direction);
// PostgreSQL requires that when using DISTINCT or GROUP BY conditions,
// fields/expressions that are ordered on also need to be selected.
// This function tries to automatically add a field if it is not already
// added or a condition applies that makes it impossible to handle that
// automatically. In such cases, the query might fail on PostgreSQL if the
// field or expression is not added manually.
// If there is a table alias specified, split it up.
if (strpos($field, '.') !== FALSE) {
list($table, $table_field) = explode('.', $field);
}
// Figure out if the field has already been added.
foreach ($this->fields as $existing_field) {
if (!empty($table)) {
// If table alias is given, check if field and table exists.
if ($existing_field['table'] == $table && $existing_field['field'] == $table_field) {
return $return;
}
}
else {
// If there is no table, simply check if the field exists as a field or
// an aliased field.
if ($existing_field['alias'] == $field) {
return $return;
}
}
}
// Also check expression aliases.
foreach ($this->expressions as $expression) {
if ($expression['alias'] == $field) {
return $return;
}
}
// If a table loads all fields, it can not be added again. It would
// result in an ambigious alias error because that field would be loaded
// twice: Once through table_alias.* and once directly. If the field
// actually belongs to a different table, it must be added manually.
foreach ($this->tables as $table) {
if (!empty($table['all_fields'])) {
return $return;
}
}
// If $field contains an characters which are not allowed in a field name
// it is considered an expression, these can't be handeld automatically
// either.
if ($this->connection->escapeField($field) != $field) {
return $return;
}
// This is a case that can be handled automatically, add the field.
$this->addField(NULL, $field);
return $return;
}
}
......@@ -366,11 +366,6 @@ public function addJoin($type, $table, $alias = NULL, $condition = NULL, $argume
* If called multiple times, the query will order by each specified field in the
* order this method is called.
*
* If the query uses DISTINCT or GROUP BY conditions, fields or expressions
* that are used for the order must be selected to be compatible with some
* databases like PostgreSQL. The PostgreSQL driver can handle simple cases
* automatically but it is suggested to explicitly specify them.
*
* @param $field
* The field on which to order.
* @param $direction
......@@ -1378,10 +1373,10 @@ public function __toString() {
foreach ($this->fields as $alias => $field) {
// Always use the AS keyword for field aliases, as some
// databases require it (e.g., PostgreSQL).
$fields[] = (isset($field['table']) ? $this->connection->escapeTable($field['table']) . '.' : '') . $this->connection->escapeField($field['field']) . ' AS ' . $this->connection->escapeAlias($field['alias']);
$fields[] = (isset($field['table']) ? $this->connection->escapeTable($field['table']) . '.' : '') . $this->connection->escapeField($field['field']) . ' AS ' . $this->connection->escapeField($field['alias']);
}
foreach ($this->expressions as $alias => $expression) {
$fields[] = $expression['expression'] . ' AS ' . $this->connection->escapeAlias($expression['alias']);
$fields[] = $expression['expression'] . ' AS ' . $expression['alias'];
}
$query .= implode(', ', $fields);
......
......@@ -415,6 +415,10 @@ public function execute()
// Add default score.
$this->addScore('i.relevance');
}
if (count($this->getOrderBy()) == 0) {
// Add default order.
$this->orderBy('calculated_score', 'DESC');
}
if (count($this->multiply)) {
// Add the total multiplicator as many times as requested to maintain
......@@ -432,11 +436,6 @@ public function execute()
// Convert scores to an expression.
$this->addExpression('SUM(' . implode(' + ', $this->scores) . ')', 'calculated_score', $this->scoresArguments);
if (count($this->getOrderBy()) == 0) {
// Add default order after adding the expression.
$this->orderBy('calculated_score', 'DESC');
}
// Add tag and useful metadata.
$this
->addTag('search_' . $this->type)
......
......@@ -501,20 +501,16 @@ class EntityFieldQueryTestCase extends DrupalWebTestCase {
$query = new EntityFieldQuery();
$query
->entityCondition('entity_type', 'test_entity_bundle_key')
->propertyCondition('fttype', 'und', 'CONTAINS');
->propertyCondition('ftid', 1, 'CONTAINS');
$this->assertEntityFieldQuery($query, array(
array('test_entity_bundle_key', 1),
array('test_entity_bundle_key', 2),
array('test_entity_bundle_key', 3),
array('test_entity_bundle_key', 4),
array('test_entity_bundle_key', 5),
array('test_entity_bundle_key', 6),
), t('Test the "contains" operation on a property.'));
$query = new EntityFieldQuery();
$query->fieldCondition($this->fields[1], 'shape', 'uar', 'CONTAINS');
$query->fieldCondition($this->fields[0], 'value', 3, 'CONTAINS');
$this->assertEntityFieldQuery($query, array(
array('test_entity_bundle', 5),
array('test_entity_bundle_key', 3),
array('test_entity', 3),
), t('Test the "contains" operation on a field.'));
$query = new EntityFieldQuery();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment