diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/query/Sql.php b/core/modules/views/lib/Drupal/views/Plugin/views/query/Sql.php index 424ac86d5e81..662282d8d809 100644 --- a/core/modules/views/lib/Drupal/views/Plugin/views/query/Sql.php +++ b/core/modules/views/lib/Drupal/views/Plugin/views/query/Sql.php @@ -1374,6 +1374,13 @@ class Sql extends QueryPluginBase { $query->addTag($access_tag); $count_query->addTag($access_tag); } + + 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); + } + } } if ($query) { diff --git a/core/modules/views/lib/Drupal/views/Tests/Plugin/SqlQueryTest.php b/core/modules/views/lib/Drupal/views/Tests/Plugin/SqlQueryTest.php new file mode 100644 index 000000000000..328473345f00 --- /dev/null +++ b/core/modules/views/lib/Drupal/views/Tests/Plugin/SqlQueryTest.php @@ -0,0 +1,97 @@ + '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 adding some metadata/tags to the views query. + */ + public function testExecuteMetadata() { + $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->assertIdentical($query->getMetaData('key1'), 'test_metadata'); + $this->assertIdentical($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); + } + } + +}