diff options
author | David Rothstein <drothstein@gmail.com> | 2014-11-04 23:27:01 -0500 |
---|---|---|
committer | David Rothstein <drothstein@gmail.com> | 2014-11-04 23:27:01 -0500 |
commit | ebf478b5af00163c15e92ffca779b26479785a84 (patch) | |
tree | affbb94bf9273ed853e8ec9bee2a420a0d2aab9c /modules/rdf | |
parent | af79dc0b60cd8e1af7f6515fc23a52d0d29924b3 (diff) | |
download | brdo-ebf478b5af00163c15e92ffca779b26479785a84.tar.gz brdo-ebf478b5af00163c15e92ffca779b26479785a84.tar.bz2 |
Issue #1338966 by geerlingguy, loganfsmyth, lokapujya: Fixed Introduce _rdf_mapping_load_multiple to reduce queries.
Diffstat (limited to 'modules/rdf')
-rw-r--r-- | modules/rdf/rdf.module | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/modules/rdf/rdf.module b/modules/rdf/rdf.module index 88665812f..90a738265 100644 --- a/modules/rdf/rdf.module +++ b/modules/rdf/rdf.module @@ -190,17 +190,33 @@ function _rdf_get_default_mapping($type) { * An RDF mapping structure or an empty array if no record was found. */ function _rdf_mapping_load($type, $bundle) { - $mapping = db_select('rdf_mapping') - ->fields(NULL, array('mapping')) + $mappings = _rdf_mapping_load_multiple($type, array($bundle)); + return $mappings ? reset($mappings) : array(); +} + +/** + * Helper function to retrieve a set of RDF mappings from the database. + * + * @param $type + * The entity type of the mappings. + * @param $bundles + * The bundles the mappings refer to. + * + * @return + * An array of RDF mapping structures, or an empty array. + */ +function _rdf_mapping_load_multiple($type, array $bundles) { + $mappings = db_select('rdf_mapping') + ->fields(NULL, array('bundle', 'mapping')) ->condition('type', $type) - ->condition('bundle', $bundle) + ->condition('bundle', $bundles) ->execute() - ->fetchField(); + ->fetchAllKeyed(); - if (!$mapping) { - return array(); + foreach ($mappings as $bundle => $mapping) { + $mappings[$bundle] = unserialize($mapping); } - return unserialize($mapping); + return $mappings; } /** @@ -368,10 +384,13 @@ function rdf_modules_uninstalled($modules) { function rdf_entity_info_alter(&$entity_info) { // Loop through each entity type and its bundles. foreach ($entity_info as $entity_type => $entity_type_info) { - if (isset($entity_type_info['bundles'])) { - foreach ($entity_type_info['bundles'] as $bundle => $bundle_info) { - if ($mapping = _rdf_mapping_load($entity_type, $bundle)) { - $entity_info[$entity_type]['bundles'][$bundle]['rdf_mapping'] = $mapping; + if (!empty($entity_type_info['bundles'])) { + $bundles = array_keys($entity_type_info['bundles']); + $mappings = _rdf_mapping_load_multiple($entity_type, $bundles); + + foreach ($bundles as $bundle) { + if (isset($mappings[$bundle])) { + $entity_info[$entity_type]['bundles'][$bundle]['rdf_mapping'] = $mappings[$bundle]; } else { // If no mapping was found in the database, assign the default RDF |