
## TEST CASES
if (FALSE) {
  get_artist_meta("bane")
  get_artist_meta("bane", colsToBring=c("artistname", "artistid"))
  get_artist_meta("bane", colsToBring=c("artistname", "artistid", "labelid"))
  get_artist_meta("bane", colsToBring=c("artistname", "artistid", "labelid"), labelid = 22411)
  get_artist_meta("bane", colsToBring=c("artistname", "artistid", "labelid"), labelid = 22411, conjunction="AND")
}


get_artist_meta <- function(name=NULL, id=NULL, labelid=NULL, colsToBring="*", conjunction=c("OR", "AND"), limit=NULL, add.label=TRUE, add.country=TRUE, cluster=getCluster(), verbose=TRUE, snowflake_inuse=getOption("snowflake_inuse", FALSE), wh=getSnowflakeWH(), dbname=getSnowflakeDB()) {

  if (is.numeric(name)) {
    id   <- name
    name <- NULL
  }

  if (!exists("srcDir"))
    stop("'srcDir' is needed for get_artist_meta() -- HINT:\n  setScience(proj='misc', quiet=TRUE)")

  conjunction %<>% toupper %>% match.arg(choices=c("OR", "AND"))
  whereIn <- list(artistid=id, ifelseNULL(name, no=sprintf("artistname ILIKE '%s'", name)), labelid=labelid)
  if (all(sapply(whereIn, is.null)))
    whereIn <- NULL

  ret <- makeQry(tbl="dim_artist", schema="production", colsToPull=colsToBring, whereIn=whereIn, conjunction=conjunction, dateCol=NULL, limit=limit, showWarnings=FALSE, snowflake_inuse=snowflake_inuse, wh=wh, dbname=dbname) %>%
          runQry(cluster=cluster, verbose=verbose, snowflake_inuse=snowflake_inuse, wh=wh, dbname=dbname)

  if (add.country) {
      if (truelength(ret) != 100) {warning ("had to setDT in add.country at TOP", call.=TRUE); setDT(ret)}
      ret %>% addCountryInfo_(colsToBring="country_name", drop.idCol=TRUE, showWarnings=FALSE, snowflake_inuse=snowflake_inuse, wh=wh, dbname=dbname)
      # ret[, countryid := NULL]
      if (truelength(ret) != 100) {warning ("had to setDT in add.country", call.=TRUE); setDT(ret)}
  }

  if (add.label) {
    ret %>% addLabelName.labelid_(colsToBring=c("label_name", label_countryid="label_country"), drop.idCol=FALSE, showWarnings=FALSE, snowflake_inuse=snowflake_inuse, wh=wh, dbname=dbname)
    if (truelength(ret) != 100) {warning ("had to setDT in add.label", call.=TRUE); setDT(ret)}
  }

  setcolorderpt(ret, c("artistname", "artistid", "country_name", "countryid", "labelname", "labelid", "label_country", "date_created", "last_updated"), showWarnings=FALSE)

  return(ret)
}


get_label_meta <- function(name=NULL, id=NULL, ownerid=NULL, colsToBring="*", conjunction=c("OR", "AND"), exactname=TRUE, limit=NULL, add.country=TRUE, cluster=getCluster(), verbose=TRUE, verbose.max.width=70, snowflake_inuse=getOption("snowflake_inuse", FALSE), wh=getSnowflakeWH(), dbname=getSnowflakeDB()) {

  if (is.numeric(name)) {
    id   <- name
    name <- NULL
  }

  if (!isTRUE(exactname) && !grepl("%", name))
    name <- paste0("%" , name, "%")

  conjunction %<>% toupper %>% match.arg(choices=c("OR", "AND"))
  whereIn <- list(labelid=id, ifelseNULL(name, no=sprintf("labelname ILIKE '%s'", name)), ownerid=ownerid)
  if (all(sapply(whereIn, is.null)))
    whereIn <- NULL

  ret <- makeQry(tbl="dim_label", schema="production", colsToPull=colsToBring, whereIn=whereIn, conjunction=conjunction, dateCol=NULL, limit=limit, showWarnings=FALSE, snowflake_inuse=snowflake_inuse, wh=wh, dbname=dbname) %>%
          runQry(cluster=cluster, verbose=verbose, verbose.max.width=verbose.max.width, snowflake_inuse=snowflake_inuse, wh=wh, dbname=dbname)

  if (add.country) {
      ret %>% addCountryInfo_(colsToBring="country_name", drop.idCol=TRUE, showWarnings=FALSE, snowflake_inuse=snowflake_inuse, wh=wh, dbname=dbname)
      # ret[, countryid := NULL]    
  }

  return(ret)
}


get_label_id <- function(name=NULL, exactname=FALSE, country="auto", verbose=TRUE, snowflake_inuse=getOption("snowflake_inuse", FALSE), wh=getSnowflakeWH(), dbname=getSnowflakeDB()) {
## country :: auto -- if more than one match per country found, auto is added

  # if (!is.logical(country) && !identical(country, "auto"))
  #   stop ("country must be TRUE/FALSE or \"auto\"")

  if (!isTRUE(exactname) && !grepl("%", name))
    name <- paste0("%" , name, "%")

  DT.label_meta <- get_label_meta(name=name, colsToBring=c("labelid", "labelname", "owner", "countryid"), add.country=isTRUE(country), verbose=verbose, snowflake_inuse=snowflake_inuse, wh=wh, dbname=dbname)



  if (!identical(FALSE, country) && any(DT.label_meta[, lunique(countryid), keyby=labelname]$V1 > 1)) {
    DT.label_meta %>% addCountryInfo_(colsToBring="country_name", drop.idCol=TRUE, showWarnings=FALSE, snowflake_inuse=snowflake_inuse, wh=wh, dbname=dbname)
  } else 
    DT.label_meta[, countryid := NULL]

  if (length(labels_with_multi_ids <- DT.label_meta[, .N, by=labelname][N > 1, labelname])) {
    print(DT.label_meta, nrow=200)
    message(sprintf("More than one labelid found for label%s %s", ifelse(length(labels_with_multi_ids) > 1, "s", ""), pasteQand(labels_with_multi_ids)))
  }

  return(DT.label_meta[, setNames(nm=labelname, labelid)])
}