| 1437 | } |
| 1438 | |
| 1439 | void QueryOracle::generateImportQuery( |
| 1440 | RandomGenerator & rg, StatementGenerator & gen, const SQLTable & t, const SQLQuery & sq2, SQLQuery & sq4) const |
| 1441 | { |
| 1442 | Insert * nins = sq4.mutable_single_query()->mutable_explain()->mutable_inner_query()->mutable_insert(); |
| 1443 | InsertFromFile * iff = nins->mutable_insert_file(); |
| 1444 | const Insert & oins = sq2.single_query().explain().inner_query().insert(); |
| 1445 | const FileFunc & ff = oins.tof().tfunc().file(); |
| 1446 | const InFormat & inf = !outIn.contains(ff.outformat()) || (!can_test_oracle_result && rg.nextSmallNumber() < 4) |
| 1447 | ? rg.pickValueRandomlyFromMap(outIn) |
| 1448 | : outIn.at(ff.outformat()); |
| 1449 | |
| 1450 | insertOnTableOrCluster(rg, gen, t, false, nins->mutable_tof()); |
| 1451 | gen.flatTableColumnPath(skip_nested_node | flat_nested, t.cols, [](const SQLColumn & c) { return c.canBeInserted(); }); |
| 1452 | for (const auto & entry : gen.entries) |
| 1453 | { |
| 1454 | gen.columnPathRef(entry, nins->add_cols()); |
| 1455 | } |
| 1456 | gen.entries.clear(); |
| 1457 | const std::string & base_filename = ff.path().substr(ff.path().find_last_of(std::filesystem::path::preferred_separator) + 1); |
| 1458 | const std::filesystem::path & ifile = fc.client_file_path / base_filename; |
| 1459 | iff->set_path(ifile.generic_string()); |
| 1460 | iff->set_format(inf); |
| 1461 | if (ff.has_fcomp()) |
| 1462 | { |
| 1463 | iff->set_fcomp(ff.fcomp()); |
| 1464 | } |
| 1465 | |
| 1466 | if (!can_test_oracle_result && rg.nextSmallNumber() < 10) |
| 1467 | { |
| 1468 | /// If can't test success, swap settings sometimes |
| 1469 | gen.generateSettingValues(rg, formatSettings, nins->mutable_setting_values()); |
| 1470 | } |
| 1471 | else if (oins.has_setting_values()) |
| 1472 | { |
| 1473 | SettingValues * svs = nins->mutable_setting_values(); |
| 1474 | |
| 1475 | svs->CopyFrom(oins.setting_values()); |
| 1476 | } |
| 1477 | if (can_test_oracle_result && inf == InFormat::IN_CSV) |
| 1478 | { |
| 1479 | SettingValues * svs = nins->mutable_setting_values(); |
| 1480 | SetValue * sv = svs->has_set_value() ? svs->add_other_values() : svs->mutable_set_value(); |
| 1481 | |
| 1482 | /// The oracle expects to read all the lines from the file |
| 1483 | sv->set_property("input_format_csv_detect_header"); |
| 1484 | sv->set_value("0"); |
| 1485 | } |
| 1486 | if (can_test_oracle_result) |
| 1487 | { |
| 1488 | /// Ensure deleted mask and patch parts are applied |
| 1489 | finishSettings(nins->mutable_setting_values()); |
| 1490 | } |
| 1491 | } |
| 1492 | |
| 1493 | /// Run query with different settings oracle |
| 1494 | bool QueryOracle::generateFirstSetting(RandomGenerator & rg, SQLQuery & sq1) |
nothing calls this directly
no test coverage detected