MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / invertBoolValue

Function invertBoolValue

src/jrd/optimizer/Retrieval.cpp:58–82  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

56namespace
57{
58 ValueExprNode* invertBoolValue(CompilerScratch* csb, ValueExprNode* value)
59 {
60 // Having a condition (<field> != <boolean value>),
61 // invert it by making (<field> == (<boolean value> == FALSE)),
62 // so that an index lookup could be possible
63
64 static const UCHAR falseValue = '\0';
65 LiteralNode* const falseLiteral =
66 FB_NEW_POOL(csb->csb_pool) LiteralNode(csb->csb_pool);
67 falseLiteral->litDesc.makeBoolean(const_cast<UCHAR*>(&falseValue));
68
69 ComparativeBoolNode* const cmpNode =
70 FB_NEW_POOL(csb->csb_pool) ComparativeBoolNode(csb->csb_pool, blr_eql);
71 cmpNode->arg1 = value;
72 cmpNode->arg2 = falseLiteral;
73
74 // Recreate the boolean expression as a value
75 BoolAsValueNode* const newValue =
76 FB_NEW_POOL(csb->csb_pool) BoolAsValueNode(csb->csb_pool);
77 newValue->boolean = cmpNode;
78
79 newValue->impureOffset = csb->allocImpure<impure_value>();
80
81 return newValue;
82 }
83
84 bool matchSubset(const BoolExprNode* boolean, const BoolExprNode* sub)
85 {

Callers 1

matchBooleanMethod · 0.85

Calls 4

BoolAsValueNodeClass · 0.85
makeBooleanMethod · 0.80
ComparativeBoolNodeClass · 0.70
LiteralNodeClass · 0.50

Tested by

no test coverage detected