1616#include < Parsers/ASTFunctionWithKeyValueArguments.h>
1717#include < Parsers/ASTDictionaryAttributeDeclaration.h>
1818#include < Dictionaries/DictionaryFactory.h>
19+ #include < Dictionaries/DictionarySourceFactory.h>
1920#include < Functions/FunctionFactory.h>
2021#include < Common/isLocalAddress.h>
2122#include < Interpreters/Context.h>
@@ -518,8 +519,11 @@ void buildSourceConfiguration(
518519 AutoPtr<Element> root,
519520 const ASTFunctionWithKeyValueArguments * source,
520521 const ASTDictionarySettings * settings,
522+ const String & dictionary_name,
521523 ContextPtr context)
522524{
525+ DictionarySourceFactory::instance ().checkSourceAvailable (source->name , dictionary_name, context);
526+
523527 AutoPtr<Element> outer_element (doc->createElement (" source" ));
524528 root->appendChild (outer_element);
525529 AutoPtr<Element> source_element (doc->createElement (source->name ));
@@ -591,6 +595,10 @@ getDictionaryConfigurationFromAST(const ASTCreateQuery & query, ContextPtr conte
591595 checkAST (query);
592596 checkLifetime (query);
593597
598+ String dictionary_name = query.getTable ();
599+ String db_name = !database_.empty () ? database_ : query.getDatabase ();
600+ String full_dictionary_name = (!db_name.empty () ? (db_name + " ." ) : " " ) + dictionary_name;
601+
594602 AutoPtr<Poco::XML::Document> xml_document (new Poco::XML::Document ());
595603 AutoPtr<Poco::XML::Element> document_root (xml_document->createElement (" dictionaries" ));
596604 xml_document->appendChild (document_root);
@@ -600,12 +608,12 @@ getDictionaryConfigurationFromAST(const ASTCreateQuery & query, ContextPtr conte
600608
601609 AutoPtr<Poco::XML::Element> name_element (xml_document->createElement (" name" ));
602610 current_dictionary->appendChild (name_element);
603- AutoPtr<Text> name (xml_document->createTextNode (query. getTable () ));
611+ AutoPtr<Text> name (xml_document->createTextNode (dictionary_name ));
604612 name_element->appendChild (name);
605613
606614 AutoPtr<Poco::XML::Element> database_element (xml_document->createElement (" database" ));
607615 current_dictionary->appendChild (database_element);
608- AutoPtr<Text> database (xml_document->createTextNode (!database_. empty () ? database_ : query. getDatabase () ));
616+ AutoPtr<Text> database (xml_document->createTextNode (db_name ));
609617 database_element->appendChild (database);
610618
611619 if (query.uuid != UUIDHelpers::Nil)
@@ -641,7 +649,7 @@ getDictionaryConfigurationFromAST(const ASTCreateQuery & query, ContextPtr conte
641649 buildPrimaryKeyConfiguration (xml_document, structure_element, complex , pk_attrs, query.dictionary_attributes_list );
642650
643651 buildLayoutConfiguration (xml_document, current_dictionary, query.dictionary ->dict_settings , dictionary_layout);
644- buildSourceConfiguration (xml_document, current_dictionary, query.dictionary ->source , query.dictionary ->dict_settings , context);
652+ buildSourceConfiguration (xml_document, current_dictionary, query.dictionary ->source , query.dictionary ->dict_settings , full_dictionary_name, context);
645653 buildLifetimeConfiguration (xml_document, current_dictionary, query.dictionary ->lifetime );
646654
647655 if (query.dictionary ->range )
0 commit comments