View oracle: dump all columns with explicit ORDER BY
| 1391 | |
| 1392 | /// View oracle: dump all columns with explicit ORDER BY |
| 1393 | void QueryOracle::dumpViewContent(RandomGenerator & rg, const SQLView & v, SQLQuery & sq1, SQLQuery & sq2) |
| 1394 | { |
| 1395 | TopSelect * ts = sq1.mutable_single_query()->mutable_explain()->mutable_inner_query()->mutable_select(); |
| 1396 | SelectIntoFile * sif = ts->mutable_intofile(); |
| 1397 | Select * sel = ts->mutable_sel(); |
| 1398 | SelectStatementCore * ssc = sel->mutable_select_core(); |
| 1399 | JoinedTableOrFunction * jtf = ssc->mutable_from()->mutable_tos()->mutable_join_clause()->mutable_tos()->mutable_joined_table(); |
| 1400 | |
| 1401 | v.setName(jtf->mutable_tof()->mutable_est(), false); |
| 1402 | jtf->set_final(v.supportsFinal()); |
| 1403 | |
| 1404 | bool first = true; |
| 1405 | uint32_t col_idx = 0; |
| 1406 | OrderByList * obs = ssc->mutable_orderby()->mutable_olist(); |
| 1407 | |
| 1408 | for (const auto & col : v.cols) |
| 1409 | { |
| 1410 | ExprOrderingTerm * eot = first ? obs->mutable_ord_term() : obs->add_extra_ord_terms(); |
| 1411 | const String alias = "a" + std::to_string(col_idx++); |
| 1412 | |
| 1413 | ExprColAlias * eca = ssc->add_result_columns()->mutable_eca(); |
| 1414 | eca->mutable_expr()->mutable_comp_expr()->mutable_expr_stc()->mutable_col()->mutable_path()->mutable_col()->set_column(col); |
| 1415 | eca->mutable_col_alias()->set_column(alias); |
| 1416 | eot->mutable_expr()->mutable_comp_expr()->mutable_expr_stc()->mutable_col()->mutable_path()->mutable_col()->set_column(alias); |
| 1417 | if (rg.nextBool()) |
| 1418 | { |
| 1419 | eot->set_asc_desc(rg.nextBool() ? AscDesc::ASC : AscDesc::DESC); |
| 1420 | } |
| 1421 | if (rg.nextBool()) |
| 1422 | { |
| 1423 | eot->set_nulls_order( |
| 1424 | rg.nextBool() ? ExprOrderingTerm_NullsOrder::ExprOrderingTerm_NullsOrder_FIRST |
| 1425 | : ExprOrderingTerm_NullsOrder::ExprOrderingTerm_NullsOrder_LAST); |
| 1426 | } |
| 1427 | first = false; |
| 1428 | } |
| 1429 | |
| 1430 | finishSettings(sel->mutable_setting_values()); |
| 1431 | ts->set_format(rg.pickRandomly(rg.pickRandomly(QueryOracle::oracleFormats))); |
| 1432 | const auto err = std::filesystem::remove(qcfile); |
| 1433 | UNUSED(err); |
| 1434 | sif->set_path(qcfile.generic_string()); |
| 1435 | sif->set_step(SelectIntoFile_SelectIntoFileStep::SelectIntoFile_SelectIntoFileStep_TRUNCATE); |
| 1436 | sq2.CopyFrom(sq1); |
| 1437 | } |
| 1438 | |
| 1439 | void QueryOracle::generateImportQuery( |
| 1440 | RandomGenerator & rg, StatementGenerator & gen, const SQLTable & t, const SQLQuery & sq2, SQLQuery & sq4) const |
no test coverage detected