@OnlyIfDescendedFrom(['insert', 'update', 'delete', 'replace', 'select'])
  def visit_column_spec(self, tokens, table_aliases):
    # Is the spec enough to find a column?
    try:
      self._db_schema.FindColumnFromSpec(tokens, table_aliases)
    except KeyError:
      # Not enough info, we have to scan
      column_name = tokens['column'][0]
      if column_name == '*' and self.IsDescendedFrom(['select_expression']):
        return
      results = set()
      logging.debug('Searching for %s in: %s', column_name, table_aliases)
      for table_spec in table_aliases.itervalues():
        try:
          table = self._db_schema.FindTableFromSpec(table_spec)
        except schema.UnknownNameException:
          self.AddError(tokens, 'Unknown table: %s' % table_spec)
          continue
        try:
          results.add(table.FindColumn(column_name))
        except schema.UnknownNameException:
          pass
      if not results:
        self.AddError(tokens, column_name % 'Unknown column: %s')
      elif self.IsDescendedFrom(['using']):
        if len(results) != 2:
          self.AddError(tokens,
                        'Columns in USING must be in exactly two tables: %s' %
                        [str(r) for r in results])
      elif len(results) != 1:
        self.AddError(tokens,
                      'Ambiguous column: %s' % [str(r) for r in results])
    except schema.UnknownNameException:
      # Enough info, but doesn't exist
      self.AddError(tokens, 'Unknown column: %s' % tokens)
dataset/ETHPy150Open google/mysql-tools/parser_lib/validator.py/ColumnChecker.visit_column_spec/swapped operands of `%`