MCPcopy Create free account
hub / github.com/ClickHouse/ClickHouse / generateExportQuery

Method generateExportQuery

src/Client/BuzzHouse/Generator/QueryOracle.cpp:982–1061  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

980}
981
982void QueryOracle::generateExportQuery(
983 RandomGenerator & rg, StatementGenerator & gen, const bool test_content, const SQLTable & t, SQLQuery & sq2)
984{
985 SettingValues * svs = nullptr;
986 Insert * ins = sq2.mutable_single_query()->mutable_explain()->mutable_inner_query()->mutable_insert();
987 FileFunc * ff = ins->mutable_tof()->mutable_tfunc()->mutable_file();
988 Expr * expr = ff->mutable_structure();
989 SelectParen * sparen = ins->mutable_select();
990 SelectStatementCore * sel = sparen->mutable_select()->mutable_select_core();
991 const std::filesystem::path & cnfile = fc.client_file_path / "table.data";
992 const std::filesystem::path & snfile = fc.server_file_path / "table.data";
993
994 can_test_oracle_result &= test_content;
995 /// Remove the file if exists
996 const auto err = std::filesystem::remove(cnfile);
997 UNUSED(err);
998 ff->set_path(snfile.generic_string());
999 ff->set_fname(FileFunc_FName::FileFunc_FName_file);
1000
1001 gen.flatTableColumnPath(skip_nested_node | flat_nested, t.cols, [](const SQLColumn & c) { return c.canBeInserted(); });
1002 if (!can_test_oracle_result && rg.nextSmallNumber() < 3)
1003 {
1004 /// Sometimes generate a not matching structure
1005 gen.addRandomRelation(rg, std::nullopt, static_cast<uint32_t>(gen.entries.size()), expr);
1006 }
1007 else
1008 {
1009 String buf;
1010 bool first = true;
1011
1012 for (const auto & entry : gen.entries)
1013 {
1014 buf += fmt::format(
1015 "{}{} {}{}{}{}",
1016 first ? "" : ", ",
1017 entry.columnPathRef(),
1018 entry.path.size() > 1 ? "Array(" : "",
1019 entry.getBottomType()->typeName(false, false),
1020 entry.path.size() > 1 ? ")" : "",
1021 (entry.path.size() == 1 && entry.nullable.has_value()) ? (entry.nullable.value() ? " NULL" : " NOT NULL") : "");
1022 first = false;
1023 }
1024 expr->mutable_lit_val()->set_string_lit(std::move(buf));
1025 }
1026 for (const auto & entry : gen.entries)
1027 {
1028 gen.columnPathRef(entry, sel->add_result_columns()->mutable_etc()->mutable_col()->mutable_path());
1029 }
1030 gen.entries.clear();
1031 ff->set_outformat(rg.pickRandomly(rg.pickRandomly(can_test_oracle_result ? QueryOracle::oracleFormats : outFormats)));
1032 if (rg.nextSmallNumber() < 4)
1033 {
1034 ff->set_fcomp(rg.pickRandomly(compressionMethods));
1035 }
1036 if (rg.nextSmallNumber() < 10)
1037 {
1038 const auto & settings = can_test_oracle_result ? serverSettings : formatSettings;
1039

Callers

nothing calls this directly

Calls 15

finishSettingsFunction · 0.85
flatTableColumnPathMethod · 0.80
canBeInsertedMethod · 0.80
nextSmallNumberMethod · 0.80
addRandomRelationMethod · 0.80
typeNameMethod · 0.80
getBottomTypeMethod · 0.80
generateSettingValuesMethod · 0.80
set_valueMethod · 0.80
removeFunction · 0.50
formatFunction · 0.50
sizeMethod · 0.45

Tested by

no test coverage detected