MCPcopy Create free account
hub / github.com/apache/cloudberry / ProcessOrClauseForPossibleValues

Function ProcessOrClauseForPossibleValues

src/backend/optimizer/util/predtest.c:2274–2309  ·  view source on GitHub ↗

* Process an OR clause -- this can do a UNION between sets learned from child clauses */

Source from the content-addressed store, hash-verified

2272 * Process an OR clause -- this can do a UNION between sets learned from child clauses
2273 */
2274static PossibleValueSet
2275ProcessOrClauseForPossibleValues( PredIterInfoData *clauseInfo, Node *clause, Node *variable, Oid opfamily)
2276{
2277 PossibleValueSet result;
2278 InitPossibleValueSetData(&result);
2279
2280 iterate_begin(child, clause, *clauseInfo)
2281 {
2282 PossibleValueSet childPossible = DeterminePossibleValueSet( child, variable, opfamily);
2283 if ( childPossible.isAnyValuePossible)
2284 {
2285 /* any value is possible for the entire AND */
2286 DeletePossibleValueSetData( &childPossible );
2287 DeletePossibleValueSetData( &result );
2288
2289 /* it can't improve once a part of the OR accepts all, so just quit */
2290 result.isAnyValuePossible = true;
2291 break;
2292 }
2293
2294 if ( result.isAnyValuePossible )
2295 {
2296 /* first one in loop so just take it */
2297 result = childPossible;
2298 }
2299 else
2300 {
2301 /* result.set OR childPossible.set --> do union into result */
2302 AddUnmatchingValues( &result, &childPossible );
2303 DeletePossibleValueSetData( &childPossible);
2304 }
2305 }
2306 iterate_end(*clauseInfo);
2307
2308 return result;
2309}
2310
2311
2312/**

Callers 1

Calls 4

InitPossibleValueSetDataFunction · 0.85
AddUnmatchingValuesFunction · 0.85

Tested by

no test coverage detected