code: def remap_overlapping_column_names(table_op, root_table, data_columns):
      
      if not isinstance(table_op, ops.Join):
          return None
  
      left_root, right_root = ops.distinct_roots(table_op.left, table_op.right)
      suffixes = {
          left_root: constants.LEFT_JOIN_SUFFIX,
          right_root: constants.RIGHT_JOIN_SUFFIX,
      }
      column_names = [
          ({name, name + suffixes[root_table]} & data_columns, name)
          for name in root_table.schema.names
      ]
      mapping = OrderedDict(
          (first(col_name), final_name)
          for col_name, final_name in column_names
          if col_name
      )
      return mapping
docs: Return an ``OrderedDict`` mapping possibly suffixed column names to
      column names without suffixes.
  
      Parameters
      ----------
      table_op : TableNode
          The ``TableNode`` we're selecting from.
      root_table : TableNode
          The root table of the expression we're selecting from.
      data_columns : set or frozenset
          The available columns to select from
  
      Returns
      -------
      mapping : OrderedDict[str, str]
          A map from possibly-suffixed column names to column names without
          suffixes.