docs: def check_name_collisions(self):
          """
          Checks if there are any tables referenced by the same identifier and updated the
          auto_alias accordingly. This is called when generating the sql for a query
          and should only be called internally.
          """
          table_index = 0
          table_names = {}
          for table in self.tables + self.with_tables:
              table_prefix = 'T{0}'.format(table_index)
              auto_alias = '{0}{1}'.format(self.table_prefix, table_prefix)
  
              identifier = table.get_identifier()
              if identifier is None or identifier in table_names:
                  table.auto_alias = auto_alias
              table_names[identifier] = True
  
              # prefix inner query args and update self args
              if type(table) is QueryTable:
                  table.query.prefix_args(auto_alias)
                  table.query.table_prefix = auto_alias
  
              table_index += 1