Dump and read table oracle
| 844 | |
| 845 | /// Dump and read table oracle |
| 846 | void QueryOracle::dumpTableContent( |
| 847 | RandomGenerator & rg, |
| 848 | StatementGenerator & gen, |
| 849 | const DumpOracleStrategy strategy, |
| 850 | const bool test_content, |
| 851 | const SQLTable & t, |
| 852 | SQLQuery & sq1, |
| 853 | SQLQuery & sq2) |
| 854 | { |
| 855 | TopSelect * ts = sq1.mutable_single_query()->mutable_explain()->mutable_inner_query()->mutable_select(); |
| 856 | SelectIntoFile * sif = ts->mutable_intofile(); |
| 857 | Select * sel = ts->mutable_sel(); |
| 858 | SelectStatementCore * ssc = sel->mutable_select_core(); |
| 859 | JoinedTableOrFunction * jtf = ssc->mutable_from()->mutable_tos()->mutable_join_clause()->mutable_tos()->mutable_joined_table(); |
| 860 | |
| 861 | insertOnTableOrCluster(rg, gen, t, false, jtf->mutable_tof()); |
| 862 | jtf->set_final(t.supportsFinal()); |
| 863 | switch (strategy) |
| 864 | { |
| 865 | case DumpOracleStrategy::REINSERT_TABLE: |
| 866 | case DumpOracleStrategy::OPTIMIZE: |
| 867 | case DumpOracleStrategy::REATTACH: |
| 868 | case DumpOracleStrategy::BACKUP_RESTORE: |
| 869 | case DumpOracleStrategy::RENAME_BACK: |
| 870 | case DumpOracleStrategy::FREEZE_UNFREEZE: |
| 871 | case DumpOracleStrategy::MOVE_PARTITION: |
| 872 | case DumpOracleStrategy::REPLACE_PARTITION: |
| 873 | case DumpOracleStrategy::ALTER_COLUMN: |
| 874 | case DumpOracleStrategy::ALTER_TABLE: { |
| 875 | /// Dump entire table and compare contents |
| 876 | bool first = true; |
| 877 | uint32_t col_idx = 0; |
| 878 | OrderByList * obs = ssc->mutable_orderby()->mutable_olist(); |
| 879 | |
| 880 | gen.flatTableColumnPath(0, t.cols, [](const SQLColumn & c) { return c.canBeInserted(); }); |
| 881 | for (const auto & entry : gen.entries) |
| 882 | { |
| 883 | ExprOrderingTerm * eot = first ? obs->mutable_ord_term() : obs->add_extra_ord_terms(); |
| 884 | const String alias = "a" + std::to_string(col_idx++); |
| 885 | |
| 886 | ExprColAlias * eca = ssc->add_result_columns()->mutable_eca(); |
| 887 | gen.columnPathRef(entry, eca->mutable_expr()); |
| 888 | eca->mutable_col_alias()->set_column(alias); |
| 889 | eot->mutable_expr()->mutable_comp_expr()->mutable_expr_stc()->mutable_col()->mutable_path()->mutable_col()->set_column( |
| 890 | alias); |
| 891 | if (rg.nextBool()) |
| 892 | { |
| 893 | eot->set_asc_desc(rg.nextBool() ? AscDesc::ASC : AscDesc::DESC); |
| 894 | } |
| 895 | if (rg.nextBool()) |
| 896 | { |
| 897 | eot->set_nulls_order( |
| 898 | rg.nextBool() ? ExprOrderingTerm_NullsOrder::ExprOrderingTerm_NullsOrder_FIRST |
| 899 | : ExprOrderingTerm_NullsOrder::ExprOrderingTerm_NullsOrder_LAST); |
| 900 | } |
| 901 | first = false; |
| 902 | } |
| 903 | gen.entries.clear(); |
no test coverage detected