@@ -100,6 +100,24 @@ static void add_wasm_operator_args()
100100 }
101101 }
102102 );
103+ C.arg_parser ().add <std::vector<std::string_view>>(
104+ /* group= */ " Wasm" ,
105+ /* short= */ nullptr ,
106+ /* long= */ " --index-implementations" ,
107+ /* description= */ " a comma separated list of index implementations to consider for index scans (`Array`, or"
108+ " `Rmi`)" ,
109+ /* callback= */ [](std::vector<std::string_view> impls){
110+ options::index_implementations = option_configs::IndexImplementation (0UL );
111+ for (const auto &elem : impls) {
112+ if (strneq (elem.data (), " Array" , elem.size ()))
113+ options::index_implementations |= option_configs::IndexImplementation::ARRAY;
114+ else if (strneq (elem.data (), " Rmi" , elem.size ()))
115+ options::index_implementations |= option_configs::IndexImplementation::RMI;
116+ else
117+ std::cerr << " warning: ignore invalid index implementation " << elem << std::endl;
118+ }
119+ }
120+ );
103121 C.arg_parser ().add <const char *>(
104122 /* group= */ " Wasm" ,
105123 /* short= */ nullptr ,
@@ -534,8 +552,10 @@ void m::register_wasm_operators(PhysicalOptimizer &phys_opt)
534552 phys_opt.register_operator <Scan<true >>();
535553 }
536554 if (bool (options::scan_implementations bitand option_configs::ScanImplementation::INDEX_SCAN)) {
537- phys_opt.register_operator <IndexScan<idx::IndexMethod::Array>>();
538- phys_opt.register_operator <IndexScan<idx::IndexMethod::Rmi>>();
555+ if (bool (options::index_implementations bitand option_configs::IndexImplementation::ARRAY))
556+ phys_opt.register_operator <IndexScan<idx::IndexMethod::Array>>();
557+ if (bool (options::index_implementations bitand option_configs::IndexImplementation::RMI))
558+ phys_opt.register_operator <IndexScan<idx::IndexMethod::Rmi>>();
539559 }
540560 if (bool (options::filter_selection_strategy bitand option_configs::SelectionStrategy::BRANCHING))
541561 phys_opt.register_operator <Filter<false >>();
0 commit comments