code: async function validateData (args) {
      debug('validate '+this.name)
      // query all records and iterate over response
      var res = await this.query({
          // skip access control checks
          allow: true,
          // do not cache
          cache: false,
          // make sure session is object
          session: args.session,
      })
      // get response
      debug('checking '+res.length+' records')
      // iterate over records waiting for promise to be resolved
      await res.each(async (rec, num) => {
          // set to true if column needs to be updated
          var needsUpdate = false
          // check if any columns do not match
          _.each(this.extraColumns, (spec, name) => {
              // skip if no data
              if (!rec.data) {
                  return
              }
              // if already updating or column value does not match data
              // value then set the update flag to true
              if (needsUpdate || rec.raw[name] !== rec.data[spec.path]) {
                  needsUpdate = true
              }
          })
          // go to next record if update not needed
          if (!needsUpdate) {
              return
          }
          // debug
          debug('updating record num '+num)
          // get update sql
          var update = sql.updateExtraColumns(this, rec)
          // do update
          await this.mysql().query(update.sql, update.params, {}, args.session)
          // increment update count
          this.updated++
      })
      // validate complete
      this.validated = true
  }
docs: @function validateData
  
  iterates over all all rows in table and validates that column values match
  data values. if any values do not match they are updated.
  
  @param {object} args
  
  @returns {Promise}