getColClassesForPlaylistTSV_pre_20150618 <- function() {
  c(
    #                               KEY  = VALUE
              playlist.is_collaborative  = "logical"
    ,              playlist.description  = "character"
    ,                       playlist.id  = "character"
    ,                     playlist.name  = "character"
    ,                playlist.is_public  = "logical"
    ,                     playlist.type  = "character"
    ,                      playlist.uri  = "character"
    ,            playlist.api.timestamp  = "character"
    ,           playlist.followers.href  = "character"
    ,          playlist.followers.total  = "integer"
    ,                 playlist.owner.id  = "character"
    ,               playlist.owner.type  = "character"
    ,    playlist.external_urls.spotify  = "character"
    ,               playlist.track.isrc  = "character"
    ,               playlist.track.name  = "character"
    ,                 playlist.track.id  = "character"
    ,               playlist.track.type  = "character"
    ,                playlist.track.uri  = "character"
    ,      playlist.track.datetimeadded  = "character"
    ,     playlist.track.artist.namecsv  = "character"
    ,       playlist.track.artist.idcsv  = "character"
    ,    playlist.track.artist.numberof  = "integer"
    ,         playlist.track.album.name  = "character"
    ,  playlist.track.album.producttype  = "character"
    ,           playlist.track.album.id  = "character"
    ,          playlist.track.album.uri  = "character"
    ,         playlist.track.album.type  = "character"
    ,      playlist.track.album.markets  = "character"
    ,            playlist.track.markets  = "character"
    ,            playlist.track.islocal  = "logical"
    ,         playlist.track.addedby.id  = "character"
    ,       playlist.track.addedby.type  = "character"
    ,        playlist.track.addedby.uri  = "character"
    ,         playlist.track.discnumber  = "integer"
    ,         playlist.track.durationms  = "integer"
    ,           playlist.track.explicit  = "logical"
    ,         playlist.track.popularity  = "numeric"
    ,         playlist.track.previewurl  = "character"
    ,        playlist.track.tracknumber  = "integer"
    ,      playlist.track.api.itemshref  = "character"
    ,      playlist.track.api.timestamp  = "character"


    # ,                          tsv_file  = "character"
  )
}

getColClassesForPlaylistTSV <- function() {

    ## CHANGES ON  2015-06-18
    ##  New columns added:
    ##      snapshot_id
    ##      track_number_in_playlist
    ##      playlist.tracks_per_album
    ##  Changed names of existing columns:
    ##     followers.total ~~TO~~~>            total_followers
    ##       track.islocal ~~TO~~~>             track.is_local
    ##      track.explicit ~~TO~~~>          track.is_explicit
    ##   track.tracknumber ~~TO~~~> track.tracknumber_on_album

  c(
    #                               KEY  = VALUE
      playlist.is_collaborative            =  "logical"
    , playlist.description                 = "character"
    , playlist.id                          = "character"
    , playlist.name                        = "character"
    , playlist.is_public                   = "logical"
    , playlist.snapshot_id                 = "character"
    , playlist.type                        = "character"
    , playlist.uri                         = "character"
    , playlist.api.timestamp               = "character"
    , playlist.followers.href              = "character"
    , playlist.total_followers             = "integer"
    , playlist.owner.id                    = "character"
    , playlist.owner.type                  = "character"
    , playlist.external_urls.spotify       = "character"
    , playlist.track.isrc                  = "character"
    , playlist.track.name                  = "character"
    , playlist.track.id                    = "character"
    , playlist.track.type                  = "character"
    , playlist.track.uri                   = "character"
    , playlist.track.datetimeadded         = "character"
    , playlist.track.artist.namecsv        = "character"
    , playlist.track.artist.idcsv          = "character"
    , playlist.track.artist.numberof       = "integer"
    , playlist.track.album.name            = "character"
    , playlist.track.album.producttype     = "character"
    , playlist.track.album.id              = "character"
    , playlist.track.album.uri             = "character"
    , playlist.track.album.type            = "character"
    , playlist.track.album.markets         = "character"
    , playlist.track.markets               = "character"
    , playlist.track.is_local              = "logical"
    , playlist.track.addedby.id            = "character"
    , playlist.track.addedby.type          = "character"
    , playlist.track.addedby.uri           = "character"
    , playlist.track.discnumber            = "integer"
    , playlist.track.durationms            = "integer"
    , playlist.track.is_explicit           = "logical"
    , playlist.track.popularity            = "integer"
    , playlist.track.previewurl            = "character"
    , playlist.track.tracknumber_on_album  = "integer"
    , playlist.track.api.itemshref         = "character"
    , playlist.track.api.timestamp         = "character"
    , playlist.track_number_in_playlist    = "integer"
    , playlist.playlist.tracks_per_album   = "integer"

    # ,                          tsv_file  = "character"
  )
}


getEmptyDT.playlist_metadata <- function() {
    # data.table(structure(list(playlist.is_collaborative = logical(0), playlist.description = character(0),playlist.id = character(0), playlist.name = character(0),playlist.is_public = logical(0), playlist.type = character(0),playlist.uri = character(0), playlist.api.timestamp = character(0),playlist.followers.href = logical(0), playlist.followers.total = integer(0),playlist.owner.id = character(0), playlist.owner.type = character(0),playlist.external_urls.spotify = character(0), playlist.track.isrc = character(0),playlist.track.name = character(0), playlist.track.id = character(0),playlist.track.type = character(0), playlist.track.uri = character(0),playlist.track.datetimeadded = character(0), playlist.track.artist.namecsv = character(0),playlist.track.artist.idcsv = character(0), playlist.track.artist.numberof = integer(0),playlist.track.album.name = character(0), playlist.track.album.producttype = character(0),playlist.track.album.id = character(0), playlist.track.album.uri = character(0),playlist.track.album.type = character(0), playlist.track.album.markets = character(0),playlist.track.markets = character(0), playlist.track.islocal = logical(0),playlist.track.addedby.id = character(0), playlist.track.addedby.type = character(0),playlist.track.addedby.uri = character(0), playlist.track.discnumber = integer(0),playlist.track.durationms = integer(0), playlist.track.explicit = logical(0),playlist.track.popularity = integer(0), playlist.track.previewurl = character(0),playlist.track.tracknumber = integer(0), playlist.track.api.itemshref = character(0),playlist.track.api.timestamp = character(0), tsv_file = character(0)), .Names = c("playlist.is_collaborative","playlist.description", "playlist.id", "playlist.name", "playlist.is_public","playlist.type", "playlist.uri", "playlist.api.timestamp", "playlist.followers.href","playlist.followers.total", "playlist.owner.id", "playlist.owner.type","playlist.external_urls.spotify", "playlist.track.isrc", "playlist.track.name","playlist.track.id", "playlist.track.type", "playlist.track.uri","playlist.track.datetimeadded", "playlist.track.artist.namecsv","playlist.track.artist.idcsv", "playlist.track.artist.numberof","playlist.track.album.name", "playlist.track.album.producttype","playlist.track.album.id", "playlist.track.album.uri", "playlist.track.album.type","playlist.track.album.markets", "playlist.track.markets", "playlist.track.islocal","playlist.track.addedby.id", "playlist.track.addedby.type", "playlist.track.addedby.uri","playlist.track.discnumber", "playlist.track.durationms", "playlist.track.explicit","playlist.track.popularity", "playlist.track.previewurl", "playlist.track.tracknumber","playlist.track.api.itemshref", "playlist.track.api.timestamp", "tsv_file"), class = c("data.table", "data.frame"), row.names = integer(0)))
    func <- . %>% 
            sprintf("%s(0L)", .) %>% 
            {eval(parse(text=.))}

    getColClassesForPlaylistTSV() %>% 
            c(tsv_file="character") %>%
            sapply(func) %>%
             as.data.table
}

getEmptyDT.tracks_for_playlist_parse <- function() {
    # data.table(structure(list(
    data.table(
          playlist.track.isrc = character(0)
        , playlist.track.name = character(0)
        , playlist.track.id = character(0)
        , playlist.track.type = character(0)
        , playlist.track.uri = character(0)
        , playlist.track.datetimeadded = character(0)
        , playlist.track.artist.namecsv = character(0)
        , playlist.track.artist.idcsv = character(0)
        , playlist.track.artist.numberof = integer(0)
        , playlist.track.album.name = character(0)
        , playlist.track.album.producttype = character(0)
        , playlist.track.album.id = character(0)
        , playlist.track.album.uri = character(0)
        , playlist.track.album.type = character(0)
        , playlist.track.album.markets = character(0)
        , playlist.track.markets = character(0)
        , playlist.track.is_local = logical(0)
        , playlist.track.addedby.id = character(0)
        , playlist.track.addedby.type = character(0)
        , playlist.track.addedby.uri = character(0)
        , playlist.track.discnumber = integer(0)
        , playlist.track.durationms = integer(0)
        , playlist.track.is_explicit = logical(0)
        , playlist.track.popularity = integer(0)
        , playlist.track.previewurl = character(0)
        , playlist.track.tracknumber_on_album = integer(0)
        , playlist.track.api.itemshref = character(0)
        , playlist.track.api.timestamp = character(0)
    )
}
