public static Boolean andBoolOperand(Boolean o, Boolean a) {
    // pick up unknown case and let and operator handle the rest
    if (o == null) {
      if ((a == null) || a) {
        return null;
      } else {
        return a;
      }
    } else if (a == null) {
      return o ? null : Boolean.FALSE;
    }

    return (o && a);
  }
And 2 Boolean operands in the context of pruning match

Operand one|Operand another | And result
unknown | T | unknown
unknown | F | F
unknown | unknown | unknown
T | T | T
T | F | F
T | unknown | unknown
F | T | F
F | F | F
F | unknown | F
@param o
         one operand
@param a
         another operand
@return result
ql/src/java/org/apache/hadoop/hive/ql/optimizer/listbucketingpruner/ListBucketingPrunerUtils.java