diff -u b/core/modules/views/lib/Drupal/views/Plugin/views/query/Sql.php b/core/modules/views/lib/Drupal/views/Plugin/views/query/Sql.php --- b/core/modules/views/lib/Drupal/views/Plugin/views/query/Sql.php +++ b/core/modules/views/lib/Drupal/views/Plugin/views/query/Sql.php @@ -1378,9 +1378,10 @@ } if (isset($base_table_data['table']['base']['query metadata'])) { - foreach ($base_table_data['table']['base']['query metadata'] as $key => $value) - $query->addMetaData($key, $value); - $count_query->addMetaData($key, $value); + foreach ($base_table_data['table']['base']['query metadata'] as $key => $value) { + $query->addMetaData($key, $value); + $count_query->addMetaData($key, $value); + } } } only in patch2: unchanged: --- /dev/null +++ b/core/modules/views/lib/Drupal/views/Tests/Plugin/SqlQueryTest.php @@ -0,0 +1,104 @@ + 'Sql query', + 'description' => 'Tests the sql query plugin', + 'group' => 'Views Plugins' + ); + } + + /** + * {@inheritdoc} + */ + protected function viewsData() { + $data = parent::viewsData(); + $data['views_test_data']['table']['base']['access query tag'] = 'test_tag'; + $data['views_test_data']['table']['base']['query metadata'] = array('key1' => 'test_metadata', 'key2' => 'test_metadata2'); + + return $data; + } + + /** + * Tests the execute method. + */ + public function testExecute() { + $this->doTestExecuteMetadata(); + } + + /** + * Tests adding some metadata/tags to the views query. + */ + protected function doTestExecuteMetadata() { + $view = Views::getView('test_view'); + $view->setDisplay(); + + $view->initQuery(); + $view->execute(); + /** @var \Drupal\Core\Database\Query\Select $query */ + $main_query = $view->build_info['query']; + /** @var \Drupal\Core\Database\Query\Select $count_query */ + $count_query = $view->build_info['count_query']; + + foreach (array($main_query, $count_query) as $query) { + // Check query access tags. + $this->assertTrue($query->hasTag('test_tag')); + + // Check metadata. + $this->assertEqual($query->getMetaData('key1'), 'test_metadata'); + $this->assertEqual($query->getMetaData('key2'), 'test_metadata2'); + } + + $query_options = $view->display_handler->getOption('query'); + $query_options['options']['disable_sql_rewrite'] = TRUE; + $view->display_handler->setOption('query', $query_options); + $view->save(); + $view->destroy(); + + $view = Views::getView('test_view'); + $view->setDisplay(); + $view->initQuery(); + $view->execute(); + /** @var \Drupal\Core\Database\Query\Select $query */ + $main_query = $view->build_info['query']; + /** @var \Drupal\Core\Database\Query\Select $count_query */ + $count_query = $view->build_info['count_query']; + + foreach (array($main_query, $count_query) as $query) { + // Check query access tags. + $this->assertFalse($query->hasTag('test_tag')); + + // Check metadata. + $this->assertIdentical($query->getMetaData('key1'), NULL); + $this->assertIdentical($query->getMetaData('key2'), NULL); + } + } + +}