code: def drop_columns(cr, column_spec):
      
      for (table, column) in column_spec:
          logger.info("table %s: drop column %s",
                      table, column)
          if column_exists(cr, table, column):
              cr.execute('ALTER TABLE "%s" DROP COLUMN "%s"' %
                         (table, column))
          else:
              logger.warn("table %s: column %s did not exist",
                          table, column)
docs: Drop columns but perform an additional check if a column exists.
      This covers the case of function fields that may or may not be stored.
      Consider that this may not be obvious: an additional module can govern
      a function fields' store properties.
  
      :param column_spec: a list of (table, column) tuples