code: def _build_intermediate_node_dict(self, config, node_dict, node_path,
                                        package_project_config, tags, fqn,
                                        agate_table, archive_config,
                                        column_name):
          
          # because this takes and returns dicts, subclasses can safely override
          # this and mutate its results using super() both before and after.
          if agate_table is not None:
              node_dict['agate_table'] = agate_table
  
          # Set this temporarily. Not the full config yet (as config() hasn't
          # been called from jinja yet). But the Var() call below needs info
          # about project level configs b/c they might contain refs.
          # TODO: Restructure this?
          config_dict = coalesce(archive_config, {})
          config_dict.update(config.config)
  
          empty = (
              'raw_sql' in node_dict and len(node_dict['raw_sql'].strip()) == 0
          )
  
          node_dict.update({
              'refs': [],
              'sources': [],
              'depends_on': {
                  'nodes': [],
                  'macros': [],
              },
              'unique_id': node_path,
              'empty': empty,
              'fqn': fqn,
              'tags': tags,
              'config': config_dict,
              # Set these temporarily so get_rendered() has access to a schema,
              # database, and alias.
              'schema': self.default_schema,
              'database': self.default_database,
              'alias': node_dict.get('name'),
          })
  
          # if there's a column, it should end up part of the ParsedNode
          if column_name is not None:
              node_dict['column_name'] = column_name
  
          return node_dict
docs: Update the unparsed node dictionary and build the basis for an
          intermediate ParsedNode that will be passed into the renderer