diff options
Diffstat (limited to 'modules/field')
-rw-r--r-- | modules/field/modules/field_sql_storage/field_sql_storage.module | 44 |
1 files changed, 31 insertions, 13 deletions
diff --git a/modules/field/modules/field_sql_storage/field_sql_storage.module b/modules/field/modules/field_sql_storage/field_sql_storage.module index 9349a95d6..19401fcb4 100644 --- a/modules/field/modules/field_sql_storage/field_sql_storage.module +++ b/modules/field/modules/field_sql_storage/field_sql_storage.module @@ -550,35 +550,53 @@ function field_sql_storage_field_storage_query(EntityFieldQuery $query) { } } - // Add field orders. - foreach ($query->fieldOrder as $key => $order) { - $table_alias = $table_aliases[$key]; - $field = $order['field']; - $sql_field = "$table_alias." . _field_sql_storage_columnname($field['field_name'], $order['column']); - $select_query->orderBy($sql_field, $order['direction']); - } - if (isset($query->deleted)) { $select_query->condition("$field_base_table.deleted", (int) $query->deleted); } - if ($query->propertyConditions || $query->propertyOrder) { + // Is there a need to sort the query by property? + $has_property_order = FALSE; + foreach ($query->order as $order) { + if ($order['type'] == 'property') { + $has_property_order = TRUE; + } + } + + if ($query->propertyConditions || $has_property_order) { if (empty($query->entityConditions['entity_type']['value'])) { throw new EntityFieldQueryException('Property conditions and orders must have an entity type defined.'); } $entity_type = $query->entityConditions['entity_type']['value']; $entity_base_table = _field_sql_storage_query_join_entity($select_query, $entity_type, $field_base_table); $query->entityConditions['entity_type']['operator'] = '='; - $query->processProperty($select_query, $entity_base_table); + foreach ($query->propertyConditions as $property_condition) { + $query->addCondition($select_query, "$entity_base_table." . $property_condition['column'], $property_condition); + } } foreach ($query->entityConditions as $key => $condition) { $sql_field = $key == 'entity_type' ? 'fcet.type' : "$field_base_table.$key"; $query->addCondition($select_query, $sql_field, $condition); } - foreach ($query->entityOrder as $key => $direction) { - $sql_field = $key == 'entity_type' ? 'fcet.type' : "$field_base_table.$key"; - $select_query->orderBy($sql_field, $direction); + + // Order the query. + foreach ($query->order as $order) { + if ($order['type'] == 'entity') { + $key = $order['specifier']; + $sql_field = $key == 'entity_type' ? 'fcet.type' : "$field_base_table.$key"; + $select_query->orderBy($sql_field, $order['direction']); + } + elseif ($order['type'] == 'field') { + $specifier = $order['specifier']; + $field = $specifier['field']; + $table_alias = $table_aliases[$specifier['index']]; + $sql_field = "$table_alias." . _field_sql_storage_columnname($field['field_name'], $specifier['column']); + $select_query->orderBy($sql_field, $order['direction']); + } + elseif ($order['type'] == 'property') { + $select_query->orderBy("$entity_base_table." . $order['specifier'], $order['direction']); + } } + return $query->finishQuery($select_query, $id_key); } |