docs: private Boolean compareValues(Session session, Object left, Object right) {
          if (left == null) {
              if (opType == OpTypes.NOT_DISTINCT) {
                  return right == null;
              }
              return null;
          }
  
          if (right == null) {
              return (opType == OpTypes.NOT_DISTINCT) ? Boolean.FALSE : null;
          }
  
          int result = nodes[LEFT].dataType.compare(left, right);
  
          switch (opType) {
  
              case OpTypes.EQUAL :
              case OpTypes.NOT_DISTINCT :
                  return result == 0 ? Boolean.TRUE
                                     : Boolean.FALSE;
  
              case OpTypes.NOT_EQUAL :
                  return result != 0 ? Boolean.TRUE
                                     : Boolean.FALSE;
  
              case OpTypes.GREATER :
                  return result > 0 ? Boolean.TRUE
                                    : Boolean.FALSE;
  
              case OpTypes.GREATER_EQUAL :
                  return result >= 0 ? Boolean.TRUE
                                     : Boolean.FALSE;
  
              case OpTypes.SMALLER_EQUAL :
                  return result <= 0 ? Boolean.TRUE
                                     : Boolean.FALSE;
  
              case OpTypes.SMALLER :
                  return result < 0 ? Boolean.TRUE
                                    : Boolean.FALSE;
  
              default :
                  throw Error.runtimeError(ErrorCode.U_S0500, "Expression");
          }
      }