MCPcopy Create free account
hub / github.com/ByConity/ByConity / explainMetaData

Method explainMetaData

src/Interpreters/InterpreterExplainQuery.cpp:792–950  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

790}
791
792BlockInputStreamPtr InterpreterExplainQuery::explainMetaData()
793{
794 const auto & explain = query->as<ASTExplainQuery &>();
795 auto context = Context::createCopy(getContext());
796 auto query_ptr = explain.getExplainedQuery();
797 auto contxt = getContext();
798 auto metadata_settings = checkAndGetSettings<QueryMetadataSettings>(explain.getSettings());
799 AnalysisPtr analysis;
800 QueryPlanPtr query_plan;
801
802 if (metadata_settings.lineage || metadata_settings.lineage_use_optimizer)
803 {
804 try
805 {
806 InterpreterSelectQueryUseOptimizer interpreter(query_ptr, contxt, SelectQueryOptions());
807 interpreter.buildQueryPlan(query_plan, analysis, !metadata_settings.lineage_use_optimizer);
808 query_ptr = interpreter.getQuery();
809 }
810 catch (...)
811 {
812 tryLogWarningCurrentException(&Poco::Logger::get("InterpreterExplainQuery::explainMetaData"), "build plan failed.");
813 }
814 }
815
816 if (!analysis)
817 {
818 query_ptr = QueryRewriter().rewrite(query_ptr, contxt);
819 analysis = QueryAnalyzer::analyze(query_ptr, contxt);
820 }
821
822 if (metadata_settings.format_json)
823 {
824 String res = PlanPrinter::jsonMetaData(query_ptr, analysis, contxt, query_plan, metadata_settings);
825 Block sample_block = getSampleBlock();
826 MutableColumns res_columns = sample_block.cloneEmptyColumns();
827 fillColumn(*res_columns[0], res);
828 return std::make_shared<OneBlockInputStream>(sample_block.cloneWithColumns(std::move(res_columns)));
829 }
830
831
832 // get used tables, databases, columns_list
833 auto column_tables = ColumnArray::create(ColumnString::create());
834 auto column_databases = ColumnArray::create(ColumnString::create());
835 auto column_columns_list = ColumnArray::create(ColumnString::create());
836
837 auto column_lists_off = ColumnUInt64::create();
838 auto & columns_list_offset_data = column_lists_off->getData();
839
840 Array tables_array;
841 Array databases_array;
842 size_t array_off_size = 0;
843
844 const auto & used_columns_map = analysis->getUsedColumns();
845 for (const auto & [table_ast, storage_analysis] : analysis->getStorages())
846 {
847 Array columns_array;
848 tables_array.push_back(storage_analysis.table);
849 databases_array.push_back(storage_analysis.database);

Callers

nothing calls this directly

Calls 15

QueryRewriterClass · 0.85
cloneWithColumnsMethod · 0.80
getStoragesMethod · 0.80
SelectQueryOptionsClass · 0.70
getFunction · 0.50
createFunction · 0.50
getSettingsMethod · 0.45
buildQueryPlanMethod · 0.45
getQueryMethod · 0.45
rewriteMethod · 0.45
cloneEmptyColumnsMethod · 0.45

Tested by

no test coverage detected