Skip to content

Commit a59a8cb

Browse files
committed
Revert back to use BoolMask instead of bool in MergeTreeIndexConditionGin::mayBeTrueOnGranuleInPart
1 parent c9a13bd commit a59a8cb

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

src/Storages/MergeTree/MergeTreeIndexGin.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -249,18 +249,18 @@ bool MergeTreeIndexConditionGin::mayBeTrueOnGranuleInPart(MergeTreeIndexGranuleP
249249
throw Exception(ErrorCodes::LOGICAL_ERROR, "GinFilter index condition got a granule with the wrong type.");
250250

251251
/// Check like in KeyCondition.
252-
std::vector<bool> rpn_stack;
252+
std::vector<BoolMask> rpn_stack;
253253
for (const auto & element : rpn)
254254
{
255255
if (element.function == RPNElement::FUNCTION_UNKNOWN)
256256
{
257-
rpn_stack.emplace_back(true);
257+
rpn_stack.emplace_back(true, true);
258258
}
259259
else if (element.function == RPNElement::FUNCTION_EQUALS
260260
|| element.function == RPNElement::FUNCTION_NOT_EQUALS
261261
|| element.function == RPNElement::FUNCTION_HAS)
262262
{
263-
rpn_stack.emplace_back(granule->gin_filters[element.key_column].contains(*element.gin_filter, cache_store));
263+
rpn_stack.emplace_back(granule->gin_filters[element.key_column].contains(*element.gin_filter, cache_store), true);
264264

265265
if (element.function == RPNElement::FUNCTION_NOT_EQUALS)
266266
rpn_stack.back() = !rpn_stack.back();
@@ -279,7 +279,7 @@ bool MergeTreeIndexConditionGin::mayBeTrueOnGranuleInPart(MergeTreeIndexGranuleP
279279
result[row] = result[row] && granule->gin_filters[key_idx].contains(gin_filters[row], cache_store);
280280
}
281281

282-
rpn_stack.emplace_back(std::find(std::cbegin(result), std::cend(result), true) != std::end(result));
282+
rpn_stack.emplace_back(std::find(std::cbegin(result), std::cend(result), true) != std::end(result), true);
283283
if (element.function == RPNElement::FUNCTION_NOT_IN)
284284
rpn_stack.back() = !rpn_stack.back();
285285
}
@@ -292,7 +292,7 @@ bool MergeTreeIndexConditionGin::mayBeTrueOnGranuleInPart(MergeTreeIndexGranuleP
292292
for (size_t row = 0; row < gin_filters.size(); ++row)
293293
result[row] = granule->gin_filters[element.key_column].contains(gin_filters[row], cache_store);
294294

295-
rpn_stack.emplace_back(std::find(std::cbegin(result), std::cend(result), true) != std::end(result));
295+
rpn_stack.emplace_back(std::find(std::cbegin(result), std::cend(result), true) != std::end(result), true);
296296
}
297297
else if (element.function == RPNElement::FUNCTION_MATCH)
298298
{
@@ -306,11 +306,11 @@ bool MergeTreeIndexConditionGin::mayBeTrueOnGranuleInPart(MergeTreeIndexGranuleP
306306
for (size_t row = 0; row < gin_filters.size(); ++row)
307307
result[row] = granule->gin_filters[element.key_column].contains(gin_filters[row], cache_store);
308308

309-
rpn_stack.emplace_back(std::find(std::cbegin(result), std::cend(result), true) != std::end(result));
309+
rpn_stack.emplace_back(std::find(std::cbegin(result), std::cend(result), true) != std::end(result), true);
310310
}
311311
else if (element.gin_filter)
312312
{
313-
rpn_stack.emplace_back(granule->gin_filters[element.key_column].contains(*element.gin_filter, cache_store));
313+
rpn_stack.emplace_back(granule->gin_filters[element.key_column].contains(*element.gin_filter, cache_store), true);
314314
}
315315

316316
}
@@ -323,22 +323,22 @@ bool MergeTreeIndexConditionGin::mayBeTrueOnGranuleInPart(MergeTreeIndexGranuleP
323323
auto arg1 = rpn_stack.back();
324324
rpn_stack.pop_back();
325325
auto arg2 = rpn_stack.back();
326-
rpn_stack.back() = arg1 && arg2;
326+
rpn_stack.back() = arg1 & arg2;
327327
}
328328
else if (element.function == RPNElement::FUNCTION_OR)
329329
{
330330
auto arg1 = rpn_stack.back();
331331
rpn_stack.pop_back();
332332
auto arg2 = rpn_stack.back();
333-
rpn_stack.back() = arg1 || arg2;
333+
rpn_stack.back() = arg1 | arg2;
334334
}
335335
else if (element.function == RPNElement::ALWAYS_FALSE)
336336
{
337-
rpn_stack.emplace_back(false);
337+
rpn_stack.emplace_back(false, true);
338338
}
339339
else if (element.function == RPNElement::ALWAYS_TRUE)
340340
{
341-
rpn_stack.emplace_back(true);
341+
rpn_stack.emplace_back(true, false);
342342
}
343343
else
344344
throw Exception(ErrorCodes::LOGICAL_ERROR, "Unexpected function type in GinFilterCondition::RPNElement");
@@ -347,7 +347,7 @@ bool MergeTreeIndexConditionGin::mayBeTrueOnGranuleInPart(MergeTreeIndexGranuleP
347347
if (rpn_stack.size() != 1)
348348
throw Exception(ErrorCodes::LOGICAL_ERROR, "Unexpected stack size in GinFilterCondition::mayBeTrueOnGranule");
349349

350-
return rpn_stack[0];
350+
return rpn_stack[0].can_be_true;
351351
}
352352

353353
bool MergeTreeIndexConditionGin::traverseAtomAST(const RPNBuilderTreeNode & node, RPNElement & out)

0 commit comments

Comments
 (0)