From 581c2d35ae053aed07a607b8bb844603c48b7c2f Mon Sep 17 00:00:00 2001 From: Brett Profitt Date: Thu, 21 Apr 2011 11:52:45 -0400 Subject: Revert "Denormalizing annotation names for calculation functions." This reverts commit 628aa953ec150a1ed34680ef1d4f9c81dfc99bb1. --- .gitignore | 1 - engine/classes/ElggFile.php | 1 - engine/lib/annotations.php | 22 +++++++++------ engine/lib/metadata.php | 5 ---- engine/lib/metastrings.php | 67 ++++++++++++--------------------------------- engine/tests/suite.php | 6 ++-- 6 files changed, 34 insertions(+), 68 deletions(-) diff --git a/.gitignore b/.gitignore index 8bae532ad..1540c7db6 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,3 @@ engine/settings.php /.buildpath /.settings /.project -/nbproject/private/ \ No newline at end of file diff --git a/engine/classes/ElggFile.php b/engine/classes/ElggFile.php index df42ab97f..fe25491a8 100644 --- a/engine/classes/ElggFile.php +++ b/engine/classes/ElggFile.php @@ -322,7 +322,6 @@ class ElggFile extends ElggObject { $options = array( 'guid' => $this->guid, 'where' => array("n.string LIKE 'filestore::%'"), - 'join' => "JOIN {$db_prefix}metastrings n on n_table.name_id = n.id" ); $mds = elgg_get_metadata($options); diff --git a/engine/lib/annotations.php b/engine/lib/annotations.php index cd733c629..7a4e62921 100644 --- a/engine/lib/annotations.php +++ b/engine/lib/annotations.php @@ -392,14 +392,14 @@ function elgg_list_entities_from_annotations($options = array()) { * as entity_row_to_elggstar * * @param array $options An options array: - * 'calculation' => The calculation to use. Must be a valid MySQL function. - * Defaults to sum. Result selected as 'annotation_calculation'. - * 'order_by' => The order for the sorting. Defaults to 'calculation desc'. - * 'annotation_names' => The names of annotations on the entity. - * 'annotation_values' => The values of annotations on the entity. + * 'annotation_calculation' => The calculation to use. Must be a valid MySQL function. + * Defaults to sum. Result selected as 'annotation_calculation'. + * 'order_by' => The order for the sorting. Defaults to 'calculation desc'. + * 'annotation_names' => The names of annotations on the entity. + * 'annotation_values' => The values of annotations on the entity. * - * 'metadata_names' => The name of metadata on the entity. - * 'metadata_values' => The value of metadata on the entitiy. + * 'metadata_names' => The name of metadata on the entity. + * 'metadata_values' => The value of metadata on the entitiy. * * @return mixed */ @@ -410,18 +410,22 @@ function elgg_get_entities_from_annotation_calculation($options) { ); $options = array_merge($defaults, $options); + $function = sanitize_string(elgg_extract('calculation', $options, 'sum', false)); - $db_prefix = elgg_get_config('dbprefix'); // you must cast this as an int or it sorts wrong. $options['selects'][] = 'e.*'; $options['selects'][] = "$function(cast(v.string as signed)) as calculation"; + // need our own join to get the values. +// $options['joins'][] = "JOIN {$db_prefix}metastrings msv ON a.value_id = msv.id"; +// $options['joins'][] = "JOIN {$db_prefix}entities ae ON a.entity_guid = ae.guid"; + $options['wheres'][] = get_access_sql_suffix('n_table'); +// $options['wheres'][] = "e.guid = a.entity_guid"; $options['group_by'] = 'n_table.entity_guid'; $options['callback'] = 'entity_row_to_elggstar'; - $options['denormalize'] = 'name'; return elgg_get_annotations($options); } diff --git a/engine/lib/metadata.php b/engine/lib/metadata.php index 26741af90..a6b1bb43a 100644 --- a/engine/lib/metadata.php +++ b/engine/lib/metadata.php @@ -290,11 +290,6 @@ $access_id = ACCESS_PRIVATE, $allow_multiple = false) { */ function elgg_get_metadata(array $options = array()) { $options['metastring_type'] = 'metadata'; - if (isset($options['joins'])) { - if (!is_array($options['joins'])) { - $options['joins'] = array($options['joins']); - } - } return elgg_get_metastring_based_objects($options); } diff --git a/engine/lib/metastrings.php b/engine/lib/metastrings.php index 983716925..655617ac6 100644 --- a/engine/lib/metastrings.php +++ b/engine/lib/metastrings.php @@ -229,8 +229,6 @@ function delete_orphaned_metastrings() { * * metastring_type => STR metadata or annotation(s) * - * denormalize => Mixed Denormalize nothing (false, default), all, name, or value. - * * @return mixed * @access private */ @@ -295,8 +293,7 @@ function elgg_get_metastring_based_objects($options) { 'wheres' => array(), 'joins' => array(), - 'callback' => $callback, - 'denormalize' => false + 'callback' => $callback ); // @todo Ignore site_guid right now because of #2910 @@ -381,6 +378,7 @@ function elgg_get_metastring_based_objects($options) { $joins[] = "JOIN {$db_prefix}metastrings n on n_table.name_id = n.id"; $joins[] = "JOIN {$db_prefix}metastrings v on n_table.value_id = v.id"; + // remove identical join clauses $joins = array_unique($joins); @@ -395,7 +393,7 @@ function elgg_get_metastring_based_objects($options) { // metastrings $metastring_clauses = elgg_get_metastring_sql('n_table', $options['metastring_names'], $options['metastring_values'], null, $options['metastring_ids'], - $options['metastring_case_sensitive'], $options['denormalize']); + $options['metastring_case_sensitive']); if ($metastring_clauses) { $wheres = array_merge($wheres, $metastring_clauses['wheres']); @@ -407,12 +405,7 @@ function elgg_get_metastring_based_objects($options) { $options['metastring_calculation'] = 'count'; } - if ($options['metastring_calculation']) { -// $joins[] = "JOIN {$db_prefix}metastrings v on n_table.value_id = v.id"; - - $function = sanitise_string($options['metastring_calculation']); - $query = "SELECT {$function}(v.string) as calculation FROM {$db_prefix}$type n_table"; - } else { + if ($options['metastring_calculation'] === ELGG_ENTITIES_NO_VALUE) { // evalutate selects if ($options['selects']) { $selects = ''; @@ -425,8 +418,8 @@ function elgg_get_metastring_based_objects($options) { $query = "SELECT DISTINCT n_table.*, n.string as name, v.string as value{$selects} FROM {$db_prefix}$type n_table"; - -// $query = "SELECT DISTINCT n_table.*{$selects} FROM {$db_prefix}$type n_table"; + } else { + $query = "SELECT {$options['metastring_calculation']}(v.string) as calculation FROM {$db_prefix}$type n_table"; } // add joins @@ -486,13 +479,11 @@ function elgg_get_metastring_based_objects($options) { * @param array $pairs Name / value pairs. Not currently used. * @param array $ids Metastring IDs * @param bool $case_sensitive Should name and values be case sensitive? - * @param mixed $denormalize Denormalize none (false, default), all, name, value. If operators - * are anything but = or IN you cannot denormalize value. * * @return array */ function elgg_get_metastring_sql($table, $names = null, $values = null, - $pairs = null, $ids = null, $case_sensitive = false, $denormalize = false) { + $pairs = null, $ids = null, $case_sensitive = false) { if ((!$names && $names !== 0) && (!$values && $values !== 0) @@ -515,7 +506,7 @@ function elgg_get_metastring_sql($table, $names = null, $values = null, $access = get_access_sql_suffix($table); $return = array ( - 'joins' => array(), + 'joins' => array (), 'wheres' => array() ); @@ -524,50 +515,28 @@ function elgg_get_metastring_sql($table, $names = null, $values = null, // get names wheres and joins $names_where = ''; if ($names !== NULL) { - // @todo only really needed for metadata (vs annotations) -// $return['joins'][] = "JOIN {$db_prefix}metastrings n on n_table.name_id = n.id"; - if (!is_array($names)) { $names = array($names); } - - if ($denormalize == 'all' || $denormalize == 'name') { - $name_ids = array(); - foreach ($names as $name) { - if (!$name) { - $name = '0'; - } - - $name_ids[] = get_metastring_id($name, $case_sensitive); - } - $names_str = implode(',', $name_ids); - if ($names_str) { - $names_where = "(n_table.name_id IN ($names_str))"; - } - } else { - $sanitised_names = array(); - foreach ($names as $name) { - // normalise to 0. - if (!$name) { - $name = '0'; - } - $sanitised_names[] = '\'' . sanitise_string($name) . '\''; + $sanitised_names = array(); + foreach ($names as $name) { + // normalise to 0. + if (!$name) { + $name = '0'; } + $sanitised_names[] = '\'' . sanitise_string($name) . '\''; + } - $names_str = implode(',', $sanitised_names); - if ($names_str) { - $return['joins'][] = "JOIN {$db_prefix}metastrings msn on $table.name_id = msn.id"; - $names_where = "(msn.string IN ($names_str))"; - } + if ($names_str = implode(',', $sanitised_names)) { + $return['joins'][] = "JOIN {$db_prefix}metastrings msn on $table.name_id = msn.id"; + $names_where = "(msn.string IN ($names_str))"; } } // get values wheres and joins $values_where = ''; if ($values !== NULL) { -// $return['joins'][] = "JOIN {$db_prefix}metastrings v on n_table.value_id = v.id"; - if (!is_array($values)) { $values = array($values); } diff --git a/engine/tests/suite.php b/engine/tests/suite.php index 1f7886d38..8f2eb41a3 100644 --- a/engine/tests/suite.php +++ b/engine/tests/suite.php @@ -34,9 +34,9 @@ foreach ($test_files as $file) { } // Only run tests in debug mode. -//if (!isset($CONFIG->debug)) { -// exit ('The site must be in debug mode to run unit tests.'); -//} +if (!isset($CONFIG->debug)) { + exit ('The site must be in debug mode to run unit tests.'); +} if (TextReporter::inCli()) { // In CLI error codes are returned: 0 is success -- cgit v1.2.3