Exemplo n.º 1
0
// helper to change literals of a cacheable query into input parameters
void BiRelat::parameterizeMe(CacheWA& cwa, BindWA& bindWA, ExprValueId& child,
                             BaseColumn *base, ConstValue *val)
{
  NABoolean parameterizableMVQRplan = cwa.hasRewriteEnabledMV() && 
    CmpCommon::getDefault(MVQR_PARAMETERIZE_EQ_PRED) == DF_ON;
  NABoolean parameterizablePlan = parameterizableMVQRplan || 
    !cwa.hasRewriteEnabledMV();

  if (val->isNull()) {
    // val is null; keep null as is.
    // this is part of a fix to genesis case: 10-010618-3484.
  }
  else if (base->isKeyColumnValue(*val) // keyCol = constant
           && cwa.isParameterizable(base) && parameterizablePlan) {
    cwa.replaceWithNewOrOldConstParam(val, base->getNAColumn()->getType(),
                                      child, bindWA);
    if (parameterizableMVQRplan)
      cwa.setParameterizedPred(TRUE);
  }
  else if (!base->canSafelyCoerce(*val)) {
    // term is not parameterizable, keep it as is.
  }
  else { // nonKeyCol = constant
    if (parameterizablePlan) {
      computeAndAddSelParamIfPossible(cwa, bindWA, child, base, val);
      if (parameterizableMVQRplan)
        cwa.setParameterizedPred(TRUE);
    }
  }
}