code: async function alterTable (args) {
      // get args object
      args = requireValidOptionalObject(args)
      // get existing schema
      var schema = requireValidSchema(args.schema)
      // modify existing columns
      await Promise.each(this.columnNames, async name => {
          // skip unless column exists
          if (!schema.columns[name]) {
              return
          }
          // attempt to alter existing column if model does not match schema
          await this.alterColumn({
              column: name,
              schema: schema,
              session: args.session,
          })
      })
      // create new columns
      await Promise.each(this.columnNames, async name => {
          // skip if column exists
          if (schema.columns[name]) {
              return
          }
          // get spec
          var spec = this.columns[name]
          // attempt to add column to table
          await this.createColumn({
              column: {
                  name: name,
                  spec: spec,
              },
              session: args.session,
          })
      })
  }
docs: @function alterTable
  
  alter an existing table
  
  @param {object} args
  
  @returns {Promise}
  
  @throws {Error}