-- | A helper function in raggMin that implements the basic fold for Min aggregation        
minFold :: ColumnName -> ColumnName -> RTable -> RDataType
minFold src trg rtab =         
    V.foldr' ( \rtup accValue ->         
                                --if (getRTupColValue src) rtup /= Null && accValue /= Null
                                if (isNotNull $ (getRTupColValue src) rtup)  && (isNotNull accValue)
                                    then
                                        min ((getRTupColValue src) rtup) accValue
                                    else
                                        --if (getRTupColValue src) rtup == Null && accValue /= Null 
                                        if (isNull $ (getRTupColValue src) rtup) && (isNotNull accValue)  
                                            then
                                                accValue  -- ignore Null value
                                            else
                                                --if (getRTupColValue src) rtup /= Null && accValue == Null 
                                                if (isNotNull $ (getRTupColValue src) rtup) && (isNull accValue)
                                                    then
                                                        (getRTupColValue src) rtup  -- ignore so far Null agg result
                                                    else
                                                        Null -- agg of Nulls is Null
             ) Null rtab
minFold :: ColumnName -> ColumnName -> RTable -> RDataType
minFold src trg rtab =         
    V.foldr' ( \rtup accValue ->         
                                --if (getRTupColValue src) rtup /= Null && accValue /= Null
                                if (isNotNull $ (getRTupColValue src) rtup)  && (isNotNull accValue)
                                    then
                                        min ((getRTupColValue src) rtup) accValue
                                    else
                                        --if (getRTupColValue src) rtup == Null && accValue /= Null 
                                        if (isNull $ (getRTupColValue src) rtup) && (isNotNull accValue)  
                                            then
                                                accValue  -- ignore Null value
                                            else
                                                --if (getRTupColValue src) rtup /= Null && accValue == Null 
                                                if (isNotNull $ (getRTupColValue src) rtup) && (isNull accValue)
                                                    then
                                                        (getRTupColValue src) rtup  -- ignore so far Null agg result
                                                    else
                                                        Null -- agg of Nulls is Null
             ) Null rtab
minFold src trg rtab =         
    V.foldr' ( \rtup accValue ->         
                                --if (getRTupColValue src) rtup /= Null && accValue /= Null
                                if (isNotNull $ (getRTupColValue src) rtup)  && (isNotNull accValue)
                                    then
                                        min ((getRTupColValue src) rtup) accValue
                                    else
                                        --if (getRTupColValue src) rtup == Null && accValue /= Null 
                                        if (isNull $ (getRTupColValue src) rtup) && (isNotNull accValue)  
                                            then
                                                accValue  -- ignore Null value
                                            else
                                                --if (getRTupColValue src) rtup /= Null && accValue == Null 
                                                if (isNotNull $ (getRTupColValue src) rtup) && (isNull accValue)
                                                    then
                                                        (getRTupColValue src) rtup  -- ignore so far Null agg result
                                                    else
                                                        Null -- agg of Nulls is Null
             ) Null rtab