## TODO: Fix info in each of these functions

convertQry.fa_to_faerrors <- function(qry.fact, attributes.adjust=TRUE) {

  ret <- 
    gsub("download_activity_date", "downloaddate", 
      gsub("fact_analytics", "fact_analytics_error", 
        gsub("royaltydollar", "royaltyusd", 
          # gsub("storeuserid", "uuid", 
            qry.fact
    , ignore.case=TRUE)
    , ignore.case=TRUE)
    , ignore.case=TRUE)
    # , ignore.case=TRUE)

  ## Fix attributes
  if (isTRUE(attributes.adjust)) {
    attrs <- attributes(qry.fact)
    nms.attrs <- names(attrs)
    if ("dateCol" %in% nms.attrs)
      attr(ret, "dateCol") <- convertQry.fa_to_faerrors(attrs[["dateCol"]])
    if ("qryinfo" %in% nms.attrs) {
      if ("tbl" %in% names(attrs[["qryinfo"]]))
        attrs[["qryinfo"]][["tbl"]] <- convertQry.fa_to_faerrors(attrs[["qryinfo"]][["tbl"]])
      if ("colsToPull" %in% names(attrs[["qryinfo"]]))
        attrs[["qryinfo"]][["colsToPull"]] <- convertQry.fa_to_faerrors(attrs[["qryinfo"]][["colsToPull"]])
      attr(ret, "qryinfo") <- attrs[["qryinfo"]]
    }
  }

  return(ret)
}

combineAnalWithAErr <- function(DT.anal, DT.aErr, fromErr_col_add=TRUE, fill_rbind=TRUE) {
  info.anal <- getInfo(DT.anal, quiet=TRUE)
  info.aErr <- getInfo(DT.aErr, quiet=TRUE)

  DT.err <- copy(DT.aErr)
  if ("downloaddate" %in% names(DT.aErr))
    setnames(DT.aErr, "downloaddate", "download_activity_date")
  
  if (fromErr_col_add) {
    message("Note that 'fromErr' column is being added.\nIf the result will be merged downsteram, then duplicate rows of the merging DT might be created")
    DT.aErr[, fromErr := TRUE]
    ret <- rbind(cbind(DT.anal, fromErr=FALSE), DT.aErr, fill=fill_rbind)
  } else {
    ret <- rbind(DT.anal, DT.aErr, fill=fill_rbind)
  }

  hr <- pasteR(35)
  info.ret <- c("rbind of DT.anal & DT.aErr", if (fromErr_col_add) " with fromErr column added"
                 , "\n", hr, "\n[ DT.anal info : ]      \n", info.anal)

  if (info.anal != info.aErr && !grepl("production.fact_analytics", info.aErr))
    info.ret <- c(info.ret, hr, "\n[ DT.aErr info : ]      \n", info.aErr)

  info.ret <- pasteC(info.ret)
  setInfo(ret, info.ret)
  
  return(ret)
}