Skip to content

Commit a2b1bd4

Browse files
marcelmaltrylucagretscher
authored andcommitted
[Wasm] Add CLI argument to choose indexes for IndexScan
1 parent 80cbdbd commit a2b1bd4

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

src/backend/WasmOperator.cpp

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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>>();

src/backend/WasmOperator.hpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ enum class JoinImplementation : uint64_t {
4444
SORT_MERGE = 0b100,
4545
};
4646

47+
enum class IndexImplementation : uint64_t {
48+
ALL = 0b11,
49+
ARRAY = 0b01,
50+
RMI = 0b10,
51+
};
52+
4753
enum class SoftPipelineBreakerStrategy : uint64_t {
4854
AFTER_ALL = 0b1111111,
4955
AFTER_SCAN = 0b0000001,
@@ -120,6 +126,9 @@ inline option_configs::SortingImplementation sorting_implementations = option_co
120126
/** Which implementations should be considered for a `JoinOperator`. */
121127
inline option_configs::JoinImplementation join_implementations = option_configs::JoinImplementation::ALL;
122128

129+
/** Which index implementations should be considered for an `IndexScan`. */
130+
inline option_configs::IndexImplementation index_implementations = option_configs::IndexImplementation::ALL;
131+
123132
/** Which index scan strategy should be used for `wasm::IndexScan`. */
124133
inline option_configs::IndexScanStrategy index_scan_strategy = option_configs::IndexScanStrategy::INTERPRETATION;
125134

0 commit comments

Comments
 (0)